亲子活动模块整改-1.1
This commit is contained in:
+8
-24
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user