1
0
Эх сурвалжийг харах

将评卷员领取任务与提交任务加互斥锁,避免极端情况下重新领取到已提交任务的情况

luoshi 6 жил өмнө
parent
commit
b262dd6cb9

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

@@ -8,7 +8,6 @@ import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -79,9 +78,6 @@ public class MarkServiceImpl implements MarkService {
     @Autowired
     private MarkLockService lockService;
 
-    @Value("${mark.cleanTimeoutMinute}")
-    private long timeoutMinute;
-
     /**
      * 某个大题已申请的评卷任务数量
      * 
@@ -314,8 +310,6 @@ public class MarkServiceImpl implements MarkService {
         lockService.waitUnlockGroup(group.getExamId(), group.getSubjectCode(), group.getNumber());
         // 等待考生释放锁定
         lockService.waitUnlockStudent(library.getStudentId());
-        // 尝试锁定评卷员
-        lockService.lockMarker(library.getMarkerId());
         // 本人是否已领取该任务
         boolean applied = hasApplied(library, marker);
 
@@ -396,7 +390,6 @@ public class MarkServiceImpl implements MarkService {
             if (applied) {
                 CurrentTaskUtil.remove(marker, getApplyTaskId(library));
             }
-            lockService.unlockMarker(library.getMarkerId());
         }
     }
 

+ 16 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/mark/MarkController.java

@@ -32,6 +32,7 @@ import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.biz.mark.service.MarkService;
 import cn.com.qmth.stmms.biz.mark.service.TaskService;
+import cn.com.qmth.stmms.biz.mark.service.Impl.MarkLockService;
 import cn.com.qmth.stmms.common.controller.BaseController;
 import cn.com.qmth.stmms.common.enums.ExamSubjectStatus;
 import cn.com.qmth.stmms.common.enums.LibraryStatus;
@@ -66,6 +67,9 @@ public class MarkController extends BaseController {
     @Autowired
     private ExamService examService;
 
+    @Autowired
+    private MarkLockService lockService;
+
     @Value("${slice.image.server}")
     private String sliceServer;
 
@@ -195,7 +199,15 @@ public class MarkController extends BaseController {
     @ResponseBody
     public Task getTask(HttpServletRequest request) {
         Marker marker = RequestUtils.getWebUser(request).getMarker();
-        Task task = getTask(marker);
+        Task task = null;
+        try {
+            lockService.lockMarker(marker.getId());
+            task = getTask(marker);
+        } catch (Exception e) {
+            log.error("get task error", e);
+        } finally {
+            lockService.unlockMarker(marker.getId());
+        }
         if (task == null) {
             task = new Task();
             task.setExist(false);
@@ -248,6 +260,7 @@ public class MarkController extends BaseController {
         JSONObject result = new JSONObject();
         boolean success = false;
         try {
+            lockService.lockMarker(marker.getId());
             task.setSpent((new Date().getTime() - task.getSpent()) / 1000);
             MarkLibrary library = libraryService.findById(task.getLibraryId());
             library.setMarkerId(marker.getId());
@@ -260,6 +273,8 @@ public class MarkController extends BaseController {
                     task.getSpecialTagList(library));
         } catch (Exception e) {
             log.error("save task error", e);
+        } finally {
+            lockService.unlockMarker(marker.getId());
         }
         result.accumulate("success", success);
         result.accumulate("status", status(request));