Răsfoiți Sursa

联考版-v3.1.0-测试bug修改

xiaof 2 ani în urmă
părinte
comite
87b33f0e7b

+ 49 - 18
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/ParamApi.java

@@ -20,6 +20,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 
@@ -131,7 +132,12 @@ public class ParamApi {
         Integer showStandardPaperManage = object.getInteger("showStandardPaperManage");
         Integer removeHighAndLow = object.getInteger("removeHighAndLow");
 
-        List<MarkSubject> markSubjects = markSubjectRepo.findByWorkIdAndTestNot(workId, TrialEnum.DEFAULT.ordinal());
+        if (ParamCache.levelConfigMap.get(String.valueOf(workId)).getRoughLevelEnable() == 0) {
+            throw new RuntimeException("【是否增加粗档位环节】为【否】,不能修改粗分档参数");
+        }
+
+        List<MarkStage> markStageList = Arrays.asList(new MarkStage[]{MarkStage.ROUGH_LEVEL, MarkStage.LEVEL, MarkStage.SCORE});
+        List<MarkSubject> markSubjects = markSubjectRepo.findByWorkIdAndTestAndStageIn(workId, TrialEnum.DEFAULT.ordinal(), markStageList);
 
         int countMarkTasks = markTaskRoughLevelRepo.countByWorkId(workId);
         //保存分档参数
@@ -143,24 +149,30 @@ public class ParamApi {
         RoughLevelConfig oldRoughLevelConfig = JSON.parseObject(paramSetting.getRoughLevelConfig(), RoughLevelConfig.class);
         if ((markSubjects == null || markSubjects.isEmpty()) && countMarkTasks > 0) {
             if (!Objects.equals(deviation, oldRoughLevelConfig.getDeviation())) {
-                throw new RuntimeException("评卷工作已有评数据,不能修改【仲裁档位差】参数");
+                throw new RuntimeException("评卷工作已有评数据,不能修改【仲裁档位差】参数");
             }
             if (!Objects.equals(autoCallback, oldRoughLevelConfig.getAutoCallback())) {
-                throw new RuntimeException("该评卷工作已有评卷数据,不能修【系统自动打回】参数");
+                throw new RuntimeException("评卷工作已有正评数据,不能修改【系统自动打回】参数");
+            }
+            if (!Objects.equals(cumulativeError, oldRoughLevelConfig.getCumulativeError())) {
+                throw new RuntimeException("评卷工作已有正评数据,不能修改【打回累计误差】参数");
             }
             if (!Objects.equals(majority, oldRoughLevelConfig.getMajority())) {
-                throw new RuntimeException("该评卷工作已有评卷数据,不能修改【是否过半定档】参数");
+                throw new RuntimeException("评卷工作已有正评数据,不能修改【是否过半定档】参数");
+            }
+            if (!Objects.equals(takeBest, oldRoughLevelConfig.getTakeBest())) {
+                throw new RuntimeException("评卷工作已有正评数据,不能修改【是否启用取优原则】参数");
             }
             if (!Objects.equals(removeHighAndLow, oldRoughLevelConfig.getRemoveHighAndLow())) {
-                throw new RuntimeException("该评卷工作已有评卷数据,不能修改【是否开启去高去低再加权评卷】参数");
+                throw new RuntimeException("评卷工作已有评数据,不能修改【是否开启去高去低再加权评卷】参数");
             }
         }
 
         oldRoughLevelConfig.setDeviation(deviation);
         oldRoughLevelConfig.setAutoCallback(autoCallback);
         oldRoughLevelConfig.setCumulativeError(cumulativeError);
-        oldRoughLevelConfig.setMajority(majority);
         oldRoughLevelConfig.setAutoCallbackShowDeviation(autoCallbackShowDeviation);
+        oldRoughLevelConfig.setMajority(majority);
         oldRoughLevelConfig.setTakeBest(takeBest);
         oldRoughLevelConfig.setLevelShowAllPaper(levelShowAllPaper);
         oldRoughLevelConfig.setPropDenominator(propDenominator);
@@ -197,7 +209,8 @@ public class ParamApi {
         Integer roughLevelEnable = object.getInteger("roughLevelEnable");
         Integer removeHighAndLow = object.getInteger("removeHighAndLow");
 
-        List<MarkSubject> markSubjects = markSubjectRepo.findByWorkIdAndTestNot(workId, TrialEnum.DEFAULT.ordinal());
+        List<MarkStage> markStageList = Arrays.asList(new MarkStage[]{MarkStage.LEVEL, MarkStage.SCORE});
+        List<MarkSubject> markSubjects = markSubjectRepo.findByWorkIdAndTestAndStageIn(workId, TrialEnum.DEFAULT.ordinal(), markStageList);
         int countMarkTasks = markTaskLevelRepo.countByWorkId(workId);
         //保存分档参数
         ParamSetting paramSetting = paramSettingRepo.findByWorkId(workId);
@@ -206,21 +219,38 @@ public class ParamApi {
         }
 
         LevelConfig oldLevelConfig = JSON.parseObject(paramSetting.getLevelConfig(), LevelConfig.class);
-        if ((markSubjects == null || markSubjects.isEmpty()) && countMarkTasks > 0) {
+        if (!markSubjects.isEmpty() && countMarkTasks > 0) {
             if (!Objects.equals(deviation, oldLevelConfig.getDeviation())) {
-                throw new RuntimeException("评卷工作已有评数据,不能修改【仲裁档位差】参数");
+                throw new RuntimeException("评卷工作已有评数据,不能修改【仲裁档位差】参数");
             }
             if (!Objects.equals(autoCallback, oldLevelConfig.getAutoCallback())) {
-                throw new RuntimeException("该评卷工作已有评卷数据,不能修【系统自动打回】参数");
+                throw new RuntimeException("评卷工作已有正评数据,不能修改【系统自动打回】参数");
+            }
+            if (!Objects.equals(cumulativeError, oldLevelConfig.getCumulativeError())) {
+                throw new RuntimeException("评卷工作已有正评数据,不能修改【打回累计误差】参数");
             }
             if (!Objects.equals(majority, oldLevelConfig.getMajority())) {
-                throw new RuntimeException("该评卷工作已有评卷数据,不能修改【是否过半定档】参数");
+                throw new RuntimeException("评卷工作已有评数据,不能修改【是否过半定档】参数");
             }
-            if (!Objects.equals(roughLevelEnable, oldLevelConfig.getRoughLevelEnable())) {
-                throw new RuntimeException("该评卷工作已有评卷数据,不能修改【是否增加粗档位环节】参数");
+            if (!Objects.equals(takeBest, oldLevelConfig.getTakeBest())) {
+                throw new RuntimeException("评卷工作已有正评数据,不能修改【是否启用取优原则】参数");
             }
             if (!Objects.equals(removeHighAndLow, oldLevelConfig.getRemoveHighAndLow())) {
-                throw new RuntimeException("该评卷工作已有评卷数据,不能修改【是否开启去高去低再加权评卷】参数");
+                throw new RuntimeException("评卷工作已有正评数据,不能修改【是否开启去高去低再加权评卷】参数");
+            }
+        }
+        if (oldLevelConfig.getRoughLevelEnable() == 1) {
+            List<MarkStage> markStageList1 = Arrays.asList(new MarkStage[]{MarkStage.ROUGH_LEVEL});
+            List<MarkSubject> subjectList = markSubjectRepo.findByWorkIdAndTestAndStageIn(workId, TrialEnum.DEFAULT.getId(), markStageList1);
+            int roughLevelCount = markTaskRoughLevelRepo.countByWorkId(workId);
+            if (!subjectList.isEmpty() || roughLevelCount > 0) {
+                throw new RuntimeException("评卷工作有科目已进入粗分档阶段或者粗分档阶段已有正评数据,不能修改【是否增加粗档位环节】参数为【否】");
+            }
+        } else {
+            List<MarkStage> markStageList1 = Arrays.asList(new MarkStage[]{MarkStage.LEVEL});
+            List<MarkSubject> subjectList = markSubjectRepo.findByWorkIdAndTestAndStageIn(workId, TrialEnum.DEFAULT.getId(), markStageList1);
+            if (!subjectList.isEmpty() || countMarkTasks > 0) {
+                throw new RuntimeException("评卷工作有科目已进入粗分档阶段或者粗分档阶段已有正评数据,不能修改【是否增加粗档位环节】参数为【是】");
             }
         }
 
@@ -234,8 +264,8 @@ public class ParamApi {
         oldLevelConfig.setPropDenominator(propDenominator);
         oldLevelConfig.setShowStandardPaperManage(showStandardPaperManage);
         oldLevelConfig.setClearData(clearData);
-        oldLevelConfig.setRoughLevelEnable(roughLevelEnable);
         oldLevelConfig.setRemoveHighAndLow(removeHighAndLow);
+        oldLevelConfig.setRoughLevelEnable(roughLevelEnable);
 
         paramSetting.setLevelConfig(JSON.toJSONString(oldLevelConfig));
         paramSettingRepo.saveAndFlush(paramSetting);
@@ -266,15 +296,16 @@ public class ParamApi {
         }
 
         ScoreConfig oldScoreConfig = JSON.parseObject(paramSetting.getScoreConfig(), ScoreConfig.class);
-        List<MarkSubject> markSubjects = markSubjectRepo.findByWorkIdAndTestNot(workId, TrialEnum.DEFAULT.ordinal());
+        List<MarkStage> markStageList = Arrays.asList(new MarkStage[]{MarkStage.SCORE});
+        List<MarkSubject> markSubjects = markSubjectRepo.findByWorkIdAndTestAndStageIn(workId, TrialEnum.DEFAULT.ordinal(), markStageList);
 
         int countMarkTasks = markTaskScoreRepo.countByWorkId(workId);
         if ((markSubjects == null || markSubjects.isEmpty()) && countMarkTasks > 0) {
             if (!Objects.equals(roundUp, oldScoreConfig.getRoundUp())) {
-                throw new RuntimeException("评卷工作已有评数据,不能修改【分数处理方式】参数");
+                throw new RuntimeException("评卷工作已有评数据,不能修改【分数处理方式】参数");
             }
             if (!Objects.equals(removeHighAndLow, oldScoreConfig.getRemoveHighAndLow())) {
-                throw new RuntimeException("评卷工作已有评数据,不能修改【分数计算方式】参数");
+                throw new RuntimeException("评卷工作已有评数据,不能修改【分数计算方式】参数");
             }
         }
 

+ 10 - 10
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/exporter/ScoreExporter.java

@@ -452,9 +452,9 @@ public class ScoreExporter {
         //测试-导出档位成绩表
         StringBuilder sbAll = null;
         if (!imageConfig.isCustomSubject()) {
-            String scSql = "select temp.*, mt.`result`, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing isMissing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t left join paper p on t.work_id = p.work_id and t.exam_number = p.exam_number and p.subject = 'SC' left join mark_task_rough_level AS mt on p.work_id = mt.work_id and p.id = mt.paper_id left join (SELECT mu.id, mu.name AS teacherName, mu.`role`, mu.subject, mu.work_id AS workId FROM mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SC' AND mu.enabled = 1) temp on mt.work_id = temp.workId and mt.marker_id = temp.id left join  (SELECT id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SC') cl ON p.work_id = cl.work_id and p.id = cl.paper_id WHERE mt.work_id = ? AND mt.stage = " + MarkStage.ROUGH_LEVEL + " AND p.is_missing = FALSE UNION ALL select temp.*, null as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing missing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t LEFT JOIN paper p ON t.work_id = p.work_id AND t.exam_number = p.exam_number LEFT JOIN (SELECT  id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SC') cl ON p.work_id = cl.work_id AND p.id = cl.paper_id LEFT JOIN (SELECT mu.id,mu.name AS teacherName,mu.`role`,mu.subject, mu.work_id AS workId FROM  mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SC' AND mu.enabled = 1) temp ON 1 = 1 WHERE p.is_missing = TRUE AND p.work_id = ? AND p.subject = 'SC' ";
-            String smSql = "select temp.*, mt.`result`, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing isMissing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t left join paper p on t.work_id = p.work_id and t.exam_number = p.exam_number and p.subject = 'SM' left join mark_task_rough_level AS mt on p.work_id = mt.work_id and p.id = mt.paper_id left join (SELECT mu.id, mu.name AS teacherName, mu.`role`, mu.subject, mu.work_id AS workId FROM mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SM' AND mu.enabled = 1) temp on mt.work_id = temp.workId and mt.marker_id = temp.id left join  (SELECT id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SM') cl ON p.work_id = cl.work_id and p.id = cl.paper_id WHERE mt.work_id = ? AND mt.stage = " + MarkStage.ROUGH_LEVEL + " AND p.is_missing = FALSE UNION ALL select temp.*, null as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing missing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t LEFT JOIN paper p ON t.work_id = p.work_id AND t.exam_number = p.exam_number LEFT JOIN (SELECT  id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SM') cl ON p.work_id = cl.work_id AND p.id = cl.paper_id LEFT JOIN (SELECT mu.id,mu.name AS teacherName,mu.`role`,mu.subject, mu.work_id AS workId FROM  mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SM' AND mu.enabled = 1) temp ON 1 = 1 WHERE p.is_missing = TRUE AND p.work_id = ? AND p.subject = 'SM' ";
-            String sxSql = "select temp.*, mt.`result`, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing isMissing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t left join paper p on t.work_id = p.work_id and t.exam_number = p.exam_number and p.subject = 'SX' left join mark_task_rough_level AS mt on p.work_id = mt.work_id and p.id = mt.paper_id left join (SELECT mu.id, mu.name AS teacherName, mu.`role`, mu.subject, mu.work_id AS workId FROM mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SX' AND mu.enabled = 1) temp on mt.work_id = temp.workId and mt.marker_id = temp.id left join  (SELECT id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SX') cl ON p.work_id = cl.work_id and p.id = cl.paper_id WHERE mt.work_id = ? AND mt.stage = " + MarkStage.ROUGH_LEVEL + " AND p.is_missing = FALSE UNION ALL select temp.*, null as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing missing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t LEFT JOIN paper p ON t.work_id = p.work_id AND t.exam_number = p.exam_number LEFT JOIN (SELECT  id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SX') cl ON p.work_id = cl.work_id AND p.id = cl.paper_id LEFT JOIN (SELECT mu.id,mu.name AS teacherName,mu.`role`,mu.subject, mu.work_id AS workId FROM  mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SX' AND mu.enabled = 1) temp ON 1 = 1 WHERE p.is_missing = TRUE AND p.work_id = ? AND p.subject = 'SX' ";
+            String scSql = "select temp.*, mt.`result`, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing isMissing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t left join paper p on t.work_id = p.work_id and t.exam_number = p.exam_number and p.subject = 'SC' left join mark_task_rough_level AS mt on p.work_id = mt.work_id and p.id = mt.paper_id left join (SELECT mu.id, mu.name AS teacherName, mu.`role`, mu.subject, mu.work_id AS workId FROM mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SC' AND mu.enabled = 1) temp on mt.work_id = temp.workId and mt.marker_id = temp.id left join  (SELECT id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SC') cl ON p.work_id = cl.work_id and p.id = cl.paper_id WHERE mt.work_id = ? AND mt.stage = " + MarkStage.ROUGH_LEVEL.ordinal() + " AND p.is_missing = FALSE UNION ALL select temp.*, null as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing missing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t LEFT JOIN paper p ON t.work_id = p.work_id AND t.exam_number = p.exam_number LEFT JOIN (SELECT  id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SC') cl ON p.work_id = cl.work_id AND p.id = cl.paper_id LEFT JOIN (SELECT mu.id,mu.name AS teacherName,mu.`role`,mu.subject, mu.work_id AS workId FROM  mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SC' AND mu.enabled = 1) temp ON 1 = 1 WHERE p.is_missing = TRUE AND p.work_id = ? AND p.subject = 'SC' ";
+            String smSql = "select temp.*, mt.`result`, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing isMissing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t left join paper p on t.work_id = p.work_id and t.exam_number = p.exam_number and p.subject = 'SM' left join mark_task_rough_level AS mt on p.work_id = mt.work_id and p.id = mt.paper_id left join (SELECT mu.id, mu.name AS teacherName, mu.`role`, mu.subject, mu.work_id AS workId FROM mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SM' AND mu.enabled = 1) temp on mt.work_id = temp.workId and mt.marker_id = temp.id left join  (SELECT id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SM') cl ON p.work_id = cl.work_id and p.id = cl.paper_id WHERE mt.work_id = ? AND mt.stage = " + MarkStage.ROUGH_LEVEL.ordinal() + " AND p.is_missing = FALSE UNION ALL select temp.*, null as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing missing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t LEFT JOIN paper p ON t.work_id = p.work_id AND t.exam_number = p.exam_number LEFT JOIN (SELECT  id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SM') cl ON p.work_id = cl.work_id AND p.id = cl.paper_id LEFT JOIN (SELECT mu.id,mu.name AS teacherName,mu.`role`,mu.subject, mu.work_id AS workId FROM  mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SM' AND mu.enabled = 1) temp ON 1 = 1 WHERE p.is_missing = TRUE AND p.work_id = ? AND p.subject = 'SM' ";
+            String sxSql = "select temp.*, mt.`result`, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing isMissing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t left join paper p on t.work_id = p.work_id and t.exam_number = p.exam_number and p.subject = 'SX' left join mark_task_rough_level AS mt on p.work_id = mt.work_id and p.id = mt.paper_id left join (SELECT mu.id, mu.name AS teacherName, mu.`role`, mu.subject, mu.work_id AS workId FROM mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SX' AND mu.enabled = 1) temp on mt.work_id = temp.workId and mt.marker_id = temp.id left join  (SELECT id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SX') cl ON p.work_id = cl.work_id and p.id = cl.paper_id WHERE mt.work_id = ? AND mt.stage = " + MarkStage.ROUGH_LEVEL.ordinal() + " AND p.is_missing = FALSE UNION ALL select temp.*, null as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, p.mark_by_leader as markByLeader, p.`rough_level` level, p.id upload, p.is_missing missing, p.is_rough_sample isSample,p.is_one_click isOneClick, cl.id isShift from student t LEFT JOIN paper p ON t.work_id = p.work_id AND t.exam_number = p.exam_number LEFT JOIN (SELECT  id, work_id, paper_id FROM change_level WHERE work_id = ? AND subject = 'SX') cl ON p.work_id = cl.work_id AND p.id = cl.paper_id LEFT JOIN (SELECT mu.id,mu.name AS teacherName,mu.`role`,mu.subject, mu.work_id AS workId FROM  mark_user AS mu WHERE mu.work_id = ? AND mu.`role` = 'MARKER' AND (mu.mark_right = 0 OR mu.mark_right = 2) AND mu.subject = 'SX' AND mu.enabled = 1) temp ON 1 = 1 WHERE p.is_missing = TRUE AND p.work_id = ? AND p.subject = 'SX' ";
             //拼装问号
             scSql = sqlUtil.sqlPrint(scSql, workId, workId, workId, workId, workId, workId);
             smSql = sqlUtil.sqlPrint(smSql, workId, workId, workId, workId, workId, workId);
@@ -532,7 +532,7 @@ public class ScoreExporter {
                         map.forEach((k, v) -> {
                             if (k.contains(Subject.SC.toString())) {
                                 ExportLevelResultDTO exportLevelResultDTO = scMap.get(v.getTeacherName());
-                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(v.getResult(), firstRow, firstRow, exportLevelResultDTO.getFirstCol(), exportLevelResultDTO.getFirstCol()));
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(roughLevels[Integer.parseInt(v.getResult())], firstRow, firstRow, exportLevelResultDTO.getFirstCol(), exportLevelResultDTO.getFirstCol()));
                                 if (Objects.nonNull(v.getLevel())) {
                                     drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(roughLevels[Integer.parseInt(v.getLevel())], firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()), level + (scMap == null ? 0 : scMap.size())));
                                 }
@@ -548,7 +548,7 @@ public class ScoreExporter {
                                 drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getIsShift()) ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + 5, level + (scMap == null ? 0 : scMap.size()) + 5));
                             } else if (k.contains(Subject.SM.toString())) {
                                 ExportLevelResultDTO exportLevelResultDTO = smMap.get(v.getTeacherName());
-                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(v.getResult(), firstRow, firstRow, exportLevelResultDTO.getFirstCol(), exportLevelResultDTO.getFirstCol()));
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(roughLevels[Integer.parseInt(v.getResult())], firstRow, firstRow, exportLevelResultDTO.getFirstCol(), exportLevelResultDTO.getFirstCol()));
                                 if (Objects.nonNull(v.getLevel())) {
                                     drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(roughLevels[Integer.parseInt(v.getLevel())], firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + 5 + 1, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + 5 + 1));
                                 }
@@ -559,7 +559,7 @@ public class ScoreExporter {
                                 drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getIsShift()) ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + 5 + 6, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + 5 + 6));
                             } else if (k.contains(Subject.SX.toString())) {
                                 ExportLevelResultDTO exportLevelResultDTO = sxMap.get(v.getTeacherName());
-                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(v.getResult(), firstRow, firstRow, exportLevelResultDTO.getFirstCol(), exportLevelResultDTO.getFirstCol()));
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(roughLevels[Integer.parseInt(v.getResult())], firstRow, firstRow, exportLevelResultDTO.getFirstCol(), exportLevelResultDTO.getFirstCol()));
                                 if (Objects.nonNull(v.getLevel())) {
                                     drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(roughLevels[Integer.parseInt(v.getLevel())], firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + 6 * 2, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + 6 * 2));
                                 }
