亲子活动模块整改-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);
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<FamilyActivity> 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<FamilyUser> waitingUsers = dao().query(FamilyUser.class, waitingCnd);
@@ -397,9 +394,9 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl<FamilyActivity> 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<FamilyActivity> i
}
/**
* 校验候补人员转正后的课程总人数、分工会人数和独立时段人数是否均不超限。
* 校验候补人员转正后的课程总人数和独立时段人数是否均不超限。
* 自动递补不校验分工会限制,避免空余名额因原分工会没有合适候补而闲置。
*/
private boolean canPromoteWaitingUser(FamilyCourse course, FamilyUser waitingUser, int contribution) {
int courseLimit = course.getCoursePeopleNumber();
@@ -417,20 +415,6 @@ public class FamilyActivityServiceImpl extends BaseServiceImpl<FamilyActivity> 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);
}