Selaa lähdekoodia

未对library为null情况做保护性判断,且取消复核动作应该挪到submitLibrary方法,在library保存成功后再执行;从SubjectiveScore对象可以拿到考试ID和科目代码,不用重复再查询一次student对象;不应该在循环中执行SubjectiveScore的saveAndFlush操作;1131~1140行按照联合主键保存可以不用手动先查询一次;

ting.yin 1 vuosi sitten
vanhempi
commit
b1263fc68a

+ 28 - 23
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java

@@ -512,14 +512,14 @@ public class MarkServiceImpl implements MarkService {
                         library.getStatus());
                 lockService.waitlock(LockType.STUDENT, library.getStudentId());
                 try {
-					updateStudentGroupStatus(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
-							library.getGroupNumber(), SubjectiveStatus.UNMARK);
-					studentService.updateSubjectiveStatusAndScore(library.getStudentId(), SubjectiveStatus.UNMARK, 0,
-							null);
-					inspectedService.cancelByStudent(library.getStudentId());
-				} finally {
-					lockService.unlock(LockType.STUDENT, library.getStudentId());
-				}
+                    updateStudentGroupStatus(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
+                            library.getGroupNumber(), SubjectiveStatus.UNMARK);
+                    studentService.updateSubjectiveStatusAndScore(library.getStudentId(), SubjectiveStatus.UNMARK, 0,
+                            null);
+                    inspectedService.cancelByStudent(library.getStudentId());
+                } finally {
+                    lockService.unlock(LockType.STUDENT, library.getStudentId());
+                }
             }
             markerDao.resetById(marker.getId());
         } else if (group.getStatus() == MarkStatus.TRIAL) {
@@ -595,7 +595,6 @@ public class MarkServiceImpl implements MarkService {
         // 根据评卷状态选择读取不同的评卷任务
         if (group.getStatus() == MarkStatus.FORMAL) {
             MarkLibrary library = libraryDao.findOne(result.getLibraryId());
-            inspectedService.cancelByStudent(library.getStudentId());
             if (library != null && library.getExamId().equals(group.getExamId())
                     && library.getSubjectCode().equals(group.getSubjectCode())
                     && library.getGroupNumber().equals(group.getNumber())) {
@@ -624,7 +623,6 @@ public class MarkServiceImpl implements MarkService {
             }
         } else if (group.getStatus() == MarkStatus.TRIAL) {
             TrialLibrary library = trialLibraryDao.findOne(result.getLibraryId());
-            inspectedService.cancelByStudent(library.getStudentId());
             if (library != null && library.getExamId().equals(group.getExamId())
                     && library.getSubjectCode().equals(group.getSubjectCode())
                     && library.getGroupNumber().equals(group.getNumber())
@@ -655,6 +653,7 @@ public class MarkServiceImpl implements MarkService {
                 }
                 checkStudentTrial(library, group);
                 updateMarkedCount(group);
+                inspectedService.cancelByStudent(library.getStudentId());
                 return SubmitResult.success(library);
             }
         }
@@ -723,6 +722,8 @@ public class MarkServiceImpl implements MarkService {
             // 条件不符更新失败,直接返回
             return false;
         }
+        // 取消复核
+        inspectedService.cancelByStudent(library.getStudentId());
         // 保存阅卷轨迹
         int unansweredCount = 0;
         if (result.getTrackList() != null && !result.isUnselective()) {
@@ -1001,7 +1002,8 @@ public class MarkServiceImpl implements MarkService {
         List<ScoreItem> scoreList = new ArrayList<>();
         Map<Integer, List<SubjectiveScore>> mainScoreMap = new HashMap<Integer, List<SubjectiveScore>>();
         Map<Integer, Double> scoreMap = new HashMap<Integer, Double>();
-
+        Integer examId = null;
+        String subjectCode = null;
         // 循环所有主观得分明细
         List<SubjectiveScore> list = scoreDao.findByStudentId(studentId);
         list.sort(null);
@@ -1010,6 +1012,8 @@ public class MarkServiceImpl implements MarkService {
             if (mainScoreList == null) {
                 mainScoreList = new ArrayList<SubjectiveScore>();
             }
+            examId = ss.getExamId();
+            subjectCode = ss.getSubjectCode();
             mainScoreList.add(ss);
             mainScoreMap.put(ss.getMainNumber(), mainScoreList);
             scoreList.add(new ScoreItem(ss));
@@ -1030,7 +1034,6 @@ public class MarkServiceImpl implements MarkService {
             }
             for (SubjectiveScore subjectiveScore : mainScoreList) {
                 subjectiveScore.setMainScore(mainScore.doubleValue());
-                scoreDao.saveAndFlush(subjectiveScore);
             }
             scoreMap.put(mainNumber, mainScore.doubleValue());
         }
@@ -1038,9 +1041,8 @@ public class MarkServiceImpl implements MarkService {
         BigDecimal totalScore = BigDecimal.ZERO;
         boolean lessSelective = false;
         boolean mutiSelective = false;
-        ExamStudent student = studentService.findById(studentId);
-        Map<Integer, List<SelectiveGroup>> indexMap = selectiveGroupService.findGroupByExamIdAndSubjectCode(
-                student.getExamId(), student.getSubjectCode());
+        Map<Integer, List<SelectiveGroup>> indexMap = selectiveGroupService.findGroupByExamIdAndSubjectCode(examId,
+                subjectCode);
         for (Integer index : indexMap.keySet()) {
             // 循环选做题组
             List<SelectiveGroup> indexGroup = indexMap.get(index);
@@ -1083,7 +1085,6 @@ public class MarkServiceImpl implements MarkService {
                         List<SubjectiveScore> mainScoreList = mainScoreMap.get(selectiveGroup.getMainNumber());
                         for (SubjectiveScore ss : mainScoreList) {
                             ss.setUncalculate(true);
-                            scoreDao.saveAndFlush(ss);
                         }
                     }
                 } else {
@@ -1121,7 +1122,6 @@ public class MarkServiceImpl implements MarkService {
                     List<SubjectiveScore> mainScoreList = mainScoreMap.get(group.getMainNumber());
                     for (SubjectiveScore ss : mainScoreList) {
                         ss.setUncalculate(true);
-                        scoreDao.saveAndFlush(ss);
                     }
                 }
             }
@@ -1132,13 +1132,18 @@ public class MarkServiceImpl implements MarkService {
                 mutiSelective = true;
             }
         }
-        SelectiveStudent selectiveStudent = selectiveStudentDao.findOne(studentId);
-        if (selectiveStudent == null) {
-            selectiveStudent = new SelectiveStudent();
-            selectiveStudent.setExamId(student.getExamId());
-            selectiveStudent.setSubjectCode(student.getSubjectCode());
-            selectiveStudent.setStudentId(studentId);
+        // 统一更新得分详情
+        for (Integer mainNumber : mainScoreMap.keySet()) {
+            List<SubjectiveScore> mainScoreList = mainScoreMap.get(mainNumber);
+            for (SubjectiveScore ss : mainScoreList) {
+                scoreDao.saveAndFlush(ss);
+            }
         }
+        // 更新考生多选做少选做
+        SelectiveStudent selectiveStudent = new SelectiveStudent();
+        selectiveStudent.setExamId(examId);
+        selectiveStudent.setSubjectCode(subjectCode);
+        selectiveStudent.setStudentId(studentId);
         selectiveStudent.setLessSelective(lessSelective);
         selectiveStudent.setMutiSelective(mutiSelective);
         selectiveStudentDao.saveAndFlush(selectiveStudent);