xiatian 1 年之前
父节点
当前提交
198226a5f0

+ 40 - 38
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/ScanOmrTaskServiceImpl.java

@@ -467,51 +467,53 @@ public class ScanOmrTaskServiceImpl extends ServiceImpl<ScanOmrTaskMapper, ScanO
 			}
 			concurrentService.getReadWriteLock(LockType.STUDENT + "-" + task.getStudentId()).writeLock().lock();
 
-			for (OmrTaskPage page : task.getPages()) {
-				ScanOmrTaskResultPageDto pageVo = result.findPage(page.getIndex());
-				if (pageVo == null) {
-					throw new ParameterException("page[" + page.getIndex() + "]不存在");
-				}
-				for (OmrTaskItem item : page.getItems()) {
-					if (OmrField.ABSENT.equals(item.getField())) {
-						if (pageVo.getAbsent() == null) {
-							throw new ParameterException("page[" + page.getIndex() + "].absent不存在");
-						}
-						item.setFirstResult(pageVo.getAbsent().toString());
+			try {
+				for (OmrTaskPage page : task.getPages()) {
+					ScanOmrTaskResultPageDto pageVo = result.findPage(page.getIndex());
+					if (pageVo == null) {
+						throw new ParameterException("page[" + page.getIndex() + "]不存在");
 					}
-					if (OmrField.BREACH.equals(item.getField())) {
-						if (pageVo.getBreach() == null) {
-							throw new ParameterException("page[" + page.getIndex() + "].breach不存在");
+					for (OmrTaskItem item : page.getItems()) {
+						if (OmrField.ABSENT.equals(item.getField())) {
+							if (pageVo.getAbsent() == null) {
+								throw new ParameterException("page[" + page.getIndex() + "].absent不存在");
+							}
+							item.setFirstResult(pageVo.getAbsent().toString());
 						}
-						item.setFirstResult(pageVo.getBreach().toString());
-					}
-					if (OmrField.QUESTION.equals(item.getField())) {
-						String content = pageVo.getQuestion() != null ? pageVo.getQuestion().get(item.getIndex())
-								: null;
-						if (content == null) {
-							throw new ParameterException(
-									"page[" + page.getIndex() + "].question[" + item.getIndex() + "]不存在");
+						if (OmrField.BREACH.equals(item.getField())) {
+							if (pageVo.getBreach() == null) {
+								throw new ParameterException("page[" + page.getIndex() + "].breach不存在");
+							}
+							item.setFirstResult(pageVo.getBreach().toString());
 						}
-						item.setFirstResult(content);
-					}
-					if (OmrField.SELECTIVE.equals(item.getField())) {
-						String content = pageVo.getSelective() != null ? pageVo.getSelective().get(item.getIndex())
-								: null;
-						if (content == null) {
-							throw new ParameterException(
-									"page[" + page.getIndex() + "].selective[" + item.getIndex() + "]不存在");
+						if (OmrField.QUESTION.equals(item.getField())) {
+							String content = pageVo.getQuestion() != null ? pageVo.getQuestion().get(item.getIndex())
+									: null;
+							if (content == null) {
+								throw new ParameterException(
+										"page[" + page.getIndex() + "].question[" + item.getIndex() + "]不存在");
+							}
+							item.setFirstResult(content);
+						}
+						if (OmrField.SELECTIVE.equals(item.getField())) {
+							String content = pageVo.getSelective() != null ? pageVo.getSelective().get(item.getIndex())
+									: null;
+							if (content == null) {
+								throw new ParameterException(
+										"page[" + page.getIndex() + "].selective[" + item.getIndex() + "]不存在");
+							}
+							item.setFirstResult(content);
 						}
-						item.setFirstResult(content);
 					}
 				}
+				task.setStatus(OmrTaskStatus.PROCESSED);
+				updatePaperResult(result, task.getPaperId(), userId);
+				task.setUserId(userId);
+				task.setUpdateTime(System.currentTimeMillis());
+				this.saveOrUpdate(task);
+			} finally {
+				concurrentService.getReadWriteLock(LockType.STUDENT + "-" + task.getStudentId()).writeLock().unlock();
 			}
-			task.setStatus(OmrTaskStatus.PROCESSED);
-
-			updatePaperResult(result, task.getPaperId(), userId);
-			task.setUserId(userId);
-			task.setUpdateTime(System.currentTimeMillis());
-			this.saveOrUpdate(task);
-			concurrentService.getReadWriteLock(LockType.STUDENT + "-" + task.getStudentId()).writeLock().unlock();
 		}
 		ScanOmrTaskSaveDto vo = new ScanOmrTaskSaveDto();
 		vo.setStudentId(studentId);