Selaa lähdekoodia

优化图片检查性能速度

yin 8 kuukautta sitten
vanhempi
commit
3b045bb67f

+ 1 - 1
install/mysql/init/scan_central_db.sql

@@ -40,7 +40,7 @@ CREATE TABLE IF NOT EXISTS `sc_student`
     PRIMARY KEY (`id`),
     UNIQUE KEY `exam_student_subject` (`exam_id`, `subject_code`, `exam_number`),
     KEY `exam_assigned` (`exam_id`, `assigned`, `assigned_check_count`),
-    KEY `exam_image_check_status` (`exam_id`, `image_check_status`)
+    KEY `exam_image_check_status` (`exam_id`, `subject_code`, `image_check_status`, `file_upload_status`)
 ) ENGINE = InnoDB
   DEFAULT CHARSET = utf8mb4 COLLATE=utf8mb4_bin;
 

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

@@ -114,4 +114,7 @@ public interface StudentDao extends BaseMapper<StudentEntity> {
 
     StudentAnswerVo getStudentVo(@Param("studentId") Long studentId);
 
+    Integer getImageCheckFailedCount(@Param("examId")Long examId,  @Param("subjectCode")String subjectCode);
+
+    Integer getImageCheckDisposedCount(@Param("examId")Long examId, @Param("subjectCode") String subjectCode);
 }

+ 6 - 0
src/main/java/cn/com/qmth/scancentral/service/StudentService.java

@@ -225,6 +225,12 @@ public interface StudentService extends IService<StudentEntity> {
 
     boolean existUncheck(Long examId, String subjectCode);
 
+    Integer countByExamIdAndSubjectCode(Long examId, String subjectCode);
+
+    Integer getImageCheckFailedCount(Long examId, String subjectCode);
+
+    Integer getImageCheckDisposedCount(Long examId, String subjectCode);
+
     // void resetFileAndImageCheckStatus(Long examId, String subjectCode, String
     // examNumber);
 

+ 24 - 6
src/main/java/cn/com/qmth/scancentral/service/impl/ImageCheckServiceImpl.java

@@ -1,7 +1,13 @@
 package cn.com.qmth.scancentral.service.impl;
 
+import java.util.ArrayList;
 import java.util.List;
 
+import cn.com.qmth.scancentral.entity.SubjectEntity;
+import cn.com.qmth.scancentral.enums.ImageCheckStatus;
+import cn.com.qmth.scancentral.enums.UploadStatus;
+import cn.com.qmth.scancentral.service.StudentService;
+import cn.com.qmth.scancentral.service.SubjectService;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -29,24 +35,36 @@ public class ImageCheckServiceImpl implements ImageCheckService {
 
     @Autowired
     private ToolExportService toolExportService;
-
     @Autowired
     private StudentDao studentDao;
-
+    @Autowired
+    private SubjectService subjectService;
+    @Autowired
+    private StudentService studentService;
     @Override
     public List<ImageCheckVo> list(Long examId) {
         if (examId == null) {
             throw new IllegalArgumentException("考试ID不能为空");
         }
-        List<ImageCheckVo> result = studentDao.countImageCheck(examId);
-
-        for (ImageCheckVo vo : result) {
+        List<SubjectEntity> subjectList =subjectService.listByExamId(examId);
+//        List<ImageCheckVo> result = studentDao.countImageCheck(examId);
+        List<ImageCheckVo> result = new ArrayList<>();
+        for (SubjectEntity subject: subjectList) {
+            ImageCheckVo vo =new ImageCheckVo();
+            vo.setSubjectCode(subject.getCode());
+            vo.setSubjectName(subject.getName());
+            vo.setTotalCount(studentService.countByExamIdAndSubjectCode(examId,subject.getCode()));
+            List<ImageCheckStatus> imageCheckStatusList = new ArrayList<>();
+            List<UploadStatus> fileUploadStatusList = new ArrayList<>();
+            vo.setFailedCount(studentService.getImageCheckFailedCount(examId,subject.getCode()));
+            vo.setDisposedCount(studentService.getImageCheckDisposedCount(examId,subject.getCode()));
             if (vo.getTotalCount() == null || vo.getTotalCount() == 0) {
                 vo.setImageCheckProgress(null);
             } else {
-                double progress = MathUtil.percentage(vo.getDisposedCount(), vo.getTotalCount());
+                double progress = MathUtil.percentage(vo.getTotalCount() - vo.getDisposedCount(), vo.getTotalCount());
                 vo.setImageCheckProgress(progress);
             }
+            result.add(vo);
         }
 
         return result;

+ 18 - 0
src/main/java/cn/com/qmth/scancentral/service/impl/StudentServiceImpl.java

@@ -2603,4 +2603,22 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, StudentEntity> i
         return this.getOne(wrapper) != null;
     }
 
+    @Override
+    public Integer countByExamIdAndSubjectCode(Long examId, String subjectCode) {
+        LambdaQueryWrapper<StudentEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(StudentEntity::getExamId, examId);
+        wrapper.eq(StudentEntity::getSubjectCode, subjectCode);
+        return this.count(wrapper);
+    }
+
+    @Override
+    public Integer getImageCheckFailedCount(Long examId, String subjectCode) {
+        return this.baseMapper.getImageCheckFailedCount(examId,subjectCode);
+    }
+
+    @Override
+    public Integer getImageCheckDisposedCount(Long examId, String subjectCode) {
+        return this.baseMapper.getImageCheckDisposedCount(examId,subjectCode);
+    }
+
 }

+ 18 - 1
src/main/resources/mapper/StudentMapper.xml

@@ -672,7 +672,7 @@
                sum(case
                        when 
                        (stu.file_upload_status = 'ERROR') 
-                       or (stu.file_upload_status = 'UPLOADED' or stu.image_check_status in('SUCCESS','FAILED') ) 
+                       or (stu.file_upload_status = 'UPLOADED' and stu.image_check_status in('SUCCESS','FAILED') )
                        then 1
                        else 0 end) disposedCount,
                sum(case
@@ -730,4 +730,21 @@
                  left join sc_subject s on s.code = t.subject_code and s.exam_id = t.exam_id
         where t.id = #{studentId}
     </select>
+
+    <select id="getImageCheckFailedCount" resultType="int">
+        select count(*)
+        from sc_student stu
+        where stu.exam_id = #{examId}
+        and stu.subject_code = #{subjectCode}
+        and (stu.file_upload_status = 'ERROR' or stu.image_check_status = 'FAILED')
+    </select>
+
+    <select id="getImageCheckDisposedCount" resultType="int">
+        select count(*)
+        from sc_student stu
+        where stu.exam_id = #{examId}
+          and stu.subject_code = #{subjectCode}
+          and ((stu.file_upload_status = 'ERROR')
+                or (stu.file_upload_status = 'UPLOADED' and stu.image_check_status in('SUCCESS','FAILED')) )
+    </select>
 </mapper>