Selaa lähdekoodia

InspectedController.rejected.上锁顺序应该先watch科目锁,在waitlock考生锁;

xiatian 1 vuosi sitten
vanhempi
commit
87ef64df75

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

@@ -351,10 +351,10 @@ public class ArbitrateController extends BaseExamController {
         ArbitrateHistory history = arbitrateService.findById(markResult.getLibraryId());
         if (history != null && subjectCheck(history.getSubjectCode(), wu)) {
             try {
-            	lockService.waitlock(LockType.STUDENT, markResult.getStudentId());
                 lockService.watch(LockType.EXAM_SUBJECT, history.getExamId(), history.getSubjectCode());
                 lockService.watch(LockType.GROUP, history.getExamId(), history.getSubjectCode(),
                         history.getGroupNumber());
+                lockService.waitlock(LockType.STUDENT, markResult.getStudentId());
                 markService.processArbitrate(markResult, wu.getUser().getId());
                 releaseTask(history.getId());
                 result.accumulate("success", true);

+ 5 - 4
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/InspectedController.java

@@ -308,7 +308,8 @@ public class InspectedController extends BaseExamController {
         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)) {
+            	lockService.waitlock(LockType.STUDENT, studentId);
+                if (inspectedService.cancelByStudent(studentId)) {
                     obj.accumulate("success", true);
                 } else {
                     obj.accumulate("success", false);
@@ -378,8 +379,8 @@ public class InspectedController extends BaseExamController {
                 obj.accumulate("message", "打回失败");
                 log.error("back inspected error", e);
             } finally {
+            	lockService.unlock(LockType.STUDENT, student.getId());
                 lockService.unwatch(LockType.EXAM_SUBJECT, student.getExamId(), student.getSubjectCode());
-                lockService.unlock(LockType.STUDENT, student.getId());
             }
         } else {
             obj.accumulate("success", false);
@@ -501,8 +502,8 @@ public class InspectedController extends BaseExamController {
             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)) {
-                    }
+                	lockService.waitlock(LockType.STUDENT, student.getId());
+                    inspectedService.cancelByStudent(id);
                 } catch (Exception e) {
                     log.error("back inspected error", e);
                 } finally {

+ 2 - 10
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/LibraryController.java

@@ -176,14 +176,10 @@ public class LibraryController extends BaseExamController {
         if (library != null) {
             if (subjectCheck(library.getSubjectCode(), RequestUtils.getWebUser(request))) {
                 try {
-                	if(!lockService.trylock(LockType.STUDENT, library.getStudentId())) {
-                		obj.accumulate("success", false);
-                        obj.accumulate("message", "考生数据繁忙,请稍后再试");
-                        return obj;
-                	}
                     lockService.watch(LockType.EXAM_SUBJECT, library.getExamId(), library.getSubjectCode());
                     lockService.watch(LockType.GROUP, library.getExamId(), library.getSubjectCode(),
                             library.getGroupNumber());
+                    lockService.waitlock(LockType.STUDENT, library.getStudentId());
                     if ((library.getStatus().equals(LibraryStatus.MARKED)
                             || library.getStatus().equals(LibraryStatus.PROBLEM) || library.getStatus().equals(
                             LibraryStatus.INSPECTED))
@@ -364,14 +360,10 @@ public class LibraryController extends BaseExamController {
         if (library != null) {
             if (subjectCheck(library.getSubjectCode(), RequestUtils.getWebUser(request))) {
                 try {
-                	if(!lockService.trylock(LockType.STUDENT, library.getStudentId())) {
-                		obj.accumulate("success", false);
-                        obj.accumulate("message", "考生数据繁忙,请稍后再试");
-                        return obj;
-                	}
                     lockService.watch(LockType.EXAM_SUBJECT, library.getExamId(), library.getSubjectCode());
                     lockService.watch(LockType.GROUP, library.getExamId(), library.getSubjectCode(),
                             library.getGroupNumber());
+                    lockService.waitlock(LockType.STUDENT, library.getStudentId());
 
                     if (((libraryService.hasApplied(library, wu.getId())
                             && (library.getStatus().equals(LibraryStatus.MARKED)) || library.getStatus().equals(

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

@@ -170,10 +170,10 @@ public class ProblemHistoryController extends BaseExamController {
             MarkLibrary library = libraryService.findById(libraryId);
             if (library != null && subjectCheck(library.getSubjectCode(), RequestUtils.getWebUser(request))) {
                 try {
-                	lockService.waitlock(LockType.STUDENT, library.getStudentId());
                     lockService.watch(LockType.EXAM_SUBJECT, library.getExamId(), library.getSubjectCode());
                     lockService.watch(LockType.GROUP, library.getExamId(), library.getSubjectCode(),
                             library.getGroupNumber());
+                    lockService.waitlock(LockType.STUDENT, library.getStudentId());
                     if (library.getStatus().equals(LibraryStatus.PROBLEM)) {
                         markService.rejectLibrary(library, wu.getId(), null, true);
                     }