1
0
Quellcode durchsuchen

重置评卷员优化

yin vor 10 Monaten
Ursprung
Commit
b580ade07c

+ 1 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/MarkerService.java

@@ -46,4 +46,5 @@ public interface MarkerService {
 
     void updateEnableByUserId(Integer userId, boolean enable);
 
+    void resetById(Integer id);
 }

+ 5 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/MarkerServiceImpl.java

@@ -271,4 +271,9 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
         markerDao.updateEnableByUserId(userId, enable);
     }
 
+    @Override
+    public void resetById(Integer id) {
+       this.markerDao.resetById(id);
+    }
+
 }

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

@@ -24,7 +24,7 @@ public interface TrialLibraryDao extends JpaRepository<TrialLibrary, Integer>, J
     List<TrialLibrary> findUnMarked(Integer examId, String subjectCode, Integer groupNumber, Integer markerId,Pageable page);
 
     @Query("select count(l) from TrialLibrary l where l.examId=?1 and l.subjectCode=?2 and l.groupNumber=?3 "
-            + "and l.markerId is not null ")
+            + "and l.markerId is not null and l.markerScore is not null")
     long countMarked(Integer examId, String subjectCode, Integer groupNumber);
 
     // @Query("select l from TrialLibrary l where l.studentId=?1 order by l.groupNumber ")

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

@@ -55,9 +55,10 @@ public class MarkLibraryServiceImpl extends BaseQueryService<MarkLibrary> implem
         MarkLibrarySearchQuery query = new MarkLibrarySearchQuery();
         query.setPageNumber(pageNumber);
         query.setPageSize(pageSize);
-        return filterClass ? libraryDao.findUnMarkedFilterClass(examId, subjectCode, groupNumber, markerId, userId,
-                statusSet, query) : libraryDao.findUnMarked(examId, subjectCode, groupNumber, markerId, statusSet,
-                query);
+        return filterClass
+                ? libraryDao.findUnMarkedFilterClass(examId, subjectCode, groupNumber, markerId, userId, statusSet,
+                        query)
+                : libraryDao.findUnMarked(examId, subjectCode, groupNumber, markerId, statusSet, query);
     }
 
     @Override
@@ -179,8 +180,8 @@ public class MarkLibraryServiceImpl extends BaseQueryService<MarkLibrary> implem
                         predicates.add(cb.or(sub));
                     }
                 }
-                return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
-                        .size()]));
+                return predicates.isEmpty() ? cb.conjunction()
+                        : cb.and(predicates.toArray(new Predicate[predicates.size()]));
             }
         };
     }
@@ -323,20 +324,26 @@ public class MarkLibraryServiceImpl extends BaseQueryService<MarkLibrary> implem
                     Predicate predicate2 = cb.le(root.get("markerScore"), query.getEndScore());
                     predicates.add(predicate2);
                 }
-                return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
-                        .size()]));
+                return predicates.isEmpty() ? cb.conjunction()
+                        : cb.and(predicates.toArray(new Predicate[predicates.size()]));
             }
         };
     }
 
     @Transactional
-	@Override
-	public void assigned(Integer libraryId, Integer userId) {
-    	libraryDao.assigned(libraryId, userId);
-	}
-
-	@Override
-	public long countByMarkerAndStatus(Integer markerId, LibraryStatus... status) {
-		return libraryDao.countByMarkerAndStatus(markerId, status);
-	}
+    @Override
+    public void assigned(Integer libraryId, Integer userId) {
+        libraryDao.assigned(libraryId, userId);
+    }
+
+    @Override
+    public List<MarkLibrary> findByMarkerIdAndStatusNotIn(Integer id, LibraryStatus... status) {
+        return libraryDao.findByMarkerIdAndStatusNotIn(id, LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE,
+                LibraryStatus.PROBLEM);
+    }
+
+    @Override
+    public long countByMarkerAndStatus(Integer markerId, LibraryStatus... status) {
+        return libraryDao.countByMarkerAndStatus(markerId, status);
+    }
 }

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

@@ -447,59 +447,34 @@ public class MarkServiceImpl implements MarkService {
         lock.clear(marker.getId());
     }
 
-    /**
-     * 重置某个评卷员
-     *
-     * @param marker
-     *            - 评卷员
-     */
+    @Transactional
     @Override