@@ -614,7 +614,7 @@ public class ScoreExporter {
                     i.getAndIncrement();
                 });
             }
-            ExportUtils.exportEXCEL(LEVEL_FILE_NAME, wb, response);
+            ExportUtils.exportEXCEL(ROUGH_LEVEL_FILE_NAME, wb, response);
         }
     }
 
@@ -807,9 +807,9 @@ public class ScoreExporter {
         //测试-导出分数成绩表
         StringBuilder sbAll = null;
         if (!imageConfig.isCustomSubject()) {
-            String scSql = "select temp.*, IFNULL(mt.`result`,0) as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, t.school, t.exam_room examRoom, IFNULL(p.score,0) as level,p.mark_by_leader as markByLeader from mark_task_score as mt , (select mu.id, mu.name as teacherName, mu.`role`, mu.subject, mu.work_id as workId from mark_user as mu where mu.work_id = ? and mu.`role` = 'MARKER'and (mu.mark_right = 1 or mu.mark_right = 2) and mu.subject = 'SC' and mu.enabled = 1) temp, paper p, student t where mt.marker_id = temp.id and mt.paper_id = p.id and t.exam_number = p.exam_number and mt.work_id = ? and mt.stage = " + MarkStage.SCORE + " and p.is_missing = false UNION ALL select temp.*, 0 as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, t.school, t.exam_room examRoom, IFNULL(p.score,0) as level, p.mark_by_leader as markByLeader from paper p, (select mu.id, mu.name as teacherName, mu.`role`, mu.subject, mu.work_id as workId from mark_user as mu where mu.work_id = ? and mu.`role` = 'MARKER' and (mu.mark_right = 1 or mu.mark_right = 2) and mu.subject = 'SC' and mu.enabled = 1) temp, student t where p.is_missing = true and p.work_id = ? and p.subject = 'SC' and t.exam_number = p.exam_number ";
-            String smSql = "select temp.*, IFNULL(mt.`result`,0) as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, t.school, t.exam_room examRoom, IFNULL(p.score,0) as level,p.mark_by_leader as markByLeader from mark_task_score as mt , (select mu.id, mu.name as teacherName, mu.`role`, mu.subject, mu.work_id as workId from mark_user as mu where mu.work_id = ? and mu.`role` = 'MARKER'and (mu.mark_right = 1 or mu.mark_right = 2) and mu.subject = 'SM' and mu.enabled = 1) temp, paper p, student t where mt.marker_id = temp.id and mt.paper_id = p.id and t.exam_number = p.exam_number and mt.work_id = ? and mt.stage = " + MarkStage.SCORE + " and p.is_missing = false UNION ALL select temp.*, 0 as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, t.school, t.exam_room examRoom, IFNULL(p.score,0) as level, p.mark_by_leader as markByLeader from paper p, (select mu.id, mu.name as teacherName, mu.`role`, mu.subject, mu.work_id as workId from mark_user as mu where mu.work_id = ? and mu.`role` = 'MARKER' and (mu.mark_right = 1 or mu.mark_right = 2) and mu.subject = 'SM' and mu.enabled = 1) temp, student t where p.is_missing = true and p.work_id = ? and p.subject = 'SM' and t.exam_number = p.exam_number ";
-            String sxSql = "select temp.*, IFNULL(mt.`result`,0) as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, t.school, t.exam_room examRoom, IFNULL(p.score,0) as level,p.mark_by_leader as markByLeader from mark_task_score as mt , (select mu.id, mu.name as teacherName, mu.`role`, mu.subject, mu.work_id as workId from mark_user as mu where mu.work_id = ? and mu.`role` = 'MARKER'and (mu.mark_right = 1 or mu.mark_right = 2) and mu.subject = 'SX' and mu.enabled = 1) temp, paper p, student t where mt.marker_id = temp.id and mt.paper_id = p.id and t.exam_number = p.exam_number and mt.work_id = ? and mt.stage = " + MarkStage.SCORE + " and p.is_missing = false UNION ALL select temp.*, 0 as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, t.school, t.exam_room examRoom, IFNULL(p.score,0) as level, p.mark_by_leader as markByLeader from paper p, (select mu.id, mu.name as teacherName, mu.`role`, mu.subject, mu.work_id as workId from mark_user as mu where mu.work_id = ? and mu.`role` = 'MARKER' and (mu.mark_right = 1 or mu.mark_right = 2) and mu.subject = 'SX' and mu.enabled = 1) temp, student t where p.is_missing = true and p.work_id = ? and p.subject = 'SX' and t.exam_number = p.exam_number ";
+            String scSql = "select temp.*, IFNULL(mt.`result`,0) as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, t.school, t.exam_room examRoom, IFNULL(p.score,0) as level,p.mark_by_leader as markByLeader from mark_task_score as mt , (select mu.id, mu.name as teacherName, mu.`role`, mu.subject, mu.work_id as workId from mark_user as mu where mu.work_id = ? and mu.`role` = 'MARKER'and (mu.mark_right = 1 or mu.mark_right = 2) and mu.subject = 'SC' and mu.enabled = 1) temp, paper p, student t where mt.marker_id = temp.id and mt.paper_id = p.id and t.exam_number = p.exam_number and mt.work_id = ? and mt.stage = " + MarkStage.SCORE.ordinal() + " and p.is_missing = false UNION ALL select temp.*, 0 as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, t.school, t.exam_room examRoom, IFNULL(p.score,0) as level, p.mark_by_leader as markByLeader from paper p, (select mu.id, mu.name as teacherName, mu.`role`, mu.subject, mu.work_id as workId from mark_user as mu where mu.work_id = ? and mu.`role` = 'MARKER' and (mu.mark_right = 1 or mu.mark_right = 2) and mu.subject = 'SC' and mu.enabled = 1) temp, student t where p.is_missing = true and p.work_id = ? and p.subject = 'SC' and t.exam_number = p.exam_number ";
+            String smSql = "select temp.*, IFNULL(mt.`result`,0) as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, t.school, t.exam_room examRoom, IFNULL(p.score,0) as level,p.mark_by_leader as markByLeader from mark_task_score as mt , (select mu.id, mu.name as teacherName, mu.`role`, mu.subject, mu.work_id as workId from mark_user as mu where mu.work_id = ? and mu.`role` = 'MARKER'and (mu.mark_right = 1 or mu.mark_right = 2) and mu.subject = 'SM' and mu.enabled = 1) temp, paper p, student t where mt.marker_id = temp.id and mt.paper_id = p.id and t.exam_number = p.exam_number and mt.work_id = ? and mt.stage = " + MarkStage.SCORE.ordinal() + " and p.is_missing = false UNION ALL select temp.*, 0 as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, t.school, t.exam_room examRoom, IFNULL(p.score,0) as level, p.mark_by_leader as markByLeader from paper p, (select mu.id, mu.name as teacherName, mu.`role`, mu.subject, mu.work_id as workId from mark_user as mu where mu.work_id = ? and mu.`role` = 'MARKER' and (mu.mark_right = 1 or mu.mark_right = 2) and mu.subject = 'SM' and mu.enabled = 1) temp, student t where p.is_missing = true and p.work_id = ? and p.subject = 'SM' and t.exam_number = p.exam_number ";
+            String sxSql = "select temp.*, IFNULL(mt.`result`,0) as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, t.school, t.exam_room examRoom, IFNULL(p.score,0) as level,p.mark_by_leader as markByLeader from mark_task_score as mt , (select mu.id, mu.name as teacherName, mu.`role`, mu.subject, mu.work_id as workId from mark_user as mu where mu.work_id = ? and mu.`role` = 'MARKER'and (mu.mark_right = 1 or mu.mark_right = 2) and mu.subject = 'SX' and mu.enabled = 1) temp, paper p, student t where mt.marker_id = temp.id and mt.paper_id = p.id and t.exam_number = p.exam_number and mt.work_id = ? and mt.stage = " + MarkStage.SCORE.ordinal() + " and p.is_missing = false UNION ALL select temp.*, 0 as result, p.source_name as sourceName, p.exam_number as examNumber, p.student_name as studentName, t.area_name as areaName, t.school, t.exam_room examRoom, IFNULL(p.score,0) as level, p.mark_by_leader as markByLeader from paper p, (select mu.id, mu.name as teacherName, mu.`role`, mu.subject, mu.work_id as workId from mark_user as mu where mu.work_id = ? and mu.`role` = 'MARKER' and (mu.mark_right = 1 or mu.mark_right = 2) and mu.subject = 'SX' and mu.enabled = 1) temp, student t where p.is_missing = true and p.work_id = ? and p.subject = 'SX' and t.exam_number = p.exam_number ";
             //拼装问号
             scSql = sqlUtil.sqlPrint(scSql, workId, workId, workId, workId);
             smSql = sqlUtil.sqlPrint(smSql, workId, workId, workId, workId);

+ 2 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkSubjectRepo.java

@@ -30,4 +30,6 @@ public interface MarkSubjectRepo extends JpaRepository<MarkSubject,String> {
     List<MarkSubject> findAllByWorkIdAndStageNot(Long workId, MarkStage stage);
 
     List<MarkSubject> findAllByWorkIdAndStage(Long workId, MarkStage stage);
+
+    List<MarkSubject> findByWorkIdAndTestAndStageIn(Long workId, int ordinal, List<MarkStage> markStageList);
 }

+ 6 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkTaskLevelRepo.java

@@ -177,4 +177,10 @@ public interface MarkTaskLevelRepo extends JpaRepository<MarkTaskLevel, Long>, J
     List<MarkTaskLevel> findByPaperId(Long paperId);
 
     Integer findRandomSeqByWorkIdAndSubjectAndMarkerIdAndQuestionId(Long workId, Subject subject, Long markerId, Long questionId);
+
+    @Query("select m.paper.id from MarkTaskLevel m where m.workId = ?1 and m.questionId = ?2 and m.markerId = ?3 and m.stage = ?4 and m.isMark = ?5")
+    List<Long> findByWorkIdAndQuestionIdAndMarkerIdAndStageAndIsMark(Long workId, Long questionId, Long id, MarkStage stage, boolean b);
+
+    @Query("select m.paper.id from MarkTaskLevel m where m.workId = ?1 and m.questionId = ?2 and m.markerId = ?3 and m.stage = ?4 and m.batchNo = ?5 and m.isMark = true")
+    List<Long> findByWorkIdAndQuestionIdAndMarkerIdAndStageAndBatchNoAndPaperIsMark(Long workId, Long questionId, Long id, MarkStage stage, Long batchNo);
 }

+ 6 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkTaskRoughLevelRepo.java

@@ -144,4 +144,10 @@ public interface MarkTaskRoughLevelRepo extends JpaRepository<MarkTaskRoughLevel
     List<MarkTaskRoughLevel> findByPaperId(Long paperId);
 
     Integer findRandomSeqByWorkIdAndSubjectAndMarkerIdAndQuestionId(Long workId, Subject subject, Long markerId, Long questionId);
+
+    @Query("select m.paper.id from MarkTaskRoughLevel m where m.workId = ?1 and m.questionId = ?2 and m.markerId = ?3 and m.stage = ?4 and m.isMark = ?5")
+    List<Long> findByWorkIdAndQuestionIdAndMarkerIdAndStageAndIsMark(Long workId, Long questionId, Long id, MarkStage stage, boolean mark);
+
+    @Query("select m.paper.id from MarkTaskRoughLevel m where m.workId = ?1 and m.questionId = ?2 and m.markerId = ?3 and m.stage = ?4 and m.batchNo = ?5 and m.isMark = true")
+    List<Long> findByWorkIdAndQuestionIdAndMarkerIdAndStageAndBatchNoAndPaperIsMark(Long workId, Long questionId, Long id, MarkStage stage, Long batchNo);
 }

