From 52d5591d111ea826b8c7bf3e9fc8273a3130f2c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B0=8C=E5=85=88=E8=88=9C?= <2499071264@qq.com> Date: Fri, 11 Sep 2026 14:23:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E6=B4=BB=E5=8A=A8?= =?UTF-8?q?=E4=BA=BA=E6=95=B0=E9=99=90=E5=88=B62?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/TrainSignUpAdjustController.java | 24 ++++++++++++++ .../manage/TrainSignUpApplyController.java | 3 ++ ...ainSignUpActivityStatisticsController.java | 23 +++++++++++++ .../activity/trainSignUp/apply/courseList.js | 31 ++++++++++++++++- .../trainSignUp/statistics/index.html | 11 ++----- .../trainSignUp/userAdjust/index.html | 11 ++----- .../trainSignUp/userAdjust/userInfo.js | 4 +-- .../activity/trainSignUp/list/applyForm.js | 21 ++++++++++-- .../activity/trainSignUp/list/index.html | 33 ++++++++++++++++++- 9 files changed, 139 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpAdjustController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpAdjustController.java index 998a9c1..0ce93bd 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpAdjustController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpAdjustController.java @@ -73,6 +73,7 @@ public class TrainSignUpAdjustController { public Result pageData(PageForm pageForm, @Param(value = "activityId") String activityId) { Pagination pagination = trainSignUpActivityStatisticsService.pageData(pageForm, activityId); + fillMaxPeopleNumber(pagination.getList()); return Result.success(pagination); } @@ -103,9 +104,32 @@ public class TrainSignUpAdjustController { c.put("registerNum", trainSignUpActivityStatisticsService.queryCourseCount(c.getString("id"), c.getString("courseType"))); c.put("hasWaitingNum", trainSignUpActivityStatisticsService.queryCourseWaitCount(c.getString("id"), c.getString("courseType"))); }); + fillMaxPeopleNumber(courseList); return Result.success(courseList); } + private void fillMaxPeopleNumber(List rows) { + if (rows == null || rows.isEmpty()) return; + List courseIds = rows.stream().map(v -> v.getString("id")).toList(); + List courses = dao.query(TrainSignUpCourse.class, Cnd.where("id", "in", courseIds)); + List times = dao.query(TrainSignUpActivityCourse.class, Cnd.where("courseId", "in", courseIds)); + NutMap maximums = NutMap.NEW(); + for (TrainSignUpCourse course : courses) { + Long maximum = course.getCoursePeopleNumber() > 0 ? (long) course.getCoursePeopleNumber() : null; + if (Boolean.TRUE.equals(course.getCourseIsLimitApply())) { + long timeTotal = times.stream().filter(v -> course.getId().equals(v.getCourseId())) + .mapToLong(v -> v.getCourseLimitNum() == null ? 0 : v.getCourseLimitNum()).sum(); + maximum = maximum == null ? timeTotal : Math.min(maximum, timeTotal); + } + if (course.getUnionLimit() != null && !course.getUnionLimit().isEmpty()) { + long unionTotal = course.getUnionLimit().stream().mapToLong(v -> v.getInt("limitCount", 0)).sum(); + maximum = maximum == null ? unionTotal : Math.min(maximum, unionTotal); + } + maximums.put(course.getId(), maximum); + } + rows.forEach(v -> v.put("maxPeopleNumber", maximums.get(v.getString("id")))); + } + @At @ApiOperation("报名用户列表") @SaCheckPermission("trainSignUp.adjust") diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpApplyController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpApplyController.java index 621f3c2..4566842 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpApplyController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/manage/TrainSignUpApplyController.java @@ -194,6 +194,9 @@ public class TrainSignUpApplyController { } } } + Date now = new Date(); + c.put("allTimesExpired", !courseTimes.isEmpty() && courseTimes.stream() + .allMatch(v -> v.getCourseEndTime() != null && !v.getCourseEndTime().after(now))); }); return Result.success(pagination); } diff --git a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java index f507631..1c2a9d5 100644 --- a/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java +++ b/src/main/java/com/budwk/app/zhgh/activity/trainSignUp/controller/statistics/TrainSignUpActivityStatisticsController.java @@ -70,6 +70,28 @@ public class TrainSignUpActivityStatisticsController { @Inject private Dao dao; + private void fillMaxPeopleNumber(List rows) { + if (rows == null || rows.isEmpty()) return; + List courseIds = rows.stream().map(v -> v.getString("id")).toList(); + List courses = dao.query(TrainSignUpCourse.class, Cnd.where("id", "in", courseIds)); + List times = dao.query(TrainSignUpActivityCourse.class, Cnd.where("courseId", "in", courseIds)); + NutMap maximums = NutMap.NEW(); + for (TrainSignUpCourse course : courses) { + Long maximum = course.getCoursePeopleNumber() > 0 ? (long) course.getCoursePeopleNumber() : null; + if (Boolean.TRUE.equals(course.getCourseIsLimitApply())) { + long timeTotal = times.stream().filter(v -> course.getId().equals(v.getCourseId())) + .mapToLong(v -> v.getCourseLimitNum() == null ? 0 : v.getCourseLimitNum()).sum(); + maximum = maximum == null ? timeTotal : Math.min(maximum, timeTotal); + } + if (course.getUnionLimit() != null && !course.getUnionLimit().isEmpty()) { + long unionTotal = course.getUnionLimit().stream().mapToLong(v -> v.getInt("limitCount", 0)).sum(); + maximum = maximum == null ? unionTotal : Math.min(maximum, unionTotal); + } + maximums.put(course.getId(), maximum); + } + rows.forEach(v -> v.put("maxPeopleNumber", maximums.get(v.getString("id")))); + } + @At("") @SaCheckPermission("trainSignUp.statistics") @Ok("beetl:/platform/zhgh/activity/trainSignUp/statistics/index.html") @@ -82,6 +104,7 @@ public class TrainSignUpActivityStatisticsController { public Result pageData(PageForm pageForm, @Param(value = "activityId") String activityId) { Pagination pagination = trainSignUpActivityStatisticsService.pageData(pageForm, activityId); + fillMaxPeopleNumber(pagination.getList()); return Result.success(pagination); } diff --git a/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/courseList.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/courseList.js index 48c62fd..0931703 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/courseList.js +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/apply/courseList.js @@ -75,7 +75,7 @@ const courseList = { @@ -152,6 +152,21 @@ const courseList = { } }, methods: { + isQuotaFull(row) { + if (!Number(row.coursePeopleNumber) && row.quotaScope !== "本工会") return false + const remaining = Number(row.coursePeopleNumber) - (Number(row.hasRegisterNum) + Number(row.courseReservedNumber)) + const waitingRemaining = Number(row.waitingNum) - Number(row.hasWaitingNum) + return remaining <= 0 && !(row.reserveMode === 2 && waitingRemaining > 0) + }, + isAllTimesExpired(row) { + if (row.allTimesExpired === true) return true + const times = row.courseTimes || [] + const now = this.$moment() + return times.length > 0 && times.every(item => { + const endTime = this.$moment(item.courseEndTime) + return endTime.isValid() && endTime.isSameOrBefore(now) + }) + }, async onPreview(introduce) { try { const parser = new DOMParser(); @@ -187,6 +202,20 @@ const courseList = { this.queryCourseAssort() }, onSign(row) { + if (this.isAllTimesExpired(row)) { + this.$alert("该活动所有时段均已结束,无法报名", "提示", { + confirmButtonText: "确定", + type: "warning" + }) + return + } + if (this.isQuotaFull(row)) { + this.$alert("当前没有可用报名名额,暂无法报名", "提示", { + confirmButtonText: "确定", + type: "warning" + }) + return + } const user = this.$store.state.user const missingFields = [] if (!user?.unit?.name) missingFields.push("所属单位") diff --git a/src/main/resources/views/platform/zhgh/activity/trainSignUp/statistics/index.html b/src/main/resources/views/platform/zhgh/activity/trainSignUp/statistics/index.html index bb7dad2..34bf19c 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSignUp/statistics/index.html +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/statistics/index.html @@ -41,14 +41,9 @@ layout("/layouts/platform.html"){ - + @@ -98,7 +93,7 @@ layout("/layouts/platform.html"){ { label: "类型", prop: "courseType", sortable: true }, { label: "地点", prop: "courseLocation" }, { label: "教师", prop: "courseInstructor", sortable: true }, - { label: "最多报名人数", prop: "coursePeopleNumber", sortable: true }, + { label: "最多报名人数", prop: "maxPeopleNumber", sortable: true }, { label: "已报名人数", prop: "registerNum", sortable: true } ], trainType: "培训班", diff --git a/src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/index.html b/src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/index.html index ae3702a..fdf2ec6 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/index.html +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/index.html @@ -41,14 +41,9 @@ layout("/layouts/platform.html"){ sortable show-overflow-tooltip > - + @@ -98,7 +93,7 @@ layout("/layouts/platform.html"){ { label: "类型", prop: "courseType", sortable: true }, { label: "地点", prop: "courseLocation" }, { label: "教师", prop: "courseInstructor", sortable: true }, - { label: "最多报名人数", prop: "coursePeopleNumber", sortable: true }, + { label: "最多报名人数", prop: "maxPeopleNumber", sortable: true }, { label: "已报名人数", prop: "registerNum", sortable: true } ], } diff --git a/src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/userInfo.js b/src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/userInfo.js index 4f0abad..31571c7 100644 --- a/src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/userInfo.js +++ b/src/main/resources/views/platform/zhgh/activity/trainSignUp/userAdjust/userInfo.js @@ -67,8 +67,8 @@ const userInfo = { header-align="center" show-overflow-tooltip > - - + + diff --git a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/applyForm.js b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/applyForm.js index 23a798b..d37c5f5 100644 --- a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/applyForm.js +++ b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/applyForm.js @@ -89,8 +89,25 @@ const applyForm = { }) }, onCourseConfirm(val){ - if (!val || val.disabled || val.endTime <= Date.now()) { - this.$toast("该时段不可报名,请选择其他时段") + const activeTimes = this.courseTimeSelectList.filter(item => item.endTime > Date.now()) + if (activeTimes.length === 0) { + this.$toast("当前没有未结束的报名时段,无法报名") + return + } + if (activeTimes.every(item => item.disabled)) { + this.$toast("当前可选时段名额均已满,暂无法报名") + return + } + if (!val) { + this.$toast("请选择报名时段") + return + } + if (val.endTime <= Date.now()) { + this.$toast("所选时段已结束,请选择其他时段") + return + } + if (val.disabled) { + this.$toast("所选时段名额已满,请选择其他时段") return } this.formData.activityCourseId = val.value diff --git a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/index.html b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/index.html index 92ddb8e..23dfaef 100644 --- a/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/index.html +++ b/src/main/resources/views/platform/zhghh5/activity/trainSignUp/list/index.html @@ -66,7 +66,7 @@ layout("/layouts/platform_h5.html"){ 微信群二维码