yin 7 months ago
parent
commit
88acfa0e7c

+ 2 - 2
src/main/java/cn/com/qmth/scancentral/controller/scan/ScanBatchController.java

@@ -64,9 +64,9 @@ public class ScanBatchController extends BaseController {
         concurrentService.getReadWriteLock(LockType.BATCH + "-" + domain.getBatchId()).writeLock().lock();
         BatchEntity batch = batchService.checkBatchStatus(batchService.getById(domain.getBatchId()));
         try{
-            Map<String, StudentEntity> studentMap = batchService.validate(domain, user);
+            Map<String, StudentEntity> studentMap = batchService.validate(batch,domain, user);
             Map<String, List<StudentPaperEntity>> studentPaperMap = batchService.savePaperBatch(batch,user,domain,studentMap);
-            batchService.deleteRelation(studentMap);
+            batchService.deleteRelation(batch,studentMap);
             batchService.saveAndUpdateStudent(batch,user,studentMap,studentPaperMap);
             return AnswerPackageSave.create(studentMap.size(),batch.getStatus());
         }finally {

+ 1 - 0
src/main/java/cn/com/qmth/scancentral/service/BatchPaperService.java

@@ -29,4 +29,5 @@ public interface BatchPaperService extends IMppService<BatchPaperEntity> {
 
     Integer getScanStudentCount(Long examId, String subjectCode, long startTime, long endTime);
 
+    void deleteByBatchId(Long batchId);
 }

+ 2 - 2
src/main/java/cn/com/qmth/scancentral/service/BatchService.java

@@ -119,11 +119,11 @@ public interface BatchService extends IService<BatchEntity> {
 
     List<BatchStudentSimpleVo> studentList(Long batchId);
 
-    Map<String,StudentEntity> validate(AnswerPackageDomain domain, User user);
+    Map<String,StudentEntity> validate(BatchEntity batch,AnswerPackageDomain domain, User user);
 
     Map<String, List<StudentPaperEntity>> savePaperBatch(BatchEntity batch, User user,AnswerPackageDomain domain, Map<String,StudentEntity> studentMap);
 
-    void deleteRelation(Map<String, StudentEntity> studentMap);
+    void deleteRelation(BatchEntity batch,Map<String, StudentEntity> studentMap);
 
     void saveAndUpdateStudent(BatchEntity batch, User user,Map<String, StudentEntity> studentMap,Map<String, List<StudentPaperEntity>> studentPaperMap);
 }

+ 19 - 8
src/main/java/cn/com/qmth/scancentral/service/impl/BatchPaperServiceImpl.java

@@ -1,18 +1,20 @@
 package cn.com.qmth.scancentral.service.impl;
 
+import java.util.List;
+import java.util.Set;
+
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
+
 import cn.com.qmth.scancentral.dao.BatchPaperDao;
 import cn.com.qmth.scancentral.entity.BatchEntity;
 import cn.com.qmth.scancentral.entity.BatchPaperEntity;
 import cn.com.qmth.scancentral.entity.PaperEntity;
 import cn.com.qmth.scancentral.service.BatchPaperService;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.github.jeffreyning.mybatisplus.service.MppServiceImpl;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.Set;
 
 @Service
 public class BatchPaperServiceImpl extends MppServiceImpl<BatchPaperDao, BatchPaperEntity>
@@ -88,4 +90,13 @@ public class BatchPaperServiceImpl extends MppServiceImpl<BatchPaperDao, BatchPa
         return baseMapper.getScanStudentCount(examId, subjectCode, startTime, endTime);
     }
 
+    @Override
+    @Transactional
+    public void deleteByBatchId(Long batchId) {
+        QueryWrapper<BatchPaperEntity> wrapper = new QueryWrapper<>();
+        LambdaQueryWrapper<BatchPaperEntity> lw = wrapper.lambda();
+        lw.eq(BatchPaperEntity::getBatchId, batchId);
+        this.remove(lw);
+    }
+
 }

+ 11 - 6
src/main/java/cn/com/qmth/scancentral/service/impl/BatchServiceImpl.java

@@ -976,8 +976,7 @@ public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> impleme
     }
 
     @Override
-    public Map<String,StudentEntity>  validate(AnswerPackageDomain domain, User user) {
-        BatchEntity batch = getById(domain.getBatchId());
+    public Map<String,StudentEntity>  validate(BatchEntity batch,AnswerPackageDomain domain, User user) {
         ExamEntity exam = examService.getById(batch.getExamId());
         if (exam == null) {
             throw ParameterExceptions.EXAM_NOT_FOUND;
@@ -1045,8 +1044,6 @@ public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> impleme
                 paper.setAssigned(answerPaper.getAssigned());
                 // 保存paper与page到数据库
                 paperService.savePaperAndPages(paper, answerPaper.buildPageList(null));
-                // 记录paper与batch关联关系
-                batchPaperService.update(batch, paper, student.getId(), paperNumber, false);
                 studentPaperList.add(new StudentPaperEntity(student.getId(), paperNumber, paper.getId()));
             }
             result.put(examNumber,studentPaperList);
@@ -1056,7 +1053,8 @@ public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> impleme
 
     @Override
     @Transactional
-    public void deleteRelation(Map<String, StudentEntity> studentMap) {
+    public void deleteRelation(BatchEntity batch,Map<String, StudentEntity> studentMap) {
+        batchPaperService.deleteByBatchId(batch.getId());
         for (StudentEntity student: studentMap.values()) {
             studentPaperService.removeByStudentId(student.getId());
             omrTaskService.deleteByStudentIdAndGroupId(student.getId(),null,false);
@@ -1080,8 +1078,15 @@ public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> impleme
             examRoom = student.getExamRoom();
             concurrentService.getReadWriteLock(LockType.STUDENT + "-" + student.getId()).writeLock().lock();
             try {
+                List<StudentPaperEntity> studentPaperList = studentPaperMap.get(student.getExamNumber());
+                // 记录paper与batch关联关系
+                for (StudentPaperEntity studentPaper:studentPaperList) {
+                    PaperEntity paper = paperService.getById(studentPaper.getPaperId());
+                    batchPaperService.update(batch, paper, student.getId(), studentPaper.getPaperNumber(), false);
+                }
                 // 更新绑定关系
-                studentPaperService.saveOrUpdateBatchByMultiId(studentPaperMap.get(student.getExamNumber()));
+                studentPaperService.saveOrUpdateBatchByMultiId(studentPaperList);
+
                 // 更新考生状态
                 student = studentService.updateStudentByPaper(user, student.getId(), false);
                 if(student.getAssigned()){