Bladeren bron

1.0.5 update

xiaofei 10 maanden geleden
bovenliggende
commit
a0e50bff6f

+ 2 - 0
paper-library-business/src/main/java/com/qmth/paper/library/business/service/PaperScanTaskService.java

@@ -45,4 +45,6 @@ public interface PaperScanTaskService extends IService<PaperScanTask> {
     List<PaperScanTask> listByExamId(Long examId);
 
     void clearSingleStudentData(Long paperScanTaskId, Long studentId);
+
+    void updateScanCount(Long paperScanTaskId);
 }

+ 4 - 14
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/ClientServiceImpl.java

@@ -134,21 +134,11 @@ public class ClientServiceImpl implements ClientService {
             boolean save = paperLibraryService.save(paperLibrary);
             if (save) {
                 // 统计考生数量
-                int studentCount = examStudentService.countByExamIdAndCourseCode(examStudent.getExamId(), examStudent.getCourseCode());
-                // 统计扫描张数
-                int scanCount = paperLibraryService.countScanCount(paperScanTaskId);
-                // 统计扫描学生数
-                int scanStudentCount = paperLibraryService.countScanStudentCount(paperScanTaskId);
-                // 总扫描数
-                UpdateWrapper<PaperScanTask> updateWrapper = new UpdateWrapper<>();
-                updateWrapper.lambda().set(PaperScanTask::getStudentCount, studentCount)
-                        .set(PaperScanTask::getScanStudentCount, scanStudentCount)
-                        .set(PaperScanTask::getScanCount, scanCount)
-                        .eq(PaperScanTask::getId, paperScanTaskId);
-                paperScanTaskService.update(updateWrapper);
-
+//                int studentCount = examStudentService.countByExamIdAndCourseCode(examStudent.getExamId(), examStudent.getCourseCode());
+                // 更新扫描任务扫描考生数量、扫描图片数量
+                paperScanTaskService.updateScanCount(paperScanTaskId);
+                // 更新考生绑定图片数量
                 examStudentService.updateBindCount(examStudent.getId());
-
                 // 更新批次号
                 basicBatchNumberService.updateBatchNo(paperScanTask.getExamId(), scanUserId, batchNo);
                 // 清除pdf文件记录

+ 15 - 6
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/ExamStudentServiceImpl.java

@@ -20,6 +20,8 @@ import com.qmth.paper.library.common.entity.BasicField;
 import com.qmth.paper.library.common.entity.ExamStudent;
 import com.qmth.paper.library.common.entity.SysUser;
 import com.qmth.paper.library.common.enums.*;
+import com.qmth.paper.library.common.lock.LockService;
+import com.qmth.paper.library.common.lock.LockType;
 import com.qmth.paper.library.common.service.BasicFieldService;
 import com.qmth.paper.library.common.service.CommonCacheService;
 import com.qmth.paper.library.common.util.ServletUtil;
@@ -68,6 +70,8 @@ public class ExamStudentServiceImpl extends ServiceImpl<ExamStudentMapper, ExamS
     private AsyncExamStudentImportService asyncExamStudentImportService;
     @Resource
     private FileUploadService fileUploadService;
+    @Resource
+    private LockService lockService;
 
     @Override
     public IPage<ExamStudent> findStudentPage(Long examId, String courseCode, String collegeName, String majorName, String clazzName, String queryParams, int pageNumber, int pageSize) {
@@ -152,10 +156,10 @@ public class ExamStudentServiceImpl extends ServiceImpl<ExamStudentMapper, ExamS
             if (Objects.isNull(existStudent)) {
                 throw ExceptionResultEnum.ERROR.exception(String.format("找不到考生,id:%s", examStudent.getId()));
             }
-            if(StoreTypeEnum.ROOM.equals(storeType) && !StringUtils.deleteWhitespace(examStudent.getExamRoom()).equals(existStudent.getExamRoom())) {
+            if (StoreTypeEnum.ROOM.equals(storeType) && !StringUtils.deleteWhitespace(examStudent.getExamRoom()).equals(existStudent.getExamRoom())) {
                 throw ExceptionResultEnum.ERROR.exception("不能更改考场");
             }
-            if(StoreTypeEnum.CLASS.equals(storeType) && !StringUtils.deleteWhitespace(examStudent.getClassName()).equals(existStudent.getClassName())) {
+            if (StoreTypeEnum.CLASS.equals(storeType) && !StringUtils.deleteWhitespace(examStudent.getClassName()).equals(existStudent.getClassName())) {
                 throw ExceptionResultEnum.ERROR.exception("不能更改班级");
             }
 
@@ -252,10 +256,15 @@ public class ExamStudentServiceImpl extends ServiceImpl<ExamStudentMapper, ExamS
 
     @Override
     public void updateBindCount(Long studentId) {
-        UpdateWrapper<ExamStudent> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().set(ExamStudent::getBindCount, paperLibraryService.countByStudentId(studentId))
-                .eq(ExamStudent::getId, studentId);
-        this.update(updateWrapper);
+        try {
+            lockService.waitlock(LockType.UPDATE_STUDENT_PICTURE_COUNT, studentId);
+            UpdateWrapper<ExamStudent> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.lambda().set(ExamStudent::getBindCount, paperLibraryService.countByStudentId(studentId))
+                    .eq(ExamStudent::getId, studentId);
+            this.update(updateWrapper);
+        } finally {
+            lockService.unlock(LockType.UPDATE_STUDENT_PICTURE_COUNT, studentId);
+        }
     }
 
     @Override

+ 24 - 1
paper-library-business/src/main/java/com/qmth/paper/library/business/service/impl/PaperScanTaskServiceImpl.java

@@ -20,6 +20,8 @@ import com.qmth.paper.library.common.enums.ExceptionResultEnum;
 import com.qmth.paper.library.common.enums.RecognitionTypeEnum;
 import com.qmth.paper.library.common.enums.StoreTypeEnum;
 import com.qmth.paper.library.common.enums.UploadFileEnum;
+import com.qmth.paper.library.common.lock.LockService;
+import com.qmth.paper.library.common.lock.LockType;
 import com.qmth.paper.library.common.service.BasicSchoolService;
 import com.qmth.paper.library.common.service.BasicSemesterService;
 import com.qmth.paper.library.common.util.FileStoreUtil;
@@ -57,6 +59,8 @@ public class PaperScanTaskServiceImpl extends ServiceImpl<PaperScanTaskMapper, P
     private ExamStudentService examStudentService;
     @Resource
     private ExamCourseService examCourseService;
+    @Resource
+    private LockService lockService;
 
     @Override
     public IPage<PaperScanTaskResult> paperScanTaskPage(Long examId, String courseCode, int pageNumber, int pageSize) {
@@ -198,7 +202,7 @@ public class PaperScanTaskServiceImpl extends ServiceImpl<PaperScanTaskMapper, P
 
         //更新任务的扫描考生数、扫描张数
         List<PaperLibrary> paperLibraryList = paperLibraryService.list(queryWrapper);
-        if(CollectionUtils.isEmpty(paperLibraryList)){
+        if (CollectionUtils.isEmpty(paperLibraryList)) {
             return;
         }
 
@@ -232,4 +236,23 @@ public class PaperScanTaskServiceImpl extends ServiceImpl<PaperScanTaskMapper, P
         // 清除pdf文件记录
         examStudentService.clearPdfFilePath(studentId);
     }
+
+    @Override
+    public void updateScanCount(Long paperScanTaskId) {
+        try {
+            lockService.waitlock(LockType.UPDATE_SCAN_PAPER_COUNT, paperScanTaskId);
+            // 统计扫描张数
+            int scanCount = paperLibraryService.countScanCount(paperScanTaskId);
+            // 统计扫描学生数
+            int scanStudentCount = paperLibraryService.countScanStudentCount(paperScanTaskId);
+            // 总扫描数
+            UpdateWrapper<PaperScanTask> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.lambda().set(PaperScanTask::getScanStudentCount, scanStudentCount)
+                    .set(PaperScanTask::getScanCount, scanCount)
+                    .eq(PaperScanTask::getId, paperScanTaskId);
+            this.update(updateWrapper);
+        } finally {
+            lockService.unlock(LockType.UPDATE_SCAN_PAPER_COUNT, paperScanTaskId);
+        }
+    }
 }

+ 4 - 1
paper-library-common/src/main/java/com/qmth/paper/library/common/lock/LockType.java

@@ -8,7 +8,10 @@ public enum LockType {
     UPLOAD_OTHER_FILE("上传其它文件"),
     ROTATE_PICTURE("旋转图片"),
     SCAN_TASK_SEQUENCE("获取任务编号顺序号"),
-    STUDENT_PDF_GENERATE("考生试卷pdf生成");
+    STUDENT_PDF_GENERATE("考生试卷pdf生成"),
+    UPDATE_BATCH_NO("更新批次号"),
+    UPDATE_STUDENT_PICTURE_COUNT("更新考生图片数量"),
+    UPDATE_SCAN_PAPER_COUNT("更新扫描任务学生数量和图片数量");
 
     private String name;
 

+ 4 - 0
paper-library-common/src/main/java/com/qmth/paper/library/common/service/impl/BasicBatchNumberServiceImpl.java

@@ -15,6 +15,7 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.Arrays;
 import java.util.List;
+import java.util.concurrent.locks.Lock;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -53,6 +54,7 @@ public class BasicBatchNumberServiceImpl extends MppServiceImpl<BasicBatchNumber
     @Override
     public void updateBatchNo(Long examId, Long scanUserId, String batchNo) {
         try {
+            lockService.waitlock(LockType.UPDATE_BATCH_NO, examId, scanUserId);
             BasicBatchNumber basicBatchNumber = this.getOrAddByExamIdAndUserId(examId, scanUserId);
             String[] batchNoArray = this.splitBatchNo(batchNo);
             if (batchNoArray.length == 2) {
@@ -62,6 +64,8 @@ public class BasicBatchNumberServiceImpl extends MppServiceImpl<BasicBatchNumber
             }
         } catch (Exception e) {
             // 失败不抛出异常
+        } finally {
+            lockService.unlock(LockType.UPDATE_BATCH_NO, examId, scanUserId);
         }
 
     }