xiatian 3 сар өмнө
parent
commit
17c864c231

+ 9 - 11
src/main/java/cn/com/qmth/am/bean/ModelSpeed.java

@@ -51,33 +51,31 @@ public class ModelSpeed {
 
 
     }
     }
 
 
-    public String getOcrSpeed() {
-        String txt = "个/秒";
+    public double getOcrSpeed() {
         Long start = this.ocrStartTime;
         Long start = this.ocrStartTime;
         if (start == null) {
         if (start == null) {
             Double speed = this.ocrSpeed;
             Double speed = this.ocrSpeed;
             if (speed != null) {
             if (speed != null) {
-                return speed + txt;
+                return speed;
             } else {
             } else {
-                return "-";
+                return 0;
             }
             }
         } else {
         } else {
-            return getSpeed(start, this.ocrCount) + txt;
+            return getSpeed(start, this.ocrCount);
         }
         }
     }
     }
 
 
-    public String getMarkingSpeed() {
-        String txt = "个/秒";
+    public double getMarkingSpeed() {
         Long start = this.markingStartTime;
         Long start = this.markingStartTime;
         if (start == null) {
         if (start == null) {
             Double speed = this.markingSpeed;
             Double speed = this.markingSpeed;
             if (speed != null) {
             if (speed != null) {
-                return speed + txt;
+                return speed;
             } else {
             } else {
-                return "-";
+                return 0;
             }
             }
         } else {
         } else {
-            return getSpeed(start, this.markingCount) + txt;
+            return getSpeed(start, this.markingCount);
         }
         }
     }
     }
 
 
@@ -86,7 +84,7 @@ public class ModelSpeed {
         if (count.get() == 0) {
         if (count.get() == 0) {
             return 0.0;
             return 0.0;
         } else {
         } else {
-            return Calculator.divide(Calculator.multiply(count.get(), 1000), end - startTime, 2);
+            return Calculator.divide(Calculator.multiply(count.get(), 1000), end - startTime, 5);
         }
         }
     }
     }
 }
 }

+ 47 - 3
src/main/java/cn/com/qmth/am/controller/AdminController.java

@@ -271,14 +271,17 @@ public class AdminController {
         sb.append(" | 评分是否开启:" + (sysProperty.getMarkingTaskEnable() ? "是" : "否"));
         sb.append(" | 评分是否开启:" + (sysProperty.getMarkingTaskEnable() ? "是" : "否"));
         sb.append(" | 科目总数:" + qsCourse);
         sb.append(" | 科目总数:" + qsCourse);
         sb.append(" | 小题总数:" + qstotal);
         sb.append(" | 小题总数:" + qstotal);
-        sb.append(" | ocr速度:" + modelSpeed.getOcrSpeed());
-        sb.append(" | 评分速度:" + modelSpeed.getMarkingSpeed());
-        sb.append("\r\n");
+        double ocrSpeed = modelSpeed.getOcrSpeed();
+        double markingSpeed = modelSpeed.getMarkingSpeed();
+        sb.append(" | ocr速度:" + Calculator.scale(ocrSpeed, 2) + "个/秒");
+        sb.append(" | 评分速度:" + Calculator.scale(markingSpeed, 2) + "个/秒");
         List<StudentScoreVo> vos = studentScoreService.getInfoByExam(examId);
         List<StudentScoreVo> vos = studentScoreService.getInfoByExam(examId);
         if (CollectionUtils.isEmpty(vos)) {
         if (CollectionUtils.isEmpty(vos)) {
             returnJson(sb.toString(), response);
             returnJson(sb.toString(), response);
             return;
             return;
         }
         }
+        int ocrTodoCount = 0;
+        int markingTodoCount = 0;
         if (examId != null) {
         if (examId != null) {
             Map<String, List<StudentScoreVo>> map = new LinkedHashMap<>();
             Map<String, List<StudentScoreVo>> map = new LinkedHashMap<>();
             for (StudentScoreVo vo : vos) {
             for (StudentScoreVo vo : vos) {
@@ -288,7 +291,16 @@ public class AdminController {
                     map.put(vo.getSubjectCode(), tem);
                     map.put(vo.getSubjectCode(), tem);
                 }
                 }
                 tem.add(vo);
                 tem.add(vo);
+                if (!DataStatus.SUCCESS.equals(vo.getAnswerStatus())) {
+                    ocrTodoCount++;
+                }
+                if (!DataStatus.SUCCESS.equals(vo.getScoreStatus())) {
+                    markingTodoCount++;
+                }
             }
             }
+            sb.append(" | ocr剩余时间:" + getLeftTime(ocrSpeed, ocrTodoCount));
+            sb.append(" | 评分剩余时间:" + getLeftTime(markingSpeed, markingTodoCount));
+            sb.append("\r\n");
             subjectInfo(sb, examId, map);
             subjectInfo(sb, examId, map);
         } else {
         } else {
             Map<Long, Map<String, List<StudentScoreVo>>> exams = new LinkedHashMap<>();
             Map<Long, Map<String, List<StudentScoreVo>>> exams = new LinkedHashMap<>();
@@ -305,7 +317,16 @@ public class AdminController {
                     sujects.put(vo.getSubjectCode(), tem);
                     sujects.put(vo.getSubjectCode(), tem);
                 }
                 }
                 tem.add(vo);
                 tem.add(vo);
+                if (!DataStatus.SUCCESS.equals(vo.getAnswerStatus())) {
+                    ocrTodoCount++;
+                }
+                if (!DataStatus.SUCCESS.equals(vo.getScoreStatus())) {
+                    markingTodoCount++;
+                }
             }
             }
