Browse Source

复核加科目锁

xiatian 1 năm trước cách đây
mục cha
commit
a2c5be53e8

+ 15 - 6
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java

@@ -306,6 +306,7 @@ public class InspectedController extends BaseExamController {
         WebUser wu = RequestUtils.getWebUser(request);
         if (student != null && subjectCheck(student.getSubjectCode(), wu)) {
             try {
+            	lockService.watch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
                 if (lockService.trylock(LockType.STUDENT, studentId) && inspectedService.cancelByStudent(studentId)) {
                     obj.accumulate("success", true);
                 } else {
@@ -318,6 +319,7 @@ public class InspectedController extends BaseExamController {
                 log.error("back inspected error", e);
             } finally {
                 lockService.unlock(LockType.STUDENT, studentId);
+                lockService.unwatch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
             }
         } else {
             obj.accumulate("success", false);
@@ -332,12 +334,17 @@ public class InspectedController extends BaseExamController {
     public String nextround(RedirectAttributes ra, HttpServletRequest request, @RequestParam String subjectCode) {
         int examId = getSessionExamId(request);
         ExamSubject es = subjectService.find(examId, subjectCode);
-        if (!inspectedService.inspectFinish(examId, subjectCode, es.getInspectRound())) {
-            ra.addFlashAttribute("errmsg", "该科目第" + es.getInspectRound() + "次复核还未完成");
-            return "redirect:/admin/exam/inspected/list";
-        }
-        subjectService.nextInspectRound(examId, subjectCode);
-        return "redirect:/admin/exam/inspected/list";
+        lockService.waitlock(LockType.EXAM_SUBJECT, examId, subjectCode);
+        try {
+			if (!inspectedService.inspectFinish(examId, subjectCode, es.getInspectRound())) {
+				ra.addFlashAttribute("errmsg", "该科目第" + es.getInspectRound() + "次复核还未完成");
+				return "redirect:/admin/exam/inspected/list";
+			}
+			subjectService.nextInspectRound(examId, subjectCode);
+			return "redirect:/admin/exam/inspected/list";
+		} finally {
+			lockService.unlock(LockType.EXAM_SUBJECT, examId, subjectCode);
+		}
     }
 
     @Logging(menu = "打回", type = LogType.UPDATE)
@@ -492,12 +499,14 @@ public class InspectedController extends BaseExamController {
             // subjectCode = student.getSubjectCode();
             if (student != null && subjectCheck(student.getSubjectCode(), wu)) {
                 try {
+                	lockService.watch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
                     if (lockService.trylock(LockType.STUDENT, student.getId()) && inspectedService.cancelByStudent(id)) {
                     }
                 } catch (Exception e) {
                     log.error("back inspected error", e);
                 } finally {
                     lockService.unlock(LockType.STUDENT, student.getId());
+                    lockService.unwatch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
                 }
             }
         }