yin 1 gadu atpakaļ
vecāks
revīzija
4e4384889e

+ 226 - 144
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -1,5 +1,19 @@
 package com.qmth.teachcloud.mark.service.impl;
 
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
+import javax.annotation.Resource;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.OrderItem;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -30,19 +44,8 @@ import com.qmth.teachcloud.mark.service.*;
 import com.qmth.teachcloud.mark.utils.BigDecimalUtils;
 import com.qmth.teachcloud.mark.utils.TaskLock;
 import com.qmth.teachcloud.mark.utils.TaskLockUtil;
-import io.lettuce.core.GeoArgs.Sort;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
-import javax.annotation.Resource;
-import java.math.BigDecimal;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
+import io.lettuce.core.GeoArgs.Sort;
 
 @Service
 public class MarkServiceImpl implements MarkService {
@@ -55,52 +58,72 @@ public class MarkServiceImpl implements MarkService {
 
     @Resource
     private MarkPaperService markPaperService;
+
     @Resource
     private MarkQuestionService markQuestionService;
+
     @Resource
     private MarkGroupService markGroupService;
+
     @Resource
     private MarkUserGroupService markUserGroupService;
+
     @Resource
     private MarkTaskService markTaskService;
+
     @Resource
     private MarkTrackService markTrackService;
+
     @Resource
     private MarkStudentService markStudentService;
+
     @Resource
     private MarkGroupStudentService markGroupStudentService;
+
     @Resource
     private MarkProblemHistoryService markProblemHistoryService;
+
     @Resource
     private MarkArbitrateHistoryService markArbitrateHistoryService;
+
     @Resource
     private MarkSubjectiveScoreService markSubjectiveScoreService;
+
     @Resource
     private MarkHeaderTrackService markHeaderTrackService;
+
     @Resource
     private MarkSpecialTagService markSpecialTagService;
+
     @Resource
     private MarkHeaderTagService markHeaderTagService;
+
     @Resource
     LockService lockService;
+
     @Resource
     ScanAnswerCardService scanAnswerCardService;
+
     @Resource
     TaskService taskService;
+
     @Resource
     TeachcloudCommonService teachcloudCommonService;
 
     /**
      * 释放某个评卷员已完成的评卷任务
      *
-     * @param submitResult  评卷结果
-     * @param markUserGroup 评卷员
+     * @param submitResult
+     *            评卷结果
+     * @param markUserGroup
+     *            评卷员
      */
     @Override
     public void releaseTask(SubmitResult submitResult, MarkUserGroup markUserGroup) {
         if (submitResult.getMarkLibrary() != null) {
             TaskLock taskLock = TaskLockUtil.getFormalTask(getGroupKey(markUserGroup));
-            taskLock.remove(submitResult.getMarkLibrary().getStudentId(), submitResult.getMarkLibrary().getTaskNumber(), markUserGroup.getId());
+            taskLock.remove(submitResult.getMarkLibrary().getStudentId(), submitResult.getMarkLibrary().getTaskNumber(),
+                    markUserGroup.getId());
             taskLock.refresh(markUserGroup.getId());
         }
     }
@@ -194,7 +217,8 @@ public class MarkServiceImpl implements MarkService {
 
     @Override
     public boolean rejectMarkTask(MarkProblemHistory markProblemHistory, MarkTask markTask, Long userId) {
-        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(markTask.getExamId(), markTask.getPaperNumber());
+        MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(markTask.getExamId(),
+                markTask.getPaperNumber());
         if (markPaper.getStatus() == MarkPaperStatus.FINISH) {
             return false;
         }
@@ -203,8 +227,8 @@ public class MarkServiceImpl implements MarkService {
             markTrackService.deleteByTaskId(markTask.getId());
             resetStudentGroup(markTask.getStudentId(), markTask.getExamId(), markTask.getPaperNumber(),
                     markTask.getGroupNumber());
-            markProblemHistoryService.resetByMarkProblemId(markProblemHistory.getId(), MarkProblemStatus.WAITING, userId,
-                    MarkProblemStatus.BACK, now);
+            markProblemHistoryService.resetByMarkProblemId(markProblemHistory.getId(), MarkProblemStatus.WAITING,
+                    userId, MarkProblemStatus.BACK, now);
             updateMarkedCount(markTask.getExamId(), markTask.getPaperNumber(), markTask.getGroupNumber());
             return true;
         } else {
@@ -218,7 +242,7 @@ public class MarkServiceImpl implements MarkService {
     }
 
     private void updateStudentGroupStatus(Long studentId, Long examId, String paperNumber, Integer groupNumber,
-                                          SubjectiveStatus status) {
+            SubjectiveStatus status) {
         MarkGroupStudent gs = new MarkGroupStudent();
         gs.setStudentId(studentId);
         gs.setExamId(examId);
@@ -286,7 +310,8 @@ public class MarkServiceImpl implements MarkService {
                 minScore = score;
             }
         }
-        markUserGroupService.updateQualityById(markUserGroup.getId(), finishCount, headerFinishCount, validCount, avgSpent / 1000, avgScore, stdevScore, maxScore, minScore);
+        markUserGroupService.updateQualityById(markUserGroup.getId(), finishCount, headerFinishCount, validCount,
+                avgSpent / 1000, avgScore, stdevScore, maxScore, minScore);
         markerLastUpdateTime.put(markUserGroup.getId(), System.currentTimeMillis());
     }
 
@@ -321,12 +346,13 @@ public class MarkServiceImpl implements MarkService {
     public void processArbitrate(MarkResult markResult, Long userId) {
         MarkArbitrateHistory markArbitrateHistory = markArbitrateHistoryService.getById(markResult.getTaskId());
         markArbitrateHistory.setUpdateUserId(userId);
-        markArbitrateHistory.setTotalScore(markResult.isUnselective() ? UN_SELECTIVE_SCORE : markResult.getMarkerScore());
+        markArbitrateHistory
+                .setTotalScore(markResult.isUnselective() ? UN_SELECTIVE_SCORE : markResult.getMarkerScore());
         markArbitrateHistory.setScoreList(markResult.isUnselective() ? null : markResult.getScoreList());
         markArbitrateHistory.setStatus(MarkArbitrateStatus.MARKED);
         markArbitrateHistory.setUpdateTime(System.currentTimeMillis());
         // 保存阅卷轨迹
-//		int unansweredCount = 0;
+        // int unansweredCount = 0;
         if (markResult.getTrackList() != null && !markResult.isUnselective()) {
             markHeaderTrackService.deleteByExamIdAndPaperNumberAndGroupNumberAndStudentId(
                     markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(),
@@ -398,7 +424,8 @@ public class MarkServiceImpl implements MarkService {
             log.info("start create library for examId=" + markPaper.getExamId() + ", paperNumber="
                     + markPaper.getPaperNumber());
             // 清除缺考考生和违纪考生
-            List<MarkStudent> markStudentList = markStudentService.listAbsentOrBreachMarkTaskStudent(markPaper.getExamId(), markPaper.getPaperNumber());
+            List<MarkStudent> markStudentList = markStudentService
+                    .listAbsentOrBreachMarkTaskStudent(markPaper.getExamId(), markPaper.getPaperNumber());
             if (CollectionUtils.isNotEmpty(markStudentList)) {
                 for (MarkStudent student : markStudentList) {
                     try {
@@ -434,12 +461,15 @@ public class MarkServiceImpl implements MarkService {
                 return;
             }
             int count = 0;
-            List<MarkStudent> studentList = markStudentService.listUnMarkTaskStudent(group.getExamId(), group.getPaperNumber(), group.getNumber(), pageSize);
+            List<MarkStudent> studentList = markStudentService.listUnMarkTaskStudent(group.getExamId(),
+                    group.getPaperNumber(), group.getNumber(), pageSize);
             while (CollectionUtils.isNotEmpty(studentList)) {
                 // 已生成的双评任务总数的第一组任务数
-                int doubleMarkTaskCount1 = markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndTaskNumber(group.getExamId(), group.getPaperNumber(), group.getNumber(), 1);
+                int doubleMarkTaskCount1 = markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndTaskNumber(
+                        group.getExamId(), group.getPaperNumber(), group.getNumber(), 1);
                 // 已生成的双评任务总数的第二组任务数
-                int doubleMarkTaskCount2 = markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndTaskNumber(group.getExamId(), group.getPaperNumber(), group.getNumber(), 2);
+                int doubleMarkTaskCount2 = markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndTaskNumber(
+                        group.getExamId(), group.getPaperNumber(), group.getNumber(), 2);
                 List<MarkTask> taskList = new ArrayList<>();
                 int doubleCount = 0;
                 int studentCount = studentList.size();
@@ -464,11 +494,13 @@ public class MarkServiceImpl implements MarkService {
                             needDouble = true;
                         } else {
                             double libraryCount = taskList.size();
-                            int expectCount = (int) ((doubleMarkTaskCount1 + studentCount) * group.getDoubleRate() / 100);
+                            int expectCount = (int) ((doubleMarkTaskCount1 + studentCount) * group.getDoubleRate()
+                                    / 100);
                             // 随机数判断加入当前已经生成双评任务的比例加权
                             // 实际双评任务数小于理论生成数 &&(剩余未生成双评的考生数量小于剩余应生成的数量)
                             needDouble = (doubleMarkTaskCount2 + doubleCount) < expectCount
-                                    && ((studentCount - libraryCount + doubleCount) <= (expectCount - doubleMarkTaskCount2 - doubleCount));
+                                    && ((studentCount - libraryCount + doubleCount) <= (expectCount
+                                            - doubleMarkTaskCount2 - doubleCount));
                         }
                         if (needDouble) {
                             markTask = new MarkTask();
@@ -501,7 +533,8 @@ public class MarkServiceImpl implements MarkService {
                         this.updateMarkedCount(group.getExamId(), group.getPaperNumber(), group.getNumber());
                     }
                 }
-                studentList = markStudentService.listUnMarkTaskStudent(group.getExamId(), group.getPaperNumber(), group.getNumber(), pageSize);
+                studentList = markStudentService.listUnMarkTaskStudent(group.getExamId(), group.getPaperNumber(),
+                        group.getNumber(), pageSize);
             }
             if (count != 0) {
                 log.info("finish create " + count + " markTask for examId=" + group.getExamId() + ", paperNumber="
@@ -518,6 +551,7 @@ public class MarkServiceImpl implements MarkService {
     @Transactional
     @Override
     public void deleteMarkTaskByStudent(MarkStudent student) {
+        markStudentService.updateSubjectiveStatusAndScore(student.getId(), SubjectiveStatus.UNMARK, null, null);
         // 正评相关数据
         markTrackService.deleteByStudentId(student.getId());
         markSpecialTagService.deleteByStudentId(student.getId());
@@ -529,12 +563,12 @@ public class MarkServiceImpl implements MarkService {
         // 主观状态与得分明细
         markGroupStudentService.deleteByStudentId(student.getId());
         markSubjectiveScoreService.deleteByStudentId(student.getId());
-//        selectiveStudentDao.deleteByStudentId(student.getId());
+        // selectiveStudentDao.deleteByStudentId(student.getId());
         updateGroupAllCount(student.getExamId(), student.getPaperNumber());
         // 复核记录
-//        inspectedService.clearByStudent(student.getId());
+        // inspectedService.clearByStudent(student.getId());
         // 打回记录
-//        rejectHistoryDao.deleteByStudentId(student.getId());
+        // rejectHistoryDao.deleteByStudentId(student.getId());
     }
 
     @Transactional
@@ -590,35 +624,35 @@ public class MarkServiceImpl implements MarkService {
                 detail = scores;
             } else {
                 switch (policy) {
-                    case AVG:
-                        // 直接累加
-                        score = BigDecimalUtils.add(score, current);
-                        for (int i = 0; i < detail.size(); i++) {
-                            try {
-                                ScoreItem item = detail.get(i);
-                                ScoreItem other = scores.get(i);
-                                item.setScore(BigDecimalUtils.add(item.getScore(), other.getScore()));
-                            } catch (Exception e) {
-                                continue;
-                            }
+                case AVG:
+                    // 直接累加
+                    score = BigDecimalUtils.add(score, current);
+                    for (int i = 0; i < detail.size(); i++) {
+                        try {
+                            ScoreItem item = detail.get(i);
+                            ScoreItem other = scores.get(i);
+                            item.setScore(BigDecimalUtils.add(item.getScore(), other.getScore()));
+                        } catch (Exception e) {
+                            continue;
                         }
-                        break;
-                    case MAX:
-                        // 高分优先
-                        if (current > score) {
-                            score = current;
-                            detail = scores;
-                        }
-                        break;
-                    case MIN:
-                        // 低分优先
-                        if (current < score) {
-                            score = current;
-                            detail = scores;
-                        }
-                        break;
-                    default:
-                        break;
+                    }
+                    break;
+                case MAX:
+                    // 高分优先
+                    if (current > score) {
+                        score = current;
+                        detail = scores;
+                    }
+                    break;
+                case MIN:
+                    // 低分优先
+                    if (current < score) {
+                        score = current;
+                        detail = scores;
+                    }
+                    break;
+                default:
+                    break;
                 }
             }
         }
@@ -635,7 +669,7 @@ public class MarkServiceImpl implements MarkService {
     }
 
     private void updateStudentGroupScore(Long studentId, Long examId, String paperNumber, MarkGroup group, double score,
-                                         List<ScoreItem> scoreList) {
+            List<ScoreItem> scoreList) {
         // scoreDao.deleteByStudentIdAndGroupNumber(studentId, groupNumber);
         List<MarkQuestion> questions = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId,
                 paperNumber, group.getNumber(), false);
@@ -666,11 +700,14 @@ public class MarkServiceImpl implements MarkService {
                 ss.setMainScore(score);
                 ss.setUncalculate(true);
             }
-//            if (group.getArbitrateThreshold() != null && group.getArbitrateThreshold() > 0) {
-//                ss.setUnansweredCount(markHeaderTrackService.countByStudentIdAndQuestionNumberAndUnanswered(studentId, question.getQuestionNumber(), true));
-//            } else {
-//                ss.setUnansweredCount(markTaskService.countByStudentIdAndQuestionNumberAndUnanswered(studentId, question.getQuestionNumber(), true));
-//            }
+            // if (group.getArbitrateThreshold() != null && group.getArbitrateThreshold() >
+            // 0) {
+            // ss.setUnansweredCount(markHeaderTrackService.countByStudentIdAndQuestionNumberAndUnanswered(studentId,
+            // question.getQuestionNumber(), true));
+            // } else {
+            // ss.setUnansweredCount(markTaskService.countByStudentIdAndQuestionNumberAndUnanswered(studentId,
+            // question.getQuestionNumber(), true));
+            // }
             markSubjectiveScoreService.saveOrUpdateByMultiId(ss);
         }
     }
@@ -682,7 +719,7 @@ public class MarkServiceImpl implements MarkService {
 
         // 循环所有主观得分明细
         List<MarkSubjectiveScore> list = markSubjectiveScoreService.listByStudentIdAndGroupNumber(studentId, null);
-//		list.sort(null);
+        // list.sort(null);
         for (MarkSubjectiveScore ss : list) {
             List<MarkSubjectiveScore> mainScoreList = mainScoreMap.get(ss.getMainNumber());
             if (mainScoreList == null) {
@@ -719,7 +756,8 @@ public class MarkServiceImpl implements MarkService {
             totalScore = totalScore.add(BigDecimal.valueOf(scoreMap.get(mainNumber)));
         }
         // 全部评完,更新考生主观题得分
-        markStudentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.MARKED, totalScore.doubleValue(), MarkStudent.buildScoreList(scoreList));
+        markStudentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.MARKED, totalScore.doubleValue(),
+                MarkStudent.buildScoreList(scoreList));
     }
 
     @Override
@@ -730,15 +768,18 @@ public class MarkServiceImpl implements MarkService {
 
         MarkSettingDto dto = new MarkSettingDto();
         dto.setExamType(ExamType.SCAN_IMAGE);
-        dto.setMode(markUserGroup != null && markUserGroup.getMode() != null ? markUserGroup.getMode() : MarkMode.UNLIMITED.equals(markPaper.getMarkMode()) ? MarkMode.TRACK : markPaper.getMarkMode());
+        dto.setMode(markUserGroup != null && markUserGroup.getMode() != null ? markUserGroup.getMode()
+                : MarkMode.UNLIMITED.equals(markPaper.getMarkMode()) ? MarkMode.TRACK : markPaper.getMarkMode());
         dto.setForceMode(markPaper.getForceMode());
         dto.setSheetView(markPaper.getSheetView());
         dto.setSheetConfig(markPaper.getSheetConfig());
         dto.setEnableAllZore(false);
         dto.setFileServer(null);
         dto.setUserName(user.getRealName());
-        dto.getSubject().setAnswerUrl(StringUtils.isBlank(markPaper.getAnswerFilePath()) ? null : teachcloudCommonService.filePreview(markPaper.getAnswerFilePath()));
-        dto.getSubject().setPaperUrl(StringUtils.isBlank(markPaper.getPaperFilePath()) ? null : teachcloudCommonService.filePreview(markPaper.getPaperFilePath()));
+        dto.getSubject().setAnswerUrl(StringUtils.isBlank(markPaper.getAnswerFilePath()) ? null
+                : teachcloudCommonService.filePreview(markPaper.getAnswerFilePath()));
+        dto.getSubject().setPaperUrl(StringUtils.isBlank(markPaper.getPaperFilePath()) ? null
+                : teachcloudCommonService.filePreview(markPaper.getPaperFilePath()));
         dto.getSubject().setCode(markPaper.getPaperNumber());
         dto.getSubject().setName(markPaper.getCourseName());
         dto.setForceSpecialTag(false);
@@ -768,7 +809,8 @@ public class MarkServiceImpl implements MarkService {
         dto.setMarkedCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndStatusIn(examId, paperNumber,
                 markUserGroup.getGroupNumber(), Arrays.asList(MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED)));
         dto.setPersonCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumberAndUserIdAndStatusIn(examId,
-                paperNumber, groupNumber, userId, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED, MarkTaskStatus.WAIT_ARBITRATE));
+                paperNumber, groupNumber, userId, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED,
+                MarkTaskStatus.WAIT_ARBITRATE));
         dto.setProblemCount(markTaskService.countProblemByExamIdAndPaperNumberAndGroupNumberAndStatusIn(examId,
                 paperNumber, groupNumber, MarkTaskStatus.PROBLEM));
         dto.setTotalCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber));
@@ -802,32 +844,45 @@ public class MarkServiceImpl implements MarkService {
     public void clear(Long userId, Long examId, String paperNumber, Integer groupNumber) {
         String key = examId + "_" + paperNumber + "_" + groupNumber;
         TaskLock taskLock = TaskLockUtil.getFormalTask(key);
-        MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, groupNumber, userId);
+        MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId,
+                paperNumber, groupNumber, userId);
         taskLock.clear(markUserGroup.getId());
     }
 
     @Override
     public void deleteMarkGroup(MarkGroup markGroup, boolean deleteGroupInfo) {
         // 正评相关数据
-        markTrackService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
-        markSpecialTagService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
-        markHeaderTrackService.deleteByExamIdAndPaperNumberAndGroupNumberAndStudentId(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber(), null);
-        markHeaderTagService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
-        markArbitrateHistoryService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
-        markProblemHistoryService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
-        markTaskService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
+        markTrackService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(),
+                markGroup.getNumber());
+        markSpecialTagService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
+                markGroup.getPaperNumber(), markGroup.getNumber());
+        markHeaderTrackService.deleteByExamIdAndPaperNumberAndGroupNumberAndStudentId(markGroup.getExamId(),
+                markGroup.getPaperNumber(), markGroup.getNumber(), null);
+        markHeaderTagService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
+                markGroup.getPaperNumber(), markGroup.getNumber());
+        markArbitrateHistoryService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
+                markGroup.getPaperNumber(), markGroup.getNumber());
+        markProblemHistoryService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
+                markGroup.getPaperNumber(), markGroup.getNumber());
+        markTaskService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(),
+                markGroup.getNumber());
         // 考生分组状态与得分明细
-        markGroupStudentService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
-        markSubjectiveScoreService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
+        markGroupStudentService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
+                markGroup.getPaperNumber(), markGroup.getNumber());
+        markSubjectiveScoreService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
+                markGroup.getPaperNumber(), markGroup.getNumber());
         // 删除分组
         releaseByMarkGroup(markGroup);
         // 删除分组时,同步删除评卷员、分组等信息
         if (deleteGroupInfo) {
             // 评卷员数据
-            markUserGroupService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
+            markUserGroupService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
+                    markGroup.getPaperNumber(), markGroup.getNumber());
             // 小题数据
-            markQuestionService.updateGroupNumberByExamIdAndPaperNumberAndGroupNumber(null, markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
-            markGroupService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(), markGroup.getPaperNumber(), markGroup.getNumber());
+            markQuestionService.updateGroupNumberByExamIdAndPaperNumberAndGroupNumber(null, markGroup.getExamId(),
+                    markGroup.getPaperNumber(), markGroup.getNumber());
+            markGroupService.deleteByExamIdAndPaperNumberAndGroupNumber(markGroup.getExamId(),
+                    markGroup.getPaperNumber(), markGroup.getNumber());
             // 更新MarkPaper中groupStatus
             updateMarkGroupStatus(markGroup.getExamId(), markGroup.getPaperNumber());
         }
@@ -836,12 +891,15 @@ public class MarkServiceImpl implements MarkService {
         long unGroupQuestionCount = markQuestionService.countByExamIdAndPaperNumberAndObjectiveAndGroupNumberIsNull(
                 markGroup.getExamId(), markGroup.getPaperNumber(), false);
         // 考生整体状态与总分更新
-        long groupCount = markGroupService.countByExamIdAndPaperNumber(markGroup.getExamId(), markGroup.getPaperNumber());
+        long groupCount = markGroupService.countByExamIdAndPaperNumber(markGroup.getExamId(),
+                markGroup.getPaperNumber());
         if (groupCount == 0 || unGroupQuestionCount > 0) {
-            markStudentService.updateSubjectiveStatusAndScore(markGroup.getExamId(), markGroup.getPaperNumber(), SubjectiveStatus.UNMARK, 0D, null);
+            markStudentService.updateSubjectiveStatusAndScore(markGroup.getExamId(), markGroup.getPaperNumber(),
+                    SubjectiveStatus.UNMARK, 0D, null);
         } else {
             List<Long> studentList = markStudentService.findIdByExamIdAndPaperNumberAndSubjectiveStatus(
-                    markGroup.getExamId(), markGroup.getPaperNumber(), SubjectiveStatus.UNMARK, SubjectiveStatus.MARKED);
+                    markGroup.getExamId(), markGroup.getPaperNumber(), SubjectiveStatus.UNMARK,
+                    SubjectiveStatus.MARKED);
             for (Long studentId : studentList) {
                 checkStudentSubjective(studentId, groupCount, unGroupQuestionCount);
             }
@@ -882,13 +940,15 @@ public class MarkServiceImpl implements MarkService {
         Long userId = ServletUtil.getRequestUserId();
         for (MarkHeaderGroupResult groupResult : markHeaderGroupResultList) {
             try {
-                lockService.watch(LockType.GROUP, markStudent.getExamId(), markStudent.getPaperNumber(), groupResult.getGroupNumber());
+                lockService.watch(LockType.GROUP, markStudent.getExamId(), markStudent.getPaperNumber(),
+                        groupResult.getGroupNumber());
                 Long currentTime = System.currentTimeMillis();
                 if (groupResult.getTrackList() != null) {
                     for (MarkScoreList scoreList : groupResult.getMarkerScore()) {
                         String questionNumber = scoreList.getMainNumber() + "." + scoreList.getSubNumber();
-                        markHeaderTrackService.deleteByExamIdAndPaperNumberAndGroupNumberAndStudentIdAndQuestionNumber(markStudent.getExamId(),
-                                markStudent.getPaperNumber(), groupResult.getGroupNumber(), groupResult.getStudentId(), questionNumber);
+                        markHeaderTrackService.deleteByExamIdAndPaperNumberAndGroupNumberAndStudentIdAndQuestionNumber(
+                                markStudent.getExamId(), markStudent.getPaperNumber(), groupResult.getGroupNumber(),
+                                groupResult.getStudentId(), questionNumber);
                     }
                     List<MarkHeaderTrack> tracks = groupResult.getTrackList(groupResult, markStudent, userId);
                     markHeaderTrackService.saveOrUpdateBatchByMultiId(tracks);
@@ -901,39 +961,47 @@ public class MarkServiceImpl implements MarkService {
                 }
                 updateMarkSubjectScore(markStudent, groupResult);
                 markTaskService.updateHeaderResult(markStudent.getExamId(), markStudent.getPaperNumber(),
-                        groupResult.getGroupNumber(), groupResult.getStudentId(), userId,
-                        groupResult.getGroupScore(), groupResult.getScoreList(), currentTime, MarkTaskStatus.MARKED);
+                        groupResult.getGroupNumber(), groupResult.getStudentId(), userId, groupResult.getGroupScore(),
+                        groupResult.getScoreList(), currentTime, MarkTaskStatus.MARKED);
                 updateMarkedCount(markStudent.getExamId(), markStudent.getPaperNumber(), groupResult.getGroupNumber());
                 markStudentService.updateCheckInfo(markStudent.getId(), userId);
-                checkStudentGroup(groupResult.getStudentId(),
-                        markGroupService.getByExamIdAndPaperNumberAndGroupNumber(markStudent.getExamId(), markStudent.getPaperNumber(), groupResult.getGroupNumber()));
+                checkStudentGroup(groupResult.getStudentId(), markGroupService.getByExamIdAndPaperNumberAndGroupNumber(
+                        markStudent.getExamId(), markStudent.getPaperNumber(), groupResult.getGroupNumber()));
             } catch (ApiException e) {
                 throw ExceptionResultEnum.ERROR.exception(e.getMessage());
             } finally {
-                lockService.unwatch(LockType.GROUP, markStudent.getExamId(), markStudent.getPaperNumber(), groupResult.getGroupNumber());
+                lockService.unwatch(LockType.GROUP, markStudent.getExamId(), markStudent.getPaperNumber(),
+                        groupResult.getGroupNumber());
             }
         }
 
         // 未分组的题目
-        long unGroupQuestionCount = markQuestionService.countByExamIdAndPaperNumberAndObjectiveAndGroupNumberIsNull(markStudent.getExamId(), markStudent.getPaperNumber(), false);
-        long groupCount = CollectionUtils.size(markGroupService.listGroupByExamIdAndPaperNumber(markStudent.getExamId(), markStudent.getPaperNumber()));
+        long unGroupQuestionCount = markQuestionService.countByExamIdAndPaperNumberAndObjectiveAndGroupNumberIsNull(
+                markStudent.getExamId(), markStudent.getPaperNumber(), false);
+        long groupCount = CollectionUtils.size(markGroupService.listGroupByExamIdAndPaperNumber(markStudent.getExamId(),
+                markStudent.getPaperNumber()));
         checkStudentSubjective(markStudent.getId(), groupCount, unGroupQuestionCount);
     }
 
     private void updateMarkSubjectScore(MarkStudent markStudent, MarkHeaderGroupResult groupResult) {
-        List<MarkSubjectiveScore> markSubjectiveScoreList = markSubjectiveScoreService.listByStudentIdAndGroupNumber(markStudent.getId(), groupResult.getGroupNumber());
-        markSubjectiveScoreList.sort(Comparator.comparing(MarkSubjectiveScore::getMainNumber).thenComparingInt(MarkSubjectiveScore::getSubNumber));
+        List<MarkSubjectiveScore> markSubjectiveScoreList = markSubjectiveScoreService
+                .listByStudentIdAndGroupNumber(markStudent.getId(), groupResult.getGroupNumber());
+        markSubjectiveScoreList.sort(Comparator.comparing(MarkSubjectiveScore::getMainNumber)
+                .thenComparingInt(MarkSubjectiveScore::getSubNumber));
         List<Double> scoreList = new ArrayList<>();
         for (MarkSubjectiveScore markSubjectiveScore : markSubjectiveScoreList) {
             List<MarkScoreList> markScoreLists = groupResult.getMarkerScore();
-            Optional<MarkScoreList> optional = markScoreLists.stream().filter(m -> m.getMainNumber().equals(markSubjectiveScore.getMainNumber()) && m.getSubNumber().equals(markSubjectiveScore.getSubNumber())).findFirst();
+            Optional<MarkScoreList> optional = markScoreLists.stream()
+                    .filter(m -> m.getMainNumber().equals(markSubjectiveScore.getMainNumber())
+                            && m.getSubNumber().equals(markSubjectiveScore.getSubNumber()))
+                    .findFirst();
             if (optional.isPresent()) {
                 markSubjectiveScore.setScore(optional.get().getScore());
             }
             scoreList.add(markSubjectiveScore.getScore());
         }
         groupResult.setGroupScore(scoreList.stream().collect(Collectors.summingDouble(x -> x)));
-        groupResult.setScoreList(scoreList.toArray(new Double[]{}));
+        groupResult.setScoreList(scoreList.toArray(new Double[] {}));
         markSubjectiveScoreService.saveOrUpdateBatchByMultiId(markSubjectiveScoreList);
     }
 
@@ -943,7 +1011,7 @@ public class MarkServiceImpl implements MarkService {
 
     @Override
     public IPage<Task> getHistory(Long userId, int pageNumber, int pageSize, Sort sort, String order, Long examId,
-                                  String paperNumber, Integer groupNumber, String secretNumber, Double markerScore) {
+            String paperNumber, Integer groupNumber, String secretNumber, Double markerScore) {
         if (!"marker_time".equals(order) && !"marker_score".equals(order)) {
             order = "marker_time";
         }
@@ -981,7 +1049,8 @@ public class MarkServiceImpl implements MarkService {
         if (group == null) {
             throw ExceptionResultEnum.ERROR.exception("评卷大题不存在");
         }
-        MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, groupNumber, userId);
+        MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId,
+                paperNumber, groupNumber, userId);
         Task task = null;
         List<MarkTask> list;
         int pageNumber = 1;
@@ -1047,13 +1116,15 @@ public class MarkServiceImpl implements MarkService {
     public void calcObjectiveScore(MarkPaper markPaper) {
         int pageNumber = 1;
         int pageSize = 1000;
-        IPage<MarkStudent> iPage = markStudentService.pageByExamAndPaperNumber(markPaper.getExamId(), markPaper.getPaperNumber(), pageNumber, pageSize);
+        IPage<MarkStudent> iPage = markStudentService.pageByExamAndPaperNumber(markPaper.getExamId(),
+                markPaper.getPaperNumber(), pageNumber, pageSize);
         while (CollectionUtils.isNotEmpty(iPage.getRecords())) {
             for (MarkStudent student : iPage.getRecords()) {
                 calculate(student);
             }
             pageNumber++;
-            iPage = markStudentService.pageByExamAndPaperNumber(markPaper.getExamId(), markPaper.getPaperNumber(), pageNumber, pageSize);
+            iPage = markStudentService.pageByExamAndPaperNumber(markPaper.getExamId(), markPaper.getPaperNumber(),
+                    pageNumber, pageSize);
         }
     }
 
@@ -1075,7 +1146,8 @@ public class MarkServiceImpl implements MarkService {
 
     @Override
     public SubmitResult saveTask(Long examId, String paperNumber, Integer groupNumber, Long userId, MarkResult result) {
-        MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, groupNumber, userId);
+        MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId,
+                paperNumber, groupNumber, userId);
         if (markUserGroup == null) {
             throw ExceptionResultEnum.ERROR.exception("评卷员未绑定该评卷任务");
         }
@@ -1087,7 +1159,8 @@ public class MarkServiceImpl implements MarkService {
         SubmitResult sr = null;
         try {
             lockService.watch(LockType.EXAM_SUBJECT, markUserGroup.getExamId(), markUserGroup.getPaperNumber());
-            lockService.watch(LockType.GROUP, markUserGroup.getExamId(), markUserGroup.getPaperNumber(), markUserGroup.getGroupNumber());
+            lockService.watch(LockType.GROUP, markUserGroup.getExamId(), markUserGroup.getPaperNumber(),
+                    markUserGroup.getGroupNumber());
             lockService.watch(LockType.MARK_USER_GROUP, markUserGroup.getId());
             lockService.waitlock(LockType.STUDENT, result.getStudentId());
             sr = submitResult(markUserGroup, group, userId, result);
@@ -1099,7 +1172,8 @@ public class MarkServiceImpl implements MarkService {
         } finally {
             lockService.unlock(LockType.STUDENT, result.getStudentId());
             lockService.unwatch(LockType.MARK_USER_GROUP, markUserGroup.getId());
-            lockService.unwatch(LockType.GROUP, markUserGroup.getExamId(), markUserGroup.getPaperNumber(), markUserGroup.getGroupNumber());
+            lockService.unwatch(LockType.GROUP, markUserGroup.getExamId(), markUserGroup.getPaperNumber(),
+                    markUserGroup.getGroupNumber());
             lockService.unwatch(LockType.EXAM_SUBJECT, markUserGroup.getExamId(), markUserGroup.getPaperNumber());
         }
 
@@ -1167,7 +1241,8 @@ public class MarkServiceImpl implements MarkService {
     }
 
     private boolean submitTask(MarkTask task, Long userId, MarkGroup group, MarkResult result) {
-        MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(group.getExamId(), group.getPaperNumber(), group.getNumber(), userId);
+        MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(
+                group.getExamId(), group.getPaperNumber(), group.getNumber(), userId);
         // 非本人领取的待评任务
         if ((task.getStatus() == MarkTaskStatus.WAITING || task.getStatus() == MarkTaskStatus.REJECTED)
                 && !hasApplied(task, markUserGroup.getId())) {
@@ -1178,16 +1253,17 @@ public class MarkServiceImpl implements MarkService {
             return false;
         }
         // 是否多评情况下已处理过该考生评卷任务
-        if (markTaskService.countByStudentIdAndMarkerIdAndIdNotEqual(task.getStudentId(), task.getExamId(), task.getPaperNumber(), task.getGroupNumber(), userId, task.getId()) > 0) {
+        if (markTaskService.countByStudentIdAndMarkerIdAndIdNotEqual(task.getStudentId(), task.getExamId(),
+                task.getPaperNumber(), task.getGroupNumber(), userId, task.getId()) > 0) {
             return false;
         }
         // 未选做
-//        if (result.isUnselective() && group.isSelective()) {
-//            result.setMarkerScore(UN_SELECTIVE_SCORE);
-//            result.setScoreList(new Double[0]);
-//            trackDao.deleteByLibraryId(library.getId());
-//            specialTagDao.deleteByLibraryId(library.getId());
-//        }
+        // if (result.isUnselective() && group.isSelective()) {
+        // result.setMarkerScore(UN_SELECTIVE_SCORE);
+        // result.setScoreList(new Double[0]);
+        // trackDao.deleteByLibraryId(library.getId());
+        // specialTagDao.deleteByLibraryId(library.getId());
+        // }
         // 尝试提交评卷结果
         Long now = System.currentTimeMillis();
         if (!markTaskService.updateMarkerResult(task.getId(), MarkTaskStatus.MARKED, userId, result.getMarkerScore(),
@@ -1197,16 +1273,16 @@ public class MarkServiceImpl implements MarkService {
             return false;
         }
         // 保存阅卷轨迹
-//        int unansweredCount = 0;
+        // int unansweredCount = 0;
         if (result.getTrackList() != null && !result.isUnselective()) {
             markTrackService.deleteByTaskId(task.getId());
             markTrackService.saveBatch(result.getTrackList(task, userId));
-//            for (MarkTrack markTrack : tracks) {
-//                if (markTrack.isUnanswered()) {
-//                    unansweredCount++;
-//                }
-//            }
-//            libraryDao.updateUnansweredCount(library.getId(), unansweredCount);
+            // for (MarkTrack markTrack : tracks) {
+            // if (markTrack.isUnanswered()) {
+            // unansweredCount++;
+            // }
+            // }
+            // libraryDao.updateUnansweredCount(library.getId(), unansweredCount);
         }
         // 保存特殊标记
         if (result.getSpecialTagList() != null && !result.isUnselective()) {
@@ -1225,32 +1301,37 @@ public class MarkServiceImpl implements MarkService {
                     continue;
                 }
                 // 均为未选做,跳过该任务
-//                if (other.getMarkerScore() == UN_SELECTIVE_SCORE && result.getMarkerScore() == UN_SELECTIVE_SCORE) {
-//                    continue;
-//                }
+                // if (other.getMarkerScore() == UN_SELECTIVE_SCORE && result.getMarkerScore()
+                // == UN_SELECTIVE_SCORE) {
+                // continue;
+                // }
                 // 其中一个有分另一个未选做 直接进入仲裁
-//                if ((other.getMarkerScore() != UN_SELECTIVE_SCORE && result.getMarkerScore() == UN_SELECTIVE_SCORE)
-//                        || (other.getMarkerScore() == UN_SELECTIVE_SCORE && result.getMarkerScore() != UN_SELECTIVE_SCORE)) {
-//                    history = buildArbitrateHistory(library, now);
-//                    break;
-//                }
+                // if ((other.getMarkerScore() != UN_SELECTIVE_SCORE && result.getMarkerScore()
+                // == UN_SELECTIVE_SCORE)
+                // || (other.getMarkerScore() == UN_SELECTIVE_SCORE && result.getMarkerScore()
+                // != UN_SELECTIVE_SCORE)) {
+                // history = buildArbitrateHistory(library, now);
+                // break;
+                // }
                 // 分差超过阀值
                 if (Math.abs(other.getMarkerScore() - result.getMarkerScore()) > group.getArbitrateThreshold()) {
                     // 开启三评
-//                    if (group.getThirdPolicy().equals(ThirdPolicy.LOW_DIFF_HIGH_AVG)) {
-//                        if (libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber()) == 2) {
-//                            buildThirdLibrary(library, group);
-//                        } else {
-//                            // 两两比较,触发仲裁
-//                            List<MarkLibrary> libraries = libraryDao.findByStudentIdAndGroupNumber(
-//                                    library.getStudentId(), library.getGroupNumber());
-//                            history = buildArbitrateHistory(libraries, group.getArbitrateThreshold(), now);
-//                        }
-//                    } else {
+                    // if (group.getThirdPolicy().equals(ThirdPolicy.LOW_DIFF_HIGH_AVG)) {
+                    // if (libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(),
+                    // library.getGroupNumber()) == 2) {
+                    // buildThirdLibrary(library, group);
+                    // } else {
+                    // // 两两比较,触发仲裁
+                    // List<MarkLibrary> libraries = libraryDao.findByStudentIdAndGroupNumber(
+                    // library.getStudentId(), library.getGroupNumber());
+                    // history = buildArbitrateHistory(libraries, group.getArbitrateThreshold(),
+                    // now);
+                    // }
+                    // } else {
                     // 未开启三评,触发仲裁
                     history = buildArbitrateHistory(task, now);
                     break;
-//                    }
+                    // }
                 }
             }
         }
@@ -1286,7 +1367,8 @@ public class MarkServiceImpl implements MarkService {
     @Override
     public void updateMarkGroupStatus(Long examId, String paperNumber) {
         // 更新MarkPaper中groupStatus
-        long groupNumberIsNull = markQuestionService.countByExamIdAndPaperNumberAndObjectiveAndGroupNumberIsNull(examId, paperNumber, false);
+        long groupNumberIsNull = markQuestionService.countByExamIdAndPaperNumberAndObjectiveAndGroupNumberIsNull(examId,
+                paperNumber, false);
         markPaperService.updateGroupStatusByExamIdAndPaperNumber(groupNumberIsNull == 0, examId, paperNumber);
     }