yin há 7 meses atrás
pai
commit
ce848962de

+ 40 - 23
src/main/java/cn/com/qmth/scancentral/service/impl/BatchServiceImpl.java

@@ -9,6 +9,8 @@ import java.util.Map;
 import java.util.Set;
 
 import cn.com.qmth.scancentral.bean.answersave.*;
+import cn.com.qmth.scancentral.entity.*;
+import cn.com.qmth.scancentral.service.*;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang.math.RandomUtils;
@@ -34,15 +36,6 @@ import cn.com.qmth.scancentral.bean.BatchQueryDomain;
 import cn.com.qmth.scancentral.bean.User;
 import cn.com.qmth.scancentral.bean.WorkloadDomain;
 import cn.com.qmth.scancentral.dao.BatchDao;
-import cn.com.qmth.scancentral.entity.AnswerCardEntity;
-import cn.com.qmth.scancentral.entity.BatchEntity;
-import cn.com.qmth.scancentral.entity.BatchPaperEntity;
-import cn.com.qmth.scancentral.entity.ExamEntity;
-import cn.com.qmth.scancentral.entity.PaperEntity;
-import cn.com.qmth.scancentral.entity.PaperPageEntity;
-import cn.com.qmth.scancentral.entity.ScannerEntity;
-import cn.com.qmth.scancentral.entity.StudentEntity;
-import cn.com.qmth.scancentral.entity.StudentPaperEntity;
 import cn.com.qmth.scancentral.enums.BatchStatus;
 import cn.com.qmth.scancentral.enums.CheckStatus;
 import cn.com.qmth.scancentral.enums.LockType;
@@ -50,19 +43,6 @@ import cn.com.qmth.scancentral.enums.Role;
 import cn.com.qmth.scancentral.enums.VerifyStatus;
 import cn.com.qmth.scancentral.exception.NotFoundExceptions;
 import cn.com.qmth.scancentral.exception.ParameterExceptions;
-import cn.com.qmth.scancentral.service.AnswerCardService;
-import cn.com.qmth.scancentral.service.AnswerCardSubjectService;
-import cn.com.qmth.scancentral.service.AssignedCheckHistoryService;
-import cn.com.qmth.scancentral.service.BatchPaperService;
-import cn.com.qmth.scancentral.service.BatchService;
-import cn.com.qmth.scancentral.service.ExamRoomService;
-import cn.com.qmth.scancentral.service.ExamService;
-import cn.com.qmth.scancentral.service.FilePropertyService;
-import cn.com.qmth.scancentral.service.FileService;
-import cn.com.qmth.scancentral.service.PaperPageService;
-import cn.com.qmth.scancentral.service.PaperService;
-import cn.com.qmth.scancentral.service.ScannerService;
-import cn.com.qmth.scancentral.service.StudentService;
 import cn.com.qmth.scancentral.support.TaskLock;
 import cn.com.qmth.scancentral.support.TaskLockUtil;
 import cn.com.qmth.scancentral.util.PageUtil;
@@ -135,6 +115,15 @@ public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> impleme
     @Autowired
     private ScannerService scannerService;
 
+    @Autowired
+    private StudentPaperService studentPaperService;
+
+    @Autowired
+    private OmrGroupService omrGroupService;
+
+    @Autowired
+    private OmrTaskService omrTaskService;
+
     @Override
     public BatchEntity checkBatchStatus(BatchEntity b) {
         if (b == null) {
@@ -1027,6 +1016,9 @@ public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> impleme
             studentMap.put(examNumber,student);
         }
 
+        List<OmrGroupEntity> gs = omrGroupService.findByExamIdAndSubjectCodeAndFixed(exam.getId(),
+                domain.getSubjectCode(),true);
+
         for (String examNumber:studentMap.keySet()) {
             AnswerPackageStudent answerPackageStudent = answerPackageStudentMap.get(examNumber);
             StudentEntity student = studentMap.get(examNumber);
@@ -1061,7 +1053,26 @@ public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> impleme
                         || !exam.getEnableSyncVerify()) {
                     concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().lock();
                     try {
-                        studentService.updateStudentAndPaper(user, student.getId(), studentPaperList);
+//                        studentService.updateStudentAndPaper(user, student.getId(), studentPaperList);
+                        for (StudentPaperEntity studentPaper : studentPaperList) {
+                            studentPaper.setStudentId(student.getId());
+                        }
+                        // 清空原有绑定关系
+                        studentPaperService.removeByStudentId(student.getId());
+                        // 保存绑定关系
+                        studentPaperService.saveOrUpdateBatchByMultiId(studentPaperList);
+                        // 更新考生状态
+                        studentService.updateStudentByPaper(user, student.getId(), false);
+                        //识别对照
+                        for (OmrGroupEntity g : gs) {
+                            concurrentService.getReadWriteLock(LockType.OMR_GROUP + "-" + g.getId()).readLock().lock();
+                            omrTaskService.deleteByStudentIdAndGroupId(g.getId(), student.getId());
+                            List<OmrTaskEntity> list = omrTaskService.buildTask(g,  student.getId());
+                            if (list != null && !list.isEmpty()) {
+                                omrTaskService.saveBatch(list);
+                            }
+                            concurrentService.getReadWriteLock(LockType.OMR_GROUP + "-" + g.getId()).readLock().unlock();
+                        }
                         studentService.updateAssignedCheckCount(student.getId(), true);
                     } finally {
                         concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().unlock();
@@ -1069,6 +1080,12 @@ public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> impleme
                 }
             }
         }
+        for (OmrGroupEntity g : gs) {
+            concurrentService.getReadWriteLock(LockType.OMR_GROUP + "-" + g.getId()).readLock().lock();
+            omrGroupService.updateTotalCount(g.getId());
+            concurrentService.getReadWriteLock(LockType.OMR_GROUP + "-" + g.getId()).readLock().unlock();
+        }
+
         this.batchFinish(batch.getId());
 
         LambdaUpdateWrapper<BatchEntity> lw = new LambdaUpdateWrapper<>();