Przeglądaj źródła

update image check

deason 9 miesięcy temu
rodzic
commit
8c58ba96c9

+ 2 - 0
src/main/java/cn/com/qmth/scancentral/dao/StudentDao.java

@@ -99,6 +99,8 @@ public interface StudentDao extends BaseMapper<StudentEntity> {
     IPage<StudentExamRoomVo> studentExamRoomExport(Page<StudentExamRoomVo> page,
                                                    @Param("query") AnswerQueryDomain query);
 
+    List<Long> queryImageCheckWaitingList(@Param("examId") Long examId, @Param("startId") Long startId, @Param("batchSize") Integer batchSize);
+
     List<ImageCheckVo> countImageCheck(@Param("examId") Long examId);
 
     IPage<ImageCheckDetailVo> queryImageCheckDetail(Page<ImageCheckDetailVo> page, @Param("query") ImageCheckQuery query);

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

@@ -13,4 +13,6 @@ public interface ImageCheckService {
 
     PageResult<ImageCheckDetailVo> detailList(ImageCheckQuery query);
 
+    void check(Long examId);
+
 }

+ 34 - 2
src/main/java/cn/com/qmth/scancentral/service/impl/ImageCheckServiceImpl.java

@@ -1,8 +1,8 @@
 package cn.com.qmth.scancentral.service.impl;
 
 import cn.com.qmth.scancentral.dao.StudentDao;
-import cn.com.qmth.scancentral.service.ExamService;
 import cn.com.qmth.scancentral.service.ImageCheckService;
+import cn.com.qmth.scancentral.service.ToolExportService;
 import cn.com.qmth.scancentral.util.MathUtil;
 import cn.com.qmth.scancentral.util.PageUtil;
 import cn.com.qmth.scancentral.vo.imagecheck.ImageCheckDetailVo;
@@ -11,6 +11,7 @@ import cn.com.qmth.scancentral.vo.imagecheck.ImageCheckVo;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.boot.core.collection.PageResult;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -25,7 +26,7 @@ public class ImageCheckServiceImpl implements ImageCheckService {
     private static final Logger log = LoggerFactory.getLogger(ImageCheckServiceImpl.class);
 
     @Autowired
-    private ExamService examService;
+    private ToolExportService toolExportService;
 
     @Autowired
     private StudentDao studentDao;
@@ -62,4 +63,35 @@ public class ImageCheckServiceImpl implements ImageCheckService {
         return PageUtil.of(page);
     }
 
+    /**
+     * 图片检查
+     */
+    @Override
+    public void check(Long examId) {
+        log.warn("图片检查开始... examId:{}", examId);
+        long startTime = System.currentTimeMillis();
+
+        int batchSize = 1000;
+        int checkedSize = 0;
+        Long startId = 0L;
+        while (true) {
+            List<Long> studentIds = studentDao.queryImageCheckWaitingList(examId, startId, batchSize);
+            if (CollectionUtils.isEmpty(studentIds)) {
+                break;
+            }
+
+            for (Long studentId : studentIds) {
+                toolExportService.studentCheck(studentId);
+            }
+
+            checkedSize += studentIds.size();
+            log.info("图片检查中... examId:{} checkedSize:{} startId:{}", examId, checkedSize, startId);
+
+            startId = studentIds.get(studentIds.size() - 1);
+        }
+
+        long cost = (System.currentTimeMillis() - startTime) / 1000;
+        log.warn("图片检查结束... examId:{} checkedSize:{} cost:{}s", examId, checkedSize, cost);
+    }
+
 }

+ 17 - 11
src/main/java/cn/com/qmth/scancentral/service/impl/ToolExportServiceImpl.java

@@ -11,6 +11,8 @@ import com.qmth.boot.core.fss.store.FileStore;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -30,6 +32,8 @@ import java.util.*;
 @Service
 public class ToolExportServiceImpl implements ToolExportService {
 
+    private static final Logger log = LoggerFactory.getLogger(ToolExportServiceImpl.class);
+
     @Autowired
     private ConcurrentService concurrentService;
 
@@ -58,13 +62,13 @@ public class ToolExportServiceImpl implements ToolExportService {
     private AnswerCardService answerCardService;
 
     private String getOwSheetUri(Long examId, String subjectCode, String examNumber, Integer paperNumber,
-            Integer pageIndex) {
+                                 Integer pageIndex) {
         return String.format("%s/%s/%s/%s/%s/%s-%s.jpg", "sheet", examId, subjectCode, examNumber.substring(0, 4),
                 examNumber, paperNumber, pageIndex);
     }
 
     private String getOwSliceUri(Long examId, String subjectCode, String examNumber, Integer paperNumber,
-            Integer pageIndex, Integer index) {
+                                 Integer pageIndex, Integer index) {
         return String.format("%s/%s/%s/%s/%s/%s-%s-%s.jpg", "slice", examId, subjectCode, examNumber.substring(0, 4),
                 examNumber, paperNumber, pageIndex, index);
     }
@@ -85,15 +89,9 @@ public class ToolExportServiceImpl implements ToolExportService {
     @Override
     public void studentCheck(Long studentId) {
         concurrentService.getReadWriteLock(LockType.STUDENT + "-" + studentId).writeLock().lock();
+        StudentEntity student = null;
         try {
-            SystemConfigEntity config = systemConfigService.find();
-            if (config == null) {
-                throw new ParameterException("未找到系统配置");
-            }
-            if (!SystemMode.STANDALONE.equals(SystemMode.current())) {
-                throw new ParameterException("系统配置非独立模式");
-            }
-            StudentEntity student = studentService.getById(studentId);
+            student = studentService.getById(studentId);
             if (student == null) {
                 throw new ParameterException("未找到考生");
             }
@@ -120,7 +118,15 @@ public class ToolExportServiceImpl implements ToolExportService {
             } else {
                 throw new ParameterException("转存模式配置错误");
             }
-
+        } catch (Exception e) {
+            if (student != null) {
+                log.warn("图片检查异常!stuId:{} subjectCode:{} examNumber:{} err:{}", student.getId(),
+                        student.getSubjectCode(), student.getExamNumber(), e.getMessage());
+                student.setImageCheckStatus(ImageCheckStatus.FAILED);
+                studentService.saveOrUpdate(student);
+            } else {
+                log.error("图片检查错误!err:{}", e.getMessage(), e);
+            }
         } finally {
             concurrentService.getReadWriteLock(LockType.STUDENT + "-" + studentId).writeLock().unlock();
         }

+ 10 - 0
src/main/resources/mapper/StudentMapper.xml

@@ -618,6 +618,16 @@
         order by tm.exam_site,tm.exam_room
     </select>
 
+    <select id="queryImageCheckWaitingList" resultType="java.lang.Long">
+        select id
+        from sc_student
+        where exam_id = #{examId}
+          and file_upload_status = 'UPLOADED'
+          and image_check_status = 'WAITING'
+          and id > #{startId}
+        limit #{batchSize}
+    </select>
+
     <select id="countImageCheck" resultType="cn.com.qmth.scancentral.vo.imagecheck.ImageCheckVo">
         select stu.subject_code,
                sb.name  as         subjectName,