+ 6 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkTaskScoreRepo.java

@@ -137,4 +137,10 @@ public interface MarkTaskScoreRepo extends JpaRepository<MarkTaskScore, Long>, J
     List<MarkTaskScore> findByPaperId(Long paperId);
 
     Integer findRandomSeqByWorkIdAndSubjectAndMarkerIdAndQuestionId(Long workId, Subject subject, Long markerId, Long questionId);
+
+    @Query("select m.paper.id from MarkTaskScore m where m.workId = ?1 and m.questionId = ?2 and m.markerId = ?3 and m.stage = ?4 and m.isMark = ?5")
+    List<Long> findByWorkIdAndQuestionIdAndMarkerIdAndStageAndIsMark(Long workId, Long questionId, Long id, MarkStage stage, boolean b);
+
+    @Query("select m.paper.id from MarkTaskScore m where m.workId = ?1 and m.questionId = ?2 and m.markerId = ?3 and m.stage = ?4 and m.batchNo = ?5 and m.isMark = true")
+    List<Long> findByWorkIdAndQuestionIdAndMarkerIdAndStageAndBatchNoAndPaperIsMark(Long workId, Long questionId, Long id, MarkStage stage, Long batchNo);
 }

+ 49 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MakrerApi.java

@@ -394,6 +394,22 @@ public class MakrerApi {
                 o.setFinalTotal(Math.toIntExact(finalTotal));
             }
         });
