소스 검색

考场导入改为按编码匹配,名称覆盖修改;

wangliang 1 년 전
부모
커밋
86093666bf

+ 1 - 1
themis-admin/src/main/java/com/qmth/themis/admin/api/SysController.java

@@ -407,7 +407,7 @@ public class SysController {
         //首先查询当前用户所要监控的roomCode
         QueryWrapper<TBExamInvigilateUser> examInvigilateUserQueryWrapper = new QueryWrapper<>();
         AuthDto authDto = themisCacheService.addAccountAuthCache(tbUser.getId());
-        examInvigilateUserQueryWrapper.select(" distinct exam_id,room_code ").lambda().eq(TBExamInvigilateUser::getOrgId, tbUser.getOrgId())
+        examInvigilateUserQueryWrapper.select(" distinct exam_id,room_code,room_name ").lambda().eq(TBExamInvigilateUser::getOrgId, tbUser.getOrgId())
                 .eq(TBExamInvigilateUser::getExamId, examId);
         if (authDto.getRoleCodes().toString().contains(RoleEnum.INVIGILATE.name())) {
             examInvigilateUserQueryWrapper.lambda().eq(TBExamInvigilateUser::getUserId, tbUser.getId());

+ 219 - 148
themis-business/src/main/java/com/qmth/themis/business/templete/service/impl/TempleteLogicServiceImpl.java

@@ -4,6 +4,7 @@ import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.google.common.reflect.TypeToken;
 import com.qmth.themis.business.bean.admin.OpenRecordAnswerTempBean;
 import com.qmth.themis.business.bean.admin.OpenRecordNeedMarkBean;
@@ -59,6 +60,7 @@ import java.util.stream.Collectors;
  */
 @Service
 public class TempleteLogicServiceImpl implements TempleteLogicService {
+
     private final static Logger log = LoggerFactory.getLogger(TempleteLogicServiceImpl.class);
 
     @Resource
@@ -115,7 +117,8 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
      */
     @Override
     @Transactional
-    public Map<String, Object> execImportExamStudentLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) throws UnsupportedEncodingException {
+    public Map<String, Object> execImportExamStudentLogic(List<LinkedMultiValueMap<Integer, Object>> finalList,
+            Map<String, Object> map) throws UnsupportedEncodingException {
         Long orgId = Long.parseLong(String.valueOf(map.get(SystemConstant.ORG_ID)));
         Long examId = Long.parseLong(String.valueOf(map.get(SystemConstant.EXAM_ID)));
         Long createId = Long.parseLong(String.valueOf(map.get(SystemConstant.CREATE_ID)));
@@ -127,7 +130,8 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
         Map<String, String> courseCodeMap = (Map<String, String>) map.get("courseCodeMap");
         QueryWrapper<TEExamCourse> teExamCourseQueryWrapper = new QueryWrapper<>();
         Set<String> courseCodeSet = courseCodeMap.keySet().stream().collect(Collectors.toSet());
-        teExamCourseQueryWrapper.lambda().in(TEExamCourse::getCourseCode, courseCodeSet).eq(TEExamCourse::getExamId, examId);
+        teExamCourseQueryWrapper.lambda().in(TEExamCourse::getCourseCode, courseCodeSet)
+                .eq(TEExamCourse::getExamId, examId);
         List<TEExamCourse> teExamCourseList = teExamCourseService.list(teExamCourseQueryWrapper);
         if (Objects.nonNull(teExamCourseList) && teExamCourseList.size() > 0) {
             teExamCourseList.forEach(s -> {
@@ -149,9 +153,12 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
         for (int i = 0; i < finalList.size(); i++) {
             LinkedMultiValueMap<Integer, Object> finalMap = finalList.get(i);
             List<Object> examStudentImportDtoList = finalMap.get(i);
-            List<ExamStudentImportDto> gsonList = GsonUtil.fromJson(GsonUtil.toJson(examStudentImportDtoList), new TypeToken<List<ExamStudentImportDto>>() {
-            }.getType());
-            ExamStudentImportForkJoin myTask = new ExamStudentImportForkJoin(0, examStudentImportDtoList.size() - 1, gsonList, modeEnum, teExamActivityMap, examId, orgId, createId);
+            List<ExamStudentImportDto> gsonList = GsonUtil.fromJson(GsonUtil.toJson(examStudentImportDtoList),
+                    new TypeToken<List<ExamStudentImportDto>>() {
+
+                    }.getType());
+            ExamStudentImportForkJoin myTask = new ExamStudentImportForkJoin(0, examStudentImportDtoList.size() - 1,
+                    gsonList, modeEnum, teExamActivityMap, examId, orgId, createId);
             ForkJoinTask<Set<String>> forkJoinTask = forkJoinThreadPool.taskForkJoinPool().submit(myTask);
             roomCodeAndNameSet = forkJoinTask.join();
             txtList = this.importProgress(gsonList.size(), 0, gsonList.size(), txtList, tbTaskHistory);
@@ -159,30 +166,39 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
         map.put("line", line);
         //考场创建
         if (Objects.nonNull(roomCodeAndNameSet) && roomCodeAndNameSet.size() > 0) {
-            Map<String, TBExamInvigilateUser> tbExamInvigilateUserMap = (Map<String, TBExamInvigilateUser>) map.get("tbExamInvigilateUserMap");
+            Map<String, TBExamInvigilateUser> tbExamInvigilateUserMap = (Map<String, TBExamInvigilateUser>) map.get(
+                    "tbExamInvigilateUserMap");
             AtomicInteger count = new AtomicInteger(0);
             Map<String, String> roomCodeAndNameMap = new HashMap<>(roomCodeAndNameSet.size());
             roomCodeAndNameSet.forEach(s -> {
-                if (Objects.isNull(tbExamInvigilateUserMap) || (Objects.nonNull(tbExamInvigilateUserMap) && Objects.isNull(tbExamInvigilateUserMap.get(s)))) {
+                if (Objects.isNull(tbExamInvigilateUserMap) || (Objects.nonNull(tbExamInvigilateUserMap)
+                        && Objects.isNull(tbExamInvigilateUserMap.get(s)))) {
                     String[] strs = s.split(":");
                     if (!roomCodeAndNameMap.containsKey(strs[0] + ":" + strs[1])) {
-                        TBExamInvigilateUser tbExamInvigilateUser = new TBExamInvigilateUser(Long.parseLong(strs[0]), orgId, strs[1], strs[2]);
+                        TBExamInvigilateUser tbExamInvigilateUser = new TBExamInvigilateUser(Long.parseLong(strs[0]),
+                                orgId, strs[1], strs[2]);
                         tbExamInvigilateUserList.add(tbExamInvigilateUser);
 
                         QueryWrapper<TBExamInvigilateUserTemp> tbExamInvigilateUserTempQueryWrapper = new QueryWrapper<>();
-                        tbExamInvigilateUserTempQueryWrapper.lambda().eq(TBExamInvigilateUserTemp::getExamId, Long.parseLong(strs[0]))
+                        tbExamInvigilateUserTempQueryWrapper.lambda()
+                                .eq(TBExamInvigilateUserTemp::getExamId, Long.parseLong(strs[0]))
                                 .eq(TBExamInvigilateUserTemp::getOrgId, orgId)
                                 .eq(TBExamInvigilateUserTemp::getRoomCode, strs[1])
                                 .eq(TBExamInvigilateUserTemp::getRoomName, strs[2]);
 
                         map.put("dataRemark", "编码:" + strs[1] + ",名称:" + strs[2]);
-                        TBExamInvigilateUserTemp tbExamInvigilateUserTemp = tbExamInvigilateUserTempService.getOne(tbExamInvigilateUserTempQueryWrapper);
-                        tbExamInvigilateUserTemp = Objects.isNull(tbExamInvigilateUserTemp) ? new TBExamInvigilateUserTemp(Long.parseLong(strs[0]), orgId, strs[1], strs[2]) : tbExamInvigilateUserTemp;
+                        TBExamInvigilateUserTemp tbExamInvigilateUserTemp = tbExamInvigilateUserTempService.getOne(
+                                tbExamInvigilateUserTempQueryWrapper);
+                        tbExamInvigilateUserTemp = Objects.isNull(tbExamInvigilateUserTemp) ?
+                                new TBExamInvigilateUserTemp(Long.parseLong(strs[0]), orgId, strs[1], strs[2]) :
+                                tbExamInvigilateUserTemp;
                         tbExamInvigilateUserTempService.saveOrUpdate(tbExamInvigilateUserTemp);
                         count.getAndIncrement();
                         roomCodeAndNameMap.put(strs[0] + ":" + strs[1], strs[2]);
                     } else {
-                        throw new BusinessException("考场代码'" + strs[1] + "'下考场名称不一致" + "[" + roomCodeAndNameMap.get(strs[0] + ":" + strs[1]) + "," + strs[2] + "]");
+                        throw new BusinessException(
+                                "考场代码'" + strs[1] + "'下考场名称不一致" + "[" + roomCodeAndNameMap.get(strs[0] + ":" + strs[1])
+                                        + "," + strs[2] + "]");
                     }
                 }
             });
@@ -205,7 +221,8 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
      */
     @Override
     @Transactional
-    public Map<String, Object> execImportRoomCodeLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) throws UnsupportedEncodingException {
+    public Map<String, Object> execImportRoomCodeLogic(List<LinkedMultiValueMap<Integer, Object>> finalList,
+            Map<String, Object> map) throws UnsupportedEncodingException {
         Long orgId = null;
         if (Objects.nonNull(map.get(SystemConstant.ORG_ID))) {
             orgId = Long.parseLong(String.valueOf(map.get(SystemConstant.ORG_ID)));
@@ -217,8 +234,8 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
         Set<TBUserRole> tbUserRoleList = new HashSet<>();
         Set<TBExamInvigilateUser> tbExamInvigilateUserList = new HashSet<>();
         TBTaskHistory tbTaskHistory = (TBTaskHistory) map.get("tbTaskHistory");
-        Set<String> roomCodeSet = new HashSet<>();
-        Set<String> roomNameSet = new HashSet<>();
+        List<String> roomCodeList = new ArrayList<>();
+        List<String> roomNameList = new ArrayList<>();
         //保存用户
         int line = 0;
         for (int i = 0; i < finalList.size(); i++) {
@@ -234,14 +251,23 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                 for (int y = 0; y < subList.size(); y++) {
                     line++;
                     RoomCodeImportDto roomCodeImportDto = (RoomCodeImportDto) subList.get(y);
-                    roomCodeSet.add(roomCodeImportDto.getRoomCode());
-                    roomNameSet.add(roomCodeImportDto.getRoomName());
-                    map.put("dataRemark", "编码:" + roomCodeImportDto.getRoomCode() + ",名称:" + roomCodeImportDto.getRoomName());
-                    dataVerify(examId, roomCodeImportDto.getTeacher1(), roomCodeImportDto.getTeacher1Pwd(), roomCodeImportDto.getRoomCode(), roomCodeImportDto.getRoomName(), orgId, createId, tbUserList, tbUserRoleList, tbExamInvigilateUserList);
-                    map.put("dataRemark", "编码:" + roomCodeImportDto.getRoomCode() + ",名称:" + roomCodeImportDto.getRoomName());
-                    dataVerify(examId, roomCodeImportDto.getTeacher2(), roomCodeImportDto.getTeacher2Pwd(), roomCodeImportDto.getRoomCode(), roomCodeImportDto.getRoomName(), orgId, createId, tbUserList, tbUserRoleList, tbExamInvigilateUserList);
-                    map.put("dataRemark", "编码:" + roomCodeImportDto.getRoomCode() + ",名称:" + roomCodeImportDto.getRoomName());
-                    dataVerify(examId, roomCodeImportDto.getTeacher3(), roomCodeImportDto.getTeacher3Pwd(), roomCodeImportDto.getRoomCode(), roomCodeImportDto.getRoomName(), orgId, createId, tbUserList, tbUserRoleList, tbExamInvigilateUserList);
+                    roomCodeList.add(roomCodeImportDto.getRoomCode());
+                    roomNameList.add(roomCodeImportDto.getRoomName());
+                    map.put("dataRemark",
+                            "编码:" + roomCodeImportDto.getRoomCode() + ",名称:" + roomCodeImportDto.getRoomName());
+                    dataVerify(examId, roomCodeImportDto.getTeacher1(), roomCodeImportDto.getTeacher1Pwd(),
+                            roomCodeImportDto.getRoomCode(), roomCodeImportDto.getRoomName(), orgId, createId,
+                            tbUserList, tbUserRoleList, tbExamInvigilateUserList);
+                    map.put("dataRemark",
+                            "编码:" + roomCodeImportDto.getRoomCode() + ",名称:" + roomCodeImportDto.getRoomName());
+                    dataVerify(examId, roomCodeImportDto.getTeacher2(), roomCodeImportDto.getTeacher2Pwd(),
+                            roomCodeImportDto.getRoomCode(), roomCodeImportDto.getRoomName(), orgId, createId,
+                            tbUserList, tbUserRoleList, tbExamInvigilateUserList);
+                    map.put("dataRemark",
+                            "编码:" + roomCodeImportDto.getRoomCode() + ",名称:" + roomCodeImportDto.getRoomName());
+                    dataVerify(examId, roomCodeImportDto.getTeacher3(), roomCodeImportDto.getTeacher3Pwd(),
+                            roomCodeImportDto.getRoomCode(), roomCodeImportDto.getRoomName(), orgId, createId,
+                            tbUserList, tbUserRoleList, tbExamInvigilateUserList);
                 }
                 txtList = this.importProgress(max, min, size, txtList, tbTaskHistory);
                 if (max == size) {
@@ -254,12 +280,7 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                 }
             }
         }
-        if (!CollectionUtils.isEmpty(roomCodeSet)) {
-            List<String> roomCodeList = new ArrayList<>();
-            roomCodeList.addAll(roomCodeSet);
-            List<String> roomNameList = new ArrayList<>();
-            roomNameList.addAll(roomNameSet);
-
+        if (!CollectionUtils.isEmpty(roomCodeList)) {
             for (int i = 0; i < roomCodeList.size(); i++) {
                 if (!checkRoomCodeExist(examId, roomCodeList.get(i), orgId, roomNameList.get(i))) {
                     throw new BusinessException("考场代码 " + roomCodeList.get(i) + " 不存在");
@@ -267,10 +288,8 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
             }
         }
         QueryWrapper<TBExamInvigilateUser> wrapper = new QueryWrapper<>();
-        wrapper.lambda().eq(TBExamInvigilateUser::getOrgId, orgId)
-                .in(TBExamInvigilateUser::getRoomCode, roomCodeSet)
-                .eq(TBExamInvigilateUser::getExamId, examId)
-                .in(TBExamInvigilateUser::getRoomName, roomNameSet);
+        wrapper.lambda().eq(TBExamInvigilateUser::getOrgId, orgId).in(TBExamInvigilateUser::getRoomCode, roomCodeList)
+                .eq(TBExamInvigilateUser::getExamId, examId).in(TBExamInvigilateUser::getRoomName, roomNameList);
         tbExamInvigilateUserService.remove(wrapper);
 
         if (!CollectionUtils.isEmpty(tbUserList)) {
@@ -281,6 +300,15 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
         }
         if (!CollectionUtils.isEmpty(tbExamInvigilateUserList)) {
             tbExamInvigilateUserService.saveOrUpdateBatch(tbExamInvigilateUserList);
+
+            for (TBExamInvigilateUser t : tbExamInvigilateUserList) {
+                UpdateWrapper<TBExamInvigilateUser> updateWrapper = new UpdateWrapper<>();
+                updateWrapper.lambda().set(TBExamInvigilateUser::getRoomName, t.getRoomName())
+                        .eq(TBExamInvigilateUser::getRoomCode, t.getRoomCode())
+                        .eq(TBExamInvigilateUser::getExamId, t.getExamId())
+                        .eq(TBExamInvigilateUser::getOrgId, t.getOrgId());
+                tbExamInvigilateUserService.update(updateWrapper);
+            }
         }
         map.put("line", line);
         return map;
@@ -337,13 +365,17 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
         //先推送考试
         ExamCacheBean examCacheBean = teExamService.getExamCacheBean(examId);
         TBTaskHistory tbTaskHistory = (TBTaskHistory) map.get("tbTaskHistory");
-        JSONObject jsonObject = Objects.nonNull(tbTaskHistory.getRemark()) ? JSONObject.parseObject(tbTaskHistory.getRemark()) : null;
+        JSONObject jsonObject = Objects.nonNull(tbTaskHistory.getRemark()) ?
+                JSONObject.parseObject(tbTaskHistory.getRemark()) :
+                null;
         Integer totalTaskSize = 1, currentTaskSize = 1, jsTotalTaskSize = 0, jsCurrentTaskSize = 0;
         Long cloudMarkExamId = null;
 
         TEExam teExam = teExamService.cacheConvert(examCacheBean);
         if (Objects.isNull(tbTaskHistory.getEntityId())) {
-            cloudMarkExamId = cloudMarkUtil.callExamSaveApi(new SaveExamParams(orgId, null, examCode, examCacheBean.getName(), DateUtil.format(new Date(examCacheBean.getStartTime()), Constants.DEFAULT_DATE_PATTERN)));
+            cloudMarkExamId = cloudMarkUtil.callExamSaveApi(
+                    new SaveExamParams(orgId, null, examCode, examCacheBean.getName(),
+                            DateUtil.format(new Date(examCacheBean.getStartTime()), Constants.DEFAULT_DATE_PATTERN)));
             teExam.setUpdateTime(System.currentTimeMillis());
             teExam.setThirdExamId(String.valueOf(cloudMarkExamId));
             teExamService.updateById(teExam);
@@ -367,22 +399,26 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
             tbTaskHistoryService.updateById(tbTaskHistory);
 
             //推送试卷科目
-            Set<Long> examPaperIdSet = pushExamPaperLogic(map, jsonObject, totalTaskSize, jsCurrentTaskSize, currentTaskSize, cloudMarkExamId);
+            Set<Long> examPaperIdSet = pushExamPaperLogic(map, jsonObject, totalTaskSize, jsCurrentTaskSize,
+                    currentTaskSize, cloudMarkExamId);
             if (CollectionUtils.isEmpty(examPaperIdSet)) {
                 throw new BusinessException("没有考试试卷信息");
             }
 
             //获取所有待阅卷的考生
-            List<TEExamStudent> teExamStudentList = getExamStudentNeedMarkAll(map, jsonObject, teExam, examPaperIdSet, jsTotalTaskSize, jsCurrentTaskSize);
+            List<TEExamStudent> teExamStudentList = getExamStudentNeedMarkAll(map, jsonObject, teExam, examPaperIdSet,
+                    jsTotalTaskSize, jsCurrentTaskSize);
 
             //获取只有一次考试记录的考生
             List<TOeExamRecord> tOeExamRecordList = getExamRecordOnce(map, jsonObject, examPaperIdSet);
 
             //获取多次考试记录的考试
             Boolean examStudentBreachPush = (Boolean) map.get(SystemConstant.EXAM_STUDENT_BREACH_PUSH);
-            List<TOeExamRecord> tOeExamRecordManyList = tOeExamRecordService.findExamRecordNeedMarkAll(examId, examPaperIdSet, true, examStudentBreachPush);
+            List<TOeExamRecord> tOeExamRecordManyList = tOeExamRecordService.findExamRecordNeedMarkAll(examId,
+                    examPaperIdSet, true, examStudentBreachPush);
             if (!CollectionUtils.isEmpty(tOeExamRecordManyList)) {
-                Set<Long> manyExamStudentIdSet = tOeExamRecordManyList.stream().map(s -> s.getExamStudentId()).collect(Collectors.toSet());
+                Set<Long> manyExamStudentIdSet = tOeExamRecordManyList.stream().map(s -> s.getExamStudentId())
+                        .collect(Collectors.toSet());
                 jsonObject.put("examRecordManyListSize", manyExamStudentIdSet.size());
                 tbTaskHistory.setRemark(jsonObject.toJSONString());
                 tbTaskHistoryService.updateById(tbTaskHistory);
@@ -391,11 +427,7 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
             }
 
             //推送考试记录的考生开始
-            pushExamStudentLogic(map,
-                    jsonObject,
-                    teExamStudentList,
-                    tOeExamRecordList,
-                    jsCurrentTaskSize,
+            pushExamStudentLogic(map, jsonObject, teExamStudentList, tOeExamRecordList, jsCurrentTaskSize,
                     cloudMarkExamId);
         }
         return pushDataSuccess(map, jsonObject);
@@ -408,8 +440,7 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
      * @param jsonObject
      * @return
      */
-    private Map<String, Object> pushDataSuccess(Map<String, Object> map,
-                                                JSONObject jsonObject) {
+    private Map<String, Object> pushDataSuccess(Map<String, Object> map, JSONObject jsonObject) {
         TBTaskHistory tbTaskHistory = (TBTaskHistory) map.get("tbTaskHistory");
         List<String> txtList = (List<String>) map.get("txtList");
         StringJoiner stringJoiner = new StringJoiner("");
@@ -433,13 +464,13 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
      * @param examPaperIdSet
      * @return
      */
-    private List<TOeExamRecord> getExamRecordOnce(Map<String, Object> map,
-                                                  JSONObject jsonObject,
-                                                  Set<Long> examPaperIdSet) {
+    private List<TOeExamRecord> getExamRecordOnce(Map<String, Object> map, JSONObject jsonObject,
+            Set<Long> examPaperIdSet) {
         Long examId = (Long) map.get(SystemConstant.EXAM_ID);
         TBTaskHistory tbTaskHistory = (TBTaskHistory) map.get("tbTaskHistory");
         Boolean examStudentBreachPush = (Boolean) map.get(SystemConstant.EXAM_STUDENT_BREACH_PUSH);
-        List<TOeExamRecord> tOeExamRecordList = tOeExamRecordService.findExamRecordNeedMarkAll(examId, examPaperIdSet, false, examStudentBreachPush);
+        List<TOeExamRecord> tOeExamRecordList = tOeExamRecordService.findExamRecordNeedMarkAll(examId, examPaperIdSet,
+                false, examStudentBreachPush);
         if (!CollectionUtils.isEmpty(tOeExamRecordList)) {
             jsonObject.put("examRecordListSize", tOeExamRecordList.size());
 
@@ -448,8 +479,10 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
 
             BigDecimal progress = BigDecimal.valueOf(0);
             BigDecimal b = BigDecimal.valueOf(100);
-            progress = BigDecimal.valueOf(currentTaskSize).divide(BigDecimal.valueOf(totalTaskSize), 2, BigDecimal.ROUND_HALF_UP).multiply(b);
-            if (Objects.isNull(tbTaskHistory.getProgress()) || (Objects.nonNull(tbTaskHistory.getProgress()) && tbTaskHistory.getProgress().doubleValue() < progress.doubleValue())) {
+            progress = BigDecimal.valueOf(currentTaskSize)
+                    .divide(BigDecimal.valueOf(totalTaskSize), 2, BigDecimal.ROUND_HALF_UP).multiply(b);
+            if (Objects.isNull(tbTaskHistory.getProgress()) || (Objects.nonNull(tbTaskHistory.getProgress())
+                    && tbTaskHistory.getProgress().doubleValue() < progress.doubleValue())) {
                 tbTaskHistory.setProgress(progress.doubleValue());
                 tbTaskHistoryService.updateById(tbTaskHistory);
             }
@@ -471,23 +504,21 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
      * @param jsCurrentTaskSize
      * @return
      */
-    private List<TEExamStudent> getExamStudentNeedMarkAll(Map<String, Object> map,
-                                                          JSONObject jsonObject,
-                                                          TEExam teExam,
-                                                          Set<Long> examPaperIdSet,
-                                                          Integer jsTotalTaskSize,
-                                                          Integer jsCurrentTaskSize) {
+    private List<TEExamStudent> getExamStudentNeedMarkAll(Map<String, Object> map, JSONObject jsonObject, TEExam teExam,
+            Set<Long> examPaperIdSet, Integer jsTotalTaskSize, Integer jsCurrentTaskSize) {
         Long examId = (Long) map.get(SystemConstant.EXAM_ID);
         TBTaskHistory tbTaskHistory = (TBTaskHistory) map.get("tbTaskHistory");
         Boolean examStudentBreachPush = (Boolean) map.get(SystemConstant.EXAM_STUDENT_BREACH_PUSH);
-        List<TEExamStudent> teExamStudentList = teExamStudentService.findExamStudentNeedMarkAll(examId, examPaperIdSet, examStudentBreachPush);
+        List<TEExamStudent> teExamStudentList = teExamStudentService.findExamStudentNeedMarkAll(examId, examPaperIdSet,
+                examStudentBreachPush);
         if (CollectionUtils.isEmpty(teExamStudentList)) {
             throw new BusinessException("没有待阅卷的考生");
         }
         Integer totalTaskSize = jsonObject.getInteger("totalTaskSize");
         Integer currentTaskSize = jsonObject.getInteger("currentTaskSize");
         totalTaskSize = totalTaskSize.intValue() + teExamStudentList.size();
-        if (jsCurrentTaskSize.intValue() > currentTaskSize.intValue() && jsTotalTaskSize.intValue() > 0 && jsTotalTaskSize.intValue() != totalTaskSize.intValue()) {
+        if (jsCurrentTaskSize.intValue() > currentTaskSize.intValue() && jsTotalTaskSize.intValue() > 0
+                && jsTotalTaskSize.intValue() != totalTaskSize.intValue()) {
             teExam.setUpdateTime(System.currentTimeMillis());
             teExam.setThirdExamId(null);
             teExamService.updateById(teExam);
@@ -510,12 +541,9 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
      * @param jsCurrentTaskSize
      * @param cloudMarkExamId
      */
-    private void pushExamStudentLogic(Map<String, Object> map,
-                                      JSONObject jsonObject,
-                                      List<TEExamStudent> teExamStudentList,
-                                      List<TOeExamRecord> tOeExamRecordList,
-                                      Integer jsCurrentTaskSize,
-                                      Long cloudMarkExamId) throws IOException {
+    private void pushExamStudentLogic(Map<String, Object> map, JSONObject jsonObject,
+            List<TEExamStudent> teExamStudentList, List<TOeExamRecord> tOeExamRecordList, Integer jsCurrentTaskSize,
+            Long cloudMarkExamId) throws IOException {
         Long orgId = Long.parseLong(String.valueOf(map.get(SystemConstant.ORG_ID)));
         TBTaskHistory tbTaskHistory = (TBTaskHistory) map.get("tbTaskHistory");
         Boolean objectiveScorePush = (Boolean) map.get(SystemConstant.OBJECTIVE_SCORE_PUSH);
@@ -527,8 +555,8 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
         Integer totalTaskSize = jsonObject.getInteger("totalTaskSize");
         Integer currentTaskSize = jsonObject.getInteger("currentTaskSize");
 
-//        Map<Long, TOeExamRecord> tOeExamRecordMap = tOeExamRecordList.stream().collect(
-//                Collectors.toMap(TOeExamRecord::getExamStudentId, Function.identity(), (dto1, dto2) -> dto1));
+        //        Map<Long, TOeExamRecord> tOeExamRecordMap = tOeExamRecordList.stream().collect(
+        //                Collectors.toMap(TOeExamRecord::getExamStudentId, Function.identity(), (dto1, dto2) -> dto1));
         LinkedMultiValueMap<Long, TOeExamRecord> tOeExamRecordMap = new LinkedMultiValueMap<>();
         for (TOeExamRecord t : tOeExamRecordList) {
             tOeExamRecordMap.add(t.getExamStudentId(), t);
@@ -559,31 +587,39 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                     }
                     for (TOeExamRecord tOeExamRecord : tOeExamRecordExamStudentList) {
                         String courseCode = t.getCourseCode() + SystemConstant.JOINT_MARK + tOeExamRecord.getPaperId();
-                        cloudMarkUtil.callStudentSaveApi(new SaveStudentParams(orgId, cloudMarkExamId, String.valueOf(tOeExamRecord.getId()),
-                                t.getIdentity(),
-                                t.getName(),
-                                tbOrg.getName(),
-                                Objects.isNull(t.getClassNo()) ? SystemConstant.VALUE_OF_BLANK_REQUIRED_FIELD : t.getClassNo(),
-                                SystemConstant.VALUE_OF_BLANK_REQUIRED_FIELD,
-                                courseCode,
-                                t.getCourseName()));
-
-                        OpenRecordNeedMarkBean openRecordNeedMarkBean = GsonUtil.fromJson(GsonUtil.toJson(tOeExamRecord), OpenRecordNeedMarkBean.class);
-                        List<OpenRecordAnswerTempBean> answersTemp = examAnswerService.findByExamRecordId(tOeExamRecord.getId());
-                        openRecordNeedMarkBean = SystemConstant.filterAnswer(openRecordNeedMarkBean, answersTemp, paperStructMap);
+                        cloudMarkUtil.callStudentSaveApi(
+                                new SaveStudentParams(orgId, cloudMarkExamId, String.valueOf(tOeExamRecord.getId()),
+                                        t.getIdentity(), t.getName(), tbOrg.getName(), Objects.isNull(t.getClassNo()) ?
+                                        SystemConstant.VALUE_OF_BLANK_REQUIRED_FIELD :
+                                        t.getClassNo(), SystemConstant.VALUE_OF_BLANK_REQUIRED_FIELD, courseCode,
+                                        t.getCourseName()));
+
+                        OpenRecordNeedMarkBean openRecordNeedMarkBean = GsonUtil.fromJson(
+                                GsonUtil.toJson(tOeExamRecord), OpenRecordNeedMarkBean.class);
+                        List<OpenRecordAnswerTempBean> answersTemp = examAnswerService.findByExamRecordId(
+                                tOeExamRecord.getId());
+                        openRecordNeedMarkBean = SystemConstant.filterAnswer(openRecordNeedMarkBean, answersTemp,
+                                paperStructMap);
                         if (!CollectionUtils.isEmpty(openRecordNeedMarkBean.getAnswers())) {
-                            File fileAnswerJson = new File(SystemConstant.TEMP_FILES_DIR + File.separator + CloudMarkFileUploadTypeEnum.ANSWER.getCode() + File.separator + SystemConstant.getNanoId() + SystemConstant.JSON_PREFIX);
+                            File fileAnswerJson = new File(SystemConstant.TEMP_FILES_DIR + File.separator
+                                    + CloudMarkFileUploadTypeEnum.ANSWER.getCode() + File.separator
+                                    + SystemConstant.getNanoId() + SystemConstant.JSON_PREFIX);
                             if (!fileAnswerJson.exists()) {
                                 fileAnswerJson.getParentFile().mkdirs();
                                 fileAnswerJson.createNewFile();
                             }
-                            IOUtils.write(JacksonUtil.parseJson(openRecordNeedMarkBean.getAnswers()).getBytes(SystemConstant.CHARSET_NAME), new FileOutputStream(fileAnswerJson));
+                            IOUtils.write(JacksonUtil.parseJson(openRecordNeedMarkBean.getAnswers())
+                                    .getBytes(SystemConstant.CHARSET_NAME), new FileOutputStream(fileAnswerJson));
                             recordJsonList.add(fileAnswerJson);
-                            cloudMarkUtil.callFileUploadApi(new FileUploadParams(orgId, cloudMarkExamId, String.valueOf(tOeExamRecord.getId()), fileAnswerJson, CloudMarkFileUploadTypeEnum.JSON));
+                            cloudMarkUtil.callFileUploadApi(
+                                    new FileUploadParams(orgId, cloudMarkExamId, String.valueOf(tOeExamRecord.getId()),
+                                            fileAnswerJson, CloudMarkFileUploadTypeEnum.JSON));
                         }
 
                         if (Objects.nonNull(objectiveScorePush) && objectiveScorePush) {
-                            cloudMarkUtil.callStudentObjectiveScoreApi(new StudentObjectiveScoreParams(orgId, cloudMarkExamId, String.valueOf(tOeExamRecord.getId()), tOeExamRecord.getObjectiveScore()));
+                            cloudMarkUtil.callStudentObjectiveScoreApi(
+                                    new StudentObjectiveScoreParams(orgId, cloudMarkExamId,
+                                            String.valueOf(tOeExamRecord.getId()), tOeExamRecord.getObjectiveScore()));
                         }
                         jsonObject.put("currentTaskSize", currentTaskSize);
                         currentTaskSize++;
@@ -591,8 +627,10 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                     }
                 }
             }
-            progress = BigDecimal.valueOf(currentTaskSize).divide(BigDecimal.valueOf(totalTaskSize), 2, BigDecimal.ROUND_HALF_UP).multiply(b);
-            if (Objects.isNull(tbTaskHistory.getProgress()) || (Objects.nonNull(tbTaskHistory.getProgress()) && tbTaskHistory.getProgress().doubleValue() < progress.doubleValue())) {
+            progress = BigDecimal.valueOf(currentTaskSize)
+                    .divide(BigDecimal.valueOf(totalTaskSize), 2, BigDecimal.ROUND_HALF_UP).multiply(b);
+            if (Objects.isNull(tbTaskHistory.getProgress()) || (Objects.nonNull(tbTaskHistory.getProgress())
+                    && tbTaskHistory.getProgress().doubleValue() < progress.doubleValue())) {
                 tbTaskHistory.setProgress(progress.doubleValue());
                 tbTaskHistoryService.updateById(tbTaskHistory);
             }
@@ -651,31 +689,35 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                     return;
                 }
                 switch (teExam.getRecordSelectStrategy()) {
-                    case HIGHEST_OBJECTIVE_SCORE:
-                        if (subjective) {
-                            final long time = maxFinishTime;
-                            finalResult.addAll(v.stream().filter(bean -> bean.getFinishTime() == time).collect(Collectors.toList()));
+                case HIGHEST_OBJECTIVE_SCORE:
+                    if (subjective) {
+                        final long time = maxFinishTime;
+                        finalResult.addAll(
+                                v.stream().filter(bean -> bean.getFinishTime() == time).collect(Collectors.toList()));
+                    } else {
+                        //客观分最高,客观分相同则全部提交阅卷
+                        final double score = highestObjectiveScore;
+                        List<TOeExamRecord> temoRecordResult = tempResult.stream()
+                                .filter(bean -> bean.getObjectiveScore() == score).collect(Collectors.toList());
+                        if (temoRecordResult.size() > 1) {
+                            TOeExamRecord tOeExamRecord = temoRecordResult.stream()
+                                    .max((p1, p2) -> Long.compare(p1.getFinishTime(), p2.getFinishTime())).get();
+                            finalResult.add(tOeExamRecord);
                         } else {
-                            //客观分最高,客观分相同则全部提交阅卷
-                            final double score = highestObjectiveScore;
-                            List<TOeExamRecord> temoRecordResult = tempResult.stream().filter(bean -> bean.getObjectiveScore() == score).collect(Collectors.toList());
-                            if (temoRecordResult.size() > 1) {
-                                TOeExamRecord tOeExamRecord = temoRecordResult.stream().max((p1, p2) -> Long.compare(p1.getFinishTime(), p2.getFinishTime())).get();
-                                finalResult.add(tOeExamRecord);
-                            } else {
-                                finalResult.add(temoRecordResult.get(0));
-                            }
+                            finalResult.add(temoRecordResult.get(0));
                         }
-                        break;
-                    case LATEST:
-                        //最后一次提交
-                        final long time = maxFinishTime;
-                        finalResult.addAll(tempResult.stream().filter(bean -> bean.getFinishTime() == time).collect(Collectors.toList()));
-                        break;
-                    default:
-                        //总分最高,全部提交阅卷
-                        finalResult.addAll(tempResult);
-                        break;
+                    }
+                    break;
+                case LATEST:
+                    //最后一次提交
+                    final long time = maxFinishTime;
+                    finalResult.addAll(tempResult.stream().filter(bean -> bean.getFinishTime() == time)
+                            .collect(Collectors.toList()));
+                    break;
+                default:
+                    //总分最高,全部提交阅卷
+                    finalResult.addAll(tempResult);
+                    break;
                 }
             });
         }
@@ -694,20 +736,16 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
      * @return
      * @throws IOException
      */
-    private Set<Long> pushExamPaperLogic(Map<String, Object> map,
-                                         JSONObject jsonObject,
-                                         Integer totalTaskSize,
-                                         Integer jsCurrentTaskSize,
-                                         Integer currentTaskSize,
-                                         Long cloudMarkExamId) throws IOException {
+    private Set<Long> pushExamPaperLogic(Map<String, Object> map, JSONObject jsonObject, Integer totalTaskSize,
+            Integer jsCurrentTaskSize, Integer currentTaskSize, Long cloudMarkExamId) throws IOException {
         Long examId = (Long) map.get(SystemConstant.EXAM_ID);
         Long orgId = Long.parseLong(String.valueOf(map.get(SystemConstant.ORG_ID)));
         TBTaskHistory tbTaskHistory = (TBTaskHistory) map.get("tbTaskHistory");
         List<File> paperJsonList = null;
 
         QueryWrapper<TEExamPaper> teExamPaperQueryWrapper = new QueryWrapper<>();
-        teExamPaperQueryWrapper.lambda().eq(TEExamPaper::getExamId, examId)
-                .gt(TEExamPaper::getTotalSubjectiveScore, 0).orderByAsc(TEExamPaper::getId);
+        teExamPaperQueryWrapper.lambda().eq(TEExamPaper::getExamId, examId).gt(TEExamPaper::getTotalSubjectiveScore, 0)
+                .orderByAsc(TEExamPaper::getId);
         List<TEExamPaper> teExamPaperList = teExamPaperService.list(teExamPaperQueryWrapper);
         if (CollectionUtils.isEmpty(teExamPaperList)) {
             throw new BusinessException("没有考试试卷");
@@ -743,9 +781,11 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                         continue;
                     } else {
                         String courseCode = t.getCourseCode() + SystemConstant.JOINT_MARK + t.getId();
-                        cloudMarkUtil.callSubjectSaveApi(new SaveSubjectParams(orgId, cloudMarkExamId, courseCode, t.getName()));
+                        cloudMarkUtil.callSubjectSaveApi(
+                                new SaveSubjectParams(orgId, cloudMarkExamId, courseCode, t.getName()));
                         //解析试卷JSON文件
-                        JSONObject paperResult = JSONObject.parseObject(new String(ossUtil.download(false, t.getPaperViewPath()), StandardCharsets.UTF_8));
+                        JSONObject paperResult = JSONObject.parseObject(
+                                new String(ossUtil.download(false, t.getPaperViewPath()), StandardCharsets.UTF_8));
                         paperResult.put(SystemConstant.ID, t.getId());
                         paperResult.put("code", t.getCode());
                         paperResult.put(SystemConstant.NAME, t.getName());
@@ -753,16 +793,20 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                             JSONArray detailCollection = new JSONArray();
                             JSONArray paperDetails = paperResult.getJSONArray(SystemConstant.DETAILS);
                             //解析答案JSON文件
-                            JSONObject answerJson = JSONObject.parseObject(new String(ossUtil.download(false, t.getAnswerPath()), StandardCharsets.UTF_8));
+                            JSONObject answerJson = JSONObject.parseObject(
+                                    new String(ossUtil.download(false, t.getAnswerPath()), StandardCharsets.UTF_8));
                             JSONArray answerDetails = answerJson.getJSONArray(SystemConstant.DETAILS);
                             for (int j = 0; j < paperDetails.size(); j++) {
                                 //遍历所有大题
                                 JSONObject paperDetail = paperDetails.getJSONObject(j);
-                                JSONObject answerDetail = SystemConstant.findJsonObject(answerDetails, paperDetail.getIntValue(SystemConstant.NUMBER));
+                                JSONObject answerDetail = SystemConstant.findJsonObject(answerDetails,
+                                        paperDetail.getIntValue(SystemConstant.NUMBER));
                                 //按条件过滤需要的小题同时合并答案
-                                JSONArray questionCollection = SystemConstant.filterQuestions(paperDetail.getJSONArray(SystemConstant.QUESTIONS),
-                                        Objects.nonNull(answerDetail) ? answerDetail.getJSONArray(SystemConstant.QUESTIONS) : null, false,
-                                        true);
+                                JSONArray questionCollection = SystemConstant.filterQuestions(
+                                        paperDetail.getJSONArray(SystemConstant.QUESTIONS),
+                                        Objects.nonNull(answerDetail) ?
+                                                answerDetail.getJSONArray(SystemConstant.QUESTIONS) :
+                                                null, false, true);
                                 //有小题的情况下,本大题才需要被包含
                                 if (questionCollection.size() > 0) {
                                     paperDetail.put(SystemConstant.QUESTIONS, questionCollection);
@@ -772,14 +816,19 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                             paperResult.put(SystemConstant.DETAILS, detailCollection);
                         }
 
-                        File filePaperJson = new File(SystemConstant.TEMP_FILES_DIR + File.separator + CloudMarkFileUploadTypeEnum.PAPER.getCode() + File.separator + SystemConstant.getNanoId() + SystemConstant.JSON_PREFIX);
+                        File filePaperJson = new File(SystemConstant.TEMP_FILES_DIR + File.separator
+                                + CloudMarkFileUploadTypeEnum.PAPER.getCode() + File.separator
+                                + SystemConstant.getNanoId() + SystemConstant.JSON_PREFIX);
                         if (!filePaperJson.exists()) {
                             filePaperJson.getParentFile().mkdirs();
                             filePaperJson.createNewFile();
                         }
-                        IOUtils.write(paperResult.toJSONString().getBytes(SystemConstant.CHARSET_NAME), new FileOutputStream(filePaperJson));
+                        IOUtils.write(paperResult.toJSONString().getBytes(SystemConstant.CHARSET_NAME),
+                                new FileOutputStream(filePaperJson));
                         paperJsonList.add(filePaperJson);
-                        FileUploadParams fileUploadParamsPaperJson = new FileUploadParams(orgId, cloudMarkExamId, courseCode, CloudMarkFileUploadTypeEnum.JSON, filePaperJson, CloudMarkFileUploadTypeEnum.PAPER);
+                        FileUploadParams fileUploadParamsPaperJson = new FileUploadParams(orgId, cloudMarkExamId,
+                                courseCode, CloudMarkFileUploadTypeEnum.JSON, filePaperJson,
+                                CloudMarkFileUploadTypeEnum.PAPER);
                         cloudMarkUtil.callFileUploadApi(fileUploadParamsPaperJson);
 
                         jsonObject.put("currentTaskSize", currentTaskSize);
@@ -787,8 +836,10 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
                         tbTaskHistory.setRemark(jsonObject.toJSONString());
                     }
                 }
-                progress = BigDecimal.valueOf(currentTaskSize).divide(BigDecimal.valueOf(totalTaskSize), 2, BigDecimal.ROUND_HALF_UP).multiply(b);
-                if (Objects.isNull(tbTaskHistory.getProgress()) || (Objects.nonNull(tbTaskHistory.getProgress()) && tbTaskHistory.getProgress().doubleValue() < progress.doubleValue())) {
+                progress = BigDecimal.valueOf(currentTaskSize)
+                        .divide(BigDecimal.valueOf(totalTaskSize), 2, BigDecimal.ROUND_HALF_UP).multiply(b);
+                if (Objects.isNull(tbTaskHistory.getProgress()) || (Objects.nonNull(tbTaskHistory.getProgress())
+                        && tbTaskHistory.getProgress().doubleValue() < progress.doubleValue())) {
                     tbTaskHistory.setProgress(progress.doubleValue());
                     tbTaskHistoryService.updateById(tbTaskHistory);
                 }
@@ -849,7 +900,9 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
      * @param orgId
      * @param createId
      */
-    public void dataVerify(Long examId, String userName, String password, String roomCode, String roomName, Long orgId, Long createId, Set<TBUser> tbUserList, Set<TBUserRole> tbUserRoleList, Set<TBExamInvigilateUser> tbExamInvigilateUserList) throws UnsupportedEncodingException {
+    public void dataVerify(Long examId, String userName, String password, String roomCode, String roomName, Long orgId,
+            Long createId, Set<TBUser> tbUserList, Set<TBUserRole> tbUserRoleList,
+            Set<TBExamInvigilateUser> tbExamInvigilateUserList) throws UnsupportedEncodingException {
         if (Objects.nonNull(userName)) {
             //先查询监考帐号是否存在
             QueryWrapper<TBUser> tbUserQueryWrapper = new QueryWrapper<>();
@@ -871,17 +924,20 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
 
             QueryWrapper<TBExamInvigilateUser> tbExamInvigilateUserQueryWrapper = new QueryWrapper<>();
             tbExamInvigilateUserQueryWrapper.lambda().eq(TBExamInvigilateUser::getOrgId, orgId)
-                    .eq(TBExamInvigilateUser::getUserId, tbUser.getId())
-                    .eq(TBExamInvigilateUser::getRoomCode, roomCode)
-                    .eq(TBExamInvigilateUser::getExamId, examId)
-                    .eq(TBExamInvigilateUser::getRoomName, roomName);
-            TBExamInvigilateUser tbExamInvigilateUser = tbExamInvigilateUserService.getOne(tbExamInvigilateUserQueryWrapper);
+                    .eq(TBExamInvigilateUser::getUserId, tbUser.getId()).eq(TBExamInvigilateUser::getRoomCode, roomCode)
+                    .eq(TBExamInvigilateUser::getExamId, examId);
+            //                    .eq(TBExamInvigilateUser::getRoomName, roomName);
+            TBExamInvigilateUser tbExamInvigilateUser = tbExamInvigilateUserService.getOne(
+                    tbExamInvigilateUserQueryWrapper);
             if (Objects.isNull(tbExamInvigilateUser)) {//新增考场
                 tbExamInvigilateUser = new TBExamInvigilateUser(examId, orgId, tbUser.getId(), roomCode, roomName);
+            } else {
+                tbExamInvigilateUser.setRoomName(roomName);
             }
             tbExamInvigilateUserList.add(tbExamInvigilateUser);
         } else {
-            TBExamInvigilateUser tbExamInvigilateUser = new TBExamInvigilateUser(examId, orgId, null, roomCode, roomName);
+            TBExamInvigilateUser tbExamInvigilateUser = new TBExamInvigilateUser(examId, orgId, null, roomCode,
+                    roomName);
             if (!tbExamInvigilateUserList.contains(tbExamInvigilateUser)) {
                 tbExamInvigilateUserList.add(tbExamInvigilateUser);
             }
@@ -891,11 +947,15 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
     private boolean checkRoomCodeExist(Long examId, String roomCode, Long orgId, String roomName) {
         QueryWrapper<TBExamInvigilateUserTemp> tbExamInvigilateUserTempQueryWrapper = new QueryWrapper<>();
         tbExamInvigilateUserTempQueryWrapper.lambda().eq(TBExamInvigilateUserTemp::getExamId, examId)
-                .eq(TBExamInvigilateUserTemp::getOrgId, orgId)
-                .eq(TBExamInvigilateUserTemp::getRoomCode, roomCode)
-                .eq(TBExamInvigilateUserTemp::getRoomName, roomName);
-        TBExamInvigilateUserTemp tbExamInvigilateUserTemp = tbExamInvigilateUserTempService.getOne(tbExamInvigilateUserTempQueryWrapper);
-        tbExamInvigilateUserTemp = Objects.isNull(tbExamInvigilateUserTemp) ? new TBExamInvigilateUserTemp(examId, orgId, roomCode, roomName) : tbExamInvigilateUserTemp;
+                .eq(TBExamInvigilateUserTemp::getOrgId, orgId).eq(TBExamInvigilateUserTemp::getRoomCode, roomCode);
+        //                .eq(TBExamInvigilateUserTemp::getRoomName, roomName);
+        TBExamInvigilateUserTemp tbExamInvigilateUserTemp = tbExamInvigilateUserTempService.getOne(
+                tbExamInvigilateUserTempQueryWrapper);
+        if (Objects.isNull(tbExamInvigilateUserTemp)) {//新增考场
+            tbExamInvigilateUserTemp = new TBExamInvigilateUserTemp(examId, orgId, roomCode, roomName);
+        } else {
+            tbExamInvigilateUserTemp.setRoomName(roomName);
+        }
         return tbExamInvigilateUserTempService.saveOrUpdate(tbExamInvigilateUserTemp);
     }
 
@@ -911,16 +971,21 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
      */
     public List<String> importProgress(int max, int min, int size, List<String> txtList, TBTaskHistory tbTaskHistory) {
         BigDecimal bigDecimal = BigDecimal.valueOf(100);
-        BigDecimal progress = BigDecimal.valueOf(Double.valueOf(BigDecimal.valueOf(max).divide(BigDecimal.valueOf(size), 2, BigDecimal.ROUND_HALF_UP).multiply(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue())).setScale(0, BigDecimal.ROUND_HALF_UP);
+        BigDecimal progress = BigDecimal.valueOf(Double.valueOf(
+                        BigDecimal.valueOf(max).divide(BigDecimal.valueOf(size), 2, BigDecimal.ROUND_HALF_UP)
+                                .multiply(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()))
+                .setScale(0, BigDecimal.ROUND_HALF_UP);
         if (progress.intValue() == 100) {
             tbTaskHistory.setStatus(TaskStatusEnum.FINISH);
             tbTaskHistory.setSummary("共处理了" + size + "条数据");
             tbTaskHistory.setFinishTime(System.currentTimeMillis());
-            txtList.add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->数据处理完毕," + tbTaskHistory.getSummary());
+            txtList.add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->数据处理完毕,"
+                    + tbTaskHistory.getSummary());
         } else {
             tbTaskHistory.setStatus(TaskStatusEnum.RUNNING);
             tbTaskHistory.setSummary("正在处理第" + min + "条至" + max + "条数据");
-            txtList.add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->数据处理中," + tbTaskHistory.getSummary());
+            txtList.add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->数据处理中,"
+                    + tbTaskHistory.getSummary());
         }
         tbTaskHistory.setProgress(progress.doubleValue());
         return txtList;
@@ -940,7 +1005,10 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
         BigDecimal bigDecimal = BigDecimal.valueOf(100);
         BigDecimal progress = null;
         if (size > 0) {
-            progress = BigDecimal.valueOf(Double.valueOf(BigDecimal.valueOf(max).divide(BigDecimal.valueOf(size), 2, BigDecimal.ROUND_HALF_UP).multiply(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue())).setScale(0, BigDecimal.ROUND_HALF_UP);
+            progress = BigDecimal.valueOf(Double.valueOf(
+                            BigDecimal.valueOf(max).divide(BigDecimal.valueOf(size), 2, BigDecimal.ROUND_HALF_UP)
+                                    .multiply(bigDecimal).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue()))
+                    .setScale(0, BigDecimal.ROUND_HALF_UP);
         } else {
             progress = BigDecimal.valueOf(-1);
         }
@@ -948,16 +1016,19 @@ public class TempleteLogicServiceImpl implements TempleteLogicService {
             tbTaskHistory.setStatus(TaskStatusEnum.FINISH);
             tbTaskHistory.setSummary("共导出了" + size + "条数据");
             tbTaskHistory.setFinishTime(System.currentTimeMillis());
-            txtList.add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->数据导出完毕," + tbTaskHistory.getSummary());
+            txtList.add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->数据导出完毕,"
+                    + tbTaskHistory.getSummary());
         } else if (progress.intValue() == -1) {
             tbTaskHistory.setStatus(TaskStatusEnum.FINISH);
             tbTaskHistory.setSummary("没有导出数据");
             tbTaskHistory.setFinishTime(System.currentTimeMillis());
-            txtList.add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->数据导出完毕," + tbTaskHistory.getSummary());
+            txtList.add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->数据导出完毕,"
+                    + tbTaskHistory.getSummary());
         } else {
             tbTaskHistory.setStatus(TaskStatusEnum.RUNNING);
             tbTaskHistory.setSummary("正在导出第" + min + "条至" + max + "条数据");
-            txtList.add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->数据导出中," + tbTaskHistory.getSummary());
+            txtList.add(DateUtil.format(new Date(), Constants.DEFAULT_DATE_PATTERN) + "->数据导出中,"
+                    + tbTaskHistory.getSummary());
         }
         tbTaskHistory.setProgress(progress.doubleValue());
         return txtList;