Explorar el Código

InspectedServiceImpl.cancelByStudent加student写锁

xiatian hace 1 año
padre
commit
bd106611a9

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

@@ -511,11 +511,15 @@ public class MarkServiceImpl implements MarkService {
                 libraryDao.resetById(library.getId(), null, null, null, null, LibraryStatus.WAITING,
                         library.getStatus());
                 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());
+                try {
+					updateStudentGroupStatus(library.getStudentId(), library.getExamId(), library.getSubjectCode(),
+							library.getGroupNumber(), SubjectiveStatus.UNMARK);
+					studentService.updateSubjectiveStatusAndScore(library.getStudentId(), SubjectiveStatus.UNMARK, 0,
+							null);
+					inspectedService.cancelByStudent(library.getStudentId());
+				} finally {
+					lockService.unlock(LockType.STUDENT, library.getStudentId());
+				}
             }
             markerDao.resetById(marker.getId());
         } else if (group.getStatus() == MarkStatus.TRIAL) {

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

@@ -351,6 +351,7 @@ 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());
@@ -363,6 +364,7 @@ public class ArbitrateController extends BaseExamController {
                 result.accumulate("success", false);
                 result.accumulate("message", "评卷任务提交失败");
             } finally {
+            	lockService.unlock(LockType.STUDENT, markResult.getStudentId());
                 lockService.unwatch(LockType.GROUP, history.getExamId(), history.getSubjectCode(),
                         history.getGroupNumber());
                 lockService.unwatch(LockType.EXAM_SUBJECT, history.getExamId(), history.getSubjectCode());

+ 12 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/LibraryController.java

@@ -176,6 +176,11 @@ 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());
@@ -193,6 +198,7 @@ public class LibraryController extends BaseExamController {
                     obj.accumulate("message", "打回评卷任务失败");
                     log.error("back library error", e);
                 } finally {
+                	lockService.unlock(LockType.STUDENT, library.getStudentId());
                     lockService.unwatch(LockType.GROUP, library.getExamId(), library.getSubjectCode(),
                             library.getGroupNumber());
                     lockService.unwatch(LockType.EXAM_SUBJECT, library.getExamId(), library.getSubjectCode());
@@ -358,6 +364,11 @@ 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());
@@ -377,6 +388,7 @@ public class LibraryController extends BaseExamController {
                     obj.accumulate("message", "打回评卷任务失败");
                     log.error("back library error", e);
                 } finally {
+                	lockService.unlock(LockType.STUDENT, library.getStudentId());
                     lockService.unwatch(LockType.GROUP, library.getExamId(), library.getSubjectCode(),
                             library.getGroupNumber());
                     lockService.unwatch(LockType.EXAM_SUBJECT, library.getExamId(), library.getSubjectCode());

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

@@ -170,6 +170,7 @@ 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());
@@ -179,6 +180,7 @@ public class ProblemHistoryController extends BaseExamController {
                 } catch (Exception e) {
                     log.error("back library error", e);
                 } finally {
+                	lockService.unlock(LockType.STUDENT, library.getStudentId());
                     lockService.unwatch(LockType.GROUP, library.getExamId(), library.getSubjectCode(),
                             library.getGroupNumber());
                     lockService.unwatch(LockType.EXAM_SUBJECT, library.getExamId(), library.getSubjectCode());