浏览代码

修复重置评卷员和分组,考生状态没有变更的问题

ting.yin 1 年之前
父节点
当前提交
e5c5c880c0

+ 8 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/dao/TrialLibraryDao.java

@@ -72,4 +72,12 @@ public interface TrialLibraryDao extends JpaRepository<TrialLibrary, Integer>, J
             + "where m.id=?1")
     void resetById(Integer id);
 
+    @Query("select l from TrialLibrary f where f.markerId=?1")
+    List<TrialLibrary> findByMarkerId(Integer markerId);
+
+    @Modifying(clearAutomatically = true)
+    @Query("update TrialLibrary m set m.markerId=null, m.markerTime=null, m.markerScore=null, m.markerScoreList=null "
+            + " where m.examId=?1 and m.subjectCode=?2 and m.groupNumber=?3")
+    void resetByExamIdAndSubjectCodeAndGroupNumber(Integer examId, String subjectCode, Integer number);
+
 }

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

@@ -501,33 +501,7 @@ public class MarkServiceImpl implements MarkService {
         }
         if (group.getStatus() == MarkStatus.FORMAL) {
             // 仲裁和等待仲裁的任务不被重置
-            // trackDao.deleteByMarkerId(marker.getId(),
-            // LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE,
-            // LibraryStatus.PROBLEM);
-            // specialTagDao.deleteByMarkerId(marker.getId(),
-            // LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE,
-            // LibraryStatus.PROBLEM);
-            // libraryDao.resetByMarkerId(marker.getId(), LibraryStatus.WAITING,
-            // LibraryStatus.ARBITRATED,
-            // LibraryStatus.WAIT_ARBITRATE, LibraryStatus.PROBLEM);
-            // 原遍历模式改为SQL批量更新模式,提高执行速度
-            // groupStudentDao.updateStatusByMarkLibraryStatus(marker.getExamId(),
-            // marker.getSubjectCode(),
-            // marker.getGroupNumber(), SubjectiveStatus.UNMARK,
-            // LibraryStatus.WAITING);
-            // scoreDao.deleteByStudentGroupStatus(marker.getExamId(),
-            // marker.getSubjectCode(), marker.getGroupNumber(),
-            // SubjectiveStatus.UNMARK);
-            // studentService.resetSubjectiveStatusByGroupStatus(marker.getExamId(),
-            // marker.getSubjectCode());
             // 只选取评卷完成状态的记录重新检查
-            // List<Integer> studentIdList =
-            // groupStudentDao.findStudentIdByGroupNumberAndStatus(marker.getExamId(),
-            // marker.getSubjectCode(), marker.getGroupNumber(),
-            // SubjectiveStatus.MARKED);
-            // for (Integer studentId : studentIdList) {
-            // checkStudentGroup(studentId, group);
-            // }
             // 遍历相关评卷任务的模式
             List<MarkLibrary> list = libraryDao.findByMarkerIdAndStatusNotIn(marker.getId(), LibraryStatus.ARBITRATED,
                     LibraryStatus.WAIT_ARBITRATE, LibraryStatus.PROBLEM);
@@ -545,6 +519,15 @@ public class MarkServiceImpl implements MarkService {
             }
             markerDao.resetById(marker.getId());
         } else if (group.getStatus() == MarkStatus.TRIAL) {
+            List<TrialLibrary> list = trialLibraryDao.findByMarkerId(marker.getId());
+            for (TrialLibrary library : list) {
+                lockService.waitlock(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());
+                lockService.unlock(LockType.STUDENT, library.getStudentId());
+            }
             trialTagDao.deleteByMarkerId(marker.getId());
             trialTrackDao.deleteByMarkerId(marker.getId());
             trialLibraryDao.resetByMarkerId(marker.getId());
@@ -1365,14 +1348,16 @@ public class MarkServiceImpl implements MarkService {
                     group.getNumber(), LibraryStatus.WAITING);
             libraryDao.deleteByExamIdAndSubjectCodeAndGroupNumberAndTaskNumber(group.getExamId(),
                     group.getSubjectCode(), group.getNumber(), 3);
-            markerDao.resetByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
-                    group.getNumber());
-            resetStudentGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
         } else if (group.getStatus() == MarkStatus.TRIAL) {
             trialTrackDao.deleteByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
                     group.getNumber());
             trialTagDao.deleteByExamAndSubjectAndGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
+            trialLibraryDao.resetByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
+                    group.getNumber());
         }
+        markerDao.resetByExamIdAndSubjectCodeAndGroupNumber(group.getExamId(), group.getSubjectCode(),
+                group.getNumber());
+        resetStudentGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
         updateLibraryCount(group);
         groupDao.resetCount(group.getExamId(), group.getSubjectCode(), group.getNumber());
         releaseByGroup(group);