+            sb.append(" | ocr剩余时间:" + getLeftTime(ocrSpeed, ocrTodoCount));
+            sb.append(" | 评分剩余时间:" + getLeftTime(markingSpeed, markingTodoCount));
+            sb.append("\r\n");
             for (Long exam : exams.keySet()) {
             for (Long exam : exams.keySet()) {
                 subjectInfo(sb, exam, exams.get(exam));
                 subjectInfo(sb, exam, exams.get(exam));
             }
             }
@@ -313,6 +334,29 @@ public class AdminController {
         returnJson(sb.toString(), response);
         returnJson(sb.toString(), response);
     }
     }
 
 
+    private String getLeftTime(double speed, int count) {
+        if (speed == 0) {
+            return "-";
+        }
+        if (count == 0) {
+            return getText(0);
+        }
+        int totalSeconds = Double.valueOf(Calculator.divide(count, speed, 0) + "").intValue();
+        return getText(totalSeconds);
+    }
+
+    private String getText(int totalSeconds) {
+        int hours = totalSeconds / 3600;
+        // 计算剩余秒数
+        int remainingSecondsAfterHours = totalSeconds % 3600;
+        // 计算分钟数
+        int minutes = remainingSecondsAfterHours / 60;
+        // 计算剩余秒数
+        int seconds = remainingSecondsAfterHours % 60;
+
+        return String.format("%d小时%d分%d秒", hours, minutes, seconds);
+    }
+
     private void subjectInfo(StringBuilder sb, Long examId, Map<String, List<StudentScoreVo>> subjects) {
     private void subjectInfo(StringBuilder sb, Long examId, Map<String, List<StudentScoreVo>> subjects) {
         sb.append("\r\n-------------------------------------------------------------------------------\r\n");
         sb.append("\r\n-------------------------------------------------------------------------------\r\n");
         List<QuestionEntity> qs = questionService.findByExamId(examId);
         List<QuestionEntity> qs = questionService.findByExamId(examId);

+ 28 - 14
src/main/java/cn/com/qmth/am/utils/Calculator.java

@@ -17,12 +17,14 @@ import com.qmth.boot.core.exception.StatusException;
  * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
  * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
  */
  */
 public class Calculator {
 public class Calculator {
+
     public static double mean(double[] values) {
     public static double mean(double[] values) {
         if (values.length == 0) {
         if (values.length == 0) {
             return 0;
             return 0;
         }
         }
         return StatUtils.mean(values);
         return StatUtils.mean(values);
     }
     }
+
     public static double correlation(double[] x, double[] y) {
     public static double correlation(double[] x, double[] y) {
         if (x.length != y.length) {
         if (x.length != y.length) {
             throw new StatusException("两组样本数据数量大小不一致!");
             throw new StatusException("两组样本数据数量大小不一致!");
@@ -39,6 +41,7 @@ public class Calculator {
         }
         }
         return r;
         return r;
     }
     }
+
     /**
     /**
      * 加法 保留两位小数
      * 加法 保留两位小数
      * 
      * 
@@ -65,22 +68,24 @@ public class Calculator {
         return b1.add(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
         return b1.add(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
 
 
     }
     }
-    
-    /** 加法 保留指定位小数
+
+    /**
+     * 加法 保留指定位小数
+     * 
      * @param ds
      * @param ds
      * @param len
      * @param len
      * @return
      * @return
      */
      */
     public static double add(List<Double> ds, int len) {
     public static double add(List<Double> ds, int len) {
-        if(CollectionUtils.isEmpty(ds)) {
+        if (CollectionUtils.isEmpty(ds)) {
             throw new StatusException("数组为空");
             throw new StatusException("数组为空");
         }
         }
         BigDecimal ret = new BigDecimal(0.0);
         BigDecimal ret = new BigDecimal(0.0);
-        for(Double d:ds) {
-            if(d==null) {
+        for (Double d : ds) {
+            if (d == null) {
                 throw new StatusException("数组元素为空");
                 throw new StatusException("数组元素为空");
             }
             }
-            ret=ret.add(new BigDecimal(d));
+            ret = ret.add(new BigDecimal(d));
         }
         }
         return ret.setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
         return ret.setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
 
 
@@ -112,7 +117,10 @@ public class Calculator {
         return b1.subtract(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
         return b1.subtract(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
 
 
     }
     }
-    /**差值绝对值
+
+    /**
+     * 差值绝对值
+     * 
      * @param v1
      * @param v1
      * @param v2
      * @param v2
      * @param len
      * @param len
@@ -121,13 +129,14 @@ public class Calculator {
     public static double absoluteDiff(double v1, double v2, int len) {
     public static double absoluteDiff(double v1, double v2, int len) {
         BigDecimal b1 = new BigDecimal(v1);
         BigDecimal b1 = new BigDecimal(v1);
         BigDecimal b2 = new BigDecimal(v2);
         BigDecimal b2 = new BigDecimal(v2);
-        if(v1>v2) {
+        if (v1 > v2) {
             return b1.subtract(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
             return b1.subtract(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
-        }else {
+        } else {
             return b2.subtract(b1).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
             return b2.subtract(b1).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
         }
         }
 
 
     }
     }
+
     /**
     /**
      * 乘法 保留两位小数
      * 乘法 保留两位小数
      * 
      * 
@@ -154,8 +163,7 @@ public class Calculator {
         return b1.multiply(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
         return b1.multiply(b2).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
 
 
     }
     }
-    
-    
+
     /**
     /**
      * 除法 保留两位小数
      * 除法 保留两位小数
      * 
      * 
@@ -183,18 +191,24 @@ public class Calculator {
     }
     }
 
 
     public static String divide2String(Double v1, Double v2, int len) {
     public static String divide2String(Double v1, Double v2, int len) {
-        if(v1==null||v2==null||v2==0) {
+        if (v1 == null || v2 == null || v2 == 0) {
             return "-";
             return "-";
         }
         }
         BigDecimal b1 = new BigDecimal(v1);
         BigDecimal b1 = new BigDecimal(v1);
         BigDecimal b2 = new BigDecimal(v2);
         BigDecimal b2 = new BigDecimal(v2);
         return String.valueOf(b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue());
         return String.valueOf(b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue());
     }
     }
-    
+
     public static String percentage(double v1, double v2, int len) {
     public static String percentage(double v1, double v2, int len) {
         BigDecimal b1 = new BigDecimal(v1);
         BigDecimal b1 = new BigDecimal(v1);
         BigDecimal b2 = new BigDecimal(v2);
         BigDecimal b2 = new BigDecimal(v2);
         BigDecimal b3 = new BigDecimal(100);
         BigDecimal b3 = new BigDecimal(100);
-        return b1.divide(b2, len+2, BigDecimal.ROUND_HALF_UP).multiply(b3).setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue()+"%";
+        return b1.divide(b2, len + 2, BigDecimal.ROUND_HALF_UP).multiply(b3).setScale(len, BigDecimal.ROUND_HALF_UP)
+                .doubleValue() + "%";
+    }
+
+    public static double scale(double v1, int len) {
+        BigDecimal b1 = new BigDecimal(v1);
+        return b1.setScale(len, BigDecimal.ROUND_HALF_UP).doubleValue();
     }
     }
 }
 }