yin 8 miesięcy temu
rodzic
commit
fdff68e88a

+ 10 - 13
src/main/java/cn/com/qmth/scancentral/dao/BatchDao.java

@@ -1,5 +1,13 @@
 package cn.com.qmth.scancentral.dao;
 
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
 import cn.com.qmth.scancentral.bean.BatchQueryDomain;
 import cn.com.qmth.scancentral.entity.BatchEntity;
 import cn.com.qmth.scancentral.enums.BatchStatus;
@@ -8,21 +16,10 @@ import cn.com.qmth.scancentral.enums.VerifyStatus;
 import cn.com.qmth.scancentral.vo.BatchQueryVo;
 import cn.com.qmth.scancentral.vo.ScannerWorkloadVo;
 import cn.com.qmth.scancentral.vo.SubjectVo;
-import cn.com.qmth.scancentral.vo.batch.BatchDeviceQuery;
-import cn.com.qmth.scancentral.vo.batch.BatchQuery;
-import cn.com.qmth.scancentral.vo.batch.BatchStudentSimpleVo;
-import cn.com.qmth.scancentral.vo.batch.BatchSubjectQuery;
-import cn.com.qmth.scancentral.vo.batch.BatchVo;
+import cn.com.qmth.scancentral.vo.batch.*;
 import cn.com.qmth.scancentral.vo.batchdetail.BatchDetailDO;
 import cn.com.qmth.scancentral.vo.device.DeviceVo;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
 public interface BatchDao extends BaseMapper<BatchEntity> {
 
     void updateScanCount(@Param("id") Long id);
@@ -46,7 +43,7 @@ public interface BatchDao extends BaseMapper<BatchEntity> {
             @Param(value = "endTime") Long endTime);
 
     IPage<BatchEntity> findUnCheck(Page<BatchEntity> page, @Param("examId") Long examId,
-            @Param("batchStatus") BatchStatus batchStatus, @Param("checkStatus") CheckStatus checkStatus);
+            @Param("batchStatus") BatchStatus batchStatus, @Param("checkStatus") CheckStatus checkStatus,@Param("checkOrder")String checkOrder);
 
     List<BatchDetailDO> batchDetailListToCheck(@Param("id") Long id, @Param("needCheck") Boolean needCheck);
 

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

@@ -17,20 +17,8 @@ import cn.com.qmth.scancentral.entity.BatchEntity;
 import cn.com.qmth.scancentral.enums.BatchStatus;
 import cn.com.qmth.scancentral.enums.CheckStatus;
 import cn.com.qmth.scancentral.enums.VerifyStatus;
-import cn.com.qmth.scancentral.vo.BatchFinishVo;
-import cn.com.qmth.scancentral.vo.BatchQueryVo;
-import cn.com.qmth.scancentral.vo.BatchVerifyVo;
-import cn.com.qmth.scancentral.vo.ScannerWorkloadVo;
-import cn.com.qmth.scancentral.vo.SheetUploadVo;
-import cn.com.qmth.scancentral.vo.SliceUploadVo;
-import cn.com.qmth.scancentral.vo.SubjectVo;
-import cn.com.qmth.scancentral.vo.batch.AnswerSaveVo;
-import cn.com.qmth.scancentral.vo.batch.BatchCreateVo;
-import cn.com.qmth.scancentral.vo.batch.BatchDeviceQuery;
-import cn.com.qmth.scancentral.vo.batch.BatchQuery;
-import cn.com.qmth.scancentral.vo.batch.BatchStudentSimpleVo;
-import cn.com.qmth.scancentral.vo.batch.BatchSubjectQuery;
-import cn.com.qmth.scancentral.vo.batch.BatchVo;
+import cn.com.qmth.scancentral.vo.*;
+import cn.com.qmth.scancentral.vo.batch.*;
 import cn.com.qmth.scancentral.vo.batchdetail.BatchDetailVo;
 import cn.com.qmth.scancentral.vo.checkimage.CheckImageSubmitVo;
 import cn.com.qmth.scancentral.vo.device.DeviceVo;
