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 86f61eb..b5d0a94 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 @@ -370,14 +370,15 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl i FamilyActivity activity = dao().fetch(FamilyActivity.class, activityId); if (formalSignUp && Objects.equals(course.getReserveMode(), 2) && isWithinSignUpTime(activity)) { - promoteWaitingUsers(course, currentSignUp); + promoteWaitingUsers(course); } } /** - * 按报名时间顺序递补候补人员。本人和家属是否计入总人数,严格按课程类型配置计算。 + * 按报名时间顺序从全部分工会候补中查找当前可容纳的人员。 + * 本人和家属是否计入总人数,严格按课程类型配置计算。 */ - private void promoteWaitingUsers(FamilyCourse course, FamilyUser canceledSignUp) { + private void promoteWaitingUsers(FamilyCourse course) { FamilyType type = dao().fetch(FamilyType.class, course.getCourseType()); if (type == null) { return; @@ -386,10 +387,6 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl i Cnd waitingCnd = Cnd.where(FamilyUser::getActivityId, "=", course.getActivityId()) .and(FamilyUser::getCourseId, "=", course.getId()) .and(FamilyUser::getState, "=", 2); - // 配置了分工会名额时,取消释放的是原分工会名额,只允许该分工会候补人员递补。 - if (Lang.isNotEmpty(course.getUnionLimit())) { - waitingCnd.and(FamilyUser::getUnionId, "=", canceledSignUp.getUnionId()); - } waitingCnd.asc(FamilyUser::getSignUpTime); List waitingUsers = dao().query(FamilyUser.class, waitingCnd); @@ -397,9 +394,9 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl i int familyNumber = Lang.isNotEmpty(waitingUser.getMobileColumnsValue()) ? waitingUser.getMobileColumnsValue().size() : 0; int contribution = getFamilyContribution(type, familyNumber); - // 严格保持候补先后顺序;排在前面的人员当前无法容纳时,不跨过该人员补后续人员。 + // 当前候补所需人数或原选时段无法容纳时,继续查找后续能够使用空余名额的候补。 if (!canPromoteWaitingUser(course, waitingUser, contribution)) { - break; + continue; } waitingUser.setState(3); dao().update(waitingUser); @@ -407,7 +404,8 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl i } /** - * 校验候补人员转正后的课程总人数、分工会人数和独立时段人数是否均不超限。 + * 校验候补人员转正后的课程总人数和独立时段人数是否均不超限。 + * 自动递补不校验分工会限制,避免空余名额因原分工会没有合适候补而闲置。 */ private boolean canPromoteWaitingUser(FamilyCourse course, FamilyUser waitingUser, int contribution) { int courseLimit = course.getCoursePeopleNumber(); @@ -417,20 +415,6 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl i return false; } - if (Lang.isNotEmpty(course.getUnionLimit())) { - NutMap unionLimit = course.getUnionLimit().stream() - .filter(item -> Objects.equals(item.getString("id"), waitingUser.getUnionId())) - .findFirst().orElse(null); - if (unionLimit == null) { - return false; - } - int unionCount = statisticsService.queryCourseCount( - course.getId(), course.getCourseType(), waitingUser.getUnionId()); - if (unionCount + contribution > unionLimit.getInt("limitCount")) { - return false; - } - } - return hasAvailableCourseTime(course, waitingUser); }