|
|
@@ -30,6 +30,9 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
+import static java.util.stream.Collectors.toCollection;
|
|
|
+import static java.util.stream.IntStream.rangeClosed;
|
|
|
+
|
|
|
@Service
|
|
|
public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamRoom> implements ICdExamRoomService {
|
|
|
|
|
|
@@ -118,11 +121,13 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
if (ObjectUtils.isNotNull(bo.getTenantId())){
|
|
|
bo.setTenantId(getTenantId(bo.getTenantId()));
|
|
|
}
|
|
|
+ String before = getExamConfig("exam_before", 1,bo.getTenantId());
|
|
|
List<CdExamRoom> cdExamRoomList = list(new LambdaQueryWrapper<CdExamRoom>()
|
|
|
.eq(ObjectUtils.isNotNull(bo.getTenantId()), CdExamRoom::getTenantId, bo.getTenantId())
|
|
|
.eq(ObjectUtils.isNotNull(bo.getApplyTime()), CdExamRoom::getExamTime, bo.getApplyTime())
|
|
|
.eq(CdExamRoom::getType,1)
|
|
|
.eq(CdExamRoom::getStatus,1)
|
|
|
+ .gt(CdExamRoom::getExamTime,getApplyAfterTime(DateUtils.getNowTime(), Integer.valueOf(before)))
|
|
|
.eq(ObjectUtils.isNotNull(bo.getApplyStartTime()), CdExamRoom::getExamStartTime, bo.getApplyStartTime())
|
|
|
.eq(ObjectUtils.isNotNull(bo.getApplyEndTime()), CdExamRoom::getExamEndTime, bo.getApplyEndTime()));
|
|
|
if (CollectionUtils.isEmpty(cdExamRoomList)) {
|
|
|
@@ -237,16 +242,15 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
if (StringUtils.isNotBlank(bo.getUserCard())){
|
|
|
bo.setUserCardList(Arrays.stream(bo.getUserCard().split(",")).collect(Collectors.toList()));
|
|
|
}
|
|
|
- List<CdUserSubscribe> userSubscribe = cdUserSubscribeService.getUserSubscribeList(bo);
|
|
|
+ List<CdUserExamSubscribeVo> userSubscribe = cdUserSubscribeService.getUserSubscribeList(bo);
|
|
|
if (CollectionUtils.isEmpty(userSubscribe)){
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
|
//考试信息
|
|
|
- List<CdUserExamSubscribeVo> list = userSubscribe.stream().map(item -> {
|
|
|
- CdUserExamSubscribeVo examSubscribeVo = BeanUtil.toBean(item, CdUserExamSubscribeVo.class);
|
|
|
+ userSubscribe.forEach(examSubscribeVo -> {
|
|
|
CdExamSubscribe cdExamSubscribe = cdExamSubscribeService
|
|
|
.getOne(new LambdaQueryWrapper<CdExamSubscribe>()
|
|
|
- .eq(CdExamSubscribe::getUserSubscribeId, item.getId())
|
|
|
+ .eq(CdExamSubscribe::getUserSubscribeId, examSubscribeVo.getId())
|
|
|
.eq(CdExamSubscribe::getStatus, 1)
|
|
|
.orderByDesc(CdExamSubscribe::getCreateTime)
|
|
|
.last("limit 1"));
|
|
|
@@ -270,6 +274,15 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
examSubscribeVo.setCertificateCode(cdExamSubscribe.getCertificateCode());
|
|
|
examSubscribeVo.setCertificateUrl(cdExamSubscribe.getCertificateUrl());
|
|
|
}
|
|
|
+
|
|
|
+ Long tenantId = examRoom.getTenantId();
|
|
|
+ Long time = examRoom.getExamTime();
|
|
|
+ String before = getExamConfig("exam_before", 1,tenantId);
|
|
|
+ Long applyBeforeTime = getApplyBeforeTime(time, Integer.valueOf(before));
|
|
|
+ if (DateUtils.getNowTime() >= applyBeforeTime){
|
|
|
+ //考试前7个工作日不可取消预约
|
|
|
+ examSubscribeVo.setSubscribeSign(1);
|
|
|
+ }
|
|
|
break;
|
|
|
case 2://取消
|
|
|
examSubscribeVo.setSubscribeStatus(2);
|
|
|
@@ -284,9 +297,8 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
Long num = cdExamSubscribeService.getReplenishNum(cdExamSubscribe.getUserId(),cdExamSubscribe.getExamMajor(),cdExamSubscribe.getTenantId());
|
|
|
examSubscribeVo.setReplenishNum(num);
|
|
|
}
|
|
|
- return examSubscribeVo;
|
|
|
- }).collect(Collectors.toList());
|
|
|
- return list;
|
|
|
+ });
|
|
|
+ return userSubscribe;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -310,7 +322,14 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
subscribe.setDataFrom(userSubscribe.getDataFrom());
|
|
|
subscribe.setTenantId(userSubscribe.getTenantId());
|
|
|
subscribe.setType(userSubscribe.getType());
|
|
|
-
|
|
|
+ if (CollectionUtils.isNotEmpty(bo.getSeatNumberMap())){
|
|
|
+ String number = bo.getSeatNumberMap().get(userSubscribeId);
|
|
|
+ subscribe.setSeatNumber(number);
|
|
|
+ }else {
|
|
|
+ //生成座位号
|
|
|
+ Integer seatNumber = getSeatNumber(bo.getExamId());
|
|
|
+ subscribe.setSeatNumber(seatNumber.toString());
|
|
|
+ }
|
|
|
//是否是新考
|
|
|
int count = cdExamSubscribeService.count(new LambdaQueryWrapper<CdExamSubscribe>()
|
|
|
.eq(CdExamSubscribe::getUserId, userSubscribe.getUserId())
|
|
|
@@ -327,6 +346,11 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
}
|
|
|
cdExamSubscribeService.saveBatch(resultList);
|
|
|
|
|
|
+ if (ObjectUtils.isNotNull(bo.getSign()) && bo.getSign() == 1){
|
|
|
+ //新系统C端预约推送过来
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
//todo 新旧系统学员预约处理
|
|
|
Map<Integer, List<CdExamSubscribe>> collect = resultList.stream().collect(Collectors.groupingBy(CdExamSubscribe::getDataFrom));
|
|
|
collect.forEach((k,v) -> {
|
|
|
@@ -373,6 +397,35 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ private Integer getSeatNumber(Long examId) {
|
|
|
+ List<CdExamSubscribe> list = cdExamSubscribeService
|
|
|
+ .list(new LambdaQueryWrapper<CdExamSubscribe>()
|
|
|
+ .eq(CdExamSubscribe::getExamId, examId)
|
|
|
+ .eq(CdExamSubscribe::getSubscribeStatus, 1));
|
|
|
+ if (CollectionUtils.isEmpty(list)){
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ Integer userNum = getById(examId).getExamNum();
|
|
|
+ if (list.size() >= userNum){
|
|
|
+ throw new CustomException("本场考试已预约满,请选择其他场次!");
|
|
|
+ }
|
|
|
+ if (list.stream().allMatch(x -> ObjectUtils.isNull(x.getSeatNumber()))){
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<Integer> nums = list.stream().map(x -> Integer.valueOf(x.getSeatNumber())).collect(Collectors.toList());
|
|
|
+ SortedSet<Integer> set = new TreeSet<Integer>(nums);
|
|
|
+ TreeSet<Integer> collect = rangeClosed(1, set.last()).boxed()
|
|
|
+ .filter(i -> !set.contains(i))
|
|
|
+ .collect(toCollection(TreeSet::new));
|
|
|
+ if (CollectionUtils.isNotEmpty(collect)){
|
|
|
+ Integer num = collect.stream().sorted(Comparator.comparing(o -> o)).findFirst().get();
|
|
|
+ return num;
|
|
|
+ }
|
|
|
+ Integer integer = nums.stream().max(Comparator.comparing(o -> o)).get();
|
|
|
+ return integer + 1;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@@ -402,6 +455,12 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
});
|
|
|
cdExamSubscribeService.updateBatchById(subscribeList);
|
|
|
|
|
|
+ if (ObjectUtils.isNotNull(bo.getSign()) && bo.getSign() == 1){
|
|
|
+ //新系统C端取消预约推送过来
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
//todo 新旧系统取消预约处理
|
|
|
Map<Integer, List<CdExamSubscribe>> map = subscribeList.stream().collect(Collectors.groupingBy(CdExamSubscribe::getDataFrom));
|
|
|
map.forEach((k,v) -> {
|
|
|
@@ -435,7 +494,7 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
log.setTenantId(item.getTenantId());
|
|
|
log.setRemark(String.format("学员:%s,身份证:%s,预约专业:%s,预约表数据ID:%s",item.getUserName(),item.getUserCard(),item.getExamMajor(),item.getId()));
|
|
|
log.setErrorLog(e.getMessage());
|
|
|
- log.setType(1);//预约考试错误
|
|
|
+ log.setType(2);//预约考试错误
|
|
|
cdExamErrorLogService.save(log);
|
|
|
}
|
|
|
});
|
|
|
@@ -512,6 +571,13 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
if (ObjectUtils.isNull(subscribe)){
|
|
|
continue;
|
|
|
}
|
|
|
+ List<CdExamSubscribe> list = cdExamSubscribeService
|
|
|
+ .list(new LambdaQueryWrapper<CdExamSubscribe>()
|
|
|
+ .eq(CdExamSubscribe::getExamId, bo.getExamId())
|
|
|
+ .eq(CdExamSubscribe::getSubscribeStatus, 1));
|
|
|
+ if (list.size() >= courseRoom.getExamNum()){
|
|
|
+ throw new CustomException("本场考试已预约满,请选择其他场次!");
|
|
|
+ }
|
|
|
CdUserSubscribe userSubscribe = cdUserSubscribeService.getById(userSubscribeId);
|
|
|
if (subscribe.getExamStatus() == 0){
|
|
|
//考试成绩没出
|
|
|
@@ -655,6 +721,9 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
* @return java.lang.String
|
|
|
*/
|
|
|
private String getExamConfig(String key,Integer type,Long tenantId){
|
|
|
+ if (ObjectUtils.isNull(tenantId)){
|
|
|
+ tenantId = 1L;
|
|
|
+ }
|
|
|
CdExamConfig config = cdExamConfigService
|
|
|
.getOne(new LambdaQueryWrapper<CdExamConfig>()
|
|
|
.eq(CdExamConfig::getConfigKey, key)
|