@@ -109,7 +97,7 @@ public interface BatchService extends IService<BatchEntity> {
 
     int getCheckCountByExamId(Long examId, CheckStatus status, User user);
 
-    IPage<BatchEntity> findUnCheck(Long examId, int pageNumber, int pageSize, BatchStatus b, CheckStatus status);
+    IPage<BatchEntity> findUnCheck(Long examId, int pageNumber, int pageSize, BatchStatus b, CheckStatus status, String order);
 
     void batchVerifyCancel(User user, Long examId);
 

+ 28 - 25
src/main/java/cn/com/qmth/scancentral/service/impl/BatchServiceImpl.java

@@ -1,5 +1,25 @@
 package cn.com.qmth.scancentral.service.impl;
 
+import java.util.*;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang.math.RandomUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.boot.core.collection.PageResult;
+import com.qmth.boot.core.concurrent.service.ConcurrentService;
+import com.qmth.boot.core.exception.ParameterException;
+import com.qmth.boot.core.exception.StatusException;
+
 import cn.com.qmth.scancentral.bean.BatchCreateDomain;
 import cn.com.qmth.scancentral.bean.BatchQueryDomain;
 import cn.com.qmth.scancentral.bean.User;
@@ -26,24 +46,6 @@ import cn.com.qmth.scancentral.vo.paper.PaperVo;
 import cn.com.qmth.scancentral.vo.task.TaskStatusVo;
 import cn.com.qmth.scancentral.vo.verify.VerifyStudentVo;
 import cn.com.qmth.scancentral.vo.verify.VerifyTaskVo;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.qmth.boot.core.collection.PageResult;
-import com.qmth.boot.core.concurrent.service.ConcurrentService;
-import com.qmth.boot.core.exception.ParameterException;
-import com.qmth.boot.core.exception.StatusException;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang.math.RandomUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.*;
 
 @Service
 public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> implements BatchService {
@@ -663,10 +665,11 @@ public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> impleme
 
     @Override
     public VerifyTaskVo getCheckImageTask(Long examId, User user) {
+        ExamEntity exam = examService.getById(examId);
         int retry = 1;
         VerifyTaskVo task = null;
         while (task == null) {
-            List<BatchEntity> list = this.findUnCheck(examId, retry, 20, BatchStatus.FINISH, CheckStatus.WAITING)
+            List<BatchEntity> list = this.findUnCheck(examId, retry, 20, BatchStatus.FINISH, CheckStatus.WAITING,exam.getImageCheckOrder())
                     .getRecords();
             if (list.isEmpty()) {
                 break;
@@ -682,7 +685,7 @@ public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> impleme
             }
         }
         if (task == null) {
-            throw NotFoundExceptions.NO_SYNC_VERIFY_TASK;
+            throw NotFoundExceptions.NO_CHECK_IMAGE_TASK;
         }
         return task;
     }
@@ -745,7 +748,7 @@ public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> impleme
 
     @Override
     public void releaseCheckImageTask(Long examId, User user) {
-        TaskLock taskLock = TaskLockUtil.getCheckTask(examId.toString());
+        TaskLock taskLock = TaskLockUtil.getImageCheckTask(examId.toString());
         taskLock.clear(user.getAccount());
     }
 
@@ -765,19 +768,19 @@ public class BatchServiceImpl extends ServiceImpl<BatchDao, BatchEntity> impleme
 
     @Override
     public void releaseCheckImageTask(BatchEntity t) {
-        TaskLock taskLock = TaskLockUtil.getCheckTask(t.getExamId().toString());
+        TaskLock taskLock = TaskLockUtil.getImageCheckTask(t.getExamId().toString());
         taskLock.remove(t.getId().toString());
     }
 
     @Override
     public IPage<BatchEntity> findUnCheck(Long examId, int pageNumber, int pageSize, BatchStatus batchStatus,
-            CheckStatus checkStatus) {
-        return this.baseMapper.findUnCheck(new Page<>(pageNumber, pageSize), examId, batchStatus, checkStatus);
+            CheckStatus checkStatus,String order) {
+        return this.baseMapper.findUnCheck(new Page<>(pageNumber, pageSize), examId, batchStatus, checkStatus,order);
     }
 
     @Override
     public boolean applyCheckImageTask(BatchEntity t, String user) {
-        TaskLock taskLock = TaskLockUtil.getCheckTask(t.getExamId().toString());
+        TaskLock taskLock = TaskLockUtil.getImageCheckTask(t.getExamId().toString());
         boolean lock = taskLock.add(t.getId(), user);
         // 上锁失败直接返回
         if (!lock) {

+ 7 - 7
src/main/java/cn/com/qmth/scancentral/support/TaskLockUtil.java

@@ -12,7 +12,7 @@ public class TaskLockUtil {
     private static final Map<String, TaskLock> verifyTaskMap = new HashMap<>();
 
     // 图片检查任务并发处理互斥锁
-    private static final Map<String, TaskLock> checkTaskMap = new HashMap<>();
+    private static final Map<String, TaskLock> imageCheckTaskMap = new HashMap<>();
 
     // 数据检查任务并发处理互斥锁
     private static final Map<String, TaskLock> studentAnswerTaskMap = new HashMap<>();
@@ -38,8 +38,8 @@ public class TaskLockUtil {
         }
     }
 
-    public static void clearTimeoutCheckTask(long timeoutMinute) {
-        for (TaskLock taskLock : checkTaskMap.values()) {
+    public static void clearTimeoutImageCheckTask(long timeoutMinute) {
+        for (TaskLock taskLock : imageCheckTaskMap.values()) {
             taskLock.expire(timeoutMinute);
         }
     }
@@ -80,11 +80,11 @@ public class TaskLockUtil {
         return taskLock;
     }
 
-    public static TaskLock getCheckTask(String key) {
-        TaskLock taskLock = checkTaskMap.get(key);
+    public static TaskLock getImageCheckTask(String key) {
+        TaskLock taskLock = imageCheckTaskMap.get(key);
         if (taskLock == null) {
-            synchronized (checkTaskMap) {
-                taskLock = checkTaskMap.computeIfAbsent(key, k -> new TaskLock());
+            synchronized (imageCheckTaskMap) {
+                taskLock = imageCheckTaskMap.computeIfAbsent(key, k -> new TaskLock());
             }
         }
         return taskLock;

+ 3 - 2
src/main/java/cn/com/qmth/scancentral/task/CleanTaskJob.java

@@ -1,9 +1,10 @@
 package cn.com.qmth.scancentral.task;
 
-import cn.com.qmth.scancentral.support.TaskLockUtil;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
+import cn.com.qmth.scancentral.support.TaskLockUtil;
+
 @Service
 public class CleanTaskJob {
 
@@ -19,7 +20,7 @@ public class CleanTaskJob {
 
     @Scheduled(cron = "0 0/10 6-23 * * ?")
     public void clearTimeoutCheckTask() {
-        TaskLockUtil.clearTimeoutCheckTask(30 * 60 * 1000);
+        TaskLockUtil.clearTimeoutImageCheckTask(30 * 60 * 1000);
     }
 
     @Scheduled(cron = "0 0/10 6-23 * * ?")

+ 13 - 12
src/main/resources/mapper/BatchMapper.xml

@@ -189,21 +189,22 @@
     <select id="findUnCheck"
             resultType="cn.com.qmth.scancentral.entity.BatchEntity">
         select b.id,
-               b.exam_id,
-               b.device,
-               b.package_code,
-               b.scan_count,
-               b.assigned_count,
-               b.status,
-               b.verify_status,
-               b.check_status,
-               b.create_time,
-               b.update_time
+        b.exam_id,
+        b.device,
+        b.package_code,
+        b.scan_count,
+        b.assigned_count,
+        b.status,
+        b.verify_status,
+        b.check_status,
+        b.create_time,
+        b.update_time
         from sc_batch b
         where b.exam_id = #{examId}
-          and b.status = #{batchStatus}
-          and b.check_status = #{checkStatus}
+        and b.status = #{batchStatus}
+        and b.check_status = #{checkStatus}
         order by b.id
+        <if test="batchId != null">#{checkOrder}</if>
     </select>
 
     <select id="getHistory"