+
+        // 标记试卷(评卷员标记的和科组长标记的都统计)
+        LevelStatDTO markPaperDTO = new LevelStatDTO();
+        markPaperDTO.setId("markPaper");
+        int markPaperCount;
+        if (ParamCache.roughLevelConfigMap.get(String.valueOf(marker.getWorkId())).getLevelShowAllPaper() == 1) {
+            // 评卷员和科组长标记的试卷
+            List<Long> markTaskPaperId = markTaskRoughLevelRepo.findByWorkIdAndQuestionIdAndMarkerIdAndStageAndIsMark(markSubject.getWorkId(), questionId,marker.getId(), markSubject.getStage(), true);
+            markPaperCount = Math.toIntExact(markTaskPaperId.stream().distinct().count());
+        } else {
+            // 评卷员标记的试卷
+            List<Long> markTaskPaperIdAll = markTaskRoughLevelRepo.findByWorkIdAndQuestionIdAndMarkerIdAndStageAndBatchNoAndPaperIsMark(markSubject.getWorkId(), questionId, marker.getId(), markSubject.getStage(), batchNo);
+            markPaperCount = Math.toIntExact(markTaskPaperIdAll.stream().distinct().count());
+        }
+        markPaperDTO.setCount(markPaperCount);
+        levelStatDTOs.add(markPaperDTO);
         Collections.sort(levelStatDTOs, (o1, o2) -> {
             if (o1.getId() == null || o2.getId() == null) {
                 return 1;
@@ -544,6 +560,23 @@ public class MakrerApi {
                 o.setFinalTotal(Math.toIntExact(finalTotal));
             }
         });
+
+        // 标记试卷(评卷员标记的和科组长标记的都统计)
+        LevelStatDTO markPaperDTO = new LevelStatDTO();
+        markPaperDTO.setId("markPaper");
+        int markPaperCount;
+        if (ParamCache.levelConfigMap.get(String.valueOf(marker.getWorkId())).getLevelShowAllPaper() == 1) {
+            // 评卷员和科组长标记的试卷
+            List<Long> markTaskPaperId = markTaskLevelRepo.findByWorkIdAndQuestionIdAndMarkerIdAndStageAndIsMark(markSubject.getWorkId(), questionId,marker.getId(), markSubject.getStage(), true);
+            markPaperCount = Math.toIntExact(markTaskPaperId.stream().distinct().count());
+        } else {
+            // 评卷员标记的试卷
+            List<Long> markTaskPaperIdAll = markTaskLevelRepo.findByWorkIdAndQuestionIdAndMarkerIdAndStageAndBatchNoAndPaperIsMark(markSubject.getWorkId(), questionId, marker.getId(), markSubject.getStage(), batchNo);
+            markPaperCount = Math.toIntExact(markTaskPaperIdAll.stream().distinct().count());
+        }
+        markPaperDTO.setCount(markPaperCount);
+        levelStatDTOs.add(markPaperDTO);
+
         Collections.sort(levelStatDTOs, (o1, o2) -> {
             if (o1.getId() == null || o2.getId() == null) {
                 return 1;
@@ -633,6 +666,22 @@ public class MakrerApi {
                 o.setCount(count);
             }
         });
+
+// 标记试卷(评卷员标记的和科组长标记的都统计)
+        LevelStatDTO markPaperDTO = new LevelStatDTO();
+        markPaperDTO.setId("markPaper");
+        int markPaperCount;
+        if (ParamCache.scoreConfigMap.get(String.valueOf(marker.getWorkId())).getScoreShowAllPaper() == 1) {
+            // 评卷员和科组长标记的试卷
+            List<Long> markTaskPaperId = markTaskScoreRepo.findByWorkIdAndQuestionIdAndMarkerIdAndStageAndIsMark(markSubject.getWorkId(), questionId,marker.getId(), markSubject.getStage(), true);
+            markPaperCount = Math.toIntExact(markTaskPaperId.stream().distinct().count());
+        } else {
+            // 评卷员标记的试卷
+            List<Long> markTaskPaperIdAll = markTaskScoreRepo.findByWorkIdAndQuestionIdAndMarkerIdAndStageAndBatchNoAndPaperIsMark(markSubject.getWorkId(), questionId, marker.getId(), markSubject.getStage(), batchNo);
+            markPaperCount = Math.toIntExact(markTaskPaperIdAll.stream().distinct().count());
+        }
+        markPaperDTO.setCount(markPaperCount);
+        levelStatDTOs.add(markPaperDTO);
         return levelStatDTOs;
     }
 

+ 29 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkTaskApi.java

@@ -3,10 +3,12 @@ package cn.com.qmth.stmms.ms.marking.api;
 import cn.com.qmth.stmms.ms.commons.lock.LockService;
 import cn.com.qmth.stmms.ms.commons.utils.ServletUtil;
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
+import cn.com.qmth.stmms.ms.core.cache.ParamCache;
 import cn.com.qmth.stmms.ms.core.domain.Level;
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
 import cn.com.qmth.stmms.ms.core.domain.MarkSubject;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
+import cn.com.qmth.stmms.ms.core.domain.task.MarkTaskRoughLevel;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkerGroupLeader;
 import cn.com.qmth.stmms.ms.core.repository.LevelRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkSubjectRepo;
@@ -409,4 +411,31 @@ public class MarkTaskApi {
         }
         return null;
     }