-    public void resetMarker(Marker marker) {
-        MarkGroup group = groupDao.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
-        if (group == null || !markerDao.exists(marker.getId())) {
-            return;
+    public boolean resetLibrary(TrialLibrary library) {
+        if(library==null){
+            return false;
+        }
+        trialTagDao.deleteByLibraryId(library.getId());
+        trialTrackDao.deleteByLibraryId(library.getId());
+        if (TrialMode.EXCLUSIVE.equals(systemCache.getTrialMode())) {
+            trialLibraryDao.resetByIdButMarkerId(library.getId());
+        }else{
+            trialLibraryDao.resetById(library.getId());
+            updateStudentGroupStatus(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
+                    library.getGroupNumber(), SubjectiveStatus.UNMARK);
+            studentService.updateSubjectiveStatusAndScore(library.getStudentId(), SubjectiveStatus.UNMARK, 0,
+                    null);
+            inspectedService.clearByStudent(library.getStudentId());
         }
+        return true;
+    }
+
+    @Transactional
+    @Override
+    public void markerLogout(Marker marker) {
         User user = userService.findById(marker.getUserId());
         user.refreshAccessToken();
         userService.save(user);
         releaseByMarker(marker);
-
-        if (group.getStatus() == MarkStatus.FORMAL) {
-            // 仲裁和等待仲裁的任务不被重置
-            // 只选取评卷完成状态的记录重新检查
-            // 遍历相关评卷任务的模式
-            List<MarkLibrary> list = libraryDao.findByMarkerIdAndStatusNotIn(marker.getId(), LibraryStatus.ARBITRATED,
-                    LibraryStatus.WAIT_ARBITRATE, LibraryStatus.PROBLEM);
-            for (MarkLibrary library : list) {
-                lockService.waitlock(LockType.STUDENT, library.getStudentId());
-                try {
-                    resetLibrary(library);
-                } finally {
-                    lockService.unlock(LockType.STUDENT, library.getStudentId());
-                }
-            }
-            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.clearByStudent(library.getStudentId());
-                lockService.unlock(LockType.STUDENT, library.getStudentId());
-            }
-            trialTagDao.deleteByMarkerId(marker.getId());
-            trialTrackDao.deleteByMarkerId(marker.getId());
-            if (TrialMode.EXCLUSIVE.equals(systemCache.getTrialMode())) {
-                trialLibraryDao.resetByMarkerIdButMarkerId(marker.getId());
-            }else{
-                trialLibraryDao.resetByMarkerId(marker.getId());
-            }
-        }
-        updateMarkedCount(group);
-        // inspectHistoryService.deleteByExamIdAndSubjectCode(marker.getExamId(),
-        // marker.getSubjectCode());
     }
 
     @Transactional
@@ -519,10 +494,7 @@ public class MarkServiceImpl implements MarkService {
     @Override
     @Transactional
     public void deleteMarker(Marker marker) {
-        User user = userService.findById(marker.getUserId());
-        user.refreshAccessToken();
-        userService.save(user);
-        this.releaseByMarker(marker);
+        this.markerLogout(marker);
         if (TrialMode.EXCLUSIVE.equals(systemCache.getTrialMode())) {
             trialLibraryDao.deleteByMarkerId(marker.getId());
         }
@@ -944,29 +916,6 @@ public class MarkServiceImpl implements MarkService {
         }
     }
 
-    /**
-     * 管理员/组长重置某个试评任务
-     *
-     * @param library
-     *            - 试评任务
-     */
-    @Override
-    @Transactional
-    public boolean resetLibrary(TrialLibrary library) {
-        if (library != null) {
-            if (TrialMode.EXCLUSIVE.equals(systemCache.getTrialMode())) {
-                trialLibraryDao.resetByIdButMarkerId(library.getId());
-            }else{
-                trialLibraryDao.resetById(library.getId());
-            }
-            trialTrackDao.deleteByLibraryId(library.getId());
-            trialTagDao.deleteByLibraryId(library.getId());
-            return true;
-        } else {
-            return false;
-        }
-    }
-
     /**
      * 管理员/组长处理仲裁卷 - 仲裁卷
      */

+ 1 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/MarkLibraryService.java

@@ -59,4 +59,5 @@ public interface MarkLibraryService {
 
 	void assigned(Integer libraryId, Integer userId);
 
+    List<MarkLibrary> findByMarkerIdAndStatusNotIn(Integer id, LibraryStatus... status);
 }

+ 3 - 15
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/MarkService.java

@@ -10,7 +10,6 @@ import cn.com.qmth.stmms.biz.mark.model.*;
 import cn.com.qmth.stmms.common.enums.ArbitrateType;
 import cn.com.qmth.stmms.common.enums.ScorePolicy;
 import cn.com.qmth.stmms.common.enums.ThirdPolicy;
-import org.springframework.transaction.annotation.Transactional;
 
 public interface MarkService {
 
@@ -96,13 +95,6 @@ public interface MarkService {
      */
     void releaseByMarker(Marker marker);
 
-    /**
-     * 重置某个评卷员
-     *
-     * @param marker
-     */
-    void resetMarker(Marker marker);
-
     /**
      * 根据考生删除评卷任务
      *
@@ -181,12 +173,6 @@ public interface MarkService {
      */
     SubmitResult submitTask(MarkResult result, Marker marker);
 
-    /**
-     * 管理员/组长重置某个试评任务
-     *
-     * @param library
-     * @return
-     */
     boolean resetLibrary(TrialLibrary library);
 
     /**
@@ -228,7 +214,7 @@ public interface MarkService {
      * @param student
      * @param questionList
      * @param userId
-     * @param resson
+     * @param reason
      * @return
      */
     boolean rejectedStudent(ExamStudent student, MarkStepDTO[] questionList, Integer userId, String reason);
@@ -261,6 +247,8 @@ public interface MarkService {
 
     void groupTrialToFormal(int examId, String subjectCode);
 
+    void markerLogout(Marker marker);
+
     void resetLibrary(MarkLibrary library);
 
     void deleteMarker(Marker marker);

+ 1 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/TrialService.java

@@ -43,4 +43,5 @@ public interface TrialService {
     List<TrialLibrary> findLibraryByMarkerId(Integer markerId);
 
     List<TrialLibrary> findLibraryByStudentId(Integer examId, String subjectCode, Integer number, List<Integer> studentIds);
+
 }

+ 1 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkerController.java

@@ -272,7 +272,7 @@ public class MarkerController extends BaseExamController {
                 return obj;
             }
             if (lockService.trylock(LockType.MARKER_RESET, marker.getId())) {
-                taskExecutor.submit(new MarkerResetThread(marker, markService, lockService));
+                taskExecutor.submit(new MarkerResetThread(marker, group,markService,libraryService,trialService,markerService, lockService));
                 obj.accumulate("success", true);
             } else {
                 obj.accumulate("success", false);

+ 52 - 3
stmms-web/src/main/java/cn/com/qmth/stmms/admin/thread/MarkerResetThread.java

@@ -1,25 +1,47 @@
 package cn.com.qmth.stmms.admin.thread;
 
+import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
+import cn.com.qmth.stmms.biz.exam.service.MarkerService;
 import cn.com.qmth.stmms.biz.lock.LockService;
+import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
+import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
+import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
-import cn.com.qmth.stmms.common.enums.LockType;
+import cn.com.qmth.stmms.biz.mark.service.TrialService;
+import cn.com.qmth.stmms.common.enums.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.List;
+
 public class MarkerResetThread implements Runnable {
 
     protected static Logger log = LoggerFactory.getLogger(MarkerResetThread.class);
 
     private Marker marker;
 
+    private MarkGroup group;
+
     private MarkService markService;
 
     private LockService lockService;
 
-    public MarkerResetThread(Marker marker, MarkService markService, LockService lockService) {
+    private MarkLibraryService markLibraryService;
+
+    private TrialService trialLibraryService;
+
+    private MarkerService markerService;
+
+    public MarkerResetThread(Marker marker, MarkGroup group, MarkService markService,
+            MarkLibraryService markLibraryService, TrialService trialLibraryService, MarkerService markerService,
+            LockService lockService) {
         this.marker = marker;
+        this.group = group;
         this.markService = markService;
+        this.markLibraryService = markLibraryService;
+        this.trialLibraryService = trialLibraryService;
+        this.markerService = markerService;
         this.lockService = lockService;
     }
 
@@ -28,11 +50,38 @@ public class MarkerResetThread implements Runnable {
         if (marker == null) {
             return;
         }
+        if (group == null) {
+            return;
+        }
         try {
             lockService.watch(LockType.EXAM_SUBJECT, marker.getExamId(), marker.getSubjectCode());
             lockService.watch(LockType.GROUP, marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
             lockService.waitlock(LockType.MARKER, marker.getId());
-            markService.resetMarker(marker);
+            markService.markerLogout(marker);
+            if (group.getStatus() == MarkStatus.FORMAL) {
+                // 仲裁和等待仲裁的任务不被重置
+                // 只选取评卷完成状态的记录重新检查
+                // 遍历相关评卷任务的模式
+                List<MarkLibrary> list = markLibraryService.findByMarkerIdAndStatusNotIn(marker.getId(),
+                        LibraryStatus.ARBITRATED, LibraryStatus.WAIT_ARBITRATE, LibraryStatus.PROBLEM);
+                for (MarkLibrary library : list) {
+                    lockService.waitlock(LockType.STUDENT, library.getStudentId());
+                    try {
+                        markService.resetLibrary(library);
+                    } finally {
+                        lockService.unlock(LockType.STUDENT, library.getStudentId());
+                    }
+                }
+            } else if (group.getStatus() == MarkStatus.TRIAL) {
+                List<TrialLibrary> list = trialLibraryService.findLibraryByMarkerId(marker.getId());
+                for (TrialLibrary library : list) {
+                    lockService.waitlock(LockType.STUDENT, library.getStudentId());
+                    markService.resetLibrary(library);
+                    lockService.unlock(LockType.STUDENT, library.getStudentId());
+                }
+            }
+            markerService.resetById(marker.getId());
+            markService.updateMarkedCount(group);
         } catch (Exception e) {
             log.error("reset marker error", e);
         } finally {