yin vor 8 Monaten
Ursprung
Commit
e301cd2532

+ 12 - 0
src/main/java/cn/com/qmth/scancentral/service/impl/OmrTaskServiceImpl.java

@@ -657,23 +657,31 @@ public class OmrTaskServiceImpl extends ServiceImpl<OmrTaskDao, OmrTaskEntity> i
             for (OmrTaskPage page : task.getPages()) {
                 TaskResultPageVo pageVo = result.findPage(page.getIndex());
                 if (pageVo == null) {
+                    concurrentService.getReadWriteLock(LockType.STUDENT + "-" + task.getStudentId()).writeLock().unlock();
+                    concurrentService.getReadWriteLock(LockType.OMR_GROUP + "-" + task.getGroupId()).readLock().unlock();
                     throw new ParameterException("page[" + page.getIndex() + "]不存在");
                 }
                 for (OmrTaskItem item : page.getItems()) {
                     if (OmrField.ABSENT.equals(item.getField())) {
                         if (pageVo.getAbsent() == null) {
+                            concurrentService.getReadWriteLock(LockType.STUDENT + "-" + task.getStudentId()).writeLock().unlock();
+                            concurrentService.getReadWriteLock(LockType.OMR_GROUP + "-" + task.getGroupId()).readLock().unlock();
                             throw new ParameterException("page[" + page.getIndex() + "].absent不存在");
                         }
                         needArbitrate = setResult(group, item, pageVo.getAbsent().toString()) || needArbitrate;
                     }
                     if (OmrField.BREACH.equals(item.getField())) {
                         if (pageVo.getBreach() == null) {
+                            concurrentService.getReadWriteLock(LockType.STUDENT + "-" + task.getStudentId()).writeLock().unlock();
+                            concurrentService.getReadWriteLock(LockType.OMR_GROUP + "-" + task.getGroupId()).readLock().unlock();
                             throw new ParameterException("page[" + page.getIndex() + "].breach不存在");
                         }
                         needArbitrate = setResult(group, item, pageVo.getBreach().toString()) || needArbitrate;
                     }
                     if (OmrField.PAPER_TYPE.equals(item.getField())) {
                         if (pageVo.getPaperType() == null) {
+                            concurrentService.getReadWriteLock(LockType.STUDENT + "-" + task.getStudentId()).writeLock().unlock();
+                            concurrentService.getReadWriteLock(LockType.OMR_GROUP + "-" + task.getGroupId()).readLock().unlock();
                             throw new ParameterException("page[" + page.getIndex() + "].paperType不存在");
                         }
                         needArbitrate = setResult(group, item, pageVo.getPaperType()) || needArbitrate;
@@ -682,6 +690,8 @@ public class OmrTaskServiceImpl extends ServiceImpl<OmrTaskDao, OmrTaskEntity> i
                         String content = pageVo.getQuestion() != null ? pageVo.getQuestion().get(item.getIndex())
                                 : null;
                         if (content == null) {
+                            concurrentService.getReadWriteLock(LockType.STUDENT + "-" + task.getStudentId()).writeLock().unlock();
+                            concurrentService.getReadWriteLock(LockType.OMR_GROUP + "-" + task.getGroupId()).readLock().unlock();
                             throw new ParameterException(
                                     "page[" + page.getIndex() + "].question[" + item.getIndex() + "]不存在");
                         }
@@ -691,6 +701,8 @@ public class OmrTaskServiceImpl extends ServiceImpl<OmrTaskDao, OmrTaskEntity> i
                         String content = pageVo.getSelective() != null ? pageVo.getSelective().get(item.getIndex())
                                 : null;
                         if (content == null) {
+                            concurrentService.getReadWriteLock(LockType.STUDENT + "-" + task.getStudentId()).writeLock().unlock();
+                            concurrentService.getReadWriteLock(LockType.OMR_GROUP + "-" + task.getGroupId()).readLock().unlock();
                             throw new ParameterException(
                                     "page[" + page.getIndex() + "].selective[" + item.getIndex() + "]不存在");
                         }