亲子活动模块整改-1.1

This commit is contained in:
2026-09-08 20:30:34 +08:00
parent c75bcd4a92
commit ecf8ad3536
@@ -370,14 +370,15 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl<FamilyActivity> i
FamilyActivity activity = dao().fetch(FamilyActivity.class, activityId); FamilyActivity activity = dao().fetch(FamilyActivity.class, activityId);
if (formalSignUp && Objects.equals(course.getReserveMode(), 2) && isWithinSignUpTime(activity)) { 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()); FamilyType type = dao().fetch(FamilyType.class, course.getCourseType());
if (type == null) { if (type == null) {
return; return;
@@ -386,10 +387,6 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl<FamilyActivity> i
Cnd waitingCnd = Cnd.where(FamilyUser::getActivityId, "=", course.getActivityId()) Cnd waitingCnd = Cnd.where(FamilyUser::getActivityId, "=", course.getActivityId())
.and(FamilyUser::getCourseId, "=", course.getId()) .and(FamilyUser::getCourseId, "=", course.getId())
.and(FamilyUser::getState, "=", 2); .and(FamilyUser::getState, "=", 2);
// 配置了分工会名额时,取消释放的是原分工会名额,只允许该分工会候补人员递补。
if (Lang.isNotEmpty(course.getUnionLimit())) {
waitingCnd.and(FamilyUser::getUnionId, "=", canceledSignUp.getUnionId());
}
waitingCnd.asc(FamilyUser::getSignUpTime); waitingCnd.asc(FamilyUser::getSignUpTime);
List<FamilyUser> waitingUsers = dao().query(FamilyUser.class, waitingCnd); List<FamilyUser> waitingUsers = dao().query(FamilyUser.class, waitingCnd);
@@ -397,9 +394,9 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl<FamilyActivity> i
int familyNumber = Lang.isNotEmpty(waitingUser.getMobileColumnsValue()) int familyNumber = Lang.isNotEmpty(waitingUser.getMobileColumnsValue())
? waitingUser.getMobileColumnsValue().size() : 0; ? waitingUser.getMobileColumnsValue().size() : 0;
int contribution = getFamilyContribution(type, familyNumber); int contribution = getFamilyContribution(type, familyNumber);
// 严格保持候补先后顺序;排在前面的人员当前无法容纳时,不跨过该人员补后续人员 // 当前候补所需人数或原选时段无法容纳时,继续查找后续能够使用空余名额的候补
if (!canPromoteWaitingUser(course, waitingUser, contribution)) { if (!canPromoteWaitingUser(course, waitingUser, contribution)) {
break; continue;
} }
waitingUser.setState(3); waitingUser.setState(3);
dao().update(waitingUser); dao().update(waitingUser);
@@ -407,7 +404,8 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl<FamilyActivity> i
} }
/** /**
* 校验候补人员转正后的课程总人数、分工会人数和独立时段人数是否均不超限。 * 校验候补人员转正后的课程总人数和独立时段人数是否均不超限。
* 自动递补不校验分工会限制,避免空余名额因原分工会没有合适候补而闲置。
*/ */
private boolean canPromoteWaitingUser(FamilyCourse course, FamilyUser waitingUser, int contribution) { private boolean canPromoteWaitingUser(FamilyCourse course, FamilyUser waitingUser, int contribution) {
int courseLimit = course.getCoursePeopleNumber(); int courseLimit = course.getCoursePeopleNumber();
@@ -417,20 +415,6 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl<FamilyActivity> i
return false; 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); return hasAvailableCourseTime(course, waitingUser);
} }