xiatian преди 8 месеца
родител
ревизия
ac6bf9c2a9

+ 8 - 3
src/main/java/cn/com/qmth/scancentral/service/impl/ImageCheckServiceImpl.java

@@ -39,8 +39,12 @@ public class ImageCheckServiceImpl implements ImageCheckService {
         List<ImageCheckVo> result = studentDao.countImageCheck(examId);
 
         for (ImageCheckVo vo : result) {
-            double progress = MathUtil.percentage(vo.getTotalCount() - vo.getFailedCount(), vo.getTotalCount());
-            vo.setImageCheckProgress(progress);
+            if (vo.getTotalCount() == null || vo.getTotalCount() == 0) {
+                vo.setImageCheckProgress(null);
+            } else {
+                double progress = MathUtil.percentage(vo.getTotalCount() - vo.getWaitingCount(), vo.getTotalCount());
+                vo.setImageCheckProgress(progress);
+            }
         }
 
         return result;
@@ -54,7 +58,8 @@ public class ImageCheckServiceImpl implements ImageCheckService {
         if (StringUtils.isBlank(query.getSubjectCode())) {
             throw new IllegalArgumentException("科目代码不能为空");
         }
-        IPage<ImageCheckDetailVo> page = studentDao.queryImageCheckDetail(new Page<>(query.getPageNumber(), query.getPageSize()), query);
+        IPage<ImageCheckDetailVo> page = studentDao
+                .queryImageCheckDetail(new Page<>(query.getPageNumber(), query.getPageSize()), query);
 
         for (ImageCheckDetailVo vo : page.getRecords()) {
             vo.setFailed(vo.getFailedCount() > 0);

+ 15 - 12
src/main/java/cn/com/qmth/scancentral/service/impl/SubjectServiceImpl.java

@@ -211,36 +211,39 @@ public class SubjectServiceImpl extends MppServiceImpl<SubjectDao, SubjectEntity
         ret.setSubjects(subjects);
         ret.setTotal(new SubjectScanProgressVo());
         if (CollectionUtils.isNotEmpty(subjects)) {
+            int totalScanned = 0;
+            int totalCount = 0;
+            double totalEstimation = 0.0;
             Calendar now = Calendar.getInstance();
             long endTime = now.getTimeInMillis();
             now.add(Calendar.HOUR_OF_DAY, -1);
             long startTime = now.getTimeInMillis();
             for (SubjectScanProgressVo vo : subjects) {
+                totalCount = totalCount + vo.getStudentCount();
                 vo.setScannedCount(vo.getStudentCount() - vo.getUnexistCount());
+                totalScanned = totalScanned + vo.getScannedCount();
                 vo.setProgress(Calculator.percentage(vo.getScannedCount(), vo.getStudentCount(), 2));
-                Integer count = batchPaperService.getScanStudentCount(examId, subjectCode, startTime, endTime);
+                Integer count = batchPaperService.getScanStudentCount(examId, vo.getSubjectCode(), startTime, endTime);
                 if (count == null || count == 0) {
                     vo.setEstimation("-");
                 } else {
-                    vo.setEstimation(Calculator.divide(
+                    double es = Calculator.divide(
                             Calculator.multiply(Calculator.divide(endTime - startTime, count, 6), vo.getUnexistCount()),
-                            3600000, 2) + "h");
+                            3600000, 2);
+                    totalEstimation = Calculator.add(totalEstimation, es);
+                    vo.setEstimation(es + "h");
                 }
             }
-            int totalUnScanned = studentService.getUnscannedCountByExam(examId);
-            int totalCount = studentService.getCountByExam(examId);
+
             ret.getTotal().setStudentCount(totalCount);
-            ret.getTotal().setScannedCount(totalCount - totalUnScanned);
-            ret.getTotal().setUnexistCount(totalUnScanned);
+            ret.getTotal().setScannedCount(totalScanned);
+            ret.getTotal().setUnexistCount(totalCount - totalScanned);
             ret.getTotal().setProgress(
                     Calculator.percentage(ret.getTotal().getScannedCount(), ret.getTotal().getStudentCount(), 2));
-            Integer count = batchPaperService.getScanStudentCount(examId, null, startTime, endTime);
-            if (count == null || count == 0) {
+            if (totalScanned == 0) {
                 ret.getTotal().setEstimation("-");
             } else {
-                ret.getTotal().setEstimation(
-                        Calculator.divide(Calculator.multiply(Calculator.divide(endTime - startTime, count, 6),
-                                ret.getTotal().getUnexistCount()), 3600000, 2) + "h");
+                ret.getTotal().setEstimation(totalEstimation + "h");
             }
         }
         return ret;

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

@@ -204,6 +204,7 @@ public class ToolExportServiceImpl implements ToolExportService {
                 throw new StatusException("文件大小有误");
             }
         }
+        studentService.updateImageCheckStatus(student.getId(), ImageCheckStatus.SUCCESS);
     }
 
     @Override

+ 1 - 1
src/main/java/cn/com/qmth/scancentral/task/ImageCheckJob.java

@@ -23,7 +23,7 @@ public class ImageCheckJob {
     @Autowired
     private ImageCheckService imageCheckService;
 
-    @Scheduled(fixedDelay = 60000, initialDelay = 30000)
+    @Scheduled(fixedDelay = 20 * 1000, initialDelay = 20 * 1000)
     public void process() {
         LambdaQueryWrapper<ExamEntity> wrapper = Wrappers.lambdaQuery();
         wrapper.select(ExamEntity::getId, ExamEntity::getMode);

+ 10 - 0
src/main/java/cn/com/qmth/scancentral/vo/imagecheck/ImageCheckVo.java

@@ -19,6 +19,8 @@ public class ImageCheckVo {
     @ApiModelProperty(value = "异常数量")
     private Integer failedCount;
 
+    private Integer waitingCount;
+
     public String getSubjectCode() {
         return subjectCode;
     }
@@ -59,4 +61,12 @@ public class ImageCheckVo {
         this.failedCount = failedCount;
     }
 
+    public Integer getWaitingCount() {
+        return waitingCount;
+    }
+
+    public void setWaitingCount(Integer waitingCount) {
+        this.waitingCount = waitingCount;
+    }
+
 }

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

@@ -669,6 +669,9 @@
         select stu.subject_code,
                sb.name  as         subjectName,
                count(1) as         totalCount,
+               sum(case
+                       when stu.file_upload_status = 'UPLOADED' and stu.image_check_status = 'WAITING' then 1
+                       else 0 end) waitingCount
                sum(case
                        when stu.file_upload_status = 'UPLOADED' and stu.image_check_status = 'FAILED' then 1
                        else 0 end) failedCount