+
+    /**
+     * 评卷员的标记试卷查询
+     *
+     * @param markerId   评卷员ID
+     * @param workId     工作ID
+     * @param subject    科目
+     * @param questionId 考区ID
+     * @param pageable   分页
+     */
+    @GetMapping("/markedPapers")
+    public PageableDTO markedPapers(@RequestParam(required = false) Long workId,
+                                    @RequestParam Long markerId,
+                                    @RequestParam Subject subject,
+                                    @RequestParam MarkStage stage,
+                                    @RequestParam Long questionId,
+                                    Pageable pageable) {
+
+        if (stage.equals(MarkStage.ROUGH_LEVEL)) {
+            return markTaskRoughLevelService.markedPapers(workId, subject, markerId, questionId, pageable);
+        } else if (stage.equals(MarkStage.LEVEL)) {
+            return markTaskLevelService.markedPapers(workId, subject, markerId, questionId, pageable);
+        } else if (stage.equals(MarkStage.SCORE)) {
+            return markTaskScoreService.markedPapers(workId, subject, markerId, questionId, pageable);
+        }
+        return null;
+    }
 }

+ 17 - 10
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/AssignTaskService.java

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.ms.marking.service;
 
 import cn.com.qmth.stmms.ms.commons.utils.RandomUtil;
 import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
