From 626b3a0713f10ccad4d66e09bdcc971fc98c70b3 Mon Sep 17 00:00:00 2001 From: zhouhefeng Date: Thu, 16 Jul 2026 10:07:52 +0800 Subject: [PATCH] commit --- .../sys/services/impl/SysUserServiceImpl.java | 2 +- .../TheRapyRecuperationEnrollController.java | 2 + .../TheRapyRecuperationBaseManagement.java | 5 ++ .../TheRapyRecuperationEnrollService.java | 7 +++ .../TheRapyRecuperationEnrollServiceImpl.java | 50 +++++++++++++++++++ .../baseManage/baseManagement.html | 17 ++++++- 6 files changed, 80 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/v/nutz/sys/services/impl/SysUserServiceImpl.java b/src/main/java/io/v/nutz/sys/services/impl/SysUserServiceImpl.java index 56edd62..c8aaf04 100644 --- a/src/main/java/io/v/nutz/sys/services/impl/SysUserServiceImpl.java +++ b/src/main/java/io/v/nutz/sys/services/impl/SysUserServiceImpl.java @@ -64,7 +64,7 @@ public class SysUserServiceImpl extends BaseServiceImpl implements Sys * @param user * @return */ - @CacheResult(cacheKey = "${args[0].id}_getRoleCodeList") +// @CacheResult(cacheKey = "${args[0].id}_getRoleCodeList") public List getRoleCodeList(Sys_user user) { dao().fetchLinks(user, "roles"); List roleNameList = new ArrayList(); diff --git a/src/main/java/io/v/nutz/zhgh/therapyRecuperation/controller/process/TheRapyRecuperationEnrollController.java b/src/main/java/io/v/nutz/zhgh/therapyRecuperation/controller/process/TheRapyRecuperationEnrollController.java index 086c7c7..c6dff08 100644 --- a/src/main/java/io/v/nutz/zhgh/therapyRecuperation/controller/process/TheRapyRecuperationEnrollController.java +++ b/src/main/java/io/v/nutz/zhgh/therapyRecuperation/controller/process/TheRapyRecuperationEnrollController.java @@ -248,6 +248,8 @@ public class TheRapyRecuperationEnrollController { @RequiresAuthentication @Aop(TransAop.READ_COMMITTED) public Object doSignUpForBaseManagement(@Param("enroll") TheRapyRecuperationEnroll enrollInfo) { + // 行锁会持续到当前事务结束,保证同一目的地的人数校验与保存不会并发执行。 + enrollService.lockBaseManagementForSignUp(enrollInfo.getTakePartInBaseManagementId()); Sys_config config = dao.fetch(Sys_config.class, Cnd.where("configKey", "=", "recuperationVersion")); Map resultMap = new HashMap<>(); if("zjxu".equals(config.getConfigValue())) { diff --git a/src/main/java/io/v/nutz/zhgh/therapyRecuperation/model/TheRapyRecuperationBaseManagement.java b/src/main/java/io/v/nutz/zhgh/therapyRecuperation/model/TheRapyRecuperationBaseManagement.java index bc8006e..2de849a 100644 --- a/src/main/java/io/v/nutz/zhgh/therapyRecuperation/model/TheRapyRecuperationBaseManagement.java +++ b/src/main/java/io/v/nutz/zhgh/therapyRecuperation/model/TheRapyRecuperationBaseManagement.java @@ -117,6 +117,11 @@ public class TheRapyRecuperationBaseManagement { @Excel(name = "预计费用") private String estimatedCost; + @Column + @ColDefine(type = ColType.INT) + @Comment("最大报名人数") + private Integer maxApplyNum; + @Column @ColDefine(type = ColType.MYSQL_JSON) @Comment("缩略图") diff --git a/src/main/java/io/v/nutz/zhgh/therapyRecuperation/service/TheRapyRecuperationEnrollService.java b/src/main/java/io/v/nutz/zhgh/therapyRecuperation/service/TheRapyRecuperationEnrollService.java index cd13264..f5c3a50 100644 --- a/src/main/java/io/v/nutz/zhgh/therapyRecuperation/service/TheRapyRecuperationEnrollService.java +++ b/src/main/java/io/v/nutz/zhgh/therapyRecuperation/service/TheRapyRecuperationEnrollService.java @@ -64,6 +64,13 @@ public interface TheRapyRecuperationEnrollService extends ViService validBaseMaxApplyNum(TheRapyRecuperationEnroll enrollInfo, + TheRapyRecuperationBaseManagement baseManagement) { + Integer maxApplyNum = baseManagement.getMaxApplyNum(); + // 兼容尚未维护最大报名人数的历史目的地,避免旧数据无法继续报名。 + if (maxApplyNum == null || maxApplyNum <= 0) { + return null; + } + + Cnd cnd = Cnd.where("takePartInBaseManagementId", "=", baseManagement.getId()) + .and("isNormal", "=", true) + .and("stateId", "not in", Lang.array(TheRapyRecuperationState.UNITFAIL, + TheRapyRecuperationState.LINEUNITFAIL, TheRapyRecuperationState.SCHOOLFAIL)); + // 编辑或改报时排除原报名记录,防止当前报名人被重复计入名额。 + cnd.andEX("id", "!=", enrollInfo.getId()); + cnd.andEX("id", "!=", enrollInfo.getEditOther()); + int appliedNum = dao().count(TheRapyRecuperationEnroll.class, cnd); + if (appliedNum >= maxApplyNum) { + return Map.of(false, "该目的地报名人数已满,最大报名人数为" + maxApplyNum + "人"); + } + return null; + } + /** * 验证报名登记信息 * @@ -583,6 +625,10 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl 0) { return Map.of(false, "报名时间已过,抱歉不能报名"); } + Map maxApplyNumResult = validBaseMaxApplyNum(enrollInfo, baseManagement); + if (maxApplyNumResult != null) { + return maxApplyNumResult; + } } if (StrUtil.isBlank(enrollInfo.getId())) { @@ -1221,6 +1267,10 @@ public class TheRapyRecuperationEnrollServiceImpl extends ViServiceImpl 0) { return Map.of(false, "报名时间已过,抱歉不能报名"); } + Map maxApplyNumResult = validBaseMaxApplyNum(enrollInfo, baseManagement); + if (maxApplyNumResult != null) { + return maxApplyNumResult; + } } diff --git a/src/main/resources/views/platform/theRapyRecuperation/baseManage/baseManagement.html b/src/main/resources/views/platform/theRapyRecuperation/baseManage/baseManagement.html index d081427..5c213d2 100644 --- a/src/main/resources/views/platform/theRapyRecuperation/baseManage/baseManagement.html +++ b/src/main/resources/views/platform/theRapyRecuperation/baseManage/baseManagement.html @@ -276,7 +276,7 @@ layout("/layouts/platform.html"){ - + - + + + + + + @@ -320,6 +330,7 @@ layout("/layouts/platform.html"){ + @@ -479,6 +490,7 @@ layout("/layouts/platform.html"){ files: [], createMode: '', estimatedCost: '', + maxApplyNum: null, activityStartTime: '', activityEndTime: '', baseContactPerson: '', @@ -515,6 +527,7 @@ layout("/layouts/platform.html"){ activityStartTime: [{ required: true, validator: validateActivityStartTime, trigger: ['change', 'blur'] }], activityEndTime: [{ required: true, validator: validateActivityEndTime, trigger: ['change', 'blur'] }], estimatedCost: [{required: true, message: '请输入预计费用', trigger: ['change', 'blur']}], + maxApplyNum: [{required: true, message: '请输入最大报名人数', trigger: ['change', 'blur']}], }, //目的地导入 importVisible: false,