diff --git a/src/main/java/io/v/nutz/base/utils/MsgApi.java b/src/main/java/io/v/nutz/base/utils/MsgApi.java index 18efda5..4d41752 100644 --- a/src/main/java/io/v/nutz/base/utils/MsgApi.java +++ b/src/main/java/io/v/nutz/base/utils/MsgApi.java @@ -58,7 +58,7 @@ public class MsgApi { */ public void sendMsg(List channels, String loginNameStr, Integer mtype, String title, String content, String imageUrl,String link) { try { - /*if (!Globals.MyConfig.getBoolean("SendMsg")) { + if (!Globals.MyConfig.getBoolean("SendMsg")) { log.info("发送失败,消息暂未开启!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); return; } @@ -97,7 +97,7 @@ public class MsgApi { } else { log.info("发送失败>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); throw new RuntimeException("Message sending failed with status code: " + status + ", Message: " + jsonObject.getString("message")); - }*/ + } } catch (Exception e) { e.printStackTrace(); } diff --git a/src/main/java/io/v/nutz/task/job/trainSingUp/SendMsgBeforeClassJob.java b/src/main/java/io/v/nutz/task/job/trainSingUp/SendMsgBeforeClassJob.java new file mode 100644 index 0000000..49e2798 --- /dev/null +++ b/src/main/java/io/v/nutz/task/job/trainSingUp/SendMsgBeforeClassJob.java @@ -0,0 +1,99 @@ +package io.v.nutz.task.job.trainSingUp; + +import cn.hutool.core.date.DateUtil; +import io.v.nutz.base.utils.MsgApi; +import io.v.nutz.zhgh.trainSignUp.service.TrainSignUpActivityService; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; +import org.nutz.lang.util.NutMap; +import org.quartz.Job; +import org.quartz.JobExecutionContext; + +import java.text.SimpleDateFormat; +import java.util.List; + +@IocBean +public class SendMsgBeforeClassJob implements Job { + + private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + + @Inject + private MsgApi msgApi; + + @Inject + private TrainSignUpActivityService trainSignUpActivityService; + + @Override + public void execute(JobExecutionContext jobExecutionContext) { + //获取今天有哪些课程 + Sql sql = Sqls.create(""" + SELECT + u.username, + u.loginname, + course.courseName, + uc.courseStartTime, + course.courseType, + type.lxname, + course.courseLocation, + course.campus + FROM train_sign_up_user_course uc + left join sys_user u on u.id=uc.userid + left join train_sign_up_course course on course.id=uc.courseId + left join train_sign_up_activity ac on ac.id=uc.activityId + left join train_sign_up_type type on type.id = course.courseType + $condition + """); + Cnd cnd = Cnd.NEW(); + cnd.and("ac.isDisabled", "=", false); + cnd.and("ac.notice", "=", true); + +// Date date = new Date();//取时间 +// Calendar calendar = Calendar.getInstance(); +// calendar.setTime(date); +// //把日期往后增加一天.整数往后推,负数往前移动(1:表示明天、-1:表示昨天,0:表示今天) +// calendar.add(Calendar.DATE,1); +// //这个时间就是日期往后推一天的结果 +// date = calendar.getTime(); + +// cnd.and("LEFT ( courseStartTime, 10 )", "=", simpleDateFormat.format(date)); + + cnd.and("LEFT ( uc.courseStartTime, 10 )", "=", DateUtil.today()); + + sql.setCondition(cnd); + + List list = trainSignUpActivityService.listMap(sql); + + if (Lang.isEmpty(list)) { + return; + } + + list.forEach(item -> { + String content = "“%s”老师您好:您报名的【%s】“%s”将于“%s”开始,地点为“%s%s”,请记得准时参加,祝您工作生活愉快!——校工会" + .formatted( + item.getString("username"), + item.getString("lxname"), + item.getString("courseName"), + item.getString("courseStartTime"), + item.getString("campus"), + item.getString("courseLocation") + ); + if("心理咨询".equals(item.getString("lxname")) || "8d18afc10fb84a949f0339aa09eb202f".equals(item.getString("courseType"))) { + content = "“%s”老师您好:您预约的“心理咨询”将于“%s”开始,地点为“%s%s”,请记得准时参加,如您因故不能参加,请于今天中午12点前在报名系统取消预约,祝您工作生活愉快!——校工会" + .formatted( + item.getString("username"), + item.getString("courseStartTime"), + item.getString("campus"), + item.getString("courseLocation") + ); + } + msgApi.sendMsg(List.of("DingTalk"), item.getString("loginname"), 1, "活动开始通知", content, "", ""); +// msgApi.sendWxMsg("温馨提醒","","text",content,List.of(item.getString("loginname")),""); +// sendMsg.pushWeChatMsg("温馨提醒", content, item.getString("loginname")); + }); + } + +} diff --git a/src/main/java/io/v/nutz/zhgh/data/service/impl/SourceUserServiceImpl.java b/src/main/java/io/v/nutz/zhgh/data/service/impl/SourceUserServiceImpl.java index 24cfea9..ab733d9 100644 --- a/src/main/java/io/v/nutz/zhgh/data/service/impl/SourceUserServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/data/service/impl/SourceUserServiceImpl.java @@ -153,9 +153,11 @@ public class SourceUserServiceImpl extends ViServiceImpl implements Set allowChangeFieldNames = dictList.stream().map(Sys_dict::getCode).collect(Collectors.toSet()); allowChangeFieldNames.add("member"); allowChangeFieldNames.add("welfareMember"); + allowChangeFieldNames.add("unitid"); Map dictMap = dictList.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName)); dictMap.put("member", "会员状态"); dictMap.put("welfareMember", "福利会员状态"); + dictMap.put("unitid", "单位"); // 添加会员角色 List addMemberUserIds = new CopyOnWriteArrayList<>(); @@ -391,9 +393,8 @@ public class SourceUserServiceImpl extends ViServiceImpl implements case "personType": if (siftValue instanceof List && source != null && source.getPersonType() != null) { List personTypeList = (List) siftValue; - boolean personTypeConditionMet = personTypeList.contains(source.getPersonType()); // 必须同时满足 userState 和 personType 条件 - shouldAdd = userStateConditionMet && personTypeConditionMet; + shouldAdd = personTypeList.contains(source.getPersonType()); shouldRemove = !shouldAdd && user != null && user.getMember() == 1; } break; @@ -487,11 +488,13 @@ public class SourceUserServiceImpl extends ViServiceImpl implements BeanUtil.copyProperties(source, table); table.setId(R.UU32()); table.setChangeTime(DateUtil.date()); + table.setIsOperate(false); table.setChangeOrigin(MemberChangeOrigin.SYSTEM.name()); // 新入职教职工 if (user == null) { changeTypes.add(MemberChangeType.NEW.getType()); table.setChangeTypes(changeTypes); + table.setChangeInfosStr("新入职"); return table; } @@ -509,7 +512,7 @@ public class SourceUserServiceImpl extends ViServiceImpl implements return null; } String changeInfos = changeList.stream().map(v -> { - return v.getString("fieldName") + ":" + HtmlUtil.cleanHtmlTag(v.getString("sourceValue")) + "->" + HtmlUtil.cleanHtmlTag(v.getString("newValue")) + ";"; + return v.getString("fieldName") + ":" + HtmlUtil.cleanHtmlTag(v.getString("sourceValue")) + "—>" + HtmlUtil.cleanHtmlTag(v.getString("newValue")); }).collect(Collectors.joining(";")); // 比较变更数据 @@ -518,7 +521,6 @@ public class SourceUserServiceImpl extends ViServiceImpl implements table.setChangeTypes(changeTypes); table.setChangeInfos(changeList); table.setChangeInfosStr(changeInfos); - table.setIsOperate(false); return table; } @@ -555,7 +557,7 @@ public class SourceUserServiceImpl extends ViServiceImpl implements return null; } String changeInfos = changeList.stream().map(v -> { - return v.getString("fieldName") + ":" + HtmlUtil.cleanHtmlTag(v.getString("sourceValue")) + "->" + HtmlUtil.cleanHtmlTag(v.getString("newValue")) + ";"; + return v.getString("fieldName") + ":" + HtmlUtil.cleanHtmlTag(v.getString("sourceValue")) + "—>" + HtmlUtil.cleanHtmlTag(v.getString("newValue")); }).collect(Collectors.joining(";")); // 比较变更数据 commonCompareChange(source, user, changeTypes); diff --git a/src/main/java/io/v/nutz/zhgh/qsv/h5controller/H5QsvController.java b/src/main/java/io/v/nutz/zhgh/qsv/h5controller/H5QsvController.java index a845fca..f8c3204 100644 --- a/src/main/java/io/v/nutz/zhgh/qsv/h5controller/H5QsvController.java +++ b/src/main/java/io/v/nutz/zhgh/qsv/h5controller/H5QsvController.java @@ -5,6 +5,7 @@ import io.v.nutz.base.page.Pagination; import io.v.nutz.base.query.PageForm; import io.v.nutz.zhgh.qsv.service.QsvActivityService; import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.nutz.dao.Cnd; import org.nutz.ioc.loader.annotation.Inject; @@ -25,14 +26,14 @@ public class H5QsvController { @At("") @Ok("beetl:/mobile/qsv/index.html") - @RequiresPermissions("h5.qsv") + @RequiresAuthentication public void index() { } // 分页查询 @At - @RequiresPermissions("h5.qsv") + @RequiresAuthentication public Result pageData(@Valid PageForm pageForm, @Valid String category) { Cnd cnd = Cnd.NEW(); cnd.andEX("category", "=", category); diff --git a/src/main/java/io/v/nutz/zhgh/qsv/h5controller/H5QsvSurveyController.java b/src/main/java/io/v/nutz/zhgh/qsv/h5controller/H5QsvSurveyController.java index b0a7bf3..e28a6e1 100644 --- a/src/main/java/io/v/nutz/zhgh/qsv/h5controller/H5QsvSurveyController.java +++ b/src/main/java/io/v/nutz/zhgh/qsv/h5controller/H5QsvSurveyController.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONObject; import cn.wizzer.framework.base.Result; import io.v.nutz.web.commons.utils.ShiroUtil; +import io.v.nutz.zhgh.activity.models.ActivityUserScope; import io.v.nutz.zhgh.qsv.models.QsvActivity; import io.v.nutz.zhgh.qsv.models.QsvSubject; import io.v.nutz.zhgh.qsv.models.QsvUserAnswerRecord; @@ -42,8 +43,14 @@ public class H5QsvSurveyController { @At @RequiresAuthentication - public Result subjects(@Valid String activityId) { + public Result subjects(String activityId) { QsvActivity activity = dao.fetch(QsvActivity.class, activityId); + + int count = dao.count(ActivityUserScope.class, Cnd.where("groupId", "=", activity.getGroupId()).and("userId", "=", ShiroUtil.getUserId())); + if (count != 1) { + return Result.error("您无需参加此次投票,感谢您的关注!"); + } + String answerRecordId = null; QsvUserAnswerRecord answerRecord = dao.fetch(QsvUserAnswerRecord.class, Cnd.where("activityId", "=", activityId) @@ -60,7 +67,7 @@ public class H5QsvSurveyController { answerRecordId = answerRecord2.getId(); List subjects = dao.query(QsvSubject.class, Cnd.where("id", "in", answerRecord2.getSubjectIds())); - dao.fetchLinks(subjects, "options"); + dao.fetchLinks(subjects, "options", Cnd.NEW().asc("sortNum")); for (QsvSubject subject : subjects) { if (subject.getUserSelectOptionIds() == null) { diff --git a/src/main/java/io/v/nutz/zhgh/qsv/models/QsvOption.java b/src/main/java/io/v/nutz/zhgh/qsv/models/QsvOption.java index a4fa316..da0392e 100644 --- a/src/main/java/io/v/nutz/zhgh/qsv/models/QsvOption.java +++ b/src/main/java/io/v/nutz/zhgh/qsv/models/QsvOption.java @@ -41,6 +41,16 @@ public class QsvOption extends BaseModel { @ColDefine(type = ColType.VARCHAR, width = 255) private String imgUrl; + @Column + @Comment("链接地址") + @ColDefine(type = ColType.VARCHAR, width = 255) + private String link; + + @Column + @Comment("详情") + @ColDefine(customType = "longtext") + private String description; + @Column @Comment("排序") @ColDefine(type = ColType.INT) diff --git a/src/main/java/io/v/nutz/zhgh/qsv/models/QsvSubject.java b/src/main/java/io/v/nutz/zhgh/qsv/models/QsvSubject.java index 49b8733..431aa4d 100644 --- a/src/main/java/io/v/nutz/zhgh/qsv/models/QsvSubject.java +++ b/src/main/java/io/v/nutz/zhgh/qsv/models/QsvSubject.java @@ -52,6 +52,11 @@ public class QsvSubject extends BaseModel { @ColDefine(type = ColType.DATE) private Date displayDate; + @Column + @Comment("多选,最多选几个") + @ColDefine(type = ColType.INT, width = 1) + private Integer maxMulti; + @Column @Comment("排序") @ColDefine(type = ColType.INT, width = 1) diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeApplyController.java b/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeApplyController.java index b74385f..0137b55 100644 --- a/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeApplyController.java +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeApplyController.java @@ -109,7 +109,7 @@ public class MemberChangeApplyController { record.setChangeOrigin(MemberChangeOrigin.PERSONAL.name()); - if (List.of(10030, 10060).contains(record.getApplyStateId())) { + if (record.getApplyStateId() != null && List.of(10030, 10060).contains(record.getApplyStateId())) { MemberChangeToDoHandler.COMPLETE_APPLY_RE_MODIFY_TASK.exec(record, NutMap.NEW().addv("nodeName", "重新修改申请")); } // 待分工会审核 diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeBranchUnionAuditController.java b/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeBranchUnionAuditController.java index 45aedad..6e75870 100644 --- a/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeBranchUnionAuditController.java +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeBranchUnionAuditController.java @@ -27,6 +27,8 @@ import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; +import java.util.List; + /** * @version 1.0 * @Author zzr @@ -94,7 +96,7 @@ public class MemberChangeBranchUnionAuditController { audit.setLoginname(ShiroUtil.getPlatformLoginname()); audit.setUsername(ShiroUtil.getPlatformUsername()); audit.setAuditTime(DateUtil.date()); - audit = dao.insert(audit); + dao.insert(audit); MemberChangeRecord record = dao.fetch(MemberChangeRecord.class, id); if (audit.getAuditType() == 2) { @@ -123,6 +125,44 @@ public class MemberChangeBranchUnionAuditController { } + + @At + @ViReturn + @Aop(TransAop.READ_COMMITTED) + @RequiresPermissions("member.change.branchUnion.audit") + @SLog(type = "memberChange", tag = "会员变更", msg = "分工会批量审核") + public Object doBatchApproval(@Param("data") String[] ids){ + if (ids.length == 0) { + return Result.error("未获取到选择数据"); + } + + // 批量审核,那就只有一条审核的记录 + Audit audit = new Audit(); + audit.setAuditor(ShiroUtil.getUserId()); + audit.setLoginname(ShiroUtil.getPlatformLoginname()); + audit.setUsername(ShiroUtil.getPlatformUsername()); + audit.setAuditTime(DateUtil.date()); + audit.setAuditOpinion("分工会批量审核通过"); + dao.insert(audit); + + // 查询要审核的变更记录 + List recordList = dao.query(MemberChangeRecord.class, Cnd.where("id", "in", ids)); + for (MemberChangeRecord record : recordList) { + // 批量推送待办 + MemberChangeToDoHandler.COMPLETE_UNION_TASK.exec(record, NutMap.NEW().addv("nodeName", "分工会审核完成")); + MemberChangeToDoHandler.CREATE_SCHOOL_TASK.exec(record, null); + + // 推送短信 + } + + dao.update(MemberChangeRecord.class, + Chain.make("applyStateId", 10050).add("branchUnionAuditId", audit.getId()), + Cnd.where("id", "in", ids)); + + return null; + } + + @At @ViReturn @Aop(TransAop.READ_COMMITTED) diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeManageController.java b/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeManageController.java index 153f191..5b0d4b0 100644 --- a/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeManageController.java +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeManageController.java @@ -74,7 +74,7 @@ public class MemberChangeManageController { @At("") @Ok("beetl:/platform/member/change/manage/index.html") - @RequiresPermissions("member.change.mange") + @RequiresPermissions(value = {"member.change.mange", "staff.member.change.mange"}) public void index() { } @@ -98,7 +98,7 @@ public class MemberChangeManageController { @At @ViReturn - @RequiresPermissions("member.change.mange") + @RequiresPermissions(value = {"member.change.mange", "staff.member.change.mange"}) public Object pageData(@Param(value = "unionId", required = false) String unionId, @Param(value = "unitId", required = false) String unitId, @Param(value = "threeUnitId", required = false) String threeUnitId, @@ -277,7 +277,7 @@ public class MemberChangeManageController { @At @ViReturn @Aop(TransAop.READ_COMMITTED) - @RequiresPermissions("member.change.mange") + @RequiresPermissions(value = {"member.change.mange", "staff.member.change.mange"}) @SLog(tag = "会员高级管理-会员变更", msg = "分工会/校工会会员管理员提交变更") public Object doSubmitChange(MemberChangeRecord record) { // 检验是否有变更 @@ -341,7 +341,7 @@ public class MemberChangeManageController { @At @ViReturn - @RequiresPermissions("member.change.mange") + @RequiresPermissions(value = {"member.change.mange", "staff.member.change.mange"}) public Object sendSms(String userid) { Sys_user user = userService.fetch(userid); /*if (Strings.isNotBlank(user.getMobile())) { @@ -357,7 +357,7 @@ public class MemberChangeManageController { */ @At @ViReturn - @RequiresPermissions("member.change.mange") + @RequiresPermissions(value = {"member.change.mange", "staff.member.change.mange"}) public Object allIsWelfareMember(PageForm pageForm, @Param(value = "startDate", required = false) String startDate, @Param(value = "endDate", required = false) String endDate, @@ -429,7 +429,7 @@ public class MemberChangeManageController { */ @At @ViReturn - @RequiresPermissions("member.change.mange") + @RequiresPermissions(value = {"member.change.mange", "staff.member.change.mange"}) public Object userUnitMove(String threeUnitId, String unitId, @Param("userId[]") String[] userId) { Sys_unit unit = memberService.dao().fetch(Sys_unit.class, unitId); @@ -466,7 +466,7 @@ public class MemberChangeManageController { @At @ViReturn - @RequiresPermissions("member.change.mange") + @RequiresPermissions(value = {"member.change.mange", "staff.member.change.mange"}) public Object userPageData(PageForm pageForm, @Param(value = "unitId", required = false) String unitId, @Param(value = "unionId", required = false) String unionId, @@ -505,7 +505,7 @@ public class MemberChangeManageController { @At @ViReturn @Aop(TransAop.READ_COMMITTED) - @RequiresPermissions("member.change.mange") + @RequiresPermissions(value = {"member.change.mange", "staff.member.change.mange"}) public Object joinWelfareMember(String[] userIds, String taskId, @Param(value = "threeUnitId", required = false) String threeUnitId, @Param(value = "unitId", required = false) String unitId) { @@ -548,7 +548,7 @@ public class MemberChangeManageController { @At @ViReturn - @RequiresPermissions("member.change.mange") + @RequiresPermissions(value = {"member.change.mange", "staff.member.change.mange"}) public Object units() { Cnd cnd = Cnd.NEW(); cnd.and("unitlevel", "=", 2); @@ -560,7 +560,7 @@ public class MemberChangeManageController { @At @ViReturn - @RequiresPermissions("member.change.mange") + @RequiresPermissions(value = {"member.change.mange", "staff.member.change.mange"}) public Object batchUpdatePersonType(@Param("users") String data) { List users = Json.fromJsonAsList(Sys_user.class, data); for (Sys_user user : users) { @@ -571,7 +571,7 @@ public class MemberChangeManageController { @At @ViReturn - @RequiresPermissions("member.change.mange") + @RequiresPermissions(value = {"member.change.mange", "staff.member.change.mange"}) public Object batchUpdateUserState(@Param("users") String data) { List users = Json.fromJsonAsList(Sys_user.class, data); for (Sys_user user : users) { @@ -583,7 +583,7 @@ public class MemberChangeManageController { @At @Ok("void") - @RequiresPermissions("member.change.mange") + @RequiresPermissions(value = {"member.change.mange", "staff.member.change.mange"}) public void downloadImport(HttpServletResponse response) { try { ViTool.excelResponse(response, "会员导入模版.xlsx"); @@ -613,7 +613,7 @@ public class MemberChangeManageController { @At @Aop(TransAop.READ_COMMITTED) - @RequiresPermissions("member.change.mange") + @RequiresPermissions(value = {"member.change.mange", "staff.member.change.mange"}) @AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"}) @SLog(type = "会员管理系统", tag = "信息维护-会员高级管理", msg = "导入会员", param = true, result = true) public Object doImport(TempFile file) { @@ -727,7 +727,7 @@ public class MemberChangeManageController { @At @ViReturn - @RequiresPermissions("member.change.mange") + @RequiresPermissions(value = {"member.change.mange", "staff.member.change.mange"}) public Object getAllChangeMemberInfo(String userId){ List mapList = memberService.getAllChangeInfo(userId); if (Lang.isEmpty(mapList)) { diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeSchoolUnionAuditController.java b/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeSchoolUnionAuditController.java index 23337df..948a373 100644 --- a/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeSchoolUnionAuditController.java +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/member/controller/change/MemberChangeSchoolUnionAuditController.java @@ -27,6 +27,8 @@ import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; +import java.util.List; + /** * @version 1.0 * @Author zzr @@ -116,7 +118,7 @@ public class MemberChangeSchoolUnionAuditController { MemberChangeToDoHandler.CREATE_APPLY_RE_MODIFY_TASK.exec(record, NutMap.NEW().addv("nodeName", "校工会退回")); } else if (audit.getAuditType() == 1) { MemberChangeToDoHandler.COMPLETE_PROCESS.exec(record, null); - memberCommonService.compareChangeInfoAndUpdateMember(record.getId()); + memberCommonService.compareChangeInfoAndUpdateMember(record); } else { MemberChangeToDoHandler.REFUSE_UNION_TASK.exec(record, NutMap.NEW().addv("nodeName", "校工会审核拒绝")); } @@ -124,6 +126,44 @@ public class MemberChangeSchoolUnionAuditController { } + @At + @ViReturn + @Aop(TransAop.READ_COMMITTED) + @RequiresPermissions("member.change.schoolUnion.audit") + @SLog(type = "memberChange", tag = "会员变更", msg = "校工会批量审核") + public Object doBatchApproval(@Param("data") String[] ids){ + if (ids.length == 0) { + return Result.error("未获取到选择数据"); + } + + // 批量审核,那就只有一条审核的记录 + Audit audit = new Audit(); + audit.setAuditor(ShiroUtil.getUserId()); + audit.setLoginname(ShiroUtil.getPlatformLoginname()); + audit.setUsername(ShiroUtil.getPlatformUsername()); + audit.setAuditTime(DateUtil.date()); + audit.setAuditOpinion("校工会批量审核通过"); + dao.insert(audit); + + // 查询要审核的变更记录 + List recordList = dao.query(MemberChangeRecord.class, Cnd.where("id", "in", ids)); + for (MemberChangeRecord record : recordList) { + // 批量完成待办 + MemberChangeToDoHandler.COMPLETE_SCHOOL_TASK.exec(record, NutMap.NEW().addv("nodeName", "校工会审核完成")); + MemberChangeToDoHandler.COMPLETE_PROCESS.exec(record, null); + + memberCommonService.compareChangeInfoAndUpdateMember(record.getId()); + // 推送短信 + } + + dao.update(MemberChangeRecord.class, + Chain.make("applyStateId", 10080).add("schoolUnionAuditId", audit.getId()), + Cnd.where("id", "in", ids)); + + return null; + } + + @At @ViReturn @Aop(TransAop.READ_COMMITTED) diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/member/service/MemberCommonService.java b/src/main/java/io/v/nutz/zhgh/staffmanage/member/service/MemberCommonService.java index 468ba64..16e91d9 100644 --- a/src/main/java/io/v/nutz/zhgh/staffmanage/member/service/MemberCommonService.java +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/member/service/MemberCommonService.java @@ -78,6 +78,11 @@ public interface MemberCommonService extends ViService { * @param recordId */ void compareChangeInfoAndUpdateMember(String recordId); + /** + * 存储比较变更信息并更新会员信息 + * @param record + */ + void compareChangeInfoAndUpdateMember(MemberChangeRecord record); /** * 获取会员的变更信息 diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/member/service/impl/MemberCommonServiceImpl.java b/src/main/java/io/v/nutz/zhgh/staffmanage/member/service/impl/MemberCommonServiceImpl.java index 0b84e4a..505ccad 100644 --- a/src/main/java/io/v/nutz/zhgh/staffmanage/member/service/impl/MemberCommonServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/member/service/impl/MemberCommonServiceImpl.java @@ -23,10 +23,12 @@ import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService; import io.v.nutz.zhgh.staffmanage.specialstaff.model.SpecialStaff; import io.v.nutz.zhgh.welfare.model.WelfareList; import lombok.extern.slf4j.Slf4j; +import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; +import org.nutz.ioc.aop.Aop; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.Lang; @@ -160,9 +162,11 @@ public class MemberCommonServiceImpl extends ViServiceImpl implements Set allowChangeFieldNames = dictList.stream().map(Sys_dict::getCode).collect(Collectors.toSet()); allowChangeFieldNames.add("member"); allowChangeFieldNames.add("welfareMember"); + allowChangeFieldNames.add("unitid"); Map dictMap = dictList.stream().collect(Collectors.toMap(Sys_dict::getCode, Sys_dict::getName)); dictMap.put("member", "会员状态"); dictMap.put("welfareMember", "福利会员状态"); + dictMap.put("unitid", "单位"); return NutMap.NEW().addv("allowChangeFieldNames", allowChangeFieldNames).addv("dictMap", dictMap); } @@ -234,6 +238,12 @@ public class MemberCommonServiceImpl extends ViServiceImpl implements @Override public void compareChangeInfoAndUpdateMember(String recordId) { MemberChangeRecord record = dao().fetch(MemberChangeRecord.class, recordId); + compareChangeInfoAndUpdateMember(record); + } + + @Override + @Aop(TransAop.READ_COMMITTED) + public void compareChangeInfoAndUpdateMember(MemberChangeRecord record) { List changeList = getChangeInfos(record); // 如果有工会关系人员,这个user用来存储数据 @@ -247,12 +257,11 @@ public class MemberCommonServiceImpl extends ViServiceImpl implements } if (Lang.isNotEmpty(history)) { - history.setRecordId(recordId); + history.setRecordId(record.getId()); history.setChangeTime(DateUtil.date()); history.setChangeTypes(record.getChangeTypes()); history.setChangeOrigin(record.getChangeOrigin()); - // 加入会员 if (record.getMember()) { int activityCount = dao().count(ActivityUserScope.class, Cnd.where("userId", "=", userId).and("groupId", "=", 1)); @@ -340,7 +349,7 @@ public class MemberCommonServiceImpl extends ViServiceImpl implements // 如果有工会关系变更,也需要记录变更了什么工会 history.setChangeInfos(changeList); String changeInfos = changeList.stream().map(v -> { - return v.getString("fieldName") + ":" + HtmlUtil.cleanHtmlTag(v.getString("sourceValue")) + "->" + HtmlUtil.cleanHtmlTag(v.getString("newValue")) + ";"; + return v.getString("fieldName") + ":" + HtmlUtil.cleanHtmlTag(v.getString("sourceValue")) + "->" + HtmlUtil.cleanHtmlTag(v.getString("newValue")); }).collect(Collectors.joining(";")); history.setChangeInfosStr(changeInfos); dao().updateIgnoreNull(info); @@ -351,7 +360,6 @@ public class MemberCommonServiceImpl extends ViServiceImpl implements } } - /** * 获取所有变更记录 * @param userId @@ -408,7 +416,7 @@ public class MemberCommonServiceImpl extends ViServiceImpl implements if (!ObjectUtil.equals(currentValue, previousValue)) { String name = fieldsMap.getOrDefault(fieldName, fieldName); - if ("unitId".equals(fieldName)) { + if ("unitId".equals(fieldName) || "unitid".equals(fieldName)) { List unitList = dao().query(Sys_unit.class, Cnd.where("id", "in", List.of(previousValue, currentValue))); Object finalPreviousValue = previousValue; diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleMyApplyController.java b/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleMyApplyController.java new file mode 100644 index 0000000..c7556b5 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleMyApplyController.java @@ -0,0 +1,145 @@ +package io.v.nutz.zhgh.staffmanage.single.controller; + +import cn.hutool.core.util.StrUtil; +import io.v.nutz.base.annontation.ViReturn; +import io.v.nutz.base.dao.CndPlus; +import io.v.nutz.base.query.PageForm; +import io.v.nutz.web.commons.utils.ShiroUtil; +import io.v.nutz.zhgh.staffmanage.single.model.SingleUser; +import io.v.nutz.zhgh.staffmanage.single.service.SingleUserService; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.SqlExpressionGroup; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.Lang; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +@IocBean +@Ok("json:full") +@At("/platform/single/myApply") +public class SingleMyApplyController { + + @Inject + private SingleUserService singleUserService; + + @At("") + @Ok("beetl:/platform/single/myApply.html") + @RequiresPermissions("single.user.myApply") + public void index() { + } + + @At + @ViReturn + @RequiresPermissions("single.user.myApply") + public Object pageData(PageForm pageForm, + @Param(value = "unionId", required = false) String unionId, + @Param(value = "unitId", required = false) String unitId, + @Param(value = "threeUnitId", required = false) String threeUnitId, + @Param(value = "unionGroupId", required = false) String unionGroupId, + @Param(value = "personType", required = false) String personType, + @Param(value = "userState", required = false) String userState, + @Param(value = "sex", required = false) String sex, + @Param(value = "isJoin",required = false) Boolean isJoin) { + Sql sql = Sqls.create(""" + SELECT + su.*, + u.unionname AS unionName, + u.unitname AS unitName, + u.username, + u.sex, + u.loginname, + u.userState, + u.personType, + state.stateName + FROM + `single_user` su + LEFT JOIN `user` u ON u.id = su.userId + LEFT JOIN `audit_state` state ON state.stateId = su.singleState + $condition + """); + CndPlus cnd = CndPlus.create(); + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("u.username", pageForm.getSearchKeyword()); + seg.orLike("u.loginname", pageForm.getSearchKeyword()); + cnd.and(seg); + } + if (!ShiroUtil.hasAnyRoles("sysadmin,A06")){ + cnd.and("u.id","=",ShiroUtil.getUserId()); + } + cnd.and("su.singleState","in",isJoin? Lang.list(8000,8010,8015,8020,8025,8030): Lang.list(8040,8045,8050,8055,8060)); + cnd.andEX("u.unionid", "=", unionId); + cnd.andEX("u.unitid", "=", unitId); + cnd.andEX("u.threeUnitId", "=", threeUnitId); + cnd.andEX("u.unionGroupId", "=", unionGroupId); + cnd.andEX("u.personType", "=", personType); + cnd.andEX("u.userState", "=", userState); + cnd.andEX("u.sex","=",sex); + cnd.desc("su.applyTime"); + sql.setCondition(cnd); + return singleUserService.listPageMap(pageForm.getPageNumber(),pageForm.getPageSize(),sql); + } + + + /** + * 退会 + * @param id + * @return + */ + @At + @ViReturn + @RequiresPermissions("single.user.myApply") + public Object exitSingle(String id) { + int count = singleUserService.count(Cnd.where("id", "=", id).and("singleState", "=", "8030")); + if (count == 1) { + singleUserService.update(Chain.make("singleState", "8040"), Cnd.where("id", "=", id)); + } + return null; + } + + + @At + @ViReturn + @RequiresPermissions("single.user.myApply") + public Object removeById(String id){ + singleUserService.delete(id); + return null; + } + + + @At + @ViReturn + @RequiresPermissions("single.user.myApply") + public Object doEdit(SingleUser user){ + singleUserService.updateIgnoreNull(user); + return null; + } + + + @At + @ViReturn + public Object findAuditSuccess(){ + Sql sql = Sqls.create(""" + SELECT + su.*, + u.unionname AS unionName, + u.unitname AS unitName, + u.username AS userName, + u.sex, + u.loginname AS loginName + FROM + `single_user` su + LEFT JOIN `user` u ON u.id = su.userId + WHERE + su.singleState = '8030' + AND su.userId = @userId + """).setParam("userId", ShiroUtil.getUserId()); + return singleUserService.listMap(sql).stream().findFirst().orElse(null); + } +} diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleSchoolAuditController.java b/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleSchoolAuditController.java new file mode 100644 index 0000000..8600173 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleSchoolAuditController.java @@ -0,0 +1,137 @@ +package io.v.nutz.zhgh.staffmanage.single.controller; + +import cn.hutool.core.util.StrUtil; +import io.v.nutz.base.annontation.ViReturn; +import io.v.nutz.base.dao.CndPlus; +import io.v.nutz.base.model.Audit; +import io.v.nutz.base.query.PageForm; +import io.v.nutz.base.utils.Vi; +import io.v.nutz.web.commons.utils.ShiroUtil; +import io.v.nutz.zhgh.staffmanage.single.model.SingleUser; +import io.v.nutz.zhgh.staffmanage.single.service.SingleUserService; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.SqlExpressionGroup; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +import java.util.Date; + + +@IocBean +@Ok("json:full") +@At("/platform/single/schoolAudit") +public class SingleSchoolAuditController { + + @Inject + private Dao dao; + + @Inject + private SingleUserService singleUserService; + + @At("") + @Ok("beetl:/platform/single/schoolAudit.html") + @RequiresPermissions("single.user.schoolAudit") + public void index() { + } + + + @At + @ViReturn + @RequiresPermissions("single.user.unionAudit") + public Object pageData(PageForm pageForm, + @Param(value = "unionId", required = false) String unionId, + @Param(value = "unitId", required = false) String unitId, + @Param(value = "threeUnitId", required = false) String threeUnitId, + @Param(value = "unionGroupId", required = false) String unionGroupId, + @Param(value = "personType", required = false) String personType, + @Param(value = "userState", required = false) String userState, + @Param(value = "isJoin", required = false) String isJoin, + @Param(value = "isAudit", required = false) String isAudit, + @Param(value = "sex", required = false) String sex) { + Sql sql = Sqls.create(""" + SELECT + su.*, + u.unionname AS unionName, + u.unitname AS unitName, + u.username, + u.sex, + u.loginname, + u.userState, + u.personType, + state.stateName + FROM + `single_user` su + LEFT JOIN `user` u ON u.id = su.userId + LEFT JOIN `audit_state` state ON state.stateId = su.singleState + $condition + """); + CndPlus cnd = CndPlus.create(); + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("u.username", pageForm.getSearchKeyword()); + seg.orLike("u.loginname", pageForm.getSearchKeyword()); + cnd.and(seg); + } + if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { + cnd.and("u.unionid", "=", Vi.getUnionId()); + } + cnd.andEX("u.unionid", "=", unionId); + cnd.andEX("u.unitid", "=", unitId); + cnd.andEX("u.threeUnitId", "=", threeUnitId); + cnd.andEX("u.unionGroupId", "=", unionGroupId); + cnd.andEX("u.personType", "=", personType); + cnd.andEX("u.userState", "=", userState); + cnd.andEX("u.sex", "=", sex); + if ("false".equals(isJoin)) { + cnd.and("su.singleState", ">", 8030); + } else { + cnd.and("su.singleState", "<=", 8030); + } + cnd.and("su.singleState", "true".equals(isAudit) ? ">" : "false".equals(isAudit) ? "=" : ">=", "true".equals(isJoin) ? 8020 : 8050); + sql.setCondition(cnd); + return singleUserService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + } + + + @At + @ViReturn + @RequiresPermissions("single.user.unionAudit") + public Object doAudit(@Param("audit") Audit audit, String id, String isPass, String isJoin) { + dao.insert(audit); + dao.update(SingleUser.class, Chain.make("singleState", "1".equals(isPass) ? "true".equals(isJoin) ? 8030 : 8060 : "true".equals(isJoin) ? 8025 : 8055) + .add("true".equals(isJoin) ? "joinTime" : "exitTime", new Date()) + .add("true".equals(isJoin) ? "schoolAuditId" : "exitSchoolAuditId", audit.getId()), Cnd.where("id", "=", id)); + return null; + } + + + @At + @ViReturn + @Aop(TransAop.READ_COMMITTED) + @RequiresPermissions("single.user.unionAudit") + public Object doRollBack(String id, String isJoin) { + SingleUser user = singleUserService.fetch(id); + dao.clear(Audit.class, Cnd.where("id", "=", "true".equals(isJoin) ? user.getSchoolAuditId() : user.getExitSchoolAuditId())); + singleUserService.update(Chain.make("true".equals(isJoin) ? "schoolAuditId" : "exitSchoolAuditId", null) + .add("true".equals(isJoin) ? "joinTime" : "exitTime", null) + .add("singleState", "true".equals(isJoin) ? 8020 : 8050), Cnd.where("id", "=", id)); + return null; + } + + + @At + @ViReturn + public Object getAuditNum(String isAudit, String unionId) { + return singleUserService.getAuditNum("school", isAudit, unionId); + } +} diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleUnionAuditController.java b/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleUnionAuditController.java new file mode 100644 index 0000000..cc2c4f7 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleUnionAuditController.java @@ -0,0 +1,130 @@ +package io.v.nutz.zhgh.staffmanage.single.controller; + +import cn.hutool.core.util.StrUtil; +import io.v.nutz.base.annontation.ViReturn; +import io.v.nutz.base.dao.CndPlus; +import io.v.nutz.base.model.Audit; +import io.v.nutz.base.query.PageForm; +import io.v.nutz.base.utils.Vi; +import io.v.nutz.web.commons.utils.ShiroUtil; +import io.v.nutz.zhgh.staffmanage.single.model.SingleUser; +import io.v.nutz.zhgh.staffmanage.single.service.SingleUserService; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.nutz.aop.interceptor.ioc.TransAop; +import org.nutz.dao.Chain; +import org.nutz.dao.Cnd; +import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; +import org.nutz.dao.util.cri.SqlExpressionGroup; +import org.nutz.ioc.aop.Aop; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; + +@IocBean +@Ok("json:full") +@At("/platform/single/unionAudit") +public class SingleUnionAuditController { + + @Inject + private Dao dao; + + @Inject + private SingleUserService singleUserService; + + @At("") + @Ok("beetl:/platform/single/unionAudit.html") + @RequiresPermissions("single.user.unionAudit") + public void index() { + } + + @At + @ViReturn + @RequiresPermissions("single.user.unionAudit") + public Object pageData(PageForm pageForm, + @Param(value = "unionId", required = false) String unionId, + @Param(value = "unitId", required = false) String unitId, + @Param(value = "threeUnitId", required = false) String threeUnitId, + @Param(value = "unionGroupId", required = false) String unionGroupId, + @Param(value = "personType", required = false) String personType, + @Param(value = "userState", required = false) String userState, + @Param(value = "isJoin", required = false) String isJoin, + @Param(value = "isAudit", required = false) String isAudit, + @Param(value = "sex", required = false) String sex) { + Sql sql = Sqls.create(""" + SELECT + su.*, + u.unionname AS unionName, + u.unitname AS unitName, + u.username, + u.sex, + u.loginname, + u.userState, + u.personType, + state.stateName + FROM + `single_user` su + LEFT JOIN `user` u ON u.id = su.userId + LEFT JOIN `audit_state` state ON state.stateId = su.singleState + $condition + """); + CndPlus cnd = CndPlus.create(); + if (StrUtil.isNotBlank(pageForm.getSearchKeyword())) { + SqlExpressionGroup seg = new SqlExpressionGroup(); + seg.orLike("u.username", pageForm.getSearchKeyword()); + seg.orLike("u.loginname", pageForm.getSearchKeyword()); + cnd.and(seg); + } + if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) { + cnd.and("u.unionid", "=", Vi.getUnionId()); + } + cnd.andEX("u.unionid", "=", unionId); + cnd.andEX("u.unitid", "=", unitId); + cnd.andEX("u.threeUnitId", "=", threeUnitId); + cnd.andEX("u.unionGroupId", "=", unionGroupId); + cnd.andEX("u.personType", "=", personType); + cnd.andEX("u.userState", "=", userState); + cnd.andEX("u.sex", "=", sex); + if ("false".equals(isJoin)) { + cnd.and("su.singleState", ">", 8030); + } else { + cnd.and("su.singleState", "<=", 8030); + } + cnd.and("su.singleState", "true".equals(isAudit) ? ">" : "false".equals(isAudit) ? "=" : ">=", "true".equals(isJoin) ? 8010 : 8040); + sql.setCondition(cnd); + return singleUserService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); + } + + + @At + @ViReturn + @RequiresPermissions("single.user.unionAudit") + public Object doAudit(@Param("audit") Audit audit, String id, String isPass, String isJoin) { + dao.insert(audit); + dao.update(SingleUser.class, Chain.make("singleState", "1".equals(isPass) ? "true".equals(isJoin) ? 8020 : 8050 : "true".equals(isJoin) ? 8015 : 8045) + .add("true".equals(isJoin) ? "unionAuditId" : "exitUnionAuditId", audit.getId()), Cnd.where("id", "=", id)); + return null; + } + + + @At + @ViReturn + @Aop(TransAop.READ_COMMITTED) + @RequiresPermissions("single.user.unionAudit") + public Object doRollBack(String id, String isJoin) { + SingleUser user = singleUserService.fetch(id); + dao.clear(Audit.class, Cnd.where("id", "=", "true".equals(isJoin) ? user.getUnionAuditId() : user.getExitUnionAuditId())); + singleUserService.update(Chain.make("true".equals(isJoin) ? "unionAuditId" : "exitUnionAuditId", null) + .add("singleState", "true".equals(isJoin) ? 8010 : 8040), Cnd.where("id", "=", id)); + return null; + } + + @At + @ViReturn + public Object getAuditNum(String isAudit,String unionId) { + return singleUserService.getAuditNum("union", isAudit,unionId); + } +} diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleUserApplyController.java b/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleUserApplyController.java new file mode 100644 index 0000000..965f205 --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleUserApplyController.java @@ -0,0 +1,81 @@ +package io.v.nutz.zhgh.staffmanage.single.controller; + +import io.v.nutz.base.annontation.ViReturn; +import io.v.nutz.web.commons.utils.ShiroUtil; +import io.v.nutz.zhgh.staffmanage.single.model.SingleUser; +import io.v.nutz.zhgh.staffmanage.single.service.SingleUserService; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.nutz.dao.Cnd; +import org.nutz.ioc.loader.annotation.Inject; +import org.nutz.ioc.loader.annotation.IocBean; +import org.nutz.lang.util.NutMap; +import org.nutz.mvc.annotation.At; +import org.nutz.mvc.annotation.Ok; + +import java.util.Comparator; +import java.util.Date; +import java.util.List; + +@IocBean +@Ok("json:full") +@At("/platform/single/apply") +public class SingleUserApplyController { + + @Inject + private SingleUserService singleUserService; + + @At("") + @Ok("beetl:/platform/single/apply.html") + @RequiresPermissions("single.user.apply") + public void index() {} + + + @At + @ViReturn + @RequiresPermissions("single.user.apply") + public Object doSubmit(SingleUser user, boolean isSubmit){ + if (isSubmit) { + user.setSingleState("8010"); + }else { + user.setSingleState("8000"); + } + user.setUserId(ShiroUtil.getUserId()); + user.setApplyTime(new Date()); + singleUserService.insert(user); + return null; + } + + + @At + @ViReturn + @RequiresPermissions("single.user.apply") + public Object findOneSingle(String id){ + return singleUserService.findOne(id); + } + + + @At + @ViReturn + @RequiresPermissions("single.user.apply") + public Object doModifyInfo(SingleUser user){ + return singleUserService.updateIgnoreNull(user); + } + + + @At + @ViReturn + @RequiresPermissions("single.user.apply") + public Object isJoinedBeforeAndIsAudit(){ + //之前是否加入过 + List singleUserList = singleUserService.query(Cnd.where("userId", "=", ShiroUtil.getUserId()).and("singleState", "=", "8060")); + SingleUser singleUser = singleUserList.stream().min(Comparator.comparing(SingleUser::getExitTime, Comparator.nullsFirst(Comparator.naturalOrder()))).orElse(null); + //是否有审核的记录 + SingleUser user = singleUserService.fetch(Cnd.where("userId", "=", ShiroUtil.getUserId()) + .and("singleState", "is not", null).and("singleState", "!=", "") + .and("singleState", "<", "8060").and("singleState", ">=", "8010")); + NutMap nutMap = new NutMap(); + nutMap.setv("singleUser",singleUser); + nutMap.setv("auditUser",user); + return nutMap; + } +} diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleUserController.java b/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleUserController.java index 12d3887..7260a88 100644 --- a/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleUserController.java +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleUserController.java @@ -4,20 +4,19 @@ import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.ExcelImportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; -import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import io.v.nutz.base.annontation.ViReturn; -import io.v.nutz.base.result.Result; import io.v.nutz.base.query.PageForm; -import io.v.nutz.web.commons.slog.annotation.SLog; -import io.v.nutz.zhgh.staffmanage.single.service.SingleUserService; +import io.v.nutz.base.result.Result; import io.v.nutz.base.utils.ViTool; import io.v.nutz.sys.models.Sys_user; +import io.v.nutz.zhgh.staffmanage.single.service.SingleUserService; import io.v.nutz.zhgh.staffmanage.thirtyteach.template.ThirtyTeachTemp; import org.apache.poi.ss.usermodel.Workbook; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.nutz.dao.Chain; import org.nutz.dao.Cnd; +import org.nutz.dao.sql.Sql; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.json.Json; @@ -50,7 +49,7 @@ import java.util.stream.Collectors; public class SingleUserController { @Inject - private SingleUserService userService; + private SingleUserService singleUserService; @At("") @Ok("beetl:/platform/single/list.html") @@ -68,15 +67,21 @@ public class SingleUserController { @Param(value = "unionGroupId", required = false) String unionGroupId, @Param(value = "personTypes", required = false) String[] personTypes, @Param(value = "userStates", required = false) String[] userStates, + @Param(value = "age", required = false) String[] age, @Param(value = "campus", required = false) String campus, @Param(value = "sex", required = false) String sex, @Param(value = "memberStatus", required = false) Integer memberStatus, @Param(value = "position", required = false) String position, @Param(value = "jobTitle", required = false) String jobTitle, @Param(value = "searchName", required = false) String searchName, - @Param(value = "searchKeyWord", required = false) String searchKeyWord) { - return userService.singlePageList(pageForm.getPageNumber(), pageForm.getPageSize(), unionId, unitId, threeUnitId, unionGroupId, - personTypes, userStates, campus, sex, memberStatus, position, jobTitle, searchName, searchKeyWord); + @Param(value = "searchKeyWord", required = false) String searchKeyWord, + @Param(value = "isJoin", required = false) Boolean isJoin, + @Param(value = "education", required = false) String education, + @Param(value = "maritalStatus", required = false) String maritalStatus) { + Sql sql = singleUserService.singlePageList(unionId, unitId, threeUnitId, unionGroupId, + personTypes, userStates, age, campus, sex, memberStatus, position, jobTitle, + searchName, searchKeyWord, isJoin, education, maritalStatus); + return singleUserService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); } @@ -91,17 +96,23 @@ public class SingleUserController { @Param(value = "unionGroupId", required = false) String unionGroupId, @Param(value = "personTypes", required = false) String personTypes, @Param(value = "userStates", required = false) String userStates, + @Param(value = "age", required = false) String age, @Param(value = "campus", required = false) String campus, @Param(value = "sex", required = false) String sex, @Param(value = "memberStatus", required = false) Integer memberStatus, @Param(value = "position", required = false) String position, @Param(value = "jobTitle", required = false) String jobTitle, @Param(value = "searchName", required = false) String searchName, - @Param(value = "searchKeyWord", required = false) String searchKeyWord) { + @Param(value = "searchKeyWord", required = false) String searchKeyWord, + @Param(value = "isJoin", required = false) Boolean isJoin, + @Param(value = "education", required = false) String education, + @Param(value = "maritalStatus", required = false) String maritalStatus) { try { - ViTool.excelResponse(response, "单身教工名单.xls"); - List dataList = userService.singlePageList(unionId, unitId, threeUnitId, unionGroupId, Json.fromJsonAsArray(String.class, personTypes), - Json.fromJsonAsArray(String.class, userStates), campus, sex, memberStatus, position, jobTitle, searchName, searchKeyWord); + ViTool.excelResponse(response, "单身教工名单.xlsx"); + Sql sql = singleUserService.singlePageList(unionId, unitId, threeUnitId, unionGroupId, Json.fromJsonAsArray(String.class, personTypes), + Json.fromJsonAsArray(String.class, userStates), Json.fromJsonAsArray(String.class, age), campus, sex, memberStatus, position, + jobTitle, searchName, searchKeyWord, isJoin, education, maritalStatus); + List dataList = singleUserService.listMap(sql); List entityList = new ArrayList<>(); ExcelExportEntity no = new ExcelExportEntity("序号", "no", 10); no.setFormat("isAddIndex"); @@ -111,6 +122,12 @@ public class SingleUserController { propMap.forEach((k, v) -> { entityList.add(new ExcelExportEntity(v, k, 20)); }); + entityList.add(new ExcelExportEntity("身高(cm)", "height", 10)); + entityList.add(new ExcelExportEntity("籍贯", "hometown", 20)); + entityList.add(new ExcelExportEntity("学历", "education", 20)); + entityList.add(new ExcelExportEntity("爱好", "hobby", 20)); + entityList.add(new ExcelExportEntity("交友意向", "intentionFriends", 50)); + entityList.add(new ExcelExportEntity("个人介绍", "personalIntroduction", 50)); Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entityList, dataList); workbook.write(response.getOutputStream()); } catch (IOException e) { @@ -119,65 +136,32 @@ public class SingleUserController { } - @At - @ViReturn - @SLog(tag = "单身教工", msg = "删除", param = true, result = true) - public Object delete(String userId) { - userService.update(Chain.make("marriage", "已婚"), Cnd.where("id", "=", userId)); - return null; - } - - - /** - * 导入模板下载 - * @param response - */ - @At - @Ok("void") - public void downloadImport(HttpServletResponse response) { - try { - ViTool.excelResponse(response, "单身教工导入模版.xlsx"); - ExportParams exportParams = new ExportParams(); - List list = new ArrayList<>(); - list.add(new ExcelExportEntity("姓名", "userName", 20)); - list.add(new ExcelExportEntity("身份证号码", "idCard", 20)); - list.add(new ExcelExportEntity("出生年月", "birthday", 20)); - exportParams.setType(ExcelType.XSSF); - Workbook workbook = ExcelExportUtil.exportExcel(exportParams, list, new ArrayList<>()); - workbook.write(response.getOutputStream()); - } catch (Exception e) { - e.printStackTrace(); - } - } - - - @At @AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"}) public Object doImport(TempFile file, boolean isFlag) { try { List thirtyTeachImportList = ExcelImportUtil.importExcel(file.getFile(), ThirtyTeachTemp.class, new ImportParams()); - List users = userService.query(); + List users = singleUserService.dao().query(Sys_user.class, Cnd.NEW()); List allUserList = users.stream().map(Sys_user::getLoginname).collect(Collectors.toList()); List errorInfos = new ArrayList<>(); List insertUserIds = new ArrayList<>(); thirtyTeachImportList.forEach(v -> { - if (allUserList.contains(v.getLoginName().trim())){ + if (allUserList.contains(v.getLoginName().trim())) { insertUserIds.add(v.getLoginName()); - }else { + } else { v.setRemark("获取不到该用户的工号,请检查工号是否正确!"); errorInfos.add(v); } }); int i = 0; - if (Lang.isNotEmpty(insertUserIds)){ + if (Lang.isNotEmpty(insertUserIds)) { if (isFlag) { - userService.update(Chain.make("marriage", null),Cnd.where("marriage","=","未婚")); + singleUserService.update(Chain.make("marriage", null), Cnd.where("marriage", "=", "未婚")); } - i = userService.update(Chain.make("marriage", "已婚"), Cnd.where("loginname", "in", insertUserIds)); + i = singleUserService.update(Chain.make("marriage", "已婚"), Cnd.where("loginname", "in", insertUserIds)); } if (Lang.isNotEmpty(errorInfos)) { @@ -196,4 +180,5 @@ public class SingleUserController { return Result.error(); } } + } diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleUserStatisticsController.java b/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleUserStatisticsController.java index d9f8153..8acaf4b 100644 --- a/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleUserStatisticsController.java +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/single/controller/SingleUserStatisticsController.java @@ -37,16 +37,17 @@ public class SingleUserStatisticsController { @At("") @Ok("beetl:/platform/single/statistics.html") @RequiresPermissions("single.user.statistics") - public void index() {} + public void index() { + } @At @ViReturn @RequiresPermissions("single.user.statistics") - public Object pageData(@Param(value = "unionId",required = false) String unionId, - @Param(value = "unitId",required = false) String unitId, - @Param(value = "personTypes",required = false) String[] personTypes, - @Param(value = "analyze",required = false) String analyze) { + public Object pageData(@Param(value = "unionId", required = false) String unionId, + @Param(value = "unitId", required = false) String unitId, + @Param(value = "personTypes", required = false) String[] personTypes, + @Param(value = "analyze", required = false) String analyze) { return userService.singleStatisticsList(personTypes, unionId, unitId, analyze); } @@ -57,7 +58,7 @@ public class SingleUserStatisticsController { List singleUserList = userService.singleStatisticsList(personTypes, unionId, unitId, analyze); List finalMemberList = singleUserList; NutMap sumMap = new NutMap() {{ - addv("0".equals(analyze)?"unionCode":"unitCode", "合计"); + addv("unCode", "合计"); addv("totalNumber", finalMemberList.stream().mapToInt(v -> v.getInt("totalNumber")).sum()); addv("male", finalMemberList.stream().mapToInt(v -> v.getInt("male")).sum()); addv("female", finalMemberList.stream().mapToInt(v -> v.getInt("female")).sum()); @@ -73,13 +74,9 @@ public class SingleUserStatisticsController { singleUserList.add(sumMap); List entityList = new ArrayList<>(); - if ("0".equals(analyze)) { - entityList.add(new ExcelExportEntity("分工会代码", "unionCode", 20)); - entityList.add(new ExcelExportEntity("分工会名称", "unionName", 20)); - }else if("1".equals(analyze)){ - entityList.add(new ExcelExportEntity("单位代码", "unitCode", 20)); - entityList.add(new ExcelExportEntity("单位名称", "unitName", 20)); - } + entityList.add(new ExcelExportEntity("0".equals(analyze) ? "分工会代码" : "单位代码", "unCode", 20)); + entityList.add(new ExcelExportEntity("0".equals(analyze) ? "分工会名称" : "单位名称", "unName", 20)); + entityList.add(new ExcelExportEntity("总人数", "totalNumber", 20)); entityList.add(new ExcelExportEntity("男", "male", 20)); entityList.add(new ExcelExportEntity("女", "female", 20)); @@ -94,7 +91,7 @@ public class SingleUserStatisticsController { try { response.setContentType("application/octet-stream"); - response.setHeader("Content-Disposition", "attachment;filename=" + new String(("单身教工统计表.xls").getBytes("utf-8"), "ISO8859-1")); + response.setHeader("Content-Disposition", "attachment;filename=" + new String(("单身教工统计表.xlsx").getBytes("utf-8"), "ISO8859-1")); Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), entityList, singleUserList); ServletOutputStream outputStream = response.getOutputStream(); workbook.write(outputStream); diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/single/model/SingleUser.java b/src/main/java/io/v/nutz/zhgh/staffmanage/single/model/SingleUser.java new file mode 100644 index 0000000..ea42f4a --- /dev/null +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/single/model/SingleUser.java @@ -0,0 +1,134 @@ +package io.v.nutz.zhgh.staffmanage.single.model; + + +import io.v.nutz.sys.models.Sys_file; +import lombok.Data; +import org.nutz.dao.entity.annotation.*; +import org.nutz.dao.interceptor.annotation.PrevInsert; + +import java.util.Date; +import java.util.List; + +@Data +@Table +public class SingleUser { + + @Name + @PrevInsert(uu32 = true) + private String id; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("用户Id") + private String userId; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 20) + @Comment("出生年月") + private String birthday; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 20) + @Comment("联系方式") + private String mobile; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 10) + @Comment("身高") + private String height; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 50) + @Comment("籍贯") + private String hometown; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 10) + @Comment("学历") + private String education; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 100) + @Comment("兴趣爱好") + private String hobby; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 20) + @Comment("子女情况") + private String childrenSituation; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 20) + @Comment("月收入") + private String monthlyIncome; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 100) + @Comment("住房情况") + private String housingSituation; + + @Column + @ColDefine(type = ColType.MYSQL_JSON) + @Comment("上传照片") + private List picFiles; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("形象照片") + private String photo; + + @Column + @ColDefine(type = ColType.VARCHAR, width = 10) + @Comment("婚姻状况") + private String maritalStatus; + + @Column + @ColDefine(type = ColType.TEXT) + @Comment("交友意向") + private String intentionFriends; + + @Column + @ColDefine(type = ColType.TEXT) + @Comment("个人介绍") + private String personalIntroduction; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("申请分工会审核ID") + private String unionAuditId; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("申请校工会审核ID") + private String schoolAuditId; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("退会分工会审核ID") + private String exitUnionAuditId; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 32) + @Comment("退会校工会审核ID") + private String exitSchoolAuditId; + + @Column + @ColDefine(type = ColType.VARCHAR,width = 10) + @Comment("状态") + private String singleState; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("申请时间") + private Date applyTime; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("加入时间") + private Date joinTime; + + @Column + @ColDefine(type = ColType.DATETIME) + @Comment("退出时间") + private Date exitTime; +} diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/single/service/SingleUserService.java b/src/main/java/io/v/nutz/zhgh/staffmanage/single/service/SingleUserService.java index c0651b7..6621591 100644 --- a/src/main/java/io/v/nutz/zhgh/staffmanage/single/service/SingleUserService.java +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/single/service/SingleUserService.java @@ -1,22 +1,22 @@ package io.v.nutz.zhgh.staffmanage.single.service; -import cn.wizzer.framework.page.Pagination; -import io.v.nutz.base.service.ViService; -import io.v.nutz.sys.models.Sys_user; +import io.v.nutz.base.service.BaseService; +import io.v.nutz.zhgh.staffmanage.single.model.SingleUser; +import org.nutz.dao.sql.Sql; import org.nutz.lang.util.NutMap; import java.util.List; -public interface SingleUserService extends ViService { +public interface SingleUserService extends BaseService { - Pagination singlePageList(Integer pageNumber,Integer pageSize, String unionId, String unitId, String threeUnitId, - String unionGroupId, String[] personTypes, String[] userStates, - String campus, String sex, Integer memberStatus, String position, - String jobTitle, String searchName, String searchKeyWord); - - List singlePageList(String unionId, String unitId, String threeUnitId, String unionGroupId, String[] personTypes, - String[] userStates, String campus, String sex, Integer memberStatus, String position, - String jobTitle, String searchName, String searchKeyWord); + Sql singlePageList(String unionId, String unitId, String threeUnitId, String unionGroupId, String[] personTypes, + String[] userStates, String[] age, String campus, String sex, Integer memberStatus, String position, + String jobTitle, String searchName, String searchKeyWord,Boolean isJoin,String education,String maritalStatus); List singleStatisticsList(String[] personTypes,String unionId,String unitId,String analyze); + + + NutMap findOne(String id); + + Object getAuditNum(String auditType,String isAudit,String unionId); } diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/single/service/impl/SingleUserServiceImpl.java b/src/main/java/io/v/nutz/zhgh/staffmanage/single/service/impl/SingleUserServiceImpl.java index f9a4a98..db46069 100644 --- a/src/main/java/io/v/nutz/zhgh/staffmanage/single/service/impl/SingleUserServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/single/service/impl/SingleUserServiceImpl.java @@ -1,18 +1,22 @@ package io.v.nutz.zhgh.staffmanage.single.service.impl; import cn.hutool.core.util.StrUtil; -import cn.wizzer.framework.page.Pagination; -import io.v.nutz.base.utils.Vi; import io.v.nutz.base.dao.CndPlus; +import io.v.nutz.base.model.Audit; +import io.v.nutz.base.service.BaseService; +import io.v.nutz.base.service.impl.BaseServiceImpl; import io.v.nutz.base.service.impl.ViServiceImpl; -import io.v.nutz.zhgh.staffmanage.single.service.SingleUserService; -import io.v.nutz.sys.models.Sys_user; +import io.v.nutz.base.utils.Vi; import io.v.nutz.web.commons.utils.ShiroUtil; +import io.v.nutz.zhgh.staffmanage.single.model.SingleUser; +import io.v.nutz.zhgh.staffmanage.single.service.SingleUserService; import org.apache.commons.lang.StringUtils; +import org.nutz.dao.Cnd; import org.nutz.dao.Dao; import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; import org.nutz.dao.util.cri.SqlExpressionGroup; +import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.Lang; import org.nutz.lang.Strings; @@ -21,237 +25,224 @@ import org.nutz.lang.util.NutMap; import java.util.List; @IocBean(args = {"refer:dao"}) -public class SingleUserServiceImpl extends ViServiceImpl implements SingleUserService { +public class SingleUserServiceImpl extends BaseServiceImpl implements SingleUserService { public SingleUserServiceImpl(Dao dao) { super(dao); } + @Inject + private BaseService baseService; + + @Override - public Pagination singlePageList(Integer pageNumber,Integer pageSize, String unionId, String unitId, String threeUnitId, - String unionGroupId, String[] personTypes, String[] userStates, - String campus, String sex, Integer memberStatus, String position, - String jobTitle, String searchName, String searchKeyWord) { + public List singleStatisticsList(String[] personTypes, String unionId, String unitId, String analyze) { + Sql sql = Sqls.create(""" - SELECT - id, - loginname, - username, - sex, - birthday, - mobile, - idcard, - personType, - userState, - unionid, - unioncode, - unionname, - unitid, - unitname, - unitcode, - threeUnitName, - threeUnitCode, - unionGroupName, - position, - jobTitle, - campusName, - marriage, - education, - hometown, - nation - From - user - $condition - """); + SELECT + un.id, + $code AS unCode, + $name AS unName, + ( $matchSql $singleCnd un.id = $unId AND TIMESTAMPDIFF (YEAR,su.birthday,CURDATE())<25 $personCnd) AS lessTwentyFive, + ( $matchSql $singleCnd un.id = $unId AND TIMESTAMPDIFF (YEAR,su.birthday,CURDATE())>=25 AND TIMESTAMPDIFF (YEAR,su.birthday,CURDATE())<=30 $personCnd) AS thirty, + ( $matchSql $singleCnd un.id = $unId AND TIMESTAMPDIFF (YEAR,su.birthday,CURDATE())>=31 AND TIMESTAMPDIFF (YEAR,su.birthday,CURDATE())<=35 $personCnd) AS thirtyFive, + ( $matchSql $singleCnd un.id = $unId AND TIMESTAMPDIFF (YEAR,su.birthday,CURDATE())>=36 AND TIMESTAMPDIFF (YEAR,su.birthday,CURDATE())<=40 $personCnd) AS forty, + ( $matchSql $singleCnd un.id = $unId AND TIMESTAMPDIFF (YEAR,su.birthday,CURDATE())>=41 AND TIMESTAMPDIFF (YEAR,su.birthday,CURDATE())<=45 $personCnd) AS fortyFive, + ( $matchSql $singleCnd un.id = $unId AND TIMESTAMPDIFF (YEAR,su.birthday,CURDATE())>=46 AND TIMESTAMPDIFF (YEAR,su.birthday,CURDATE())<=50 $personCnd) AS fifty, + ( $matchSql $singleCnd un.id = $unId AND TIMESTAMPDIFF (YEAR,su.birthday,CURDATE())>=51 AND TIMESTAMPDIFF (YEAR,su.birthday,CURDATE())<=55 $personCnd) AS fiftyFive, + ( $matchSql $singleCnd un.id = $unId AND TIMESTAMPDIFF (YEAR,su.birthday,CURDATE())>55 $personCnd $yearCnd) AS moreFiftyFive, + ( $matchSql $singleCnd un.id = $unId $personCnd) totalNumber, + ( $matchSql $singleCnd sex = '男' AND un.id = $unId $personCnd) male, + ( $matchSql $singleCnd sex = '女' AND un.id = $unId $personCnd) female + FROM + $table un + $condition + """); CndPlus cnd = CndPlus.create(); - cnd.and("marriage","=","未婚"); - cnd.andEX("unionid", "=", unionId); - cnd.andEX("unitId", "=", unitId); - cnd.andEX("threeUnitId", "=", threeUnitId); - cnd.andEX("unionGroupId", "=", unionGroupId); - if (StrUtil.isNotBlank(searchName) && Strings.isNotBlank(searchKeyWord)) { - cnd.and(new SqlExpressionGroup().andLike(searchName, searchKeyWord)); - } + sql.setVar("matchSql", " SELECT COUNT( 1 ) FROM `single_user` su left join `user` u on su.userId=u.id where "); + sql.setVar("code", "0".equals(analyze) ? "un.unioncode" : "un.unitcode"); + sql.setVar("name", "0".equals(analyze) ? "un.unionname" : "un.`name`"); + sql.setVar("unId", "0".equals(analyze) ? "u.unionid" : "u.unitid"); + sql.setVar("table", "0".equals(analyze) ? "sys_union" : "sys_unit"); + sql.setVar("singleCnd", " su.singleState in (8030,8040,8045,8050,8055) and "); - if (personTypes != null && personTypes.length > 0) { - cnd.andEX("personType", "in", personTypes); - } - if (userStates != null && userStates.length > 0) { - cnd.andEX("userState", "in", userStates); - } - cnd.andEX("campusName", "=", campus); - cnd.andEX("sex", "=", sex); - - /*cnd.andEX("member", "=", 1);*/ - cnd.andEX("memberStatus", "=", memberStatus); - - if (Strings.isNotBlank(position)) { - cnd.where().andLike("position", position); - } - if (Strings.isNotBlank(jobTitle)) { - cnd.where().andLike("jobTitle", jobTitle); - } - - if (!ShiroUtil.hasAnyRoles("sysadmin,SchoolUnionMemberAdmin,A06")) { - if (ShiroUtil.hasRole("H04")) { - cnd.and("unionId", "=", Vi.getUnionId()); - } else if (ShiroUtil.hasRole("ghxzzz")) { - cnd.and("unionId", "=", Vi.getUnionId()); - SqlExpressionGroup seg = new SqlExpressionGroup(); - seg.or("unionGroupId", "in", io.v.nutz.web.commons.utils.ShiroUtil.getUnionGroupIds()); - seg.or("unionGroupId", "is", null); - cnd.and(seg); - } - } - sql.setCondition(cnd); - return listPageMap(pageNumber,pageSize,sql); - } - - - @Override - public List singleStatisticsList(String[] personTypes,String unionId, String unitId,String analyze) { - Sql sql = null; - CndPlus cnd = CndPlus.create(); - if ("0".equals(analyze)){//按分工会统计 - sql = Sqls.create(""" - SELECT - un.id, - un.unioncode AS unionCode, - unionName, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' and un.id = unionid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())<25 $personCnd) AS lessTwentyFive, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' and un.id = unionid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())>=25 AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())<=30 $personCnd) AS thirty, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' and un.id = unionid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())>=31 AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())<=35 $personCnd) AS thirtyFive, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' and un.id = unionid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())>=36 AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())<=40 $personCnd) AS forty, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' and un.id = unionid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())>=41 AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())<=45 $personCnd) AS fortyFive, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' and un.id = unionid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())>=46 AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())<=50 $personCnd) AS fifty, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' and un.id = unionid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())>=51 AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())<=55 $personCnd) AS fiftyFive, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' and un.id = unionid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())>55 $personCnd $yearCnd) AS moreFiftyFive, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' and un.id = unionid $personCnd) totalNumber, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' and sex = '男' AND un.id = unionid $personCnd) male, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' and sex = '女' AND un.id = unionid $personCnd) female - FROM - sys_union un - $condition - """); - if (!ShiroUtil.hasAnyRoles(Lang.array("sysadmin", "A06", "SchoolUnionMemberAdmin"))) { - cnd.and("un.id", "=", Vi.getUnionId()); - } - if(StrUtil.isNotBlank(unionId)) { - cnd.and("un.id", "=", unionId); - } + if ("0".equals(analyze)) { + //工会 + cnd.andEX("un.id", "=", unionId); cnd.asc("un.unioncode"); - }else if ("1".equals(analyze)){//按单位统计 - sql = Sqls.create(""" - SELECT - un.id, - un.unitcode AS unitCode, - `name` AS unitName, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' AND un.id = unitid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())<25 $personCnd) AS lessTwentyFive, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' AND un.id = unitid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())>=26 AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())<=30 $personCnd) AS thirty, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' AND un.id = unitid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())>=31 AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())<=35 $personCnd) AS thirtyFive, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' AND un.id = unitid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())>=36 AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())<=40 $personCnd) AS forty, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' AND un.id = unitid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())>=41 AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())<=45 $personCnd) AS fortyFive, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' AND un.id = unitid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())>=46 AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())<=50 $personCnd) AS fifty, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' AND un.id = unitid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())>=51 AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())<=55 $personCnd) AS fiftyFive, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' AND un.id = unitid AND TIMESTAMPDIFF (YEAR,birthday,CURDATE())>55 $personCnd) AS moreFiftyFive, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' AND un.id = unitid $personCnd) totalNumber, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' AND sex = '男' AND un.id = unitid $personCnd) male, - ( SELECT COUNT( 1 ) FROM `user` where marriage='未婚' AND sex = '女' AND un.id = unitid $personCnd) female - FROM - sys_unit un - $condition - """); - - if (!ShiroUtil.hasAnyRoles(Lang.array("sysadmin", "A06", "SchoolUnionMemberAdmin"))) { - cnd.and("un.unionid", "=", Vi.getUnionId()); - } - if(StrUtil.isNotBlank(unitId)) { + } else { + //单位 + if (StrUtil.isNotBlank(unitId)) { cnd.and("un.id", "=", unitId); } - cnd.and("unitlevel", "=", 2).and("unitcode", "!=", "000"); + cnd.and("un.unitlevel", "=", 2).and("un.unitcode", "!=", "000"); cnd.asc("un.unitcode"); } + if (!ShiroUtil.hasAnyRoles(Lang.array("sysadmin", "A06", "H03"))) { + cnd.and("un.unionid", "=", Vi.getUnionId()); + } if (personTypes != null && personTypes.length > 0) { String join = StringUtils.join(personTypes, "','"); - sql.setVar("personCnd", "and personType in ('" + join + "')"); + sql.setVar("personCnd", "and u.personType in ('" + join + "')"); } - assert sql != null; + cnd.groupBy("un.id"); sql.setCondition(cnd); return listMap(sql); } @Override - public List singlePageList(String unionId, String unitId, String threeUnitId, String unionGroupId, String[] personTypes, String[] userStates, String campus, String sex, Integer memberStatus, String position, String jobTitle, String searchName, String searchKeyWord) { + public Sql singlePageList(String unionId, String unitId, String threeUnitId, String unionGroupId, + String[] personTypes, String[] userStates, String[] age, String campus, String sex, + Integer memberStatus, String position, String jobTitle, String searchName, + String searchKeyWord, Boolean isJoin, String education, String maritalStatus) { Sql sql = Sqls.create(""" - SELECT - id, - loginname, - username, - sex, - birthday, - mobile, - idcard, - personType, - userState, - unionid, - unioncode, - unionname, - unitid, - unitname, - unitcode, - threeUnitName, - threeUnitCode, - unionGroupName, - position, - jobTitle, - campusName, - marriage, - education, - hometown, - nation - From - user - $condition - """); + SELECT + su.*, + u.loginname, + u.username, + u.sex, + u.idcard, + u.personType, + u.userState, + u.unionname, + u.unitname, + u.threeUnitName, + u.unionGroupName + FROM + `single_user` su + LEFT JOIN `user` u ON u.id = su.userId + $condition + """); CndPlus cnd = CndPlus.create(); - cnd.and("marriage","=","未婚"); - cnd.andEX("unionid", "=", unionId); - cnd.andEX("unitId", "=", unitId); - cnd.andEX("threeUnitId", "=", threeUnitId); - cnd.andEX("unionGroupId", "=", unionGroupId); + cnd.andEX("u.unionid", "=", unionId); + cnd.andEX("u.unitId", "=", unitId); + cnd.andEX("u.threeUnitId", "=", threeUnitId); + cnd.andEX("u.unionGroupId", "=", unionGroupId); + cnd.andEX("su.education", "=", education); + cnd.andEX("su.maritalStatus", "=", maritalStatus); + cnd.and("su.singleState", "in", isJoin ? Lang.list(8030, 8040, 8045, 8050, 8055) : Lang.list(8060)); if (StrUtil.isNotBlank(searchName) && Strings.isNotBlank(searchKeyWord)) { cnd.and(new SqlExpressionGroup().andLike(searchName, searchKeyWord)); } if (personTypes != null && personTypes.length > 0) { - cnd.andEX("personType", "in", personTypes); + cnd.andEX("u.personType", "in", personTypes); } if (userStates != null && userStates.length > 0) { - cnd.andEX("userState", "in", userStates); + cnd.andEX("u.userState", "in", userStates); } - cnd.andEX("campusName", "=", campus); - cnd.andEX("sex", "=", sex); + + if (!Lang.isEmptyArray(age)) { + if (!age[1].equals("0")) { + cnd.and("TIMESTAMPDIFF(YEAR, u.birthday, CURDATE())", "between", age); + } + } + + cnd.andEX("u.campusName", "=", campus); + cnd.andEX("u.sex", "=", sex); /*cnd.andEX("member", "=", 1);*/ - cnd.andEX("memberStatus", "=", memberStatus); + cnd.andEX("u.memberStatus", "=", memberStatus); if (Strings.isNotBlank(position)) { - cnd.where().andLike("position", position); + cnd.where().andLike("u.position", position); } if (Strings.isNotBlank(jobTitle)) { - cnd.where().andLike("jobTitle", jobTitle); + cnd.where().andLike("u.jobTitle", jobTitle); } - if (!ShiroUtil.hasAnyRoles("sysadmin,SchoolUnionMemberAdmin,A06")) { + if (!ShiroUtil.hasAnyRoles("sysadmin,H03,A06")) { if (ShiroUtil.hasRole("H04")) { - cnd.and("unionId", "=", Vi.getUnionId()); + cnd.and("u.unionId", "=", Vi.getUnionId()); } else if (ShiroUtil.hasRole("ghxzzz")) { - cnd.and("unionId", "=", Vi.getUnionId()); + cnd.and("u.unionId", "=", Vi.getUnionId()); SqlExpressionGroup seg = new SqlExpressionGroup(); - seg.or("unionGroupId", "in", io.v.nutz.web.commons.utils.ShiroUtil.getUnionGroupIds()); - seg.or("unionGroupId", "is", null); + seg.or("u.unionGroupId", "in", io.v.nutz.web.commons.utils.ShiroUtil.getUnionGroupIds()); + seg.or("u.unionGroupId", "is", null); cnd.and(seg); } } sql.setCondition(cnd); - return listMap(sql); + return sql; + } + + + @Override + public NutMap findOne(String id) { + Sql sql = Sqls.create(""" + SELECT + su.*, + u.unionname AS unionName, + u.unitname AS unitName, + u.username, + u.sex, + u.loginname, + u.userState, + u.personType + FROM + `single_user` su + LEFT JOIN `user` u ON u.id = su.userId + where su.id=@id + """).setParam("id", id); + NutMap nutMap = (NutMap) baseService.listMap(sql).stream().findFirst().orElse(null); + if (Strings.isNotBlank(nutMap.getString("unionAuditId"))) { + Audit audit = baseService.dao().fetch(Audit.class, Cnd.where("id", "=", nutMap.getString("unionAuditId"))); + nutMap.setv("unionAudit", audit); + } + if (Strings.isNotBlank(nutMap.getString("schoolAuditId"))) { + Audit audit = baseService.dao().fetch(Audit.class, Cnd.where("id", "=", nutMap.getString("schoolAuditId"))); + nutMap.setv("schoolAudit", audit); + } + if (Strings.isNotBlank(nutMap.getString("exitUnionAuditId"))) { + Audit audit = baseService.dao().fetch(Audit.class, Cnd.where("id", "=", nutMap.getString("exitUnionAuditId"))); + nutMap.setv("exitUnionAudit", audit); + } + if (Strings.isNotBlank(nutMap.getString("exitSchoolAuditId"))) { + Audit audit = baseService.dao().fetch(Audit.class, Cnd.where("id", "=", nutMap.getString("exitSchoolAuditId"))); + nutMap.setv("exitSchoolAudit", audit); + } + return nutMap; + } + + + @Override + public Object getAuditNum(String auditType, String isAudit, String unionId) { + String sqlStr = """ + SELECT + COUNT(*) + FROM + `single_user` su + LEFT JOIN `user` u ON u.id = su.userId + $condition + """; + CndPlus joinCnd = CndPlus.create(); + CndPlus exitCnd = CndPlus.create(); + String result = "true".equals(isAudit) ? ">" : "false".equals(isAudit) ? "=" : ">="; + if ("union".equals(auditType)) { + joinCnd.and("su.singleState", result, 8010); + exitCnd.and("su.singleState", result, 8040); + } else if ("school".equals(auditType)) { + joinCnd.and("su.singleState", result, 8020); + exitCnd.and("su.singleState", result, 8050); + } + joinCnd.and("su.singleState", "<=", 8030); + exitCnd.and("su.singleState", ">", 8030); + if (ShiroUtil.hasAnyRoles("H04")) { + exitCnd.andEX("u.unionId", "=", Vi.getUnionId()); + joinCnd.andEX("u.unionId", "=", Vi.getUnionId()); + } else { + exitCnd.andEX("u.unionId", "=", unionId); + joinCnd.andEX("u.unionId", "=", unionId); + } + + + Sql sqlJoin = Sqls.create(sqlStr); + sqlJoin.setCondition(joinCnd); + Sql sqlExit = Sqls.create(sqlStr); + sqlExit.setCondition(exitCnd); + int joinCount = this.count(sqlJoin); + int exitCount = this.count(sqlExit); + NutMap nutMap = new NutMap(); + nutMap.setv("joinCount", joinCount); + nutMap.setv("exitCount", exitCount); + return nutMap; } } diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/sourcechange/controller/SourceChangeManageController.java b/src/main/java/io/v/nutz/zhgh/staffmanage/sourcechange/controller/SourceChangeManageController.java index 8c56f41..e786a6f 100644 --- a/src/main/java/io/v/nutz/zhgh/staffmanage/sourcechange/controller/SourceChangeManageController.java +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/sourcechange/controller/SourceChangeManageController.java @@ -1,15 +1,12 @@ package io.v.nutz.zhgh.staffmanage.sourcechange.controller; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import cn.wizzer.framework.base.Result; import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.utils.PageUtil; -import io.v.nutz.sys.models.Sys_dict; import io.v.nutz.sys.models.User; -import io.v.nutz.sys.services.SysDictService; import io.v.nutz.web.commons.slog.annotation.SLog; -import io.v.nutz.zhgh.staffmanage.member.constant.MemberChangeType; import io.v.nutz.zhgh.staffmanage.member.service.MemberCommonService; import io.v.nutz.zhgh.staffmanage.sourcechange.model.SourceChangeMiddleTable; import io.v.nutz.zhgh.staffmanage.sourcechange.param.pageform.SourceChangePageForm; @@ -28,6 +25,7 @@ import org.nutz.lang.Lang; import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; +import org.nutz.mvc.annotation.Param; import java.util.*; import java.util.stream.Collectors; @@ -151,4 +149,20 @@ public class SourceChangeManageController { sourceChangeManageService.doSourceChange(middleTable); return null; } + + + @At + @ViReturn + @RequiresPermissions("sourcechange.manage") + @SLog(tag = "人员变更管理", msg = "批量确认变更") + public Object doBatchChange(@Param("data") String[] ids) { + if (Lang.isEmpty(ids)) { + return Result.error("未获取到选择数据"); + } + List list = dao.query(SourceChangeMiddleTable.class, Cnd.where("id", "in", ids)); + for (SourceChangeMiddleTable middleTable : list) { + sourceChangeManageService.doSourceChange(middleTable); + } + return null; + } } diff --git a/src/main/java/io/v/nutz/zhgh/staffmanage/sourcechange/service/SourceChangeManageService.java b/src/main/java/io/v/nutz/zhgh/staffmanage/sourcechange/service/SourceChangeManageService.java index 6ad8f1d..c915355 100644 --- a/src/main/java/io/v/nutz/zhgh/staffmanage/sourcechange/service/SourceChangeManageService.java +++ b/src/main/java/io/v/nutz/zhgh/staffmanage/sourcechange/service/SourceChangeManageService.java @@ -3,6 +3,8 @@ package io.v.nutz.zhgh.staffmanage.sourcechange.service; import io.v.nutz.base.service.BaseService; import io.v.nutz.zhgh.staffmanage.sourcechange.model.SourceChangeMiddleTable; +import java.util.Date; + /** * @version 1.0 * @Author zzr @@ -17,4 +19,10 @@ public interface SourceChangeManageService extends BaseService implements SourceChangeManageService { public SourceChangeManageServiceImpl(Dao dao) { @@ -54,15 +60,20 @@ public class SourceChangeManageServiceImpl extends BaseServiceImpl changeTypes = new ArrayList<>(); - changeTypes.add(MemberChangeType.BASIC_CHANGE.getType()); - if (!ObjectUtil.equals(user.getUserState(), middleTable.getUserState())) { - List list = Arrays.stream(MemberChangeType.values()) - .filter(v -> v.getChangeTypeName().equals(middleTable.getUserState())).toList(); - if (Lang.isNotEmpty(list)) { - changeTypes.add(list.get(0).getType()); + if (count <= 0) { + changeTypes.add(MemberChangeType.NEW.getType()); + Sys_user sysUser = BeanUtil.copyProperties(middleTable, Sys_user.class); + dao().insert(sysUser); + + user = dao().fetch(User.class, Cnd.where("loginname", "=", middleTable.getLoginname())); + } else { + user = dao().fetch(User.class, Cnd.where("loginname", "=", middleTable.getLoginname())); + + changeTypes.add(MemberChangeType.BASIC_CHANGE.getType()); + + if (!ObjectUtil.equals(user.getUserState(), middleTable.getUserState())) { + List list = Arrays.stream(MemberChangeType.values()) + .filter(v -> v.getChangeTypeName().equals(middleTable.getUserState())).toList(); + if (Lang.isNotEmpty(list)) { + changeTypes.add(list.get(0).getType()); + } } - } - if (!ObjectUtil.equals(user.getMember(), middleTable.getMember())){ - if (middleTable.getMember() == 1) { - changeTypes.add(MemberChangeType.RESTORE.getType()); - } else { - changeTypes.add(MemberChangeType.WITHDRAWAL.getType()); + if (!ObjectUtil.equals(user.getMember(), middleTable.getMember())){ + if (middleTable.getMember() == 1) { + changeTypes.add(MemberChangeType.RESTORE.getType()); + } else { + changeTypes.add(MemberChangeType.WITHDRAWAL.getType()); + } } } - - Sys_user info = dao().fetch(Sys_user.class, Cnd.where("loginname", "=", middleTable.getLoginname())); + info = dao().fetch(Sys_user.class, Cnd.where("loginname", "=", middleTable.getLoginname())); String userId = info.getId(); UserHistory history = new UserHistory(); if (Lang.isNotEmpty(changeList)) { @@ -104,12 +125,12 @@ public class SourceChangeManageServiceImpl extends BaseServiceImpl" + HtmlUtil.cleanHtmlTag(v.getString("newValue")) + ";"; - }).collect(Collectors.joining(";")); - history.setChangeInfosStr(changeInfos); + if (count <= 0) { + history.setChangeInfosStr("新入职"); + } else { + String changeInfos = changeList.stream().map(v -> { + return v.getString("fieldName") + ":" + HtmlUtil.cleanHtmlTag(v.getString("sourceValue")) + "->" + HtmlUtil.cleanHtmlTag(v.getString("newValue")); + }).collect(Collectors.joining(";")); + history.setChangeInfosStr(changeInfos); + } history.setChangeTypes(changeTypes); dao().insert(history); @@ -211,5 +239,19 @@ public class SourceChangeManageServiceImpl extends BaseServiceImpl historyList = dao().query(UserHistory.class, Cnd.where("changeTypes", "like", "%" + MemberChangeType.NEW.getType() + "%") + .and("DATE_FORMAT(changeTime,'%Y-%m-%d %H:%i')", "=", DateUtil.format(date, "yyyy-MM-dd HH:mm"))); + +// for (UserHistory history : historyList) { +// String context = "%s老师您好,欢迎加入杭医大家庭,诚挚邀请您成为工会会员,如有意愿,请您点击此条消息或前往智慧工会平台申请入会,如无意愿请忽略此消息提醒。".formatted(history.getUsername()); +// String link = Globals.AppDomain + "/platform/member/apply/submit/h5"; +// msgApi.sendMsg(List.of("DingTalk"), history.getLoginname(), 2, "入会邀请", context, "", link); +// } } } diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpActivityAddController.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpActivityAddController.java index 97d6ffd..0f933d0 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpActivityAddController.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpActivityAddController.java @@ -13,10 +13,8 @@ import org.nutz.dao.Sqls; import org.nutz.dao.sql.Sql; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; -import org.nutz.json.Json; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Ok; -import org.nutz.mvc.annotation.POST; import org.nutz.mvc.annotation.Param; import java.util.List; @@ -28,7 +26,7 @@ import java.util.List; */ @Slf4j @IocBean -@At("/platform/trainSingUp/manage/activity") +@At("/platform/trainSingUp/manage/activity/add") public class TrainSignUpActivityAddController { @Inject @@ -37,27 +35,12 @@ public class TrainSignUpActivityAddController { @Inject private Dao dao; - @At("/add") + @At("") @RequiresPermissions("trainSingUp.manage.activity.add") @Ok("beetl:/platform/trainSingUp/manage/activity_add.html") public void add() { } - @At - @ViReturn - @Ok("json:full") - @POST - @RequiresPermissions("trainSingUp.manage.activity.add") - public Object doHandle(@Param(value = "data", required = false) String data) { - TrainSignUpActivity activity = Json.fromJson(TrainSignUpActivity.class, data); - if (StrUtil.isBlank(activity.getId())) { - trainSignUpActivityManageService.add(activity, null); - } else { - trainSignUpActivityManageService.edit(activity); - } - return null; - } - @At @ViReturn @Ok("json:full") diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpActivityApplyController.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpActivityApplyController.java index 2a073d5..49ba1a0 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpActivityApplyController.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpActivityApplyController.java @@ -6,6 +6,7 @@ import io.v.nutz.base.dao.CndPlus; import io.v.nutz.base.query.PageForm; import io.v.nutz.sys.models.Sys_dict; import io.v.nutz.sys.services.SysDictService; +import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpActivity; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpActivityCourse; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpType; @@ -83,6 +84,7 @@ public class TrainSignUpActivityApplyController { Sql sql = Sqls.create(""" SELECT tsuc.id, + tsuc.assort, tsuc.activityId, tsuc.courseName, tsuc.coursePeopleNumber, @@ -108,22 +110,27 @@ public class TrainSignUpActivityApplyController { CndPlus cnd = CndPlus.create(); cnd.andEX("type.id","=",courseTypeId); cnd.and("tsuc.activityId","=",activityId); - cnd.asc("type.code"); + cnd.asc("tsuc.orderNum"); sql.setCondition(cnd); Pagination pagination = trainSignUpActivityService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); List courseList = pagination.getList(); + List activityCourseList = trainSignUpActivityService.dao().query(TrainSignUpActivityCourse.class, Cnd.where("activityId", "=", activityId)); + + Map> map = activityCourseList.stream().collect(Collectors.groupingBy(TrainSignUpActivityCourse::getCourseId)); + courseList.forEach(c -> { + List list = map.get(c.getString("id")); + c.put("courseList", list); + TrainSignUpType type = trainSignUpActivityService.dao().fetch(TrainSignUpType.class, c.getString("courseType")); // trainSignUpActivityService.dao().fetchLinks(c, "^(courseTimeList)$", Cnd.NEW().asc("courseStartTime")); //已报人数 AtomicInteger hasRegisterNum = new AtomicInteger(); List signUpUsers = trainSignUpActivityService.dao().query(TrainSignUpUser.class, Cnd.where("courseId", "=", c.getString("id"))); signUpUsers.forEach(item -> { - if(type.getSelfAddFamily()) { - hasRegisterNum.getAndIncrement(); - } + hasRegisterNum.getAndIncrement(); if(type.getIsBringFamily() && type.getIsAddFamily()) { List mapList = item.getMobileColumnsValue(); if(Lang.isNotEmpty(mapList)) { @@ -136,7 +143,7 @@ public class TrainSignUpActivityApplyController { }); c.put("hasRegisterNum",hasRegisterNum.get()); //当前用户是否报过 - c.put("isSign",trainSignUpActivityService.isSignCourseByUser(c.getString("id"), (String) io.v.nutz.web.commons.utils.ShiroUtil.getPrincipalProperty("id"))); + c.put("isSign",trainSignUpActivityService.isSignCourseByUser(c.getString("id"), (String) ShiroUtil.getPrincipalProperty("id"))); }); return pagination; } diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpActivityController.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpActivityController.java index a9c05eb..143de4c 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpActivityController.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpActivityController.java @@ -2,18 +2,22 @@ package io.v.nutz.zhgh.trainSignUp.controller.manage; import cn.hutool.core.util.StrUtil; import io.v.nutz.base.annontation.ViReturn; +import io.v.nutz.base.query.PageForm; import io.v.nutz.base.utils.DateUtil; +import io.v.nutz.base.utils.MsgApi; import io.v.nutz.sys.models.Sys_home_activity; import io.v.nutz.web.commons.utils.ShiroUtil; +import io.v.nutz.zhgh.activity.models.ActivityUserScope; import io.v.nutz.zhgh.data.model.MatchConditionStructure; import io.v.nutz.zhgh.data.service.MatchConditionStructureService; -import io.v.nutz.base.query.PageForm; import io.v.nutz.zhgh.trainSignUp.models.*; import io.v.nutz.zhgh.trainSignUp.service.TrainSignUpActivityService; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.nutz.dao.Cnd; import org.nutz.dao.Dao; +import org.nutz.dao.Sqls; +import org.nutz.dao.sql.Sql; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.json.Json; @@ -167,6 +171,4 @@ public class TrainSignUpActivityController { return dataMap; } - - } diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpTypeController.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpTypeController.java index 8f39274..4785216 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpTypeController.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpTypeController.java @@ -3,11 +3,11 @@ package io.v.nutz.zhgh.trainSignUp.controller.manage; import cn.hutool.core.util.EnumUtil; import cn.wizzer.framework.base.Result; import io.v.nutz.base.annontation.ViReturn; +import io.v.nutz.base.dao.CndPlus; import io.v.nutz.base.page.Pagination; +import io.v.nutz.base.query.PageForm; import io.v.nutz.base.service.BaseService; import io.v.nutz.base.utils.PageUtil; -import io.v.nutz.base.dao.CndPlus; -import io.v.nutz.base.query.PageForm; import io.v.nutz.zhgh.trainSignUp.models.TrainMobileSignColumn; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpType; import lombok.extern.slf4j.Slf4j; diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpUserAdjustController.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpUserAdjustController.java index c553795..5176012 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpUserAdjustController.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpUserAdjustController.java @@ -11,11 +11,11 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.wizzer.framework.base.Result; import io.v.nutz.base.annontation.ViReturn; -import io.v.nutz.base.service.BaseService; import io.v.nutz.base.query.PageForm; +import io.v.nutz.base.service.BaseService; import io.v.nutz.base.utils.ViTool; -import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.sys.models.Sys_user; +import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.zhgh.trainSignUp.models.*; import io.v.nutz.zhgh.trainSignUp.service.TrainSignUpActivityService; import io.v.nutz.zhgh.trainSignUp.service.TrainSignUpActivityStatisticsService; @@ -226,10 +226,10 @@ public class TrainSignUpUserAdjustController { TrainSignUpActivity activity = dao.fetch(TrainSignUpActivity.class, activityId); - /*if(DateUtil.compare(new Date(), activity.getActivitySignUpStartTime(), "yyyy-MM-dd HH:mm:ss") < 0) { + if(DateUtil.compare(new Date(), activity.getActivitySignUpStartTime(), "yyyy-MM-dd HH:mm:ss") < 0) { return Result.error("报名未开始"); } - if(DateUtil.compare(new Date(), activity.getActivitySignUpEndTime(), "yyyy-MM-dd HH:mm:ss") > 0) { + /*if(DateUtil.compare(new Date(), activity.getActivitySignUpEndTime(), "yyyy-MM-dd HH:mm:ss") > 0) { return Result.error("报名已结束"); }*/ @@ -244,11 +244,11 @@ public class TrainSignUpUserAdjustController { for (SignUser sign : signUser) { Sys_user sysUser = dao.fetch(Sys_user.class, Cnd.where("loginname", "=", sign.getLoginname())); if(sysUser != null) { - /*if(!isSingle && courseMap.get(sign.getCourseName()) == null) { + if(!isSingle && courseMap.get(sign.getCourseName()) == null) { sign.setErrMsg("分活动/培训班名称有误"); continue; - }*/ - String courseId = importCourseId; + } + String courseId = isSingle ? importCourseId : courseMap.get(sign.getCourseName()); /*if(StrUtil.isNotBlank(course.getConditionStructureId())) { NutMap nutMap = trainSignUpActivityService.validConditionStructure(course.getConditionStructureId()); if(!nutMap.getBoolean("flag")) { @@ -290,7 +290,7 @@ public class TrainSignUpUserAdjustController { Sys_user sysUser = dao.fetch(Sys_user.class, Cnd.where("loginname", "=", item.getLoginname())); TrainSignUpUser trainSignUpUser = new TrainSignUpUser(); trainSignUpUser.setActivityId(activityId); - trainSignUpUser.setCourseId(importCourseId); + trainSignUpUser.setCourseId(isSingle ? importCourseId : courseMap.get(item.getCourseName())); trainSignUpUser.setUserId(sysUser.getId()); trainSignUpUser.setMobile(sysUser.getMobile()); trainSignUpUser.setSignUpTime(new Date()); diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpUserBlackListManage.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpUserBlackListManage.java index 2d3aaf4..501c7e2 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpUserBlackListManage.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/manage/TrainSignUpUserBlackListManage.java @@ -6,8 +6,9 @@ import cn.afterturn.easypoi.excel.export.ExcelExportService; import cn.hutool.core.util.StrUtil; import cn.wizzer.framework.base.Result; import io.v.nutz.base.annontation.ViReturn; -import io.v.nutz.base.utils.PageUtil; import io.v.nutz.base.query.PageForm; +import io.v.nutz.base.utils.PageUtil; +import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpActivity; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpCourse; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpUser; @@ -70,6 +71,9 @@ public class TrainSignUpUserBlackListManage { cnd.andEX("tsuu.activityId", "=", activityId); cnd.andEX("tsuu.courseId", "=", courseId); cnd.andEX("act.year", "=", year); + if(ShiroUtil.hasRole("H04") && !ShiroUtil.hasAnyRoles("sysadmin, A06")) { + cnd.and("activityMode", "=", 2).and("act.opBy", "=", ShiroUtil.getPlatformUid()); + } if (StrUtil.isNotBlank(userKeyWord)) { SqlExpressionGroup seg = new SqlExpressionGroup(); cnd.and(seg.andLike("u.username", userKeyWord).orLike("u.loginname", userKeyWord)); @@ -77,7 +81,6 @@ public class TrainSignUpUserBlackListManage { if(Strings.isNotBlank(pageForm.getPageOrderName()) && Strings.isNotBlank(pageForm.getPageOrderBy())){ cnd.orderBy(pageForm.getPageOrderName(), PageUtil.getOrder(pageForm.getPageOrderBy())); } - return trainSignUpBlackListService.pageData(pageForm, cnd, activityId, courseId); } diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/mobile/MTrainSignUpActivityController.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/mobile/MTrainSignUpActivityController.java index a5ab3c2..0cd5b0d 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/mobile/MTrainSignUpActivityController.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/mobile/MTrainSignUpActivityController.java @@ -4,11 +4,12 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.wizzer.framework.base.Result; import io.v.nutz.base.annontation.ViReturn; -import io.v.nutz.zhgh.data.service.MatchConditionStructureService; import io.v.nutz.base.query.PageForm; +import io.v.nutz.web.commons.utils.ShiroUtil; +import io.v.nutz.zhgh.activity.models.ActivityUserScope; +import io.v.nutz.zhgh.data.service.MatchConditionStructureService; import io.v.nutz.zhgh.trainSignUp.models.*; import io.v.nutz.zhgh.trainSignUp.service.TrainSignUpActivityService; -import io.v.nutz.web.commons.utils.ShiroUtil; import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.nutz.dao.Chain; import org.nutz.dao.Cnd; @@ -16,12 +17,13 @@ import org.nutz.dao.Dao; import org.nutz.integration.jedis.RedisService; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; -import org.nutz.json.Json; import org.nutz.lang.Lang; import org.nutz.lang.util.NutMap; import org.nutz.mvc.annotation.*; -import java.util.*; +import java.util.Date; +import java.util.List; +import java.util.Map; import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; @@ -93,9 +95,46 @@ public class MTrainSignUpActivityController { List mySignCourseIdList = mySignCourseList.stream().map(TrainSignUpUser::getCourseId).collect(Collectors.toList()); cnd.and("id", "in", mySignCourseIdList); } - return trainSignUpActivityService.findOne(id, cnd); + NutMap nutMap = trainSignUpActivityService.findOne(id, cnd); + List courseList = nutMap.getAsList("courseList", TrainSignUpCourse.class); + courseList.forEach(v -> { + if (v.getCourseIsLimitApply() != null && v.getCourseIsLimitApply() && v.getIsSign()) { + TrainSignUpActivityCourse course = dao.fetch(TrainSignUpActivityCourse.class, Cnd.where("courseId", "=", v.getId())); + v.setCourseTimeName(DateUtil.format(course.getCourseStartTime(), "HH:mm") + "至" + DateUtil.format(course.getCourseEndTime(), "HH:mm") + "段"); + } + }); + return nutMap; } + + @At + @Ok("json:full") + @ViReturn + @RequiresAuthentication + public Object getCourseTimeSelectList(String courseId) { + // 查课程的时间段 + List courseList = dao.query(TrainSignUpActivityCourse.class, Cnd.where("courseId", "=", courseId)); + + // 查课程的报名人数 + List applyUserList = dao.query(TrainSignUpUserCourse.class, Cnd.where("courseId", "=", courseId)); + // 按照课程下面时间段去分组 + Map> collectMap = applyUserList.stream().collect(Collectors.groupingBy(TrainSignUpUserCourse::getActivityCourseId)); + return courseList.stream().map(v -> { + String id = v.getId(); + NutMap nutMap = NutMap.NEW(); + List trainSignUpUserCourses = collectMap.get(id); + int remainingNum = v.getCourseLimitNum(); + if (Lang.isNotEmpty(trainSignUpUserCourses)) { + remainingNum = v.getCourseLimitNum() - trainSignUpUserCourses.size(); + } + nutMap.put("remainingNum", remainingNum); + nutMap.put("text", DateUtil.format(v.getCourseStartTime(), "HH:mm") + "至" + DateUtil.format(v.getCourseEndTime(), "HH:mm") + "段(剩" + remainingNum + ")"); + nutMap.put("value", id); + return nutMap; + }).filter(v-> v.getInt("remainingNum") != 0).collect(Collectors.toList()); + } + + @At @Ok("json:full") @POST @@ -103,36 +142,6 @@ public class MTrainSignUpActivityController { public Object doSignUp(TrainSignUpUser trainSignUpUser) { try { lock.lock(); - boolean courseByUser = trainSignUpActivityService.isSignCourseByUser(trainSignUpUser.getCourseId(), ShiroUtil.getPlatformUid()); - if(courseByUser) { - return Result.error("您已报过该活动"); - } - //判断人数 - int number = 0; - TrainSignUpCourse course = trainSignUpActivityService.dao().fetch(TrainSignUpCourse.class, trainSignUpUser.getCourseId()); - TrainSignUpType type = trainSignUpActivityService.dao().fetch(TrainSignUpType.class, course.getCourseType()); - if(type != null) { - if(type.getIsBringFamily() && type.getIsAddFamily()) { - List mobileColumnsValue = trainSignUpUser.getMobileColumnsValue(); - NutMap map = mobileColumnsValue.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null); - number = map != null ? map.getInt("columnValue") : 0; - } - } - boolean signFull = trainSignUpActivityService.isSignFull(trainSignUpUser.getCourseId(), number); - if(signFull) { - return Result.error("当前报名人数已满"); - } - boolean signFullByUnionId = trainSignUpActivityService.isSignFullByUnionId(trainSignUpUser.getCourseId(), number); - if(signFullByUnionId) { - return Result.error("该活动您所在的分工会名额已报满"); - } - - TrainSignUpActivity activity = trainSignUpActivityService.fetch(trainSignUpUser.getActivityId()); - Map childNumber = this.getChildNumber(activity, trainSignUpUser); - if (childNumber.containsKey(false)) { - return Result.error(childNumber.get(false)); - } - trainSignUpActivityService.doSignUp(trainSignUpUser); return Result.success("报名成功"); } catch (Exception e) { @@ -228,11 +237,17 @@ public class MTrainSignUpActivityController { } TrainSignUpCourse course = dao.fetch(TrainSignUpCourse.class, courseId); TrainSignUpActivity activity = dao.fetch(TrainSignUpActivity.class, course.getActivityId()); + + int count = dao.count(ActivityUserScope.class, Cnd.where("groupId", "=", activity.getActivityGroupId()) + .and("userId", "=", ShiroUtil.getUserId())); + if (count == 0) { + return Result.error("您不在报名人员范围内"); + } if(DateUtil.compare(new Date(), activity.getActivitySignUpStartTime(), "yyyy-MM-dd HH:mm:ss") < 0) { return Result.error("报名未开始"); } if(DateUtil.compare(new Date(), activity.getActivitySignUpEndTime(), "yyyy-MM-dd HH:mm:ss") > 0) { - return Result.error("报名已结束,请致电校工会咨询,联系电话:85913629"); + return Result.error("报名已结束"); } if(StrUtil.isNotBlank(cndId)) { NutMap nutMap = trainSignUpActivityService.validConditionStructure(cndId); @@ -252,7 +267,7 @@ public class MTrainSignUpActivityController { boolean signCourse = trainSignUpActivityService.isSignCourse(courseId, activity.getId()); if(!signCourse) { if(activity.getRestrictLimit() != 3) { - return Result.error("您选择的类型的培训班已达上限,不能再报该类型的培训班了"); + return Result.error("您选择的类型的活动已达上限,不能再报该类型的活动了,但您仍可报名参加“美味下午茶品鉴”活动"); } else { return Result.error(activity.getActivityName() + "限制报" + activity.getLimitNum() + "个活动,已达上限"); } @@ -261,12 +276,6 @@ public class MTrainSignUpActivityController { if(signFullByUnionId) { return Result.error("该活动您所在的分工会名额已报满"); } - - Map childNumber = this.getChildNumber(activity, null); - if (childNumber.containsKey(false)) { - return Result.error(childNumber.get(false)); - } - if(course.getReserveMode() == 2 && currentFamilyNumber == null) { //课程已报人数 List signUpUsers = dao.query(TrainSignUpUser.class, Cnd.where("courseId", "=", courseId)); @@ -284,76 +293,56 @@ public class MTrainSignUpActivityController { } } - private Map getChildNumber(TrainSignUpActivity activity, TrainSignUpUser trainSignUpUser) { - //临时活动的逻辑 - List stringList = List.of("06aaf4fd9db94bf9be2a27a1ab486a20", "6faec5acb6264bb6a4395aee03804269", "f9c532d86c89474f9d61c8374539e521"); - if(stringList.contains(activity.getId())) { - List upUsers = trainSignUpActivityService.dao().query(TrainSignUpUser.class, - Cnd.where("activityId", "in", stringList) - .and("userId", "=", ShiroUtil.getPlatformUid())); - if(upUsers.size() >= 2) { - return Map.of(false, "江小娃系列活动只能报2个班"); - } - //孩子数量 - List childList = upUsers.stream() - .flatMap(o -> o.getMobileColumnsValue().stream()) - .collect(Collectors.toList()); - long count = childList.stream().filter(o -> o.getString("columnCode").contains("NM") && StrUtil.isNotBlank(o.getString("columnValue"))).count(); - if(trainSignUpUser != null) { - - //获取当前填写的孩子数量 - List mobileColumnsValue = trainSignUpUser.getMobileColumnsValue(); - - //判断孩子姓名有没有重复 - List hasSignName = new ArrayList<>(); - childList.forEach(o -> { - if(o.getString("columnCode").contains("NM") && StrUtil.isNotBlank(o.getString("columnValue"))) { - hasSignName.add(o.getString("columnValue")); - } - }); - List currentSignName = mobileColumnsValue.stream().map(o -> { - if (o.getString("columnCode").contains("NM") && StrUtil.isNotBlank(o.getString("columnValue"))) { - return o.getString("columnValue"); - } else { - return ""; - } - }).filter(StrUtil::isNotBlank).collect(Collectors.toList()); - - boolean hasDuplicates = new HashSet<>(currentSignName).size() < currentSignName.size(); - if(hasDuplicates) { - return Map.of(false, "孩子姓名不能重复"); - } - for (String o : currentSignName) { - if(hasSignName.contains(o)) { - return Map.of(false, "不能报名,【" + o + "】已经在其他年级组报名了"); - } - } - - long currentChild = mobileColumnsValue.stream().filter(o -> o.getString("columnCode").contains("NM") && StrUtil.isNotBlank(o.getString("columnValue"))).count(); - count += currentChild; - } - if(count > 2) { - return Map.of(false, "江小娃系列活动只能上报2个孩子"); + @At + @Ok("json:full") + @RequiresAuthentication + public Object validateSourceSignUp(String activityCourseId) { + try { + lock.lock(); + // 该时间段下已报名的人数 + int count = dao.count(TrainSignUpUserCourse.class, Cnd.where("activityCourseId", "=", activityCourseId)); + // 获取改时间段下的活动课程限制报名人数 + TrainSignUpActivityCourse course = dao.fetch(TrainSignUpActivityCourse.class, activityCourseId); + Integer courseLimitNum = course.getCourseLimitNum(); + // 报名加上自己,如果大于了限制人数,那就无法报名 + if (count + 1 > courseLimitNum) { + return Result.error("该时间段名额已报满,请选择其他时段报名"); + } else { + return Result.success(); } + } catch (Exception e) { + e.printStackTrace(); + return Result.error("报名失败"); + } finally { + lock.unlock(); } - return Map.of(true, ""); } + + @At @Ok("json:full") @ViReturn @RequiresAuthentication public Object codeSign(String id, String codeCourseId, String clickCourseId) { - if(StrUtil.isBlank(codeCourseId) || StrUtil.isBlank(clickCourseId)) { - return Result.error("签到失败,没有获取到扫描信息"); + try { + lock.lock(); + if(StrUtil.isBlank(codeCourseId) || StrUtil.isBlank(clickCourseId)) { + return Result.error("签到失败,没有获取到扫描信息"); + } + if(!codeCourseId.equals(clickCourseId)) { + return Result.error("签到失败,二维码与您当前签到信息不符"); + } + dao.update(TrainSignUpUserCourse.class, Chain.make("isAttend", true) + .add("attendTime", new Date()), Cnd.where("id", "=", id)); + return null; + } catch (Exception e) { + e.printStackTrace(); + return Result.error("签到失败"); + } finally { + lock.unlock(); } - if(!codeCourseId.equals(clickCourseId)) { - return Result.error("签到失败,二维码与您当前签到信息不符"); - } - dao.update(TrainSignUpUserCourse.class, Chain.make("isAttend", true) - .add("attendTime", new Date()), Cnd.where("id", "=", id)); - return null; } } diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/mobile/MTrainSignUpActivityScannerQrCodeController.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/mobile/MTrainSignUpActivityScannerQrCodeController.java index e186d8b..454cd30 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/mobile/MTrainSignUpActivityScannerQrCodeController.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/mobile/MTrainSignUpActivityScannerQrCodeController.java @@ -4,9 +4,9 @@ import cn.hutool.core.util.StrUtil; import cn.wizzer.framework.base.Result; import io.v.nutz.base.annontation.ViReturn; import io.v.nutz.base.utils.WxTokenUtil; +import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpUserCourse; import io.v.nutz.zhgh.trainSignUp.service.TrainSignUpActivityService; -import io.v.nutz.web.commons.utils.ShiroUtil; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.nutz.dao.Chain; diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java index e7d3f63..b22e8e8 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java @@ -31,9 +31,12 @@ import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.annotation.Param; import javax.servlet.http.HttpServletResponse; -import java.io.*; +import java.io.BufferedOutputStream; +import java.io.IOException; import java.net.URLEncoder; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -108,14 +111,6 @@ public class TrainSignUpActivityStatisticsController { return trainSignUpActivityStatisticsService.registerUserList(courseId); } - @At - @ViReturn - @Ok("json:full") - @RequiresPermissions("trainSingUp.statistics.activity") - public Object getTaleColumnInfo(@Param(value = "courseId") String courseId) { - return trainSignUpActivityStatisticsService.getTaleColumnInfo(courseId); - } - /** * 培训班上课签到信息 * @@ -141,6 +136,7 @@ public class TrainSignUpActivityStatisticsController { Sql sql = Sqls.create(""" SELECT ts.*, + CONCAT(DATE_FORMAT(ac.courseStartTime, '%H:%i:%s'),'至',DATE_FORMAT(ac.courseEndTime, '%H:%i:%s')) AS courseTime, u.username, u.loginname, u.unitname, @@ -153,6 +149,7 @@ public class TrainSignUpActivityStatisticsController { ts.state FROM train_sign_up_user ts + left join train_sign_up_activity_course ac on ts.activityCourseId = ac.id left join `user` u on u.id = ts. userId left join train_sign_up_course tsc on tsc.id = ts.courseId WHERE @@ -179,7 +176,9 @@ public class TrainSignUpActivityStatisticsController { excelCommonExportEntity.add(new ExcelExportEntity("分工会", "unionname", 20)); excelCommonExportEntity.add(new ExcelExportEntity("性别", "sex", 20)); excelCommonExportEntity.add(new ExcelExportEntity("手机号", "mobile", 20)); - excelCommonExportEntity.add(new ExcelExportEntity("生日", "birthday", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("报名时间", "signUpTime", 20)); + excelCommonExportEntity.add(new ExcelExportEntity("报名时段", "courseTime", 20)); +// excelCommonExportEntity.add(new ExcelExportEntity("生日", "birthday", 20)); excelCommonExportEntity.add(new ExcelExportEntity("报名状态", "stateName", 20)); List courseList = dao.query(TrainSignUpCourse.class, Cnd.where("activityId", "=", activityId)); @@ -199,7 +198,7 @@ public class TrainSignUpActivityStatisticsController { TrainSignUpCourse course = courseMap.get(k); //查询课程类型 TrainSignUpType trainSignUpType = dao.fetch(TrainSignUpType.class, Cnd.where("id", "=", course.getCourseType())); - dao.fetchLinks(trainSignUpType, "^trainMobileSignColumnList$", Cnd.NEW().asc("columnIndex")); + dao.fetchLinks(trainSignUpType, "^trainMobileSignColumnList$"); ExcelExportService service = new ExcelExportService(); ExportParams userExportParams = new ExportParams(); diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpActivity.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpActivity.java index c6fbe16..371d246 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpActivity.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpActivity.java @@ -1,10 +1,11 @@ package io.v.nutz.zhgh.trainSignUp.models; import cn.wizzer.framework.base.model.BaseModel; +import io.v.nutz.base.utils.DateUtil; +import io.v.nutz.sys.models.Sys_file; import io.v.nutz.sys.models.Sys_home_activity; import io.v.nutz.sys.services.SysHomeConvert; import io.v.nutz.zhgh.data.model.MatchConditionStructure; -import io.v.nutz.sys.models.Sys_file; import lombok.Data; import lombok.experimental.Accessors; import org.nutz.dao.entity.annotation.*; @@ -140,7 +141,7 @@ public class TrainSignUpActivity extends BaseModel implements Serializable, SysH sysHomeActivity.setName(this.getActivityName()); sysHomeActivity.setCover(this.getCover().getFilepath()); sysHomeActivity.setUrl("/platform/trainSingUp/manage/apply"); - sysHomeActivity.setH5Url("/platform/mobile/trainSignUpActivity/trainList"); + sysHomeActivity.setH5Url("/platform/mobile/trainSignUpActivity/trainInfo?activityId=" + this.getId() + "&endTime=" + DateUtil.format(this.getActivityEndTime(), "yyyy-MM-dd HH:mm:ss")); if (Lang.isNotEmpty(this.getActivitySignUpStartTime())) { sysHomeActivity.setStartDate(this.getActivitySignUpStartTime()); sysHomeActivity.setEndDate(this.getActivitySignUpEndTime()); diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpActivityCourse.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpActivityCourse.java index 1ae940e..90ec1c5 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpActivityCourse.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpActivityCourse.java @@ -46,5 +46,10 @@ public class TrainSignUpActivityCourse { @Comment("课程时间") private Date courseDate; + @Column + @ColDefine(type = ColType.INT, width = 4) + @Comment("限制人数") + private Integer courseLimitNum; + private Integer hasRegisterNum; } diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpCourse.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpCourse.java index 400d7c3..ae7cc6b 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpCourse.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpCourse.java @@ -62,7 +62,7 @@ public class TrainSignUpCourse extends BaseModel implements Serializable { private List courseLocationCoordinates; @Column - @ColDefine(type = ColType.VARCHAR, width = 50) + @ColDefine(type = ColType.VARCHAR, width = 20) @Comment("课程讲师") private String courseInstructor; @@ -71,6 +71,11 @@ public class TrainSignUpCourse extends BaseModel implements Serializable { @Comment("校区") private String campus; + @Column + @ColDefine(type = ColType.BOOLEAN) + @Comment("报名人数是否限制") + private Boolean courseIsLimitApply; + @Column @ColDefine(type = ColType.INT) @Comment("序号") @@ -137,4 +142,7 @@ public class TrainSignUpCourse extends BaseModel implements Serializable { @Comment("分类标识") @ColDefine(type = ColType.VARCHAR, width = 30) private String assort; + + + private String courseTimeName; } diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpType.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpType.java index f00e0f0..d806936 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpType.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpType.java @@ -50,12 +50,6 @@ public class TrainSignUpType extends BaseModel implements Serializable { @ColDefine(type = ColType.BOOLEAN) private Boolean isAddFamily; - @Column - @Comment("本人纳入总人数") - @ColDefine(type = ColType.BOOLEAN) - @Default("1") - private Boolean selfAddFamily; - @Many(field = "typeId") private List trainMobileSignColumnList; } diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpUser.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpUser.java index d4b7777..e465066 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpUser.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/models/TrainSignUpUser.java @@ -50,6 +50,11 @@ public class TrainSignUpUser implements Serializable { @Comment("报名时间") private Date signUpTime; + @Column + @ColDefine(type = ColType.VARCHAR, width = 32) + @Comment("活动课程时段id") + private String activityCourseId; + @Column @ColDefine(type = ColType.MYSQL_JSON) @Comment("手机端报名字段和值") diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/service/TrainSignUpActivityService.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/service/TrainSignUpActivityService.java index 7530091..12fb0c2 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/service/TrainSignUpActivityService.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/service/TrainSignUpActivityService.java @@ -3,10 +3,10 @@ package io.v.nutz.zhgh.trainSignUp.service; import cn.wizzer.framework.page.Pagination; import io.v.nutz.base.query.PageForm; import io.v.nutz.base.service.ViService; +import io.v.nutz.zhgh.trainSignUp.constant.TrainCourseType; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpActivity; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpCourse; import io.v.nutz.zhgh.trainSignUp.models.TrainSignUpUser; -import io.v.nutz.zhgh.trainSignUp.constant.TrainCourseType; import org.nutz.dao.Cnd; import org.nutz.lang.util.NutMap; diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/service/TrainSignUpActivityStatisticsService.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/service/TrainSignUpActivityStatisticsService.java index 88d3cc6..e0873cc 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/service/TrainSignUpActivityStatisticsService.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/service/TrainSignUpActivityStatisticsService.java @@ -33,8 +33,6 @@ public interface TrainSignUpActivityStatisticsService extends ViService registerUserList(String courseId); - List getTaleColumnInfo(String courseId); - /** * 该课程下的报名人员信息 * diff --git a/src/main/java/io/v/nutz/zhgh/trainSignUp/service/impl/TrainSignUpActivityServiceImpl.java b/src/main/java/io/v/nutz/zhgh/trainSignUp/service/impl/TrainSignUpActivityServiceImpl.java index c23a29b..170cc73 100644 --- a/src/main/java/io/v/nutz/zhgh/trainSignUp/service/impl/TrainSignUpActivityServiceImpl.java +++ b/src/main/java/io/v/nutz/zhgh/trainSignUp/service/impl/TrainSignUpActivityServiceImpl.java @@ -2,19 +2,20 @@ package io.v.nutz.zhgh.trainSignUp.service.impl; import cn.hutool.core.util.StrUtil; import cn.wizzer.framework.page.Pagination; +import io.v.nutz.base.query.PageForm; +import io.v.nutz.base.service.impl.ViServiceImpl; +import io.v.nutz.base.utils.MsgApi; import io.v.nutz.base.utils.Vi; import io.v.nutz.sys.models.Sys_home_activity; +import io.v.nutz.sys.models.Sys_user; +import io.v.nutz.web.commons.utils.ShiroUtil; import io.v.nutz.zhgh.data.constant.ConditionalOperational; import io.v.nutz.zhgh.data.constant.MatchMethod; import io.v.nutz.zhgh.data.model.MatchCondition; import io.v.nutz.zhgh.data.model.MatchConditionStructure; import io.v.nutz.zhgh.data.service.MatchConditionStructureService; -import io.v.nutz.base.query.PageForm; -import io.v.nutz.base.service.impl.ViServiceImpl; -import io.v.nutz.sys.models.Sys_user; import io.v.nutz.zhgh.trainSignUp.models.*; import io.v.nutz.zhgh.trainSignUp.service.TrainSignUpActivityService; -import io.v.nutz.web.commons.utils.ShiroUtil; import lombok.extern.slf4j.Slf4j; import org.nutz.aop.interceptor.async.Async; import org.nutz.aop.interceptor.ioc.TransAop; @@ -56,6 +57,9 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl courseList = activity.getCourseList(); courseList.forEach(v -> { @@ -132,7 +137,6 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl oldActCourseTimeList = dao().query(TrainSignUpActivityCourse.class, Cnd.where("activityId", "=", activity.getId())); - update(activity); List typeLimits = activity.getTypeLimits(); @@ -155,7 +159,7 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl courseTimeList = v.getCourseTimeList(); - if(courseTimeList != null) { + if (courseTimeList != null) { courseTimeList.forEach(x -> { x.setActivityId(activity.getId()); x.setCourseId(v.getId()); @@ -185,7 +189,7 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl nowCourseTimeListId = new ArrayList<>(); activity.getCourseList().stream().forEach(v -> { - if(v.getCourseTimeList() != null) { + if (v.getCourseTimeList() != null) { nowCourseTimeListId.addAll(v.getCourseTimeList().stream().map(x -> x.getId()).collect(Collectors.toList())); } }); @@ -262,30 +266,26 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl courseList = activity.getCourseList(); courseList.forEach(c -> { - if(StrUtil.isNotBlank(c.getCourseType())) { - TrainSignUpType type = dao().fetch(TrainSignUpType.class, c.getCourseType()); - dao().fetchLinks(c, "^(courseTimeList)$", Cnd.NEW().asc("courseStartTime")); - //已报人数 - AtomicInteger hasRegisterNum = new AtomicInteger(); - List signUpUsers = dao().query(TrainSignUpUser.class, Cnd.where("courseId", "=", c.getId())); - signUpUsers.forEach(item -> { - if(type.getSelfAddFamily()) { - hasRegisterNum.getAndIncrement(); - } - if(type.getIsBringFamily() && type.getIsAddFamily()) { - List mapList = item.getMobileColumnsValue(); - if(Lang.isNotEmpty(mapList)) { - NutMap nutMap = mapList.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null); - if(nutMap != null) { - hasRegisterNum.addAndGet(nutMap.getInt("columnValue")); - } + TrainSignUpType type = dao().fetch(TrainSignUpType.class, StrUtil.isNotBlank(c.getCourseType()) ? c.getCourseType() : ""); + dao().fetchLinks(c, "^(courseTimeList)$", Cnd.NEW().asc("courseStartTime")); + //已报人数 + AtomicInteger hasRegisterNum = new AtomicInteger(); + List signUpUsers = dao().query(TrainSignUpUser.class, Cnd.where("courseId", "=", c.getId())); + signUpUsers.forEach(item -> { + hasRegisterNum.getAndIncrement(); + if (type.getIsBringFamily() && type.getIsAddFamily()) { + List mapList = item.getMobileColumnsValue(); + if (Lang.isNotEmpty(mapList)) { + NutMap nutMap = mapList.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null); + if (nutMap != null) { + hasRegisterNum.addAndGet(nutMap.getInt("columnValue")); } } - }); - c.setHasRegisterNum(hasRegisterNum.get()); - //当前用户是否报过 - c.setIsSign(isSignCourseByUser(c.getId(), (String) ShiroUtil.getPrincipalProperty("id"))); - } + } + }); + c.setHasRegisterNum(hasRegisterNum.get()); + //当前用户是否报过 + c.setIsSign(isSignCourseByUser(c.getId(), (String) ShiroUtil.getPrincipalProperty("id"))); }); return Lang.obj2nutmap(activity); } @@ -319,10 +319,10 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl cnd.and(new Static(" ((activityEndTime > '%s' and activityStartTime < '%s') or (activitySignUpEndTime > '%s' and activitySignUpStartTime < '%s'))" // .formatted(dateTime, dateTime, dateTime, dateTime))); } - if("my".equals(type)) { + if ("my".equals(type)) { cnd.and(new Static("id in (select activityId from train_sign_up_user where userId = '%s')".formatted(ShiroUtil.getPrincipalProperty("id")))); } - cnd.and("isDisabled","=",0); + cnd.and("isDisabled", "=", 0); cnd.orderBy("activityEndTime", "desc"); cnd.orderBy("isDisabled", "desc"); Pagination pagination = listPage(pageForm.getPageNumber(), pageForm.getPageSize(), cnd); @@ -341,17 +341,19 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl signUpUsers = listMap(sql); - int hasRegisterNum = signUpType.getSelfAddFamily() ? signUpUsers.size() + 1 : 0;//+1是算自己 + int hasRegisterNum = signUpUsers.size() + 1;//+1是算自己 //课程已报人数(携带的家属) int hasFamilyNum = 0; //如果携带家属,并且纳入人数,则mdzz - if(signUpType.getIsAddFamily() && signUpType.getIsBringFamily()) { + if (signUpType.getIsAddFamily() && signUpType.getIsBringFamily()) { //如果携带家属,已报人数=教职工+每个教职工携带的家属 AtomicInteger num = new AtomicInteger(); signUpUsers.forEach(item -> { List mapList = item.getAsList("", NutMap.class); - if(Lang.isNotEmpty(mapList)) { + if (Lang.isNotEmpty(mapList)) { NutMap nutMap = mapList.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null); - if(nutMap != null) { + if (nutMap != null) { num.addAndGet(nutMap.getInt("columnValue")); } } @@ -459,18 +480,17 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl signUpUsers = dao().query(TrainSignUpUser.class, Cnd.where("courseId", "=", courseId)); - //如果本人纳入总人数,则正常,但是如果不纳入,统计报名人数的时候就不算 - int hasRegisterNum = type.getSelfAddFamily() ? signUpUsers.size() + 1 : 0;//+1是算自己 + int hasRegisterNum = signUpUsers.size() + 1;//+1是算自己 //课程已报人数(携带的家属) int hasFamilyNum = 0; //如果这个类型携带家属并且计入总人数 - if(type.getIsBringFamily() && type.getIsAddFamily()) { + if (type.getIsBringFamily() && type.getIsAddFamily()) { AtomicInteger num = new AtomicInteger(); signUpUsers.forEach(item -> { List mapList = item.getMobileColumnsValue(); - if(Lang.isNotEmpty(mapList)) { + if (Lang.isNotEmpty(mapList)) { NutMap nutMap = mapList.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findAny().orElse(null); - if(nutMap != null) { + if (nutMap != null) { num.addAndGet(nutMap.getInt("columnValue")); } } @@ -478,10 +498,10 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl 总人数 return (hasRegisterNum + course.getCourseReservedNumber() + hasFamilyNum) > coursePeopleNumber; - }else {//如果预留名额模式是报名人数不变 + } else {//如果预留名额模式是报名人数不变 //如果已报人数+当前报名(自己)+家属 > 总人数+预留人数 return (hasRegisterNum + hasFamilyNum) > (coursePeopleNumber + course.getCourseReservedNumber()); } @@ -515,7 +535,7 @@ public class TrainSignUpActivityServiceImpl extends ViServiceImpl listMap = list.getList(NutMap.class); - - //找活动报的人 - List upUsers = dao().query(TrainSignUpUser.class, Cnd.where("activityId", "=", activityId)); - Map> signUsers = upUsers.stream().collect(Collectors.groupingBy(TrainSignUpUser::getCourseId)); - - for (NutMap item : listMap) { - AtomicReference familyCount = new AtomicReference<>(0); - List users = signUsers.get(item.getString("id")); - if (Lang.isNotEmpty(users)) { - users.forEach(u -> { - List mobileColumnsValue = u.getMobileColumnsValue(); - if (Lang.isNotEmpty(mobileColumnsValue)) { - NutMap nutMap = mobileColumnsValue.stream().filter(o -> "xdqsrs".equals(o.getString("columnCode"))).findFirst().orElse(null); - if (nutMap != null) { - familyCount.updateAndGet(v -> v + (StrUtil.isNotBlank(nutMap.getString("columnValue")) ? nutMap.getInt("columnValue") : 0)); - } - } - }); - } - item.setv("familyCount", familyCount.get()); - } - list.setList(listMap); - return list; + return list(pageForm, sql); } @Override @@ -106,8 +70,7 @@ public class TrainSignUpActivityStatisticsServiceImpl extends ViServiceImpl mobileColumnsValue = Json.fromJsonAsList(NutMap.class, o.getString("mobileColumnsValue")); - if(Lang.isNotEmpty(mobileColumnsValue)) { - mobileColumnsValue.forEach(m -> { - o.put(m.getString("columnCode"), m.getString("columnValue")); - }); - } - } - }); - return list; - } - - @Override - public List getTaleColumnInfo(String courseId) { - TrainSignUpCourse course = dao().fetch(TrainSignUpCourse.class, courseId); - TrainSignUpType upType = dao().fetch(TrainSignUpType.class, course.getCourseType()); - dao().fetchLinks(upType, "trainMobileSignColumnList", Cnd.NEW().asc("columnIndex")); - - List columnList = upType.getTrainMobileSignColumnList(); - List columnTableList = columnList.stream().map(o -> NutMap.NEW().setv("label", o.getColumnName()).setv("prop", o.getColumnCode())).collect(Collectors.toList()); - return columnTableList; + return listMap(sql); } @Override diff --git a/src/main/resources/static/assets/mobile/css/main.css b/src/main/resources/static/assets/mobile/css/main.css index 69c1684..ab67e8a 100644 --- a/src/main/resources/static/assets/mobile/css/main.css +++ b/src/main/resources/static/assets/mobile/css/main.css @@ -114,6 +114,10 @@ a, img { overflow: hidden; } +:root { + --color-primary: #06c; +} + diff --git a/src/main/resources/static/assets/mobile/svg/qsv/icon.svg b/src/main/resources/static/assets/mobile/svg/qsv/icon.svg new file mode 100644 index 0000000..ecd40b4 --- /dev/null +++ b/src/main/resources/static/assets/mobile/svg/qsv/icon.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/views/mobile/platform.html b/src/main/resources/views/mobile/platform.html index 12dbbe0..416cfe9 100644 --- a/src/main/resources/views/mobile/platform.html +++ b/src/main/resources/views/mobile/platform.html @@ -64,6 +64,7 @@ Vue.component("text-editor", httpVueLoader("/components/plugins/TextEditor.vue?v=" + new Date().getTime())) Vue.prototype.$auth = commonUtil.authService() + Vue.prototype.$moment = moment diff --git a/src/main/resources/views/platform/qsv/activity/basicForm.js b/src/main/resources/views/platform/qsv/activity/basicForm.js index b3f20ad..f939d53 100644 --- a/src/main/resources/views/platform/qsv/activity/basicForm.js +++ b/src/main/resources/views/platform/qsv/activity/basicForm.js @@ -5,8 +5,8 @@ const basicForm = { - {{item.label}} @@ -71,8 +71,8 @@ const basicForm = { - {{item.label}} @@ -163,8 +163,8 @@ const basicForm = { - + {{item.label}} @@ -197,12 +197,14 @@ const basicForm = { `, dicts: ["ACTIVITY_QSV_CATEGORY", "ACTIVITY_QSV_MODE", "ACTIVITY_QSV_REPEAT_MODE", "ACTIVITY_QSV_SCORE_MODE"], components: { - "drawer-user-scope": httpVueLoader("/components/module/activity/DrawerUserScope.vue") + "drawer-user-scope": httpVueLoader("/components/plugins/DrawerUserScope.vue") }, data() { return { dialogVisible: false, - formData: {}, + formData: { + category: '' + }, formRules: { category: [{ required: true, message: "请选择类型", trigger: "change" }], title: [{ required: true, message: "请输入标题", trigger: "change" }], @@ -219,7 +221,7 @@ const basicForm = { this.dialogVisible = true this.getActivityGroup() if (id) { - this.$axios.post("/platform/qsv/activity/findOne", { id }).then((res) => { + $.post("/platform/qsv/activity/findOne", { id }).then((res) => { if (res.code === 0) { this.formData = res.data } @@ -231,7 +233,7 @@ const basicForm = { onSubmit() { this.$refs.formRef.validate((valid) => { if (valid) { - this.$axios.post("/platform/qsv/activity/save", this.formData).then((res) => { + $.post("/platform/qsv/activity/save", this.formData).then((res) => { if (res.code === 0) { this.$message.success(res.msg) this.dialogVisible = false @@ -242,7 +244,7 @@ const basicForm = { }) }, getActivityGroup() { - this.$axios.post("/platform/activity/basic/scope/getActivityUserScopeGroup").then((res) => { + $.post("/platform/activity/basic/scope/getActivityUserScopeGroup").then((res) => { if (res.code === 0) { this.activityGroupOptions = res.data } diff --git a/src/main/resources/views/platform/qsv/activity/index.html b/src/main/resources/views/platform/qsv/activity/index.html index 4e9dfc1..5780be4 100644 --- a/src/main/resources/views/platform/qsv/activity/index.html +++ b/src/main/resources/views/platform/qsv/activity/index.html @@ -5,18 +5,31 @@ layout("/layouts/platform.html"){
- - - - - - - - + - - - 新增 + + + @@ -80,7 +93,7 @@ layout("/layouts/platform.html"){ cancelButtonText: "取消", type: "warning" }).then(() => { - this.$axios.post("/platform/qsv/activity/delete", { id }).then((res) => { + $.post("/platform/qsv/activity/delete", { id }).then((res) => { if (res.code === 0) { this.$message.success("删除成功") this.pageData() diff --git a/src/main/resources/views/platform/qsv/activity/optionImg.js b/src/main/resources/views/platform/qsv/activity/optionImg.js index 90a44b3..13a6df5 100644 --- a/src/main/resources/views/platform/qsv/activity/optionImg.js +++ b/src/main/resources/views/platform/qsv/activity/optionImg.js @@ -3,7 +3,7 @@ const optionImg = {
@@ -38,7 +38,7 @@ const optionImg = { console.log(file) console.log(fileList) if (response.code === 0) { - this.img = response.data + this.img = FILE_STREAM_PREVIEW_ADDRESS + "?id=" + response.data.filepath // this.img = "/platform/sys/file/download?id=t38dmq4beuhrupqb54prl52t4u" this.$message.success("图片上传成功") } diff --git a/src/main/resources/views/platform/qsv/activity/setting.js b/src/main/resources/views/platform/qsv/activity/setting.js new file mode 100644 index 0000000..afff7f0 --- /dev/null +++ b/src/main/resources/views/platform/qsv/activity/setting.js @@ -0,0 +1,39 @@ +const setting = { + template:/*language=HTML*/` + + + + + + + + + + + + `, + data(){ + return{ + title: '设置', + visible: false, + formData:{}, + ext: null + } + }, + methods:{ + onOpen(option,ext){ + console.log(option) + this.formData = { ...option } + this.ext = ext + this.visible = true + }, + onConfirm(){ + this.$emit('confirm', { option:this.formData,ext:this.ext }) + } + } + + +} diff --git a/src/main/resources/views/platform/qsv/activity/subjectForm.js b/src/main/resources/views/platform/qsv/activity/subjectForm.js index 36d289c..6fa3052 100644 --- a/src/main/resources/views/platform/qsv/activity/subjectForm.js +++ b/src/main/resources/views/platform/qsv/activity/subjectForm.js @@ -1,4 +1,5 @@ + const subjectForm = { template: /*language=HTML*/ ` @@ -41,6 +42,11 @@ const subjectForm = {
+ +
+ 最大选择数: + +
@@ -115,6 +121,14 @@ const subjectForm = { v-model="option.isCorrect" active-text="正确答案"> + + + + +
`, components: { 'option-img': optionImg, + 'setting': setting }, data() { return { @@ -210,12 +226,12 @@ const subjectForm = { this.visible = true if (id) { this.id = id - this.$axios.post("/platform/qsv/activity/findOne", {id}).then((res) => { + $.post("/platform/qsv/activity/findOne", {id}).then((res) => { if (res.code === 0) { this.activity = res.data } }) - this.$axios.post("/platform/qsv/activity/listSubjects", {activityId: id}).then((res) => { + $.post("/platform/qsv/activity/listSubjects", {activityId: id}).then((res) => { if (res.code === 0) { this.subjects = res.data } @@ -277,7 +293,7 @@ const subjectForm = { .catch(() => { }) }, - + //添加选项 addOption(subject) { subject.options.push({ @@ -288,7 +304,7 @@ const subjectForm = { isCorrect: false }) }, - + //删除选项 removeOption(subject, optionIndex) { subject.options.splice(optionIndex, 1) @@ -301,21 +317,38 @@ const subjectForm = { optionIndex }) }, - + //选项图片上传成功回调 onOptionImgConfirm({img, ext}) { this.$set(this.subjects[ext.subjectIndex].options[ext.optionIndex], "imgUrl", img) }, - + //删除选项图片 removeOptionImg(subjectIndex, optionIndex){ this.$set(this.subjects[subjectIndex].options[optionIndex], "imgUrl", null) console.log(this.subjects[subjectIndex]) }, - + + //打开选项设置 + openSetting(subjectIndex, optionIndex, option){ + this.$refs.settingRef.onOpen(option, { + subjectIndex, + optionIndex + }) + }, + + //选项设置确认 + onSettingConfirm({option, ext}){ + this.subjects[ext.subjectIndex].options[ext.optionIndex] = option + console.log(this.subjects[ext.subjectIndex].options[ext.optionIndex]) + + // this.$set(this.subjects[ext.subjectIndex].options[ext.optionIndex], "isCorrect", option.isCorrect) + // this.$set(this.subjects[ext.subjectIndex].options[ext.optionIndex], "hint", option.hint) + }, + //保存 saveQuestionnaire() { - this.$axios + $ .post("/platform/qsv/activity/saveSubjects", { activityId: this.id, subjects: JSON.stringify(this.subjects) diff --git a/src/main/resources/views/platform/qsv/quiz/rank.html b/src/main/resources/views/platform/qsv/quiz/rank.html index 452577a..4290941 100644 --- a/src/main/resources/views/platform/qsv/quiz/rank.html +++ b/src/main/resources/views/platform/qsv/quiz/rank.html @@ -4,52 +4,84 @@ layout("/layouts/platform.html"){
- - - - - - - - - - - - - - - - - - - - - - - - - - + - - - 导出xlsx + + + @@ -79,7 +111,7 @@ layout("/layouts/platform.html"){ }, methods: { listActivity() { - this.$axios.post("/platform/qsv/quizRank/listQuiz", { year: this.pageForm.year }).then((res) => { + $.post("/platform/qsv/quizRank/listQuiz", { year: this.pageForm.year }).then((res) => { if (res.code === 0) { this.activityOptions = res.data if (this.activityOptions.length > 0) { @@ -95,12 +127,12 @@ layout("/layouts/platform.html"){ }) }, exportXlsx() { - this.$downLoad("/platform/qsv/quizRank/exportXlsx", this.pageForm) + // this.$downLoad("/platform/qsv/quizRank/exportXlsx", this.pageForm) } }, async created() { - this.unionOptions = await this.$businessTool.listUnion() - this.unitOptions = await this.$businessTool.listUnit() + this.unionOptions = await getUnionList() + this.unitOptions = await getUnits() this.listActivity() } }) diff --git a/src/main/resources/views/platform/qsv/survey/answer.js b/src/main/resources/views/platform/qsv/survey/answer.js index e85ec3d..2b7e5a3 100644 --- a/src/main/resources/views/platform/qsv/survey/answer.js +++ b/src/main/resources/views/platform/qsv/survey/answer.js @@ -32,7 +32,7 @@ const answer = { }, list() { - this.$axios.post("/platform/qsv/survey/userAnswer", { activityId: this.activityId }).then((res) => { + $.post("/platform/qsv/survey/userAnswer", { activityId: this.activityId }).then((res) => { if (res.code === 0) { this.tableColumns = res.data.tableColumns this.tableData = res.data.tableData @@ -46,7 +46,7 @@ const answer = { cancelButtonText: "取消", type: "warning" }).then(() => { - this.$axios.post("/platform/qsv/survey/deleteUserAnswer", { id }).then((res) => { + $.post("/platform/qsv/survey/deleteUserAnswer", { id }).then((res) => { if (res.code === 0) { this.$message.success(res.msg) this.list() @@ -56,7 +56,7 @@ const answer = { }, exportUserAnswerXlsx() { - this.$downLoad("/platform/qsv/survey/exportUserAnswerXlsx", { activityId: this.activityId }) + // this.$downLoad("/platform/qsv/survey/exportUserAnswerXlsx", { activityId: this.activityId }) } } } diff --git a/src/main/resources/views/platform/qsv/survey/index.html b/src/main/resources/views/platform/qsv/survey/index.html index f0f48a3..8cf5644 100644 --- a/src/main/resources/views/platform/qsv/survey/index.html +++ b/src/main/resources/views/platform/qsv/survey/index.html @@ -4,21 +4,24 @@ layout("/layouts/platform.html"){
- - - - - + - - + + @@ -57,7 +60,7 @@ layout("/layouts/platform.html"){ }, methods: { exportXlsx() { - this.$axios.post("/platform/qsv/survey/exportXlsx", this.pageForm) + $.post("/platform/qsv/survey/exportXlsx", this.pageForm) } }, created() { diff --git a/src/main/resources/views/platform/qsv/survey/report.js b/src/main/resources/views/platform/qsv/survey/report.js index a7a8a38..b1da63b 100644 --- a/src/main/resources/views/platform/qsv/survey/report.js +++ b/src/main/resources/views/platform/qsv/survey/report.js @@ -63,7 +63,7 @@ const report = { onOpen(activityId) { this.dialogVisible = true this.activityId = activityId - this.$axios.post("/platform/qsv/survey/report", { activityId }).then((res) => { + $.post("/platform/qsv/survey/report", { activityId }).then((res) => { if (res.code === 0) { this.subjects = res.data } @@ -72,8 +72,7 @@ const report = { openDetail(subjectId, optionId) { console.log(subjectId) console.log(optionId) - this.$axios - .post("/platform/qsv/survey/selectOptionUsers", { + $.post("/platform/qsv/survey/selectOptionUsers", { activityId: this.activityId, subjectId, optionId diff --git a/src/main/resources/views/platform/single/apply.html b/src/main/resources/views/platform/single/apply.html new file mode 100644 index 0000000..26a3b13 --- /dev/null +++ b/src/main/resources/views/platform/single/apply.html @@ -0,0 +1,330 @@ + + +
+ + + +
+ + + diff --git a/src/main/resources/views/platform/single/list.html b/src/main/resources/views/platform/single/list.html index 6d5a423..60c14b4 100644 --- a/src/main/resources/views/platform/single/list.html +++ b/src/main/resources/views/platform/single/list.html @@ -12,7 +12,7 @@ layout("/layouts/platform.html"){ } .query-row { - height: 70px; + height: 55px; display: flex; justify-content: center; align-items: center; @@ -74,96 +74,113 @@ layout("/layouts/platform.html"){
+
+
性  别:
+
+ + + +
+
- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
搜索 - +
@@ -206,6 +223,26 @@ layout("/layouts/platform.html"){ + + + 年龄范围: + + + + + + + + 当前范围:{{ pageForm.age }} + + + + + - 单身教工导入 - 单身教工导出 + + + 加入 + 退出 + + + 单身教工导入 + + 单身教工导出 + @@ -260,10 +305,7 @@ layout("/layouts/platform.html"){ - 编辑 - - + :command="{type:'delete',data:scope.row}"> 删除 @@ -276,119 +318,41 @@ layout("/layouts/platform.html"){ -