+import cn.com.qmth.stmms.ms.core.cache.ParamCache;
 import cn.com.qmth.stmms.ms.core.domain.*;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTaskLevel;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTaskRoughLevel;
@@ -547,7 +548,7 @@ public class AssignTaskService {
                 groupPaperMap.put(markerGroup.getId(), groupPaperList);
             }
             // 根据分组导入名单进行任务分配
-            randomTaskList(papersList, groupPaperMap, taskCount);
+            randomTaskList(papersList, groupPaperMap, taskCount, markSubject);
 
             //分组考生名单更新为已使用
             markerGroupStudentList.forEach(m -> m.setUsed(true));
@@ -557,7 +558,7 @@ public class AssignTaskService {
                 List<Paper> groupPaperList = new ArrayList<>();
                 groupPaperMap.put(markerGroup.getId(), groupPaperList);
             }
-            randomTaskList(allPapers, groupPaperMap, allPapers.size());
+            randomTaskList(allPapers, groupPaperMap, allPapers.size(), markSubject);
         }
 
         return groupPaperMap;
@@ -565,12 +566,12 @@ public class AssignTaskService {
 
     /**
      * 随机发任务
-     *
-     * @param papersList    试卷集合
+     *  @param papersList    试卷集合
      * @param groupPaperMap 分组考生名单
      * @param taskCount     任务数量
+     * @param stage
      */
-    private void randomTaskList(List<Paper> papersList, Map<Long, List<Paper>> groupPaperMap, int taskCount) {
+    private void randomTaskList(List<Paper> papersList, Map<Long, List<Paper>> groupPaperMap, int taskCount, MarkSubject markSubject) {
 
         List<Paper> usedPaperList = new ArrayList<>();
         List<Long> nullValueKeys = new ArrayList<>();
@@ -597,11 +598,17 @@ public class AssignTaskService {
             if (leftCount == papersList.size()) {
                 list.addAll(papersList);
             } else {
-                Random random = new Random();
-                for (int i = 0; i < leftCount; i++) {
-                    int intRandom = random.nextInt(papersList.size() - 1);
-                    list.add(papersList.get(intRandom));
-                    papersList.remove(intRandom);
+                // 开启粗分档,并且当前为细分档时,系统默认按档位从高到低取任务,评委端显示也是从高到低
+                if(MarkStage.LEVEL.equals(markSubject.getStage()) && ParamCache.levelConfigMap.get(String.valueOf(markSubject.getWorkId())).getRoughLevelEnable() ==1){
+                    papersList.sort(Comparator.comparing(Paper::getRoughLevel));
+                    list = papersList.subList(0, leftCount);
+                } else {
+                    Random random = new Random();
+                    for (int i = 0; i < leftCount; i++) {
+                        int intRandom = random.nextInt(papersList.size() - 1);
+                        list.add(papersList.get(intRandom));
+                        papersList.remove(intRandom);
+                    }
                 }
             }
 

+ 44 - 13
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkTaskLevelService.java

@@ -92,7 +92,7 @@ public class MarkTaskLevelService {
         Specification<MarkTaskLevel> specification = (root, query, builder) -> {
             List<Predicate> predicates = new ArrayList<>();
             List<Predicate> onPredicates = new ArrayList<>();
-            Join<MarkTaskLevel, Paper> join = root.join("paper", JoinType.INNER);
+//            Join<MarkTaskLevel, Paper> join = root.join("paper", JoinType.INNER);
             if (Objects.nonNull(questionId)) {
                 predicates.add(builder.equal(root.get("questionId"), questionId));
             }
@@ -104,29 +104,36 @@ public class MarkTaskLevelService {
                 predicates.add(builder.equal(root.get("result"), level));
                 if (levelShowAllPaper == 0) {
                     if (!Objects.isNull(finalBatchNo)) {
-                        onPredicates.add(builder.equal(join.get("batchNo"), finalBatchNo));
+//                        onPredicates.add(builder.equal(join.get("batchNo"), finalBatchNo));
+                        predicates.add(builder.equal(root.get("paper").get("batchNo"), finalBatchNo));
                     }
                 }
             }
             if (isSample != null) {
-                onPredicates.add(builder.equal(join.get("isSample"), isSample));
+//                onPredicates.add(builder.equal(join.get("isSample"), isSample));
+                predicates.add(builder.equal(root.get("paper").get("isSample"), level));
             }
             if (reject != null && reject) {
-                onPredicates.add(builder.equal(join.get("isRejected"), reject));
-                onPredicates.add(builder.equal(join.get("isShift"), false));
-                onPredicates.add(builder.equal(join.get("isShiftScore"), false));
+//                onPredicates.add(builder.equal(join.get("isRejected"), reject));
+//                onPredicates.add(builder.equal(join.get("isShift"), false));
+//                onPredicates.add(builder.equal(join.get("isShiftScore"), false));
+                predicates.add(builder.equal(root.get("paper").get("isRejected"), reject));
+                predicates.add(builder.equal(root.get("paper").get("isShift"), false));
+                predicates.add(builder.equal(root.get("paper").get("isShiftScore"), false));
             } else {
                 predicates.add(builder.equal(root.get("isRejected"), reject));
             }
-            onPredicates.add(builder.isNotNull(join.get("batchNo")));
+//            onPredicates.add(builder.isNotNull(join.get("batchNo")));
+            predicates.add(builder.isNotNull(root.get("paper").get("batchNo")));
             //过滤考区
             if (Objects.nonNull(areaCode)) {
-                onPredicates.add(builder.equal(join.get("areaCode"), areaCode));
+//                onPredicates.add(builder.equal(join.get("areaCode"), areaCode));
+                predicates.add(builder.equal(root.get("paper").get("areaCode"), areaCode));
             }
-            join.on(onPredicates.toArray(new Predicate[onPredicates.size()]));
+//            join.on(onPredicates.toArray(new Predicate[onPredicates.size()]));
             return builder.and(predicates.toArray(new Predicate[predicates.size()]));
         };
-        Sort sort = new Sort("randomSeq", "randomSeqNew");
+        Sort sort = new Sort("paper.roughLevel","randomSeq", "randomSeqNew");
         Pageable pageable1 = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), sort);
         Page<MarkTaskLevel> markTasks = markTaskLevelRepo.findAll(specification, pageable1);
 
@@ -148,9 +155,9 @@ public class MarkTaskLevelService {
         markTasks.getContent().forEach(m -> {
             markTaskDTOs.add(markTaskLevelAssembler.toDTO(m));
         });
-        if (Objects.isNull(level)) {
-            randomSeqNewSort(markTaskDTOs);
-        }
+//        if (Objects.isNull(level)) {
+//            randomSeqNewSort(markTaskDTOs);
+//        }
         return new PageableDTO(markTaskDTOs, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
     }
 
@@ -326,4 +333,28 @@ public class MarkTaskLevelService {
         }
         return paperDTO;
     }
+
+    public PageableDTO markedPapers(Long workId, Subject subject, Long markerId, Long questionId, Pageable pageable) {
+        List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
+        Specification<MarkTaskLevel> specification = (root, query, builder) -> {
+            List<Predicate> predicates = new ArrayList<>();
+
+            if (ParamCache.roughLevelConfigMap.get(String.valueOf(workId)).getLevelShowAllPaper() == 0) {
+                Long batchNo = paperRepo.findMaxBatchNoByWorkIdAndSubject(workId, subject);
+                predicates.add(builder.equal(root.get("paper").get("batchNo"), batchNo));
+            }
+
+            predicates.add(builder.equal(root.get("workId"), workId));
+            predicates.add(builder.equal(root.get("questionId"), questionId));
+            predicates.add(builder.equal(root.get("markerId"), markerId));
+            predicates.add(builder.equal(root.get("isMark"), true));
+            return builder.and(predicates.toArray(new Predicate[predicates.size()]));
+        };
+        Sort sort = new Sort("paper.level", "serialNumber", "randomSeq");
+        Pageable pageable1 = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), sort);
+        Page<MarkTaskLevel> markTasks = markTaskLevelRepo.findAll(specification, pageable1);
+
+        markTasks.getContent().forEach(m -> markTaskDTOs.add(markTaskLevelAssembler.toDTO(m)));
+        return new PageableDTO(markTaskDTOs, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
+    }
 }

+ 24 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkTaskRoughLevelService.java

@@ -298,4 +298,28 @@ public class MarkTaskRoughLevelService {
         }
         return paperDTO;
     }
+
+    public PageableDTO markedPapers(Long workId, Subject subject, Long markerId, Long questionId, Pageable pageable) {
+        List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
+        Specification<MarkTaskRoughLevel> specification = (root, query, builder) -> {
+            List<Predicate> predicates = new ArrayList<>();
+
+            if (ParamCache.roughLevelConfigMap.get(String.valueOf(workId)).getLevelShowAllPaper() == 0) {
+                Long batchNo = paperRepo.findMaxRoughBatchNoByWorkIdAndSubject(workId, subject);
+                predicates.add(builder.equal(root.get("paper").get("batchNo"), batchNo));
+            }
+
+            predicates.add(builder.equal(root.get("workId"), workId));
+            predicates.add(builder.equal(root.get("questionId"), questionId));
+            predicates.add(builder.equal(root.get("markerId"), markerId));
+            predicates.add(builder.equal(root.get("isMark"), true));
+            return builder.and(predicates.toArray(new Predicate[predicates.size()]));
+        };
+        Sort sort = new Sort("paper.level", "serialNumber", "randomSeq");
+        Pageable pageable1 = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), sort);
+        Page<MarkTaskRoughLevel> markTasks = markTaskRoughLevelRepo.findAll(specification, pageable1);
+
+        markTasks.getContent().forEach(m -> markTaskDTOs.add(markTaskRoughLevelAssembler.toDTO(m)));
+        return new PageableDTO(markTaskDTOs, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
+    }
 }

+ 24 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkTaskScoreService.java

@@ -306,4 +306,28 @@ public class MarkTaskScoreService {
         }
         return paperDTO;
     }
+
+    public PageableDTO markedPapers(Long workId, Subject subject, Long markerId, Long questionId, Pageable pageable) {
+        List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
+        Specification<MarkTaskScore> specification = (root, query, builder) -> {
+            List<Predicate> predicates = new ArrayList<>();
+
+            if (ParamCache.roughLevelConfigMap.get(String.valueOf(workId)).getLevelShowAllPaper() == 0) {
+                Long batchNo = paperRepo.findMaxScoreBatchNoByWorkIdAndSubject(workId, subject);
+                predicates.add(builder.equal(root.get("paper").get("batchNo"), batchNo));
+            }
+
+            predicates.add(builder.equal(root.get("workId"), workId));
+            predicates.add(builder.equal(root.get("questionId"), questionId));
+            predicates.add(builder.equal(root.get("markerId"), markerId));
+            predicates.add(builder.equal(root.get("isMark"), true));
+            return builder.and(predicates.toArray(new Predicate[predicates.size()]));
+        };
+        Sort sort = new Sort("paper.level", "serialNumber", "randomSeq");
+        Pageable pageable1 = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), sort);
+        Page<MarkTaskScore> markTasks = markTaskScoreRepo.findAll(specification, pageable1);
+
+        markTasks.getContent().forEach(m -> markTaskDTOs.add(markTaskScoreAssembler.toDTO(m)));
+        return new PageableDTO(markTaskDTOs, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
+    }
 }