diff --git a/src/main/java/com/budwk/app/sys/services/impl/SysMsgServiceImpl.java b/src/main/java/com/budwk/app/sys/services/impl/SysMsgServiceImpl.java index 5e502c4..6e203e4 100644 --- a/src/main/java/com/budwk/app/sys/services/impl/SysMsgServiceImpl.java +++ b/src/main/java/com/budwk/app/sys/services/impl/SysMsgServiceImpl.java @@ -67,60 +67,60 @@ public class SysMsgServiceImpl extends BaseServiceImpl implements SysMs @Override @Aop(TransAop.READ_COMMITTED) public Sys_msg saveMsg(Sys_msg sysMsg, String[] users, boolean isExternal) { - this.insert(sysMsg); - - Cnd cnd = Cnd.NEW(); - cnd.groupBy("loginname"); - FieldFilter fieldFilter = FieldFilter.create(View_user.class, "loginname|username|unitId|unitName|unionId|unionName"); - if ("user".equals(sysMsg.getType())) { - cnd.and(View_user::getLoginname, "in", users); - } - List viewUsers = Daos.ext(dao(), fieldFilter).query(View_user.class, cnd); - List list = new CopyOnWriteArrayList<>(); - for (View_user viewUser : viewUsers) { - Sys_msg_user sys_msg_user = new Sys_msg_user(); - sys_msg_user.setId(R.UU32()); - sys_msg_user.setMsgId(sysMsg.getId()); - sys_msg_user.setStatus(0); - sys_msg_user.setLoginname(viewUser.getLoginname()); - sys_msg_user.setUserName(viewUser.getUsername()); - sys_msg_user.setUnitId(viewUser.getUnitId()); - sys_msg_user.setUnitName(viewUser.getUnitName()); - sys_msg_user.setUnionId(viewUser.getUnionId()); - sys_msg_user.setUnionName(viewUser.getUnionName()); - list.add(sys_msg_user); - } - dao().fastInsert(list); - sysMsgUserService.clearCache(); - - List loginNames = viewUsers.stream().map(View_user::getLoginname).distinct().toList(); - //发送站内消息 - ThreadUtil.execute(() -> { - for (String loginName : loginNames) { - getMsg(loginName); - } - }); - - //发送学校平台消息 -// for (String loginName : loginNames) { -// smsService.send(loginName, sysMsg.getTitle(), sysMsg.getNote()); +// this.insert(sysMsg); +// +// Cnd cnd = Cnd.NEW(); +// cnd.groupBy("loginname"); +// FieldFilter fieldFilter = FieldFilter.create(View_user.class, "loginname|username|unitId|unitName|unionId|unionName"); +// if ("user".equals(sysMsg.getType())) { +// cnd.and(View_user::getLoginname, "in", users); // } - ThreadUtil.execute(() -> { - smsService.massSend(loginNames, sysMsg.getTitle(), HtmlUtil.cleanHtmlTag(StrUtil.blankToDefault(sysMsg.getNote(),"")), sysMsg.getUrl()); - }); +// List viewUsers = Daos.ext(dao(), fieldFilter).query(View_user.class, cnd); +// List list = new CopyOnWriteArrayList<>(); +// for (View_user viewUser : viewUsers) { +// Sys_msg_user sys_msg_user = new Sys_msg_user(); +// sys_msg_user.setId(R.UU32()); +// sys_msg_user.setMsgId(sysMsg.getId()); +// sys_msg_user.setStatus(0); +// sys_msg_user.setLoginname(viewUser.getLoginname()); +// sys_msg_user.setUserName(viewUser.getUsername()); +// sys_msg_user.setUnitId(viewUser.getUnitId()); +// sys_msg_user.setUnitName(viewUser.getUnitName()); +// sys_msg_user.setUnionId(viewUser.getUnionId()); +// sys_msg_user.setUnionName(viewUser.getUnionName()); +// list.add(sys_msg_user); +// } +// dao().fastInsert(list); +// sysMsgUserService.clearCache(); +// +// List loginNames = viewUsers.stream().map(View_user::getLoginname).distinct().toList(); +// //发送站内消息 +// ThreadUtil.execute(() -> { +// for (String loginName : loginNames) { +// getMsg(loginName); +// } +// }); +// +// //发送学校平台消息 +//// for (String loginName : loginNames) { +//// smsService.send(loginName, sysMsg.getTitle(), sysMsg.getNote()); +//// } +// ThreadUtil.execute(() -> { +// smsService.massSend(loginNames, sysMsg.getTitle(), HtmlUtil.cleanHtmlTag(StrUtil.blankToDefault(sysMsg.getNote(),"")), sysMsg.getUrl()); +// }); return sysMsg; } @Aop(TransAop.READ_COMMITTED) public void deleteMsg(String id) { - this.delete(id); - List msgUsers = sysMsgUserService.query(Cnd.where(Sys_msg_user::getMsgId, "=", id)); - sysMsgUserService.clear(Cnd.where("msgId", "=", id)); - sysMsgUserService.clearCache(); - for (Sys_msg_user msgUser : msgUsers) { - getMsg(msgUser.getLoginname()); - } +// this.delete(id); +// List msgUsers = sysMsgUserService.query(Cnd.where(Sys_msg_user::getMsgId, "=", id)); +// sysMsgUserService.clear(Cnd.where("msgId", "=", id)); +// sysMsgUserService.clearCache(); +// for (Sys_msg_user msgUser : msgUsers) { +// getMsg(msgUser.getLoginname()); +// } } @Override @@ -206,36 +206,36 @@ public class SysMsgServiceImpl extends BaseServiceImpl implements SysMs @Override @Async public void innerMsg(String room, int size, List list) { - NutMap map = new NutMap(); - map.put("action", "innerMsg"); - map.put("size", size);//未读消息数 - map.put("list", list);//最新5条消息列表 type--系统消息/用户消息 title--标题 time--时间戳 - String msg = Json.toJson(map, JsonFormat.compact()); - log.debug("msg::::" + msg); - if (jedisAgent.isClusterMode()) { - JedisCluster jedisCluster = jedisAgent.getJedisClusterWrapper().getJedisCluster(); - for (JedisPool pool : jedisCluster.getClusterNodes().values()) { - try (Jedis jedis = pool.getResource()) { - ScanParams match = new ScanParams().match(RedisConstant.REDIS_KEY_WSROOM + room + ":*"); - ScanResult scan = null; - do { - scan = jedis.scan(scan == null ? ScanParams.SCAN_POINTER_START : scan.getStringCursor(), match); - for (String key : scan.getResult()) { - pubSubService.fire(key, msg); - } - } while (!scan.isCompleteIteration()); - } - } - } else { - ScanParams match = new ScanParams().match(RedisConstant.REDIS_KEY_WSROOM + room + ":*"); - ScanResult scan = null; - do { - scan = redisService.scan(scan == null ? ScanParams.SCAN_POINTER_START : scan.getStringCursor(), match); - for (String key : scan.getResult()) { - pubSubService.fire(key, msg); - } - } while (!scan.isCompleteIteration()); - } +// NutMap map = new NutMap(); +// map.put("action", "innerMsg"); +// map.put("size", size);//未读消息数 +// map.put("list", list);//最新5条消息列表 type--系统消息/用户消息 title--标题 time--时间戳 +// String msg = Json.toJson(map, JsonFormat.compact()); +// log.debug("msg::::" + msg); +// if (jedisAgent.isClusterMode()) { +// JedisCluster jedisCluster = jedisAgent.getJedisClusterWrapper().getJedisCluster(); +// for (JedisPool pool : jedisCluster.getClusterNodes().values()) { +// try (Jedis jedis = pool.getResource()) { +// ScanParams match = new ScanParams().match(RedisConstant.REDIS_KEY_WSROOM + room + ":*"); +// ScanResult scan = null; +// do { +// scan = jedis.scan(scan == null ? ScanParams.SCAN_POINTER_START : scan.getStringCursor(), match); +// for (String key : scan.getResult()) { +// pubSubService.fire(key, msg); +// } +// } while (!scan.isCompleteIteration()); +// } +// } +// } else { +// ScanParams match = new ScanParams().match(RedisConstant.REDIS_KEY_WSROOM + room + ":*"); +// ScanResult scan = null; +// do { +// scan = redisService.scan(scan == null ? ScanParams.SCAN_POINTER_START : scan.getStringCursor(), match); +// for (String key : scan.getResult()) { +// pubSubService.fire(key, msg); +// } +// } while (!scan.isCompleteIteration()); +// } } @@ -247,71 +247,71 @@ public class SysMsgServiceImpl extends BaseServiceImpl implements SysMs @Override // @Async public void getMsg(String loginname) { - try { - //通过用户名查询未读消息 - int size = sysMsgUserService.getUnreadNum(loginname); - List list = sysMsgUserService.getUnreadList(loginname, 1, 5); - List mapList = new ArrayList<>(); - for (Sys_msg_user msgUser : list) { - String url = "/platform/sys/msg/user/all/detail/" + msgUser.getMsgId(); - if (Strings.isNotBlank(msgUser.getMsg().getUrl())) { - url = msgUser.getMsg().getUrl(); - } - mapList.add(NutMap.NEW() - .addv("msgId", msgUser.getMsgId()) - .addv("type", typeMap.getString(msgUser.getMsg().getType())) - .addv("title", msgUser.getMsg().getTitle()) - .addv("url", url) - .addv("time", Times.format("yyyy-MM-dd HH:mm", Times.D(1000 * msgUser.getMsg().getSendAt())))); - } - innerMsg(loginname, size, mapList); - } catch (Exception e) { - log.error(e.getMessage(), e); - } +// try { +// //通过用户名查询未读消息 +// int size = sysMsgUserService.getUnreadNum(loginname); +// List list = sysMsgUserService.getUnreadList(loginname, 1, 5); +// List mapList = new ArrayList<>(); +// for (Sys_msg_user msgUser : list) { +// String url = "/platform/sys/msg/user/all/detail/" + msgUser.getMsgId(); +// if (Strings.isNotBlank(msgUser.getMsg().getUrl())) { +// url = msgUser.getMsg().getUrl(); +// } +// mapList.add(NutMap.NEW() +// .addv("msgId", msgUser.getMsgId()) +// .addv("type", typeMap.getString(msgUser.getMsg().getType())) +// .addv("title", msgUser.getMsg().getTitle()) +// .addv("url", url) +// .addv("time", Times.format("yyyy-MM-dd HH:mm", Times.D(1000 * msgUser.getMsg().getSendAt())))); +// } +// innerMsg(loginname, size, mapList); +// } catch (Exception e) { +// log.error(e.getMessage(), e); +// } } @Override @Async public void offline(String room, String userToken) { - NutMap map = new NutMap(); - map.put("action", "offline"); - String msg = Json.toJson(map, JsonFormat.compact()); - try { - room = RedisConstant.REDIS_KEY_WSROOM + room + ":" + userToken; - log.debugf("offline room(name=%s)", room); - pubSubService.fire(room, msg); - redisService.expire(room, 60 * 3); - } catch (Exception e) { - log.error(e.getMessage(), e); - } +// NutMap map = new NutMap(); +// map.put("action", "offline"); +// String msg = Json.toJson(map, JsonFormat.compact()); +// try { +// room = RedisConstant.REDIS_KEY_WSROOM + room + ":" + userToken; +// log.debugf("offline room(name=%s)", room); +// pubSubService.fire(room, msg); +// redisService.expire(room, 60 * 3); +// } catch (Exception e) { +// log.error(e.getMessage(), e); +// } } @Override public void sendMsg(String loginname, String title, String body, String sender) { - sendMsg(List.of(loginname), title, body, SecurityUtil.getUserId()); +// sendMsg(List.of(loginname), title, body, SecurityUtil.getUserId()); } @Override public void sendMsg(List loginNames, String title, String body, String sender) { - Sys_msg sysMsg = new Sys_msg(); - sysMsg.setTitle(title); - sysMsg.setNote(body); - sysMsg.setSendType("hide"); - sysMsg.setType("user"); - sysMsg.setSendAt(Times.getTS()); - sysMsg.setCreatedBy(sender); - this.saveMsg(sysMsg, loginNames.toArray(new String[]{}), true); +// Sys_msg sysMsg = new Sys_msg(); +// sysMsg.setTitle(title); +// sysMsg.setNote(body); +// sysMsg.setSendType("hide"); +// sysMsg.setType("user"); +// sysMsg.setSendAt(Times.getTS()); +// sysMsg.setCreatedBy(sender); +// this.saveMsg(sysMsg, loginNames.toArray(new String[]{}), true); } @Override public void sendMsgInSys(List loginNames, String title, String body, String sender) { - Sys_msg sysMsg = new Sys_msg(); - sysMsg.setTitle(title); - sysMsg.setNote(body); - sysMsg.setSendType("hide"); - sysMsg.setType("user"); - sysMsg.setSendAt(Times.getTS()); - sysMsg.setCreatedBy(sender); - this.saveMsg(sysMsg, loginNames.toArray(new String[]{}), false); +// Sys_msg sysMsg = new Sys_msg(); +// sysMsg.setTitle(title); +// sysMsg.setNote(body); +// sysMsg.setSendType("hide"); +// sysMsg.setType("user"); +// sysMsg.setSendAt(Times.getTS()); +// sysMsg.setCreatedBy(sender); +// this.saveMsg(sysMsg, loginNames.toArray(new String[]{}), false); } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyActivityApplyController.java b/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyActivityApplyController.java index 7849fda..45eb3ce 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyActivityApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/controller/manage/FamilyActivityApplyController.java @@ -204,7 +204,7 @@ public class FamilyActivityApplyController { if(Lang.isEmpty(courseList)) { return Result.success(new ArrayList<>()); } - List assortList = courseList.stream().map(FamilyCourse::getAssort).filter(StrUtil::isNotBlank).toList(); + List assortList = courseList.stream().map(FamilyCourse::getAssort).filter(StrUtil::isNotBlank).distinct().toList(); return Result.success(assortList); } @@ -378,8 +378,12 @@ public class FamilyActivityApplyController { if(signFullByUnionId) { return Result.error(99,"该活动您所在的分工会名额不足"); } - familyActivityService.doSignUp(familyUser); - return Result.success("祝贺您!您已报名成功!请留意各分场活动的准确时间、地点,提前10-15分钟到达活动现场做好准备。如您因故不能参加活动,还请及时登录系统取消报名,以便将机会留给其他有需要的教职工。谢谢!"); + FamilyUser finishUser = familyActivityService.doSignUp(familyUser); + if(finishUser.getState() == 2) { + return Result.success("正式报名已满,您已列为替补,如有老师放弃报名,将会按先后顺序依次替补。请您自行关注后续结果。谢谢!"); + } else { + return Result.success("祝贺您!您已报名成功!请留意各分场活动的准确时间、地点,提前10-15分钟到达活动现场做好准备。如您因故不能参加活动,还请及时登录系统取消报名,以便将机会留给其他有需要的教职工。谢谢!"); + } } catch (Exception e) { e.printStackTrace(); return Result.error("报名失败"); @@ -407,7 +411,7 @@ public class FamilyActivityApplyController { cnd.and(new Static(" userId in (select id from user where unionid = '%s')".formatted(SecurityUtil.getUnionId()))); } cnd.asc("signUpTime"); - if (!type.getIsBringFamily() && course.getReserveMode() == 2) { + /*if (type.getIsBringFamily() && course.getReserveMode() == 2) { List signUpUsers = dao.query(FamilyUser.class, cnd); int thisSignUpUserCount = dao.count(FamilyUser.class, Cnd.where("activityId", "=", activityId) @@ -418,9 +422,8 @@ public class FamilyActivityApplyController { familyUser.setState(1); dao.update(familyUser); Sys_user user = dao.fetch(Sys_user.class, familyUser.getUserId()); - //msgApi.sendTextMsg("【" + activity.getActivityName() + "】已候补成功,请按时参加活动!", user.getLoginname()); } - } + }*/ //删除报名记录 dao.clear("family_user_course", Cnd.where("activityId", "=", activityId) .and("courseId", "=", courseId).and("userId", "=", userId)); diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/controller/statistics/FamilyActivityStatisticsController.java b/src/main/java/com/budwk/app/zhgh/activity/family/controller/statistics/FamilyActivityStatisticsController.java index 662ac6a..a9a617b 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/controller/statistics/FamilyActivityStatisticsController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/controller/statistics/FamilyActivityStatisticsController.java @@ -162,6 +162,17 @@ public class FamilyActivityStatisticsController { ts.activityId = @activityId """).setParam("activityId", activityId); List userList = familyActivityManageService.listMap(sql); + for (NutMap item : userList) { + if (item.getInt("state") == 1) { + item.setv("stateName", "正常报名"); + } else if (item.getInt("state") == 2) { + item.setv("stateName", "候补报名"); + } else if (item.getInt("state") == 3) { + item.setv("stateName", "正常报名(候补)"); + } else if (item.getInt("state") == 4) { + item.setv("stateName", "无效报名(缺席)"); + } + } List courseList = dao.query(FamilyCourse.class, Cnd.where("activityId", "=", activityId)); @@ -178,7 +189,8 @@ public class FamilyActivityStatisticsController { Map.of("name", "分工会", "key", "unionName"), Map.of("name", "性别", "key", "sex"), Map.of("name", "人事系统手机号", "key", "newMobile"), - Map.of("name", "报名时段", "key", "courseTime") + Map.of("name", "报名时段", "key", "courseTime"), + Map.of("name", "报名状态", "key", "stateName") ); List excelCommonExportEntity = basicEntity.stream().map(entity -> { diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/service/FamilyActivityService.java b/src/main/java/com/budwk/app/zhgh/activity/family/service/FamilyActivityService.java index 2849f0b..468aa59 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/service/FamilyActivityService.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/service/FamilyActivityService.java @@ -65,7 +65,7 @@ public interface FamilyActivityService extends BaseService { * 手机端报名 * @param familyUser 活动ID */ - void doSignUp(FamilyUser familyUser) throws Exception; + FamilyUser doSignUp(FamilyUser familyUser) throws Exception; /** * 异步插入每个报名成功人员的课程数据 diff --git a/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyActivityServiceImpl.java b/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyActivityServiceImpl.java index 74cc558..0134f58 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyActivityServiceImpl.java +++ b/src/main/java/com/budwk/app/zhgh/activity/family/service/impl/FamilyActivityServiceImpl.java @@ -244,7 +244,7 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl i @Override @Aop(TransAop.READ_COMMITTED) - public void doSignUp(FamilyUser familyUser) throws Exception { + public FamilyUser doSignUp(FamilyUser familyUser) throws Exception { String userId = SecurityUtil.getUserId(); //查询课程 @@ -256,8 +256,8 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl i //课程已报人数 int normalCount = statisticsService.queryCourseCount(course.getId(), course.getCourseType()); //+1是算自己 - int hasRegisterNum = type.getSelfAddFamily() ? normalCount + 1 : 0; - familyUser.setState((hasRegisterNum + course.getCourseReservedNumber()) > course.getCoursePeopleNumber() ? 2 : 1); + int hasRegisterNum = type.getSelfAddFamily() ? normalCount + 1 : normalCount; + familyUser.setState((hasRegisterNum + course.getCourseReservedNumber()) >= course.getCoursePeopleNumber() ? 2 : 1); } else { familyUser.setState(1); } @@ -287,6 +287,7 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl i } else { asyncInsertUserCourse(familyUser.getActivityId(), familyUser.getCourseId(), userId); } + return familyUser; } @Async @@ -408,6 +409,9 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl i List> currentValue = user.getMobileColumnsValue(); + List aa = List.of("b44a39b7962a43328f2ca59330ef9cc5"); + List bb = List.of("edbd44528da3465dbeb711421fe2ae63", "636c7f75d32f4413b8254e412db9770e", "baabdff339e447308f4759add2017c90"); + String tempValue = ""; // 循环家属 for (List listMap : currentValue) { @@ -438,6 +442,12 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl i if(Objects.equals(courseMap.get(user.getCourseId()), courseMap.get(hisRecord.getCourseId()))) { return Map.of(false, onlyKeyValue + "已经报名" + typeMap.get(courseMap.get(user.getCourseId())) + "分场"); } + if(aa.contains(user.getCourseId()) && bb.contains(hisRecord.getCourseId())) { + return Map.of(false, onlyKeyValue + "已经报名" + typeMap.get(courseMap.get(hisRecord.getCourseId())) + "分场,存在冲突"); + } + if(bb.contains(user.getCourseId()) && aa.contains(hisRecord.getCourseId())) { + return Map.of(false, onlyKeyValue + "已经报名" + typeMap.get(courseMap.get(hisRecord.getCourseId())) + "分场,存在冲突"); + } } } } diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/mobile/TrainScanCodeController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/mobile/TrainScanCodeController.java index d5abd3c..1b0ca2c 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/mobile/TrainScanCodeController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/mobile/TrainScanCodeController.java @@ -7,6 +7,7 @@ import com.aspose.slides.internal.og.add; import com.budwk.app.base.result.Result; import com.budwk.app.sys.models.Sys_user; import com.budwk.app.web.commons.auth.utils.SecurityUtil; +import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpActivity; import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpCourse; import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUser; import com.budwk.app.zhgh.activity.trainSignUp.models.TrainSignUpUserCourse; @@ -54,6 +55,12 @@ public class TrainScanCodeController { } TrainSignUpCourse course = dao.fetch(TrainSignUpCourse.class, courseId); + TrainSignUpActivity activity = dao.fetch(TrainSignUpActivity.class, course.getActivityId()); + + if(!(DateUtil.date().isAfter(activity.getActivityStartTime()) && DateUtil.date().isBefore(activity.getActivityEndTime()))) { + return Result.error(99, "不在活动时间范围内"); + } + int count = dao.count(TrainSignUpUserCourse.class, Cnd.where("activityId", "=", course.getActivityId()) .and("userId", "=", SecurityUtil.getUserId()) diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinApplyController.java b/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinApplyController.java index f9af27a..aa60855 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinApplyController.java @@ -87,18 +87,30 @@ public class ClubUserJoinApplyController { @SaCheckPermission("club.join.apply") @Aop(TransAop.READ_COMMITTED) public Result submit(ClubUserApply clubUserApply) { + Sys_user user = dao.fetch(Sys_user.class, Cnd.where("id", "=", clubUserApply.getUserId())); + if (!user.getMember() && !("劳务派遣一类".equals(user.getPreparedBy()) || "劳务派遣二类".equals(user.getPreparedBy()))) return Result.error("暂无申请加入协会资格!"); + ClubUserApply userApply = dao.fetch(ClubUserApply.class, Cnd.where("userId", "=", clubUserApply.getUserId()).and("clubId", "=", clubUserApply.getClubId()).and("mode", "=", 1).desc(ClubUserApply::getApplyDate)); - if (ObjectUtil.isNotEmpty(userApply) && StrUtil.isBlank(userApply.getId())) { + if (ObjectUtil.isNotEmpty(userApply) && StrUtil.isNotBlank(userApply.getId())) { BpmProcessInstance processInstance = dao.fetch(BpmProcessInstance.class, Cnd.where(BpmProcessInstance::getProcessInstanceBusinessId, "=", userApply.getId())); if (!processInstance.getProcessInstanceStatus().equals(BpmProcessInstanceStatusEnum.COMPLETED.name())) { return Result.error("您有该协会的申请记录尚未完成,请到我的申请里查看!"); } } - //查询协会操作员 + ClubUser clubUser = dao.fetch(ClubUser.class, Cnd.where("userId", "=", clubUserApply.getUserId()) + .and("clubId", "=", clubUserApply.getClubId())); + if (ObjectUtil.isNotEmpty(clubUser)) { + return Result.error("您已经是该协会成员,无需重复申请!"); + } + + //查询协会操作员、会长、秘书长、副会长 String operatorLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.CLUB_OPERATOR, Cnd.where(Sys_user_role::getClubId, "=", clubUserApply.getClubId())); String presidentLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.CLUB_PRESIDENT, Cnd.where(Sys_user_role::getClubId, "=", clubUserApply.getClubId())); - if (StrUtil.isAllBlank(operatorLoginName, presidentLoginName)) { + String secretaryLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.CLUB_SECRETARY, Cnd.where(Sys_user_role::getClubId, "=", clubUserApply.getClubId())); + String vicePresidentLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.CLUB_VICE_PRESIDENT, Cnd.where(Sys_user_role::getClubId, "=", clubUserApply.getClubId())); + + if (StrUtil.isAllBlank(operatorLoginName, presidentLoginName, secretaryLoginName, vicePresidentLoginName)) { return Result.error("该协会未配置审批人,请联系校工会!"); } @@ -109,15 +121,31 @@ public class ClubUserJoinApplyController { Sys_user applyUser = dao.fetch(Sys_user.class, clubUserApply.getUserId()); + List assignments = new ArrayList<>(); if (StrUtil.isNotBlank(operatorLoginName)) { - bpmService.startSubmitProcessInstance(BpmProcessConstant.CLUB_JOIN.name(), applyUser.getUsername() + "的申请", clubUserApply.getId(), List.of(operatorLoginName), null); - // 发送消息 - sysMsgService.sendMsg(operatorLoginName, "协会入会审核", "您有一条新的协会入会申请待处理,请登录暖心工会进行审批。", SecurityUtil.getUserId()); - }else{ - bpmService.startSubmitProcessInstance(BpmProcessConstant.CLUB_JOIN.name(), applyUser.getUsername() + "的申请", clubUserApply.getId(), List.of(presidentLoginName), null); - // 发送消息 - sysMsgService.sendMsg(presidentLoginName, "协会入会审核", "您有一条新的协会入会申请待处理,请登录暖心工会进行审批。", SecurityUtil.getUserId()); + assignments.add(operatorLoginName); } + if (StrUtil.isNotBlank(secretaryLoginName)) { + assignments.add(secretaryLoginName); + } + if (StrUtil.isNotBlank(vicePresidentLoginName)) { + assignments.add(vicePresidentLoginName); + } + if (StrUtil.isNotBlank(presidentLoginName)) { + assignments.add(presidentLoginName); + } + + bpmService.startSubmitProcessInstance(BpmProcessConstant.CLUB_JOIN.name(), applyUser.getUsername() + "的申请", clubUserApply.getId(), assignments, null); + +// if (StrUtil.isNotBlank(operatorLoginName)) { +// bpmService.startSubmitProcessInstance(BpmProcessConstant.CLUB_JOIN.name(), applyUser.getUsername() + "的申请", clubUserApply.getId(), List.of(operatorLoginName), null); +// // 发送消息 +//// sysMsgService.sendMsg(operatorLoginName, "协会入会审核", "您有一条新的协会入会申请待处理,请登录暖心工会进行审批。", SecurityUtil.getUserId()); +// }else{ +// bpmService.startSubmitProcessInstance(BpmProcessConstant.CLUB_JOIN.name(), applyUser.getUsername() + "的申请", clubUserApply.getId(), List.of(presidentLoginName), null); +// // 发送消息 +//// sysMsgService.sendMsg(presidentLoginName, "协会入会审核", "您有一条新的协会入会申请待处理,请登录暖心工会进行审批。", SecurityUtil.getUserId()); +// } return Result.success(); } diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinApprovalController.java b/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinApprovalController.java index 54735e6..42bc1c7 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinApprovalController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinApprovalController.java @@ -7,17 +7,22 @@ import com.budwk.app.base.page.Pagination; import com.budwk.app.base.result.Result; import com.budwk.app.bpm.enums.BpmProcessTaskStatusEnum; import com.budwk.app.bpm.enums.BpmTaskApprovalTypeEnum; +import com.budwk.app.bpm.models.BpmProcessInstance; +import com.budwk.app.bpm.models.BpmProcessTask; import com.budwk.app.bpm.param.BpmTaskApprovalParam; import com.budwk.app.bpm.service.BpmService; import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.web.controllers.open.commons.service.CommonService; +import com.budwk.app.zhgh.club.model.ClubUser; +import com.budwk.app.zhgh.club.model.ClubUserApply; import com.budwk.app.zhgh.club.param.ClubUserJoinPageForm; import com.budwk.app.zhgh.club.service.ClubUserJoinService; import com.budwk.app.zhgh.club.vo.ClubUserJoinPageVo; import io.swagger.annotations.ApiOperation; 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.dao.util.cri.Static; @@ -44,6 +49,8 @@ public class ClubUserJoinApprovalController { private BpmService bpmService; @Inject private ClubUserJoinService clubUserJoinService; + @Inject + private Dao dao; @At("") @SaCheckPermission("club.join.clubApproval") @@ -100,6 +107,7 @@ public class ClubUserJoinApprovalController { cnd.and(Cnd.likeEX("u.loginName", pageForm.getLoginName())); cnd.andEX("u.unionId","=",pageForm.getUnionId()); cnd.andEX("u.unitId","=",pageForm.getUnitId()); + cnd.andEX("info.clubId","=",pageForm.getClubId()); sql.setCondition(cnd); Pagination pageVO = clubUserJoinService.listPageVO(pageForm, sql, ClubUserJoinPageVo.class); @@ -111,14 +119,31 @@ public class ClubUserJoinApprovalController { @ApiOperation("审核") @Aop(TransAop.READ_COMMITTED) public Result approval(@Valid @Param("approval") BpmTaskApprovalParam approvalParam){ - approvalParam.getBpmTaskApprovalTypeEnum(); +// approvalParam.getBpmTaskApprovalTypeEnum(); +// Map variables = BeanUtil.beanToMap(approvalParam); +// List assignments = new ArrayList<>(); +// if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){ +// String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_CLUB_ADMIN); +// assignments.add(approvalLoginName); +// } +// bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments); + + Map variables = BeanUtil.beanToMap(approvalParam); List assignments = new ArrayList<>(); - if(approvalParam.getBpmTaskApprovalTypeEnum().equals(BpmTaskApprovalTypeEnum.PASS)){ - String approvalLoginName = commonService.findUserLoginNameByRoleCode(RoleConstant.SCHOOL_UNION_CLUB_ADMIN); - assignments.add(approvalLoginName); - } bpmService.completeTask(approvalParam.getProcessInstanceTaskId(), approvalParam.getBpmTaskApprovalTypeEnum(), variables, assignments); + + if (approvalParam.getBpmTaskApprovalTypeEnum() == BpmTaskApprovalTypeEnum.PASS) { + String processInstanceBusinessId = approvalParam.getProcessInstanceBusinessId(); + ClubUserApply clubUserApply = dao.fetch(ClubUserApply.class, processInstanceBusinessId); + if (clubUserApply != null) { + ClubUser existUser = dao.fetch(ClubUser.class, Cnd.where("userId", "=", clubUserApply.getUserId()).and("clubId", "=", clubUserApply.getClubId())); + if (existUser == null) { + ClubUser clubUser = BeanUtil.copyProperties(clubUserApply, ClubUser.class); + dao.insert(clubUser); + } + } + } return Result.success(); } @@ -128,6 +153,15 @@ public class ClubUserJoinApprovalController { @Aop(TransAop.READ_COMMITTED) public Result revoke(@Valid String taskId){ bpmService.revokeTask(taskId); + + BpmProcessTask task = dao.fetch(BpmProcessTask.class, taskId); + String processInstanceId = task.getProcessInstanceId(); + BpmProcessInstance processInstance = dao.fetch(BpmProcessInstance.class, processInstanceId); + String businessId = processInstance.getProcessInstanceBusinessId(); + + ClubUserApply clubUserApply = dao.fetch(ClubUserApply.class, businessId); + dao.clear(ClubUser.class, Cnd.where(ClubUser::getUserId, "=", clubUserApply.getUserId()) + .and(ClubUser::getClubId, "=", clubUserApply.getClubId())); return Result.success(); } diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinMineController.java b/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinMineController.java index bddb7fd..98b7be9 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinMineController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/apply/ClubUserJoinMineController.java @@ -11,6 +11,7 @@ import com.budwk.app.web.commons.auth.utils.AuthUtil; import com.budwk.app.web.commons.auth.utils.SecurityUtil; import com.budwk.app.zhgh.club.model.ClubUser; import com.budwk.app.zhgh.club.model.ClubUserApply; +import com.budwk.app.zhgh.club.param.ClubUserJoinPageForm; import io.swagger.annotations.ApiOperation; import org.nutz.aop.interceptor.ioc.TransAop; import org.nutz.dao.Cnd; @@ -47,7 +48,7 @@ public class ClubUserJoinMineController { @At @SaCheckPermission("club.join.mine") - public Result pageData(@Valid PageForm pageForm, + public Result pageData(@Valid ClubUserJoinPageForm pageForm, @Param("year") Integer year){ Sql sql = Sqls.create(""" SELECT @@ -81,6 +82,8 @@ public class ClubUserJoinMineController { cnd.and("inst.processInstanceInitiatorLoginName", "=", SecurityUtil.getUserLoginname()); } cnd.andEX("year(info.applyDate)", "=", year); + cnd.and(Cnd.likeEX("u.userName", pageForm.getUserName())); + cnd.and(Cnd.likeEX("u.loginName", pageForm.getLoginName())); cnd.groupBy("info.id"); sql.setCondition(cnd); Pagination pagination = baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql); diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubInfoManageController.java b/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubInfoManageController.java index 18178b2..aa271a0 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubInfoManageController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/infoManage/ClubInfoManageController.java @@ -335,22 +335,24 @@ public class ClubInfoManageController { @SaCheckPermission("club.infoManage.manage") @ApiOperation("授权") public Result doAuthRole(@Valid String id, @Valid String clubId, @Param("roleCode") @Valid String[] roleCodes) { - List roleCodeList = Arrays.asList(roleCodes); - //查询社团是否存在会长或者秘书长 - if(Arrays.asList(roleCodes).contains(RoleConstant.CLUB_PRESIDENT.name())) { - int count = dao.count(ClubUser.class, Cnd.where("clubId", "=", clubId) - .and(new Static("JSON_CONTAINS(roleCode, '\"%s\"')".formatted(RoleConstant.CLUB_PRESIDENT.name())))); - if (count > 0) { - return Result.error("会长只能有一位"); - } - } - if(Arrays.asList(roleCodes).contains(RoleConstant.CLUB_SECRETARY.name())) { - int count = dao.count(ClubUser.class, Cnd.where("clubId", "=", clubId) - .and(new Static("JSON_CONTAINS(roleCode, '\"%s\"')".formatted(RoleConstant.CLUB_SECRETARY.name())))); - if (count > 0) { - return Result.error("秘书长只能有一位"); - } - } + List roleCodeList = Arrays.asList(roleCodes); + //查询社团是否存在会长或者秘书长 + if(Arrays.asList(roleCodes).contains(RoleConstant.CLUB_PRESIDENT.name())) { + int count = dao.count(ClubUser.class, Cnd.where("clubId", "=", clubId) + .and(new Static("JSON_CONTAINS(roleCode, '\"%s\"')".formatted(RoleConstant.CLUB_PRESIDENT.name()))) + .and("id", "!=", id)); + if (count > 0) { + return Result.error("会长只能有一位"); + } + } + if(Arrays.asList(roleCodes).contains(RoleConstant.CLUB_SECRETARY.name())) { + int count = dao.count(ClubUser.class, Cnd.where("clubId", "=", clubId) + .and(new Static("JSON_CONTAINS(roleCode, '\"%s\"')".formatted(RoleConstant.CLUB_SECRETARY.name()))) + .and("id", "!=", id)); + if (count > 0) { + return Result.error("秘书长只能有一位"); + } + } ClubUser clubUser = clubInfoManageService.dao().fetch(ClubUser.class, id); diff --git a/src/main/java/com/budwk/app/zhgh/club/controller/statistics/ClubStatisticsController.java b/src/main/java/com/budwk/app/zhgh/club/controller/statistics/ClubStatisticsController.java index abecf08..69a3553 100644 --- a/src/main/java/com/budwk/app/zhgh/club/controller/statistics/ClubStatisticsController.java +++ b/src/main/java/com/budwk/app/zhgh/club/controller/statistics/ClubStatisticsController.java @@ -6,8 +6,10 @@ import cn.afterturn.easypoi.excel.entity.enmus.ExcelType; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.URLUtil; import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.budwk.app.base.constant.RoleConstant; import com.budwk.app.base.page.Pagination; import com.budwk.app.base.param.PageForm; @@ -45,6 +47,7 @@ import javax.validation.Valid; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.InputStream; +import java.net.URLEncoder; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -227,6 +230,85 @@ public class ClubStatisticsController { zipOutputStream.close(); } + @At + @Ok("void") + @SaCheckPermission("club.statistics") + public void exportExcel(String clubId, + String userState, + String sex, + HttpServletResponse response) throws IOException { + Sql sql = Sqls.create(""" + SELECT + u.username as userName, + u.loginname as loginName, + u.sex, + u.mobile, + u.unitname as unitName, + u.userstate as userState, + c.*, + sc.clubName as clubName + FROM + club_user c + INNER JOIN `vw_user` u ON u.id = c.userId + LEFT JOIN sys_club sc ON c.clubId = sc.id + $condition + ORDER BY + sc.clubName, + CASE + WHEN JSON_CONTAINS(c.roleCode, '"CLUB_PRESIDENT"') THEN 1 + WHEN JSON_CONTAINS(c.roleCode, '"CLUB_VICE_PRESIDENT"') THEN 2 + WHEN JSON_CONTAINS(c.roleCode, '"CLUB_SECRETARY"') THEN 3 + WHEN JSON_CONTAINS(c.roleCode, '"CLUB_VICE_SECRETARY"') THEN 4 + WHEN JSON_CONTAINS(c.roleCode, '"CLUB_MEMBER"') THEN 5 + ELSE 99 + END + """); + + Cnd cnd = Cnd.NEW(); + if (!AuthUtil.hasRoleOr(RoleConstant.SYSADMIN.name(), + RoleConstant.SCHOOL_UNION_ADMIN.name(), + RoleConstant.SCHOOL_UNION_CLUB_ADMIN.name())) { + Sys_role sysRole = sysRoleService.getByCode(RoleConstant.CLUB_PRESIDENT); + List userRoles = sysClubService.dao().query(Sys_user_role.class, + Cnd.where("userId", "=", SecurityUtil.getUserId()) + .and("roleId", "=", sysRole.getId())); + List myClubId = userRoles.stream().map(Sys_user_role::getClubId).toList(); + cnd.and("c.clubId", "in", myClubId); + } + + if (StrUtil.isNotBlank(clubId)) { + cnd.andEX("c.clubId", "=", clubId); + } + cnd.andEX("u.userState", "=", userState); + cnd.andEX("u.sex", "=", sex); + + sql.setCondition(cnd); + + List listMap = sysClubService.listMap(sql); + for (NutMap nutMap : listMap) { + List list = JSONUtil.toList(nutMap.getString("roleCode"), String.class); + String roleName = SysClubUserServiceImpl.convertRoleName(list); + nutMap.put("roleName", roleName); + nutMap.put("roleCode", list); + + } + + List exportEntities = new ArrayList<>(); + exportEntities.add(new ExcelExportEntity("协会名称", "clubName", 20)); + exportEntities.add(new ExcelExportEntity("姓名", "userName", 20)); + exportEntities.add(new ExcelExportEntity("工号", "loginName", 20)); + exportEntities.add(new ExcelExportEntity("性别", "sex", 20)); + exportEntities.add(new ExcelExportEntity("联系方式", "mobile", 20)); + exportEntities.add(new ExcelExportEntity("所在单位", "unitName", 20)); + exportEntities.add(new ExcelExportEntity("在职状态", "userState", 20)); + exportEntities.add(new ExcelExportEntity("职务", "roleName", 20)); + + ExportParams exportParams = new ExportParams(); + exportParams.setType(ExcelType.XSSF); + Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, listMap); + CommonDownloadUtil.download("社团人员明细.xlsx", workbook, response); + } + @At @Ok("void") @SaCheckPermission("club.statistics") diff --git a/src/main/java/com/budwk/app/zhgh/club/param/ClubUserJoinPageForm.java b/src/main/java/com/budwk/app/zhgh/club/param/ClubUserJoinPageForm.java index 1fab84f..ddedb8c 100644 --- a/src/main/java/com/budwk/app/zhgh/club/param/ClubUserJoinPageForm.java +++ b/src/main/java/com/budwk/app/zhgh/club/param/ClubUserJoinPageForm.java @@ -13,5 +13,6 @@ public class ClubUserJoinPageForm extends PageForm { private String userName; private String unionId; private String unitId; + private String clubId; } diff --git a/src/main/resources/static/components/module/trainSignUp/TrainDynamicForm.vue b/src/main/resources/static/components/module/trainSignUp/TrainDynamicForm.vue index d1fca8b..c3c9f2e 100644 --- a/src/main/resources/static/components/module/trainSignUp/TrainDynamicForm.vue +++ b/src/main/resources/static/components/module/trainSignUp/TrainDynamicForm.vue @@ -28,6 +28,7 @@ v-if="['SELECT'].includes(column.columnFormType)" v-model="pickerStates[column.columnCode + 'Picker']" position="bottom" + get-container="body" >