|
|
@@ -1,33 +1,33 @@
|
|
|
package com.zhongzheng.modules.middleground.record.service.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.zhongzheng.common.exception.CustomException;
|
|
|
+import com.zhongzheng.common.utils.DateUtils;
|
|
|
import com.zhongzheng.common.utils.ServletUtils;
|
|
|
-import com.zhongzheng.modules.middleground.record.bo.CdExamRoomBo;
|
|
|
-import com.zhongzheng.modules.middleground.record.bo.CdExamRoomQuery;
|
|
|
-import com.zhongzheng.modules.middleground.record.bo.CdExamRoomUpdateBo;
|
|
|
-import com.zhongzheng.modules.middleground.record.bo.CdUserExamSubscribeQueryBo;
|
|
|
-import com.zhongzheng.modules.middleground.record.domain.CdExamRoom;
|
|
|
-import com.zhongzheng.modules.middleground.record.domain.CdExamSite;
|
|
|
+import com.zhongzheng.common.utils.ToolsUtils;
|
|
|
+import com.zhongzheng.common.utils.http.HttpUtils;
|
|
|
+import com.zhongzheng.modules.middleground.record.bo.*;
|
|
|
+import com.zhongzheng.modules.middleground.record.domain.*;
|
|
|
import com.zhongzheng.modules.middleground.record.mapper.CdExamRoomMapper;
|
|
|
-import com.zhongzheng.modules.middleground.record.service.ICdExamRoomService;
|
|
|
-import com.zhongzheng.modules.middleground.record.service.ICdExamSiteService;
|
|
|
+import com.zhongzheng.modules.middleground.record.service.*;
|
|
|
import com.zhongzheng.modules.middleground.record.vo.CdExamRoomDetailVo;
|
|
|
import com.zhongzheng.modules.middleground.record.vo.CdExamRoomVo;
|
|
|
import com.zhongzheng.modules.middleground.record.vo.CdUserExamSubscribeVo;
|
|
|
+import com.zhongzheng.modules.middleground.record.vo.UserExamDetailVo;
|
|
|
import com.zhongzheng.modules.middleground.tenant.domain.DataTenant;
|
|
|
import com.zhongzheng.modules.middleground.tenant.service.IDataTenantService;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
@@ -35,10 +35,21 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
|
|
|
@Autowired
|
|
|
private IDataTenantService dataTenantService;
|
|
|
-
|
|
|
@Autowired
|
|
|
private ICdExamSiteService examSiteService;
|
|
|
+ @Autowired
|
|
|
+ private ICdUserSubscribeService cdUserSubscribeService;
|
|
|
+ @Autowired
|
|
|
+ private ICdExamSubscribeService cdExamSubscribeService;
|
|
|
+ @Autowired
|
|
|
+ private ICdExamConfigService cdExamConfigService;
|
|
|
+ @Autowired
|
|
|
+ private ICdExamErrorLogService cdExamErrorLogService;
|
|
|
|
|
|
+ @Value("${exam.subscribe}")
|
|
|
+ private String EXAM_SUBSCRIBE_PATH;
|
|
|
+ @Value("${exam.cancelSubscribe}")
|
|
|
+ private String EXAM_SUBSCRIBE_CANCEL_PATH;
|
|
|
|
|
|
@Override
|
|
|
public boolean saveExamRoom(CdExamRoomBo bo) {
|
|
|
@@ -52,7 +63,7 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
CdExamSite site = new CdExamSite();
|
|
|
site.setCode(ServletUtils.getEncoded("DD"));
|
|
|
site.setSiteAddress(bo.getExamSite());
|
|
|
- site.setTenantId(getNewTenantId(bo.getTenantId()));
|
|
|
+ site.setTenantId(getNewTenantId(bo.getTenantId(),bo.getDataFrom()));
|
|
|
examSiteService.save(site);
|
|
|
siteId = site.getSiteId();
|
|
|
}else {
|
|
|
@@ -62,7 +73,7 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
|
|
|
//查询考场是否存在
|
|
|
CdExamRoom cdExamRoom = getOne(new LambdaQueryWrapper<CdExamRoom>()
|
|
|
- .eq(CdExamRoom::getTenantId, getNewTenantId(bo.getTenantId()))
|
|
|
+ .eq(CdExamRoom::getTenantId, getNewTenantId(bo.getTenantId(),bo.getDataFrom()))
|
|
|
.eq(CdExamRoom::getExamTime, bo.getExamTime())
|
|
|
.eq(CdExamRoom::getExamStartTime, bo.getExamStartTime())
|
|
|
.eq(ObjectUtils.isNotNull(siteId), CdExamRoom::getExamSiteId, siteId)
|
|
|
@@ -88,7 +99,7 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
entity.setOldSignId(bo.getSignId());
|
|
|
}
|
|
|
entity.setStatus(1);
|
|
|
- entity.setTenantId(getNewTenantId(bo.getTenantId()));
|
|
|
+ entity.setTenantId(getNewTenantId(bo.getTenantId(),bo.getDataFrom()));
|
|
|
if (ObjectUtils.isNull(siteId)){
|
|
|
//获取默认的
|
|
|
CdExamSite site = examSiteService.getOne(new LambdaQueryWrapper<CdExamSite>().eq(CdExamSite::getSign, 1).last("limit 1"));
|
|
|
@@ -105,19 +116,18 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
public List<CdExamRoomVo> getExamRoomList(CdExamRoomQuery bo) {
|
|
|
List<CdExamRoomVo> result = new ArrayList<>();
|
|
|
List<CdExamRoom> cdExamRoomList = list(new LambdaQueryWrapper<CdExamRoom>()
|
|
|
- .eq(ObjectUtils.isNotNull(bo.getTenantId()), CdExamRoom::getTenantId, getNewTenantId(bo.getTenantId()))
|
|
|
+ .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)
|
|
|
.eq(ObjectUtils.isNotNull(bo.getApplyStartTime()), CdExamRoom::getExamStartTime, bo.getApplyStartTime())
|
|
|
.eq(ObjectUtils.isNotNull(bo.getApplyEndTime()), CdExamRoom::getExamEndTime, bo.getApplyEndTime()));
|
|
|
if (CollectionUtils.isEmpty(cdExamRoomList)) {
|
|
|
return result;
|
|
|
}
|
|
|
- String tenantName = getNewTenant(bo.getTenantId()).getTenantName();
|
|
|
Map<Long, List<CdExamRoom>> map = cdExamRoomList.stream().collect(Collectors.groupingBy(CdExamRoom::getExamTime));
|
|
|
map.forEach((k, v) -> {
|
|
|
CdExamRoomVo cdExamRoomVo = new CdExamRoomVo();
|
|
|
- cdExamRoomVo.setTenantName(tenantName);
|
|
|
cdExamRoomVo.setExamTime(k);
|
|
|
|
|
|
List<CdExamRoomDetailVo> voList = v.stream().map(item -> {
|
|
|
@@ -143,7 +153,7 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
public boolean updateExamRoom(CdExamRoomUpdateBo bo) {
|
|
|
//查询考场是否存在
|
|
|
LambdaQueryWrapper<CdExamRoom> wrapper = new LambdaQueryWrapper<>();
|
|
|
- wrapper.eq(CdExamRoom::getTenantId,getNewTenantId(bo.getTenantId()));
|
|
|
+ wrapper.eq(CdExamRoom::getTenantId,getNewTenantId(bo.getTenantId(),bo.getDataFrom()));
|
|
|
if (bo.getDataFrom() == 1) {
|
|
|
wrapper.eq(CdExamRoom::getNewSignId,bo.getSignId());
|
|
|
} else {
|
|
|
@@ -180,7 +190,7 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
CdExamSite site = new CdExamSite();
|
|
|
site.setCode(ServletUtils.getEncoded("DD"));
|
|
|
site.setSiteAddress(bo.getExamSite());
|
|
|
- site.setTenantId(getNewTenantId(bo.getTenantId()));
|
|
|
+ site.setTenantId(getNewTenantId(bo.getTenantId(),bo.getDataFrom()));
|
|
|
examSiteService.save(site);
|
|
|
cdExamRoom.setExamSiteId(site.getSiteId());
|
|
|
}else {
|
|
|
@@ -194,7 +204,7 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
public boolean deleteExamRoom(CdExamRoomUpdateBo bo) {
|
|
|
//查询考场是否存在
|
|
|
LambdaQueryWrapper<CdExamRoom> wrapper = new LambdaQueryWrapper<>();
|
|
|
- wrapper.eq(CdExamRoom::getTenantId,getNewTenantId(bo.getTenantId()));
|
|
|
+ wrapper.eq(CdExamRoom::getTenantId,getNewTenantId(bo.getTenantId(),bo.getDataFrom()));
|
|
|
if (bo.getDataFrom() == 1) {
|
|
|
wrapper.eq(CdExamRoom::getNewSignId,bo.getSignId());
|
|
|
} else {
|
|
|
@@ -205,7 +215,8 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
if (ObjectUtils.isNull(cdExamRoom)) {
|
|
|
throw new CustomException("考场信息获取有误!");
|
|
|
}
|
|
|
- return removeById(cdExamRoom);
|
|
|
+ cdExamRoom.setStatus(0);
|
|
|
+ return updateById(cdExamRoom);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -217,9 +228,336 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
*/
|
|
|
@Override
|
|
|
public List<CdUserExamSubscribeVo> getExamSubscribeList(CdUserExamSubscribeQueryBo bo) {
|
|
|
+ List<CdUserSubscribe> userSubscribe = cdUserSubscribeService.list(new LambdaQueryWrapper<CdUserSubscribe>()
|
|
|
+ .eq(StringUtils.isNotBlank(bo.getMajor()), CdUserSubscribe::getMajor, bo.getMajor())
|
|
|
+ .like(StringUtils.isNotBlank(bo.getUserName()), CdUserSubscribe::getUserName, bo.getUserName())
|
|
|
+ .like(StringUtils.isNotBlank(bo.getCompanyName()), CdUserSubscribe::getCompanyName, bo.getCompanyName()));
|
|
|
+ if (CollectionUtils.isEmpty(userSubscribe)){
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ //考试信息
|
|
|
+ List<CdUserExamSubscribeVo> list = userSubscribe.stream().map(item -> {
|
|
|
+ CdUserExamSubscribeVo examSubscribeVo = BeanUtil.toBean(item, CdUserExamSubscribeVo.class);
|
|
|
+ CdExamSubscribe cdExamSubscribe = cdExamSubscribeService
|
|
|
+ .getOne(new LambdaQueryWrapper<CdExamSubscribe>()
|
|
|
+ .eq(CdExamSubscribe::getUserSubscribeId, item.getId())
|
|
|
+ .eq(CdExamSubscribe::getStatus, 1)
|
|
|
+ .orderByDesc(CdExamSubscribe::getCreateTime)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ObjectUtils.isNotNull(cdExamSubscribe)){
|
|
|
+ switch (cdExamSubscribe.getSubscribeStatus()){
|
|
|
+ case 1://正常
|
|
|
+ //考试时间
|
|
|
+ examSubscribeVo.setSubscribeStatus(1);
|
|
|
+ CdExamRoom examRoom = getById(cdExamSubscribe.getExamId());
|
|
|
+ String content = DateUtils.timestampToDateFormat(examRoom.getExamTime(), "yyyy年MM月dd号");
|
|
|
+ String format = String.format("%s(%s-%s)", content, examRoom.getExamStartTime(), examRoom.getExamEndTime());
|
|
|
+ examSubscribeVo.setExamTime(format);
|
|
|
+ examSubscribeVo.setExamStatus(cdExamSubscribe.getExamStatus());
|
|
|
+ if (ObjectUtils.isNotNull(cdExamSubscribe.getPerformance())){
|
|
|
+ examSubscribeVo.setPerformance(cdExamSubscribe.getPerformance());
|
|
|
+ examSubscribeVo.setExamStatus(cdExamSubscribe.getResult());
|
|
|
+ examSubscribeVo.setExamType(cdExamSubscribe.getType());
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNotNull(cdExamSubscribe.getCertificateCode())){
|
|
|
+ examSubscribeVo.setCertificateCode(cdExamSubscribe.getCertificateCode());
|
|
|
+ examSubscribeVo.setPerformanceTime(cdExamSubscribe.getPerformanceTime());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 2://取消
|
|
|
+ examSubscribeVo.setSubscribeStatus(2);
|
|
|
+ break;
|
|
|
+ case 3://过期
|
|
|
+ examSubscribeVo.setSubscribeStatus(3);
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //补考次数
|
|
|
+ Long num = cdExamSubscribeService.getReplenishNum(cdExamSubscribe.getUserId(),cdExamSubscribe.getExamMajor(),cdExamSubscribe.getTenantId());
|
|
|
+ examSubscribeVo.setReplenishNum(num);
|
|
|
+ }
|
|
|
+ return examSubscribeVo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void batchSubscribe(BatchSubscribeBo bo) {
|
|
|
+ //预约校验
|
|
|
+ subscribeVerify(bo);
|
|
|
+ List<CdExamSubscribe> resultList = new ArrayList<>();
|
|
|
+ for (Long userSubscribeId : bo.getUserSubscribeIds()) {
|
|
|
+ //创建预约信息
|
|
|
+ CdExamSubscribe subscribe = new CdExamSubscribe();
|
|
|
+ subscribe.setExamId(bo.getExamId());
|
|
|
+ CdUserSubscribe userSubscribe = cdUserSubscribeService.getById(userSubscribeId);
|
|
|
+ subscribe.setUserSubscribeId(userSubscribe.getId());
|
|
|
+ subscribe.setExamMajor(userSubscribe.getMajor());
|
|
|
+ subscribe.setUserId(userSubscribe.getUserId());
|
|
|
+ subscribe.setUserName(userSubscribe.getUserName());
|
|
|
+ subscribe.setUserCard(userSubscribe.getUserCard());
|
|
|
+ subscribe.setUserPhone(userSubscribe.getUserPhone());
|
|
|
+ subscribe.setSubscribeStatus(1);
|
|
|
+ subscribe.setDataFrom(userSubscribe.getDataFrom());
|
|
|
+ subscribe.setTenantId(userSubscribe.getTenantId());
|
|
|
+ subscribe.setType(userSubscribe.getType());
|
|
|
+
|
|
|
+ //是否是新考
|
|
|
+ int count = cdExamSubscribeService.count(new LambdaQueryWrapper<CdExamSubscribe>()
|
|
|
+ .eq(CdExamSubscribe::getUserId, userSubscribe.getUserId())
|
|
|
+ .eq(CdExamSubscribe::getExamMajor, userSubscribe.getMajor())
|
|
|
+ .eq(CdExamSubscribe::getSubscribeStatus, 1)
|
|
|
+ .eq(CdExamSubscribe::getStatus, 1)
|
|
|
+ .eq(CdExamSubscribe::getTenantId, userSubscribe.getTenantId()));
|
|
|
+ if (count > 0){
|
|
|
+ subscribe.setExamType(2);//补考
|
|
|
+ }else {
|
|
|
+ subscribe.setExamType(1);//新考
|
|
|
+ }
|
|
|
+ resultList.add(subscribe);
|
|
|
+ }
|
|
|
+ cdExamSubscribeService.saveBatch(resultList);
|
|
|
+
|
|
|
+ //todo 新旧系统学员预约处理
|
|
|
+ Map<Integer, List<CdExamSubscribe>> collect = resultList.stream().collect(Collectors.groupingBy(CdExamSubscribe::getDataFrom));
|
|
|
+ collect.forEach((k,v) -> {
|
|
|
+ switch (k){
|
|
|
+ case 1://新系统
|
|
|
+ v.forEach(item -> {
|
|
|
+ ExamApplySubscribeRequstBo requstBo = new ExamApplySubscribeRequstBo();
|
|
|
+ Long nowTime = DateUtils.getNowTime();
|
|
|
+ String sign = ToolsUtils.EncoderByMd5(nowTime.toString() + "pubilc2022");
|
|
|
+ requstBo.setSign(sign);
|
|
|
+ requstBo.setStamp(nowTime);
|
|
|
+ requstBo.setTenantId(getNewTenant(item.getTenantId(),item.getDataFrom()).getNewId());
|
|
|
+ //用户信息
|
|
|
+ requstBo.setIdCard(item.getUserCard());
|
|
|
+ requstBo.setTelphone(item.getUserPhone());
|
|
|
+ CdExamRoom examRoom = getById(item.getExamId());
|
|
|
+ requstBo.setSignId(examRoom.getNewSignId());
|
|
|
+ requstBo.setStudentType(item.getExamType());
|
|
|
+ requstBo.setApplyTime(examRoom.getExamTime());
|
|
|
+ requstBo.setApplyStartTime(examRoom.getExamStartTime());
|
|
|
+ requstBo.setApplyEndTime(examRoom.getExamEndTime());
|
|
|
+ requstBo.setMajorName(item.getExamMajor());
|
|
|
+ String param = JSONObject.toJSONString(bo);
|
|
|
+ Map<String, String> headersMap = new HashMap<>();
|
|
|
+ headersMap.put("TenantId", ServletUtils.getRequest().getHeader("TenantId"));
|
|
|
+ try {
|
|
|
+ HttpUtils.sendPostJsonHeaderAsync(EXAM_SUBSCRIBE_PATH, param,headersMap);
|
|
|
+ }catch (Exception e){
|
|
|
+ //预约错误记录日志
|
|
|
+ CdExamErrorLog log = new CdExamErrorLog();
|
|
|
+ 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);//预约考试错误
|
|
|
+ cdExamErrorLogService.save(log);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ case 2://旧系统
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void batchCancelSubscribe(BatchCancelSubscribeBo bo) {
|
|
|
+ List<CdExamSubscribe> subscribeList = new ArrayList<>();
|
|
|
+ bo.getUserSubscribeIds().forEach(id -> {
|
|
|
+ CdExamSubscribe subscribe = cdExamSubscribeService
|
|
|
+ .getOne(new LambdaQueryWrapper<CdExamSubscribe>()
|
|
|
+ .eq(CdExamSubscribe::getUserSubscribeId, id)
|
|
|
+ .eq(CdExamSubscribe::getSubscribeStatus, 1)
|
|
|
+ .eq(CdExamSubscribe::getStatus, 1)
|
|
|
+ .last("limit 1"));
|
|
|
+ CdUserSubscribe userSubscribe = cdUserSubscribeService.getById(id);
|
|
|
+ if (ObjectUtils.isNull(subscribe)){
|
|
|
+ throw new CustomException(String.format("【%s】学员预约数据不存在,请检查!",userSubscribe.getUserName()));
|
|
|
+ }
|
|
|
+
|
|
|
+ CdExamRoom cdExamRoom = getById(subscribe.getExamId());
|
|
|
+ Long time = cdExamRoom.getExamTime();
|
|
|
+ String before = getExamConfig("exam_before", 1, cdExamRoom.getTenantId());
|
|
|
+ Long applyBeforeTime = getApplyBeforeTime(time, Integer.valueOf(before));
|
|
|
+ if (DateUtils.getNowTime() >= applyBeforeTime){
|
|
|
+ throw new CustomException(String.format("【%s】学员预约的考试场次距开考少于7个工作日,不能取消预约!",userSubscribe.getUserName()));
|
|
|
+ }
|
|
|
+ subscribe.setSubscribeStatus(0);//取消预约
|
|
|
+ subscribeList.add(subscribe);
|
|
|
+ });
|
|
|
+ cdExamSubscribeService.updateBatchById(subscribeList);
|
|
|
+
|
|
|
+ //todo 新旧系统取消预约处理
|
|
|
+ Map<Integer, List<CdExamSubscribe>> map = subscribeList.stream().collect(Collectors.groupingBy(CdExamSubscribe::getDataFrom));
|
|
|
+ map.forEach((k,v) -> {
|
|
|
+ switch (k){
|
|
|
+ case 1://新系统
|
|
|
+ v.forEach(item -> {
|
|
|
+ ExamApplySubscribeRequstBo requstBo = new ExamApplySubscribeRequstBo();
|
|
|
+ Long nowTime = DateUtils.getNowTime();
|
|
|
+ String sign = ToolsUtils.EncoderByMd5(nowTime.toString() + "pubilc2022");
|
|
|
+ requstBo.setSign(sign);
|
|
|
+ requstBo.setStamp(nowTime);
|
|
|
+ requstBo.setTenantId(getNewTenant(item.getTenantId(),item.getDataFrom()).getNewId());
|
|
|
+ //用户信息
|
|
|
+ requstBo.setIdCard(item.getUserCard());
|
|
|
+ requstBo.setTelphone(item.getUserPhone());
|
|
|
+ CdExamRoom examRoom = getById(item.getExamId());
|
|
|
+ requstBo.setSignId(examRoom.getNewSignId());
|
|
|
+ requstBo.setStudentType(item.getExamType());
|
|
|
+ requstBo.setApplyTime(examRoom.getExamTime());
|
|
|
+ requstBo.setApplyStartTime(examRoom.getExamStartTime());
|
|
|
+ requstBo.setApplyEndTime(examRoom.getExamEndTime());
|
|
|
+ requstBo.setMajorName(item.getExamMajor());
|
|
|
+ String param = JSONObject.toJSONString(bo);
|
|
|
+ Map<String, String> headersMap = new HashMap<>();
|
|
|
+ headersMap.put("TenantId", ServletUtils.getRequest().getHeader("TenantId"));
|
|
|
+ try {
|
|
|
+ HttpUtils.sendPostJsonHeaderAsync(EXAM_SUBSCRIBE_CANCEL_PATH, param,headersMap);
|
|
|
+ }catch (Exception e){
|
|
|
+ //预约错误记录日志
|
|
|
+ CdExamErrorLog log = new CdExamErrorLog();
|
|
|
+ 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);//预约考试错误
|
|
|
+ cdExamErrorLogService.save(log);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ break;
|
|
|
+ case 2://旧系统
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<UserExamDetailVo> getExamDetail(Long id) {
|
|
|
+ CdUserSubscribe subscribe = cdUserSubscribeService.getById(id);
|
|
|
+ List<CdExamSubscribe> list = cdExamSubscribeService
|
|
|
+ .list(new LambdaQueryWrapper<CdExamSubscribe>()
|
|
|
+ .eq(CdExamSubscribe::getUserId, subscribe.getUserId())
|
|
|
+ .eq(CdExamSubscribe::getExamMajor, subscribe.getMajor())
|
|
|
+ .eq(CdExamSubscribe::getSubscribeStatus, 1)
|
|
|
+ .eq(CdExamSubscribe::getStatus, 1));
|
|
|
+ if (CollectionUtils.isEmpty(list)){
|
|
|
+ return new ArrayList<>();
|
|
|
+ }
|
|
|
+ return list.stream().map(item -> {
|
|
|
+ UserExamDetailVo userExamDetailVo = new UserExamDetailVo();
|
|
|
+ userExamDetailVo.setUserId(item.getUserId());
|
|
|
+ userExamDetailVo.setExamType(item.getExamType());
|
|
|
+ CdExamRoom exam = getById(item.getExamId());
|
|
|
+ userExamDetailVo.setExamTime(exam.getExamTime());
|
|
|
+ userExamDetailVo.setPerformance(item.getPerformance());
|
|
|
+ if (item.getExamStatus() == 1){
|
|
|
+ userExamDetailVo.setExamStatus(item.getResult());
|
|
|
+ }else {
|
|
|
+ userExamDetailVo.setExamStatus(item.getExamStatus());
|
|
|
+ }
|
|
|
+ return userExamDetailVo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ //预约校验
|
|
|
+ private void subscribeVerify(BatchSubscribeBo bo) {
|
|
|
+ CdExamRoom courseRoom = getById(bo.getExamId());
|
|
|
+ Long tenantId = courseRoom.getTenantId();
|
|
|
+ Long time = courseRoom.getExamTime();
|
|
|
+ //考试前7个工作日停止预约
|
|
|
+ String before = getExamConfig("exam_before", 1,tenantId);
|
|
|
+ Long applyBeforeTime = getApplyBeforeTime(time, Integer.valueOf(before));
|
|
|
+ if (DateUtils.getNowTime() >= applyBeforeTime){
|
|
|
+ throw new CustomException("该考试场次已停止预约,请选择其他场次!");
|
|
|
+ }
|
|
|
|
|
|
+ for (Long userSubscribeId : bo.getUserSubscribeIds()) {
|
|
|
+ CdExamSubscribe subscribe = cdExamSubscribeService.getOne(new LambdaQueryWrapper<CdExamSubscribe>()
|
|
|
+ .eq(CdExamSubscribe::getUserSubscribeId, userSubscribeId)
|
|
|
+ .eq(CdExamSubscribe::getStatus, 1)
|
|
|
+ .eq(CdExamSubscribe::getSubscribeStatus, 1)
|
|
|
+ .orderByDesc(CdExamSubscribe::getCreateTime)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ObjectUtils.isNull(subscribe)){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ CdUserSubscribe userSubscribe = cdUserSubscribeService.getById(userSubscribeId);
|
|
|
+ if (subscribe.getExamStatus() == 0){
|
|
|
+ //考试成绩没出
|
|
|
+ throw new CustomException(String.format("%s【%s】已经预约了该专业考试,无需重复预约",userSubscribe.getUserName(),userSubscribe.getUserCard()));
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询考试情况
|
|
|
+ if (subscribe.getResult() == 1){
|
|
|
+ //成绩已通过
|
|
|
+ throw new CustomException(String.format("%s【%s】已经通过该专业考试,无需重复预约",userSubscribe.getUserName(),userSubscribe.getUserCard()));
|
|
|
+ }
|
|
|
+
|
|
|
+ //过20个工作日才能在预约
|
|
|
+ CdExamRoom exam = getById(subscribe.getExamId());
|
|
|
+ Long examTime = exam.getExamTime(); // 考试时间
|
|
|
+ String after = getExamConfig("exam_after", 1, tenantId);
|
|
|
+ Long applyEndTime = getApplyAfterTime(examTime, Integer.valueOf(after));
|
|
|
+ if (DateUtils.getNowTime() <= applyEndTime){
|
|
|
+ throw new CustomException(String.format("%s【%s】请等待15个工作日后再预约!",userSubscribe.getUserName(),userSubscribe.getUserCard()));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private Long getApplyAfterTime(Long millisecond, Integer day) {
|
|
|
+ for (Integer i = 0; i < day; i++) {
|
|
|
+ Long dayAfter = DateUtils.getDayAfter(millisecond, 1);
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(DateUtils.timeToDate(dayAfter));
|
|
|
+ int index = calendar.get(Calendar.DAY_OF_WEEK) - 1;
|
|
|
+ String[] weeks = new String[]{"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
|
|
|
+
|
|
|
+ if (weeks[index].equals("星期六") || weeks[index].equals("星期天")) {
|
|
|
+ day += 1;
|
|
|
+
|
|
|
+ }
|
|
|
+ //判断当前是否为工作日
|
|
|
+ if (!DateUtils.isWorkingDay(dayAfter)) {
|
|
|
+ day += 1;
|
|
|
+ }
|
|
|
+ millisecond = dayAfter;
|
|
|
+ }
|
|
|
+
|
|
|
+ return millisecond;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Long getApplyBeforeTime(Long millisecond, Integer day) {
|
|
|
+ for (Integer i = 0; i < day; i++) {
|
|
|
+ Long dayAfter = DateUtils.getDayBefore(millisecond, 1);
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+ calendar.setTime(DateUtils.timeToDate(dayAfter));
|
|
|
+ int index = calendar.get(Calendar.DAY_OF_WEEK) - 1;
|
|
|
+ String[] weeks = new String[]{"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
|
|
|
|
|
|
- return null;
|
|
|
+ if (weeks[index].equals("星期六") || weeks[index].equals("星期天")) {
|
|
|
+ day += 1;
|
|
|
+
|
|
|
+ }
|
|
|
+ //判断当前是否为工作日
|
|
|
+ if (!DateUtils.isWorkingDay(dayAfter)) {
|
|
|
+ day += 1;
|
|
|
+ }
|
|
|
+ millisecond = dayAfter;
|
|
|
+ }
|
|
|
+
|
|
|
+ return millisecond;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -230,11 +568,16 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
* @param tenantId
|
|
|
* @return java.lang.Long
|
|
|
*/
|
|
|
- private Long getNewTenantId(Long tenantId){
|
|
|
- DataTenant tenant = dataTenantService.getOne(new LambdaQueryWrapper<DataTenant>()
|
|
|
- .eq(DataTenant::getNewId, tenantId)
|
|
|
- .or().eq(DataTenant::getOldId, tenantId)
|
|
|
- .last("limit 1"));
|
|
|
+ private Long getNewTenantId(Long tenantId,Integer dataFrom){
|
|
|
+ LambdaQueryWrapper<DataTenant> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ if (dataFrom == 1){
|
|
|
+ //新系统
|
|
|
+ queryWrapper.eq(DataTenant::getNewId,tenantId);
|
|
|
+ }else {
|
|
|
+ //旧系统
|
|
|
+ queryWrapper.eq(DataTenant::getOldId,tenantId);
|
|
|
+ }
|
|
|
+ DataTenant tenant = dataTenantService.getOne(queryWrapper);
|
|
|
if (ObjectUtils.isNull(tenant)){
|
|
|
throw new CustomException("机构信息不匹配,请检查!");
|
|
|
}
|
|
|
@@ -242,22 +585,48 @@ public class CdExamRoomServiceImpl extends ServiceImpl<CdExamRoomMapper, CdExamR
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取机构信息
|
|
|
+ * 获取机构ID
|
|
|
* @author change
|
|
|
* @date 2023/7/17 10:13
|
|
|
* @param tenantId
|
|
|
* @return java.lang.Long
|
|
|
*/
|
|
|
- private DataTenant getNewTenant(Long tenantId){
|
|
|
- DataTenant tenant = dataTenantService.getOne(new LambdaQueryWrapper<DataTenant>()
|
|
|
- .eq(DataTenant::getNewId, tenantId)
|
|
|
- .or().eq(DataTenant::getOldId, tenantId)
|
|
|
- .last("limit 1"));
|
|
|
+ private DataTenant getNewTenant(Long tenantId,Integer dataFrom){
|
|
|
+ LambdaQueryWrapper<DataTenant> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ if (dataFrom == 1){
|
|
|
+ //新系统
|
|
|
+ queryWrapper.eq(DataTenant::getNewId,tenantId);
|
|
|
+ }else {
|
|
|
+ //旧系统
|
|
|
+ queryWrapper.eq(DataTenant::getOldId,tenantId);
|
|
|
+ }
|
|
|
+ DataTenant tenant = dataTenantService.getOne(queryWrapper);
|
|
|
if (ObjectUtils.isNull(tenant)){
|
|
|
throw new CustomException("机构信息不匹配,请检查!");
|
|
|
}
|
|
|
return tenant;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取考试配置项
|
|
|
+ * @author change
|
|
|
+ * @date 2023/7/21 10:15
|
|
|
+ * @param key
|
|
|
+ * @param type
|
|
|
+ * @return java.lang.String
|
|
|
+ */
|
|
|
+ private String getExamConfig(String key,Integer type,Long tenantId){
|
|
|
+ CdExamConfig config = cdExamConfigService
|
|
|
+ .getOne(new LambdaQueryWrapper<CdExamConfig>()
|
|
|
+ .eq(CdExamConfig::getConfigKey, key)
|
|
|
+ .eq(CdExamConfig::getType, type)
|
|
|
+ .eq(CdExamConfig::getTenantId, tenantId)
|
|
|
+ .last("limit 1"));
|
|
|
+
|
|
|
+ if (ObjectUtils.isNull(config)){
|
|
|
+ throw new CustomException("考试配置项读取失败!");
|
|
|
+ }
|
|
|
+ return config.getConfigValue();
|
|
|
+ }
|
|
|
|
|
|
}
|