xiatian 3 luni în urmă
părinte
comite
d04f91cf5f

+ 20 - 0
src/main/java/cn/com/qmth/am/bean/StudentScoreVo.java

@@ -6,6 +6,10 @@ public class StudentScoreVo {
 
     private Long id;
 
+    private Long examId;
+
+    private String subjectCode;
+
     private Long questionId;
 
     private String examNumber;
@@ -89,4 +93,20 @@ public class StudentScoreVo {
         this.id = id;
     }
 
+    public Long getExamId() {
+        return examId;
+    }
+
+    public void setExamId(Long examId) {
+        this.examId = examId;
+    }
+
+    public String getSubjectCode() {
+        return subjectCode;
+    }
+
+    public void setSubjectCode(String subjectCode) {
+        this.subjectCode = subjectCode;
+    }
+
 }

+ 102 - 45
src/main/java/cn/com/qmth/am/controller/AdminController.java

@@ -9,6 +9,7 @@ import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -66,10 +67,10 @@ public class AdminController {
     @ApiOperation(value = "分析数据")
     @RequestMapping(value = "fenxi", method = RequestMethod.GET)
     public void fenxi(HttpServletResponse response, @RequestParam Long examId,
-            @RequestParam(required = false) Boolean exZero, @RequestParam(required = false) Integer count,
-            @RequestParam(required = false) Integer score) {
+            @RequestParam(required = false) String subjectCode, @RequestParam(required = false) Boolean exZero,
+            @RequestParam(required = false) Integer count, @RequestParam(required = false) Integer score) {
         StringBuilder sb = new StringBuilder();
-        List<QuestionEntity> qs = questionService.findByExamId(examId);
+        List<QuestionEntity> qs = questionService.findByExamIdAndSubject(examId, subjectCode);
         if (CollectionUtils.isEmpty(qs)) {
             sb.append("试题数:0");
             returnJson(sb.toString(), response);
@@ -110,8 +111,6 @@ public class AdminController {
                             q.getSubjectCode() + "|" + q.getMainNumber() + "|" + q.getSubNumber() + "| 相关系数出错:- \r\n");
                 }
             }
-            sb.append(
-                    "---------------------------------------------------------------------------------------------------------------------------------\r\n");
         }
         returnJson(sb.toString(), response);
     }
@@ -251,9 +250,9 @@ public class AdminController {
 
     @ApiOperation(value = "进度详情")
     @RequestMapping(value = "info", method = RequestMethod.GET)
-    public void info(HttpServletResponse response, @RequestParam Long examId) {
+    public void info(HttpServletResponse response, @RequestParam(required = false) Long examId) {
         StringBuilder sb = new StringBuilder();
-        List<QuestionEntity> qs = questionService.findByExamId(examId);
+        List<QuestionEntity> qs = questionService.list();
         int qstotal = 0;
         int qsCourse = 0;
         if (CollectionUtils.isNotEmpty(qs)) {
@@ -264,54 +263,112 @@ public class AdminController {
             }
             qsCourse = cset.size();
         }
-        sb.append("ocr任务是否开启:" + (sysProperty.getOcrTaskEnable() ? "是" : "否") + "\r\n");
-        sb.append("评分任务是否开启:" + (sysProperty.getMarkingTaskEnable() ? "是" : "否") + "\r\n");
-        sb.append("试卷科目总数:" + qsCourse + "\r\n");
-        sb.append("试卷小题总数:" + qstotal + "\r\n");
-        Set<String> studentSet = new HashSet<>();
-        int qocrsuc = 0;
-        int qocrfailed = 0;
-        int qsuc = 0;
-        int qfailed = 0;
-        int qtotal = 0;
-        int markingtotal = 0;
+        sb.append("ocr是否开启:" + (sysProperty.getOcrTaskEnable() ? "是" : "否"));
+        sb.append(" | 评分是否开启:" + (sysProperty.getMarkingTaskEnable() ? "是" : "否"));
+        sb.append(" | 科目总数:" + qsCourse);
+        sb.append(" | 小题总数:" + qstotal);
+        sb.append("\r\n");
         List<StudentScoreVo> vos = studentScoreService.getInfoByExam(examId);
-        if (CollectionUtils.isNotEmpty(vos)) {
-            qtotal = vos.size();
+        if (CollectionUtils.isEmpty(vos)) {
+            returnJson(sb.toString(), response);
+            return;
+        }
+        if (examId != null) {
+            Map<String, List<StudentScoreVo>> map = new LinkedHashMap<>();
             for (StudentScoreVo vo : vos) {
-                studentSet.add(vo.getExamNumber());
-                if (DataStatus.SUCCESS.equals(vo.getAnswerStatus())) {
-                    qocrsuc++;
+                List<StudentScoreVo> tem = map.get(vo.getSubjectCode());
+                if (tem == null) {
+                    tem = new ArrayList<>();
+                    map.put(vo.getSubjectCode(), tem);
                 }
-                if (DataStatus.FAILED.equals(vo.getAnswerStatus())) {
-                    qocrfailed++;
-                }
-                if (DataStatus.SUCCESS.equals(vo.getScoreStatus())) {
-                    qsuc++;
-                }
-                if (DataStatus.FAILED.equals(vo.getScoreStatus())) {
-                    qfailed++;
+                tem.add(vo);
+            }
+            subjectInfo(sb, examId, map);
+        } else {
+            Map<Long, Map<String, List<StudentScoreVo>>> exams = new LinkedHashMap<>();
+            for (StudentScoreVo vo : vos) {
+                Map<String, List<StudentScoreVo>> sujects = exams.get(vo.getExamId());
+                if (sujects == null) {
+                    sujects = new LinkedHashMap<>();
+                    exams.put(vo.getExamId(), sujects);
+
                 }
-                if (vo.getMarkingScore() != null) {
-                    markingtotal++;
+                List<StudentScoreVo> tem = sujects.get(vo.getSubjectCode());
+                if (tem == null) {
+                    tem = new ArrayList<>();
+                    sujects.put(vo.getSubjectCode(), tem);
                 }
+                tem.add(vo);
+            }
+            for (Long exam : exams.keySet()) {
+                subjectInfo(sb, exam, exams.get(exam));
             }
         }
-        if (studentSet.size() == 0) {
-            sb.append("考生总数:0");
-            returnJson(sb.toString(), response);
-            return;
-        }
-        sb.append("考生总数:" + studentSet.size() + "\r\n");
-        sb.append("考生试题总数:" + qtotal + "\r\n");
-        sb.append("考生试题已人评总数:" + markingtotal + "\r\n");
-        sb.append("考生试题OCR成功总数:" + qocrsuc + "\r\n");
-        sb.append("考生试题OCR失败总数:" + qocrfailed + "\r\n");
-        sb.append("考生试题评分成功总数:" + qsuc + "\r\n");
-        sb.append("考生试题评分失败总数:" + qfailed + "\r\n");
         returnJson(sb.toString(), response);
     }
 
+    private void subjectInfo(StringBuilder sb, Long examId, Map<String, List<StudentScoreVo>> subjects) {
+        sb.append("\r\n-------------------------------------------------------------------------------\r\n");
+        List<QuestionEntity> qs = questionService.findByExamId(examId);
+        sb.append("考试id:" + examId);
+        sb.append(" | 科目总数:" + subjects.size());
+        sb.append(" | 小题总数:" + qs.size());
+        Map<String, Integer> qmap = new HashMap<>();
+        for (QuestionEntity q : qs) {
+            Integer tem = qmap.get(q.getSubjectCode());
+            if (tem == null) {
+                tem = 0;
+            }
+            qmap.put(q.getSubjectCode(), tem + 1);
+        }
+        for (String subject : subjects.keySet()) {
+            sb.append("\r\n");
+            sb.append("\r\n");
+            sb.append("      科目代码:" + subject);
+            sb.append(" | 小题数:" + qmap.get(subject));
+            List<StudentScoreVo> vos = subjects.get(subject);
+            Set<String> studentSet = new HashSet<>();
+            int qocrsuc = 0;
+            int qocrfailed = 0;
+            int qsuc = 0;
+            int qfailed = 0;
+            int qtotal = 0;
+            int markingtotal = 0;
+            if (CollectionUtils.isNotEmpty(vos)) {
+                qtotal = vos.size();
+                for (StudentScoreVo vo : vos) {
+                    studentSet.add(vo.getExamNumber());
+                    if (DataStatus.SUCCESS.equals(vo.getAnswerStatus())) {
+                        qocrsuc++;
+                    }
+                    if (DataStatus.FAILED.equals(vo.getAnswerStatus())) {
+                        qocrfailed++;
+                    }
+                    if (DataStatus.SUCCESS.equals(vo.getScoreStatus())) {
+                        qsuc++;
+                    }
+                    if (DataStatus.FAILED.equals(vo.getScoreStatus())) {
+                        qfailed++;
+                    }
+                    if (vo.getMarkingScore() != null) {
+                        markingtotal++;
+                    }
+                }
+            }
+            if (studentSet.size() == 0) {
+                sb.append(" | 考生总数:0");
+                return;
+            }
+            sb.append(" | 考生总数:" + studentSet.size());
+            sb.append(" | 试题总数:" + qtotal);
+            sb.append(" | 已人评数:" + markingtotal);
+            sb.append(" | OCR成功总数:" + qocrsuc);
+            sb.append(" | OCR失败总数:" + qocrfailed);
+            sb.append(" | 评分成功总数:" + qsuc);
+            sb.append(" | 评分失败总数:" + qfailed);
+        }
+    }
+
     @ApiOperation(value = "上传导入文件")
     @RequestMapping(value = "upload", method = RequestMethod.POST)
     public String upload(@RequestParam MultipartFile file) {

+ 1 - 1
src/main/java/cn/com/qmth/am/task/StudentScoreImportJob.java

@@ -42,7 +42,7 @@ public class StudentScoreImportJob {
 
     @PostConstruct
     public void initExecutor() {
-        int threadCount = 16;
+        int threadCount = 8;
         executor = new ThreadPoolExecutor(threadCount, threadCount, 0L, TimeUnit.SECONDS,
                 new LinkedBlockingQueue<>(threadCount * 2), r -> {
                     Thread t = new Thread(r);

+ 7 - 4
src/main/resources/mapper/StudentScoreMapper.xml

@@ -13,7 +13,7 @@
 
 	<select id="getInfoByExam"
 		resultType="cn.com.qmth.am.bean.StudentScoreVo">
-		select
+		select t.exam_id,t.subject_code,
 		f.question_id,
 		f.exam_number,
 		f.answer_status,
@@ -24,8 +24,10 @@
 		f.step_score
 		from am_question t
 		inner join am_student_score f on f.question_id=t.id
-		where
-		t.exam_id=#{examId}
+		where 1=1
+		<if test="examId!=null">
+			and t.exam_id=#{examId}
+		</if>
 	</select>
 	<select id="getAllInfoForUpdateScore"
 		resultType="cn.com.qmth.am.bean.StudentScoreVo">
@@ -33,7 +35,8 @@
 		f.id,
 		f.exam_number,
 		f.question_id
-		from am_student_score f 
+		from am_student_score
+		f
 		where f.marking_score is null
 	</select>
 </mapper>