Răsfoiți Sursa

测试bug修复-0806

xiaof 4 ani în urmă
părinte
comite
603bd92d2e
16 a modificat fișierele cu 166 adăugiri și 52 ștergeri
  1. 11 0
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/StudentApi.java
  2. 2 1
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/TrialController.java
  3. 20 2
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/assembler/MarkUserAssembler.java
  4. 51 1
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/dto/ExportLevelResultDTO.java
  5. 56 28
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/exporter/ScoreExporter.java
  6. 1 1
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/exporter/UserExporter.java
  7. 1 1
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/DataUploadService.java
  8. 2 0
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/utils/BultInAccountUtil.java
  9. 2 2
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/enums/BuiltInAccountEnum.java
  10. 2 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkSubjectRepo.java
  11. 2 2
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkTaskRepo.java
  12. 1 1
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/PaperRepo.java
  13. 7 7
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/specification/StudentSpecification.java
  14. 2 2
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MakrerApi.java
  15. 5 3
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/PaperApi.java
  16. 1 1
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/StageControlService.java

+ 11 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/StudentApi.java

@@ -2,7 +2,10 @@ package cn.com.qmth.stmms.ms.admin.api;
 
 import cn.com.qmth.stmms.ms.admin.service.DataUploadService;
 import cn.com.qmth.stmms.ms.commons.utils.specification.PagingAndSortingDTO;
+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.Student;
+import cn.com.qmth.stmms.ms.core.repository.MarkSubjectRepo;
 import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
 import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
 import cn.com.qmth.stmms.ms.core.specification.StudentSpecification;
@@ -33,6 +36,9 @@ public class StudentApi {
     @Autowired
     private PaperRepo paperRepo;
 
+    @Autowired
+    MarkSubjectRepo markSubjectRepo;
+
     /**
      * 考生列表
      *
@@ -105,6 +111,11 @@ public class StudentApi {
     @RequestMapping(method = RequestMethod.POST)
     public Student create(@RequestBody Student domain) throws Exception {
         try {
+            //进入打分阶段,不能添加
+            List<MarkSubject> markSubjects= markSubjectRepo.findAllByWorkIdAndStage(domain.getWorkId(), MarkStage.SCORE.ordinal());
+            if(!markSubjects.isEmpty() && markSubjects.size() > 0){
+                throw new RuntimeException("进入打分阶段,不能添加考生");
+            }
             domain.setTest("0");
             //关联考号默认为考号
             domain.setRelateExamNumber(domain.getExamNumber());

+ 2 - 1
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/TrialController.java

@@ -49,12 +49,13 @@ public class TrialController {
      */
 //    @ApiOperation(value = "结束试评任务接口")
     @RequestMapping(value = "finishTrial", method = RequestMethod.GET)
-    public void finishTrial(
+    public boolean finishTrial(
 //            @ApiParam(value = "workId", required = true)
             @RequestParam Long workId,
 //            @ApiParam(value = "科目", required = true)
             @RequestParam Subject subject) throws Exception {
         trialService.finishTrial(workId, subject);
+        return true;
     }
 
     /**

+ 20 - 2
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/assembler/MarkUserAssembler.java

@@ -2,8 +2,12 @@ package cn.com.qmth.stmms.ms.admin.assembler;
 
 import cn.com.qmth.stmms.ms.admin.dto.MarkUserDTO;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
+import cn.com.qmth.stmms.ms.core.domain.user.Role;
 import org.springframework.stereotype.Component;
 
+import java.util.Objects;
+import java.util.StringJoiner;
+
 /**
  * Created by zhengmin on 2016/11/18.
  */
@@ -19,8 +23,22 @@ public class MarkUserAssembler {
             markUserDTO.setPassword(markUser.getPassword());
             markUserDTO.setSubjectName(markUser.getSubject().getName());
             markUserDTO.setRoleName(markUser.getRole().getName());
-            String markRight = markUser.getMarkRight() == null?"":markUser.getMarkRight().getName();
-            markUserDTO.setMarkRightName(markRight);
+            if(Objects.equals(Role.MARK_LEADER.name(), markUser.getRole().name())){
+                StringJoiner sj = new StringJoiner(";");
+                if(markUser.getOneClickLevel()){
+                    sj.add("一键定档");
+                }
+                if(markUser.getStandardVolume()){
+                    sj.add("设立标准卷");
+                }
+                if(markUser.getLevelCallback()){
+                    sj.add("建议档位打回");
+                }
+                markUserDTO.setMarkRightName(sj.toString());
+            } else {
+                String markRight = markUser.getMarkRight() == null?"":markUser.getMarkRight().getName();
+                markUserDTO.setMarkRightName(markRight);
+            }
         }
         return markUserDTO;
     }

+ 51 - 1
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/dto/ExportLevelResultDTO.java

@@ -17,6 +17,11 @@ public class ExportLevelResultDTO {
     private String teacherName;
     private Boolean markByLeader;
     private String level;
+    private String upload;
+    private Boolean isMissing;
+    private Boolean isSample;
+    private Boolean isOneClick;
+    private String isShift;
     private int firstCol;
     private String subject;
 
@@ -62,11 +67,16 @@ public class ExportLevelResultDTO {
         this.result = result;
     }
 
-    public ExportLevelResultDTO(String result, Boolean markByLeader, String level, String teacherName) {
+    public ExportLevelResultDTO(String result, Boolean markByLeader, String level, String teacherName, String upload, Boolean isMissing, Boolean isSample, Boolean isOneClick, String isShift) {
         this.result = result;
         this.markByLeader = markByLeader;
         this.level = level;
         this.teacherName = teacherName;
+        this.upload = upload;
+        this.isMissing = isMissing;
+        this.isSample = isSample;
+        this.isOneClick = isOneClick;
+        this.isShift = isShift;
     }
 
     public String getTeacherName() {
@@ -124,4 +134,44 @@ public class ExportLevelResultDTO {
     public void setSourceName(String sourceName) {
         this.sourceName = sourceName;
     }
+
+    public String getUpload() {
+        return upload;
+    }
+
+    public void setUpload(String upload) {
+        this.upload = upload;
+    }
+
+    public Boolean getMissing() {
+        return isMissing;
+    }
+
+    public void setMissing(Boolean missing) {
+        isMissing = missing;
+    }
+
+    public Boolean getSample() {
+        return isSample;
+    }
+
+    public void setSample(Boolean sample) {
+        isSample = sample;
+    }
+
+    public Boolean getOneClick() {
+        return isOneClick;
+    }
+
+    public void setOneClick(Boolean oneClick) {
+        isOneClick = oneClick;
+    }
+
+    public String getIsShift() {
+        return isShift;
+    }
+
+    public void setIsShift(String isShift) {
+        this.isShift = isShift;
+    }
 }

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

@@ -62,7 +62,12 @@ public class ScoreExporter {
 
     private final String LEADER = "科组长定档",
             AVG_SOCRE = "平均成绩",
-            FINAL = "最终定档",
+            FINAL = "最终档位",
+            UPLOAD = "是否上传",
+            MISSING = "是否缺考",
+            SAMPLE = "是否标准卷",
+            ONE_CLICK = "是否一键定档",
+            SHIFT = "是否改档",
             TEACHER = "阅卷员",
             EXAM_NUMBER = "准考证号",
             NAME = "姓名",
@@ -150,11 +155,23 @@ public class ScoreExporter {
             index.getAndIncrement();
         });
         if (type == 2) {//type为2:分档报表
-            //科组长定档
-            drawExcelFixedHead(sheet, style, row, new HeaderNode(LEADER, 1, 1, index.get(), index.get()));
-            index.getAndIncrement();
-            //最终定档
+            //最终档位
             drawExcelFixedHead(sheet, style, row, new HeaderNode(FINAL, 1, 1, index.get(), index.get()));
+            //是否上传
+            index.getAndIncrement();
+            drawExcelFixedHead(sheet, style, row, new HeaderNode(UPLOAD, 1, 1, index.get(), index.get()));
+            //是否缺考(空白卷)
+            index.getAndIncrement();
+            drawExcelFixedHead(sheet, style, row, new HeaderNode(MISSING, 1, 1, index.get(), index.get()));
+            //标准卷
+            index.getAndIncrement();
+            drawExcelFixedHead(sheet, style, row, new HeaderNode(SAMPLE, 1, 1, index.get(), index.get()));
+            //一键定档
+            index.getAndIncrement();
+            drawExcelFixedHead(sheet, style, row, new HeaderNode(ONE_CLICK, 1, 1, index.get(), index.get()));
+            //改档
+            index.getAndIncrement();
+            drawExcelFixedHead(sheet, style, row, new HeaderNode(SHIFT, 1, 1, index.get(), index.get()));
         } else if (type == 1) {//type为1:分数报表
             //平均成绩
             drawExcelFixedHead(sheet, style, row, new HeaderNode(AVG_SOCRE, 1, 1, index.get(), index.get()));
@@ -223,7 +240,7 @@ public class ScoreExporter {
             }
             int scSumCount = 0;
             if (type == 2) {
-                scSumCount = level + size + 1;
+                scSumCount = level + size + 5;
             } else {
                 scSumCount = level + size;
             }
@@ -244,7 +261,7 @@ public class ScoreExporter {
             }
             int smSumCount = 0;
             if (type == 2) {
-                smSumCount = scSumCount + size + 1;//最终列+1,因为从0开始
+                smSumCount = scSumCount + size + 5;//最终列+1,因为从0开始
             } else {
                 smSumCount = scSumCount + size;
             }
@@ -264,7 +281,7 @@ public class ScoreExporter {
             }
             int sxSumCount = 0;
             if (type == 2) {
-                sxSumCount = smSumCount + size + 1;//最终列+1,因为从0开始
+                sxSumCount = smSumCount + size + 5;//最终列+1,因为从0开始
             } else {
                 sxSumCount = smSumCount + size;
             }
@@ -312,13 +329,13 @@ 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.`level` from mark_task 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 = 0 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 = 1 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.`level` 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 = 0 or mu.mark_right = 2) and mu.subject = 'SC' and mu.enabled = 1) temp, student t where (p.is_missing = true or p.is_test = 3) and p.work_id = ? and p.subject = 'SC' and t.exam_number = p.exam_number ";
-            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.`level` from mark_task 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 = 0 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 = 1 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.`level` 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 = 0 or mu.mark_right = 2) and mu.subject = 'SM' and mu.enabled = 1) temp, student t where (p.is_missing = true or p.is_test = 3) and p.work_id = ? and p.subject = 'SM' and t.exam_number = p.exam_number ";
-            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.`level` from mark_task 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 = 0 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 = 1 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.`level` 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 = 0 or mu.mark_right = 2) and mu.subject = 'SX' and mu.enabled = 1) temp, student t where (p.is_missing = true or p.is_test = 3) and p.work_id = ? and p.subject = 'SX' and t.exam_number = p.exam_number ";
+            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.`level`, p.id upload, p.is_missing missing, p.is_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 mark_task 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 = 1 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.`level`, p.id upload, p.is_missing missing, p.is_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 OR p.is_test = 3) 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.`level`, p.id upload, p.is_missing missing, p.is_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 mark_task 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 = 1 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.`level`, p.id upload, p.is_missing missing, p.is_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 = 'SM' AND mu.enabled = 1) temp ON 1 = 1 WHERE (p.is_missing = TRUE OR p.is_test = 3) 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.`level`, p.id upload, p.is_missing missing, p.is_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 mark_task 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 = 1 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.`level`, p.id upload, p.is_missing missing, p.is_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 = 'SX' AND mu.enabled = 1) temp ON 1 = 1 WHERE (p.is_missing = TRUE OR p.is_test = 3) AND p.work_id = ? AND p.subject = 'SX' ";
             //拼装问号
-            scSql = sqlUtil.sqlPrint(scSql, workId, workId, workId, workId);
-            smSql = sqlUtil.sqlPrint(smSql, workId, workId, workId, workId);
-            sxSql = sqlUtil.sqlPrint(sxSql, workId, workId, workId, workId);
+            scSql = sqlUtil.sqlPrint(scSql, workId, workId, workId, workId, workId, workId);
+            smSql = sqlUtil.sqlPrint(smSql, workId, workId, workId, workId, workId, workId);
+            sxSql = sqlUtil.sqlPrint(sxSql, workId, workId, workId, workId, workId, workId);
             sbAll = new StringBuilder(sqlUtil.sqlUnionAll(scSql));//union all
             sbAll = sbAll.append(smSql);
             sbAll = new StringBuilder(sqlUtil.sqlUnionAll(sbAll.toString()));//union all
@@ -392,30 +409,41 @@ public class ScoreExporter {
                             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()));
-                                if (v.getMarkByLeader()) {
-                                    drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(v.getLevel(), firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()), level + (scMap == null ? 0 : scMap.size())));
-                                }
                                 if (Objects.nonNull(v.getLevel())) {
-                                    drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(v.getLevel(), firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + 1, level + (scMap == null ? 0 : scMap.size()) + 1));
+                                    drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(v.getLevel(), firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()), level + (scMap == null ? 0 : scMap.size())));
                                 }
+                                //上传
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getUpload()) ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + 1, level + (scMap == null ? 0 : scMap.size()) + 1));
+                                //缺考
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getMissing()) && v.getMissing() ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + 2, level + (scMap == null ? 0 : scMap.size()) + 2));
+                                //标准卷
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getSample()) && v.getSample() ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + 3, level + (scMap == null ? 0 : scMap.size()) + 3));
+                                //一键定档
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getOneClick()) && v.getOneClick() ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + 4, level + (scMap == null ? 0 : scMap.size()) + 4));
+                                //改档
+                                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()));
-                                if (v.getMarkByLeader()) {
-                                    drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(v.getLevel(), firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval));
-                                }
                                 if (Objects.nonNull(v.getLevel())) {
-                                    drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(v.getLevel(), firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval + 1, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval + 1));
+                                    drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(v.getLevel(), firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval));
                                 }
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getUpload()) ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval + 1, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval + 1));
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getMissing()) && v.getMissing() ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval + 2, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval + 2));
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getSample()) && v.getSample() ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval + 3, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval + 3));
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getOneClick()) && v.getOneClick() ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval + 4, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval + 4));
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getIsShift()) ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval + 5, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + levelInterval + 5));
                             } 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()));
-                                if (v.getMarkByLeader()) {
-                                    drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(v.getLevel(), firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2));
-                                }
                                 if (Objects.nonNull(v.getLevel())) {
-                                    drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(v.getLevel(), firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2 + 1, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2 + 1));
+                                    drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(v.getLevel(), firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2));
                                 }
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getUpload()) ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2 + 1, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2 + 1));
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getMissing()) && v.getMissing() ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2 + 2, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2 + 2));
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getSample()) && v.getSample() ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2 + 3, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2 + 3));
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getOneClick()) && v.getOneClick() ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2 + 4, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2 + 4));
+                                drawExcelFixedHead(finalSheet, style, hssfRow, new HeaderNode(Objects.nonNull(v.getIsShift()) ? "是" : "否", firstRow, firstRow, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2 + 5, level + (scMap == null ? 0 : scMap.size()) + (smMap == null ? 0 : smMap.size()) + (sxMap == null ? 0 : sxMap.size()) + levelInterval * 2 + 5));
                             }
                         });
                     }
@@ -641,10 +669,10 @@ public class ScoreExporter {
                 subjectMap.put(exportLevelResultDTO.getSubject(), m);
             }
             if (studentAnswerMap.containsKey(exportLevelResultDTO.getExamNumber())) {
-                studentAnswerMap.get(exportLevelResultDTO.getExamNumber()).put(exportLevelResultDTO.getSubject() + ":" + exportLevelResultDTO.getTeacherName(), new ExportLevelResultDTO(exportLevelResultDTO.getResult(), exportLevelResultDTO.getMarkByLeader(), exportLevelResultDTO.getLevel(), exportLevelResultDTO.getTeacherName()));
+                studentAnswerMap.get(exportLevelResultDTO.getExamNumber()).put(exportLevelResultDTO.getSubject() + ":" + exportLevelResultDTO.getTeacherName(), new ExportLevelResultDTO(exportLevelResultDTO.getResult(), exportLevelResultDTO.getMarkByLeader(), exportLevelResultDTO.getLevel(), exportLevelResultDTO.getTeacherName(), exportLevelResultDTO.getUpload(), exportLevelResultDTO.getMissing(), exportLevelResultDTO.getSample(), exportLevelResultDTO.getOneClick(), exportLevelResultDTO.getIsShift()));
             } else {
                 Map<String, ExportLevelResultDTO> m = new HashMap<>();
-                m.put(exportLevelResultDTO.getSubject() + ":" + exportLevelResultDTO.getTeacherName(), new ExportLevelResultDTO(exportLevelResultDTO.getResult(), exportLevelResultDTO.getMarkByLeader(), exportLevelResultDTO.getLevel(), exportLevelResultDTO.getTeacherName()));
+                m.put(exportLevelResultDTO.getSubject() + ":" + exportLevelResultDTO.getTeacherName(), new ExportLevelResultDTO(exportLevelResultDTO.getResult(), exportLevelResultDTO.getMarkByLeader(), exportLevelResultDTO.getLevel(), exportLevelResultDTO.getTeacherName(), exportLevelResultDTO.getUpload(), exportLevelResultDTO.getMissing(), exportLevelResultDTO.getSample(), exportLevelResultDTO.getOneClick(), exportLevelResultDTO.getIsShift()));
                 studentAnswerMap.put(exportLevelResultDTO.getExamNumber(), m);
             }
         }

+ 1 - 1
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/exporter/UserExporter.java

@@ -49,7 +49,7 @@ public class UserExporter {
         List<MarkUserDTO> markUserDTOs = new ArrayList<>();
         Stream<MarkUser> markUserStream = markUserRepo.findByWorkId(workId).stream();
         if (subject != null) {
-            markUserStream = markUserStream.filter(u -> u.getSubject() == subject);
+            markUserStream = markUserStream.filter(u -> u.getSubject().name() == subject.name());
         }
         markUserStream.forEach(u -> {
             markUserDTOs.add(markUserAssembler.toDTO(u));

+ 1 - 1
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/DataUploadService.java

@@ -530,7 +530,7 @@ public class DataUploadService {
         //已进入分档,不能导入
         List<MarkSubject> list = markSubjectRepo.findAllByWorkIdAndStageNot(workId, MarkStage.INIT.ordinal());
         if (list != null && list.size() > 0) {
-            throw new Exception("已有进入分档阶段,不能导入关联考生数据");
+            throw new Exception("进入分档阶段,不能导入关联考生数据");
         }
 
         ExcelReader excelReader = new ExcelReader(StudentRelateDTO.class);

+ 2 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/utils/BultInAccountUtil.java

@@ -33,6 +33,8 @@ public class BultInAccountUtil {
                         //随机密码randomPassword()
                         String password = "123456";
                         markUser = new MarkUser(loginName, password, 0L, Subject.SC, loginName, Role.findByName((String) map.get("name")), null);
+                        //默认为禁用
+                        markUser.setEnabled(false);
                         userList.add(markUser);
                     }
                 } else {

+ 2 - 2
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/enums/BuiltInAccountEnum.java

@@ -13,11 +13,11 @@ public enum BuiltInAccountEnum {
     /**
      * 纪检员
      */
-    INSPECTION_CY("INSPECTION-CY", "纪检员"),
+    INSPECTION("INSPECTION", "纪检员"),
     /**
      * 质检员
      */
-    QC_CY("QC-CY", "质检员"),
+    QC("QC", "质检员"),
     /**
      * 采集账号
      */

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

@@ -27,4 +27,6 @@ public interface MarkSubjectRepo extends JpaRepository<MarkSubject,String> {
     List<MarkSubject> findByWorkIdAndTestNotIn(Long workId, List<Integer> ints);
 
     List<MarkSubject> findAllByWorkIdAndStageNot(Long workId, int ordinal);
+
+    List<MarkSubject> findAllByWorkIdAndStage(Long workId, int ordinal);
 }

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

@@ -107,7 +107,7 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
      */
     @Query(value = "SELECT q.`id`,t.`marker_name` markerName,q.`name`,SUM(IF(t.`result` IS NULL,1,0)) leftCount,COUNT(t.question_id) totalCount, SUM(t.is_rejected) rejectedCount, q.area_code areaCode " +
             "FROM mark_task t LEFT OUTER JOIN exam_question q ON t.`question_id` = q.`id` LEFT  JOIN paper p ON t.paper_id = p.id WHERE " +
-            "t.work_id = ? and t.subject = ? and t.stage = ? and p.is_missing = false and p.is_test = ?  GROUP BY t.`marker_name` ORDER BY q.`id`", nativeQuery = true)
+            "t.work_id = ? and t.subject = ? and t.stage = ? and p.is_missing = false and p.is_test = ?  GROUP BY t.marker_id, t.`marker_name` ORDER BY q.`id`", nativeQuery = true)
     List<Object[]> listGroupByQuestionAndMarker(Long workId, String name, Integer stageId, int test);
 
     /**
@@ -152,7 +152,7 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
      */
     @Query(value = "SELECT q.`id`,t.`marker_name` markerName,q.`name`,SUM(IF(t.`result` IS NULL,1,0)) leftCount,COUNT(t.question_id) totalCount,SUM(t.is_rejected) rejectedCount, q.area_code areaCode " +
             "FROM mark_task t LEFT OUTER JOIN exam_question q ON t.`question_id` = q.`id` LEFT  JOIN paper p ON t.paper_id = p.id WHERE " +
-            "t.work_id = ? and t.subject = ? and t.stage = ? and p.is_missing = false GROUP BY t.`marker_name` ORDER BY q.`id`, t.`marker_name`", nativeQuery = true)
+            "t.work_id = ? and t.subject = ? and t.stage = ? and p.is_missing = false GROUP BY t.marker_id, t.`marker_name` ORDER BY q.`id`, t.`marker_name`", nativeQuery = true)
     List<Object[]> listGroupByQuestionAndMarker(Long workId, String name, Integer stageId);
 
     /**

+ 1 - 1
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/PaperRepo.java

@@ -32,7 +32,7 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
     @Query(value = "select * from paper p where p.work_id = ?1 and p.subject = ?2 and p.is_missing = false and p.is_active = false limit ?3", nativeQuery = true)
     List<Paper> findByWorkIdAndSubjectAndIsMissingAndIsActive(Long workId, Subject subject, int taskCount);
 
-    List<Paper> findByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndTest(Long workId, Subject subject, int test);
+    List<Paper> findByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndTestOrderByQuestionId(Long workId, Subject subject, int test);
 
     List<Paper> findByWorkIdAndSubjectAndIsMissingFalseAndActiveTrue(Long workId, Subject subject, Sort sort);
 

+ 7 - 7
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/specification/StudentSpecification.java

@@ -15,7 +15,7 @@ public class StudentSpecification extends PagingAndSortingSpecification {
     private String workId;
     private String areaCode;
     private String examNumber;
-    private String name;
+    private String studentName;
     private String uploadStatus;
     private Boolean isAbsent;
     private Long startNumber;//起始考号
@@ -82,12 +82,12 @@ public class StudentSpecification extends PagingAndSortingSpecification {
         this.areaCode = areaCode;
     }
 
-    public String getName() {
-        return name;
+    public String getStudentName() {
+        return studentName;
     }
 
-    public void setName(String name) {
-        this.name = name;
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
     }
 
     public String getExamNumber() {
@@ -135,8 +135,8 @@ public class StudentSpecification extends PagingAndSortingSpecification {
         return (root, query, cb) -> {
             List<Predicate> predicates = new ArrayList<Predicate>();
             predicates.add(cb.equal(root.get("test"), String.valueOf(TrialEnum.DEFAULT.getId())));
-            if (getName() != null) {
-                predicates.add(cb.like(root.get("name"), "%" + getName() + "%"));
+            if (getStudentName() != null) {
+                predicates.add(cb.like(root.get("name"), "%" + getStudentName() + "%"));
             }
 //            if(getExamNumber() != null){
 //                predicates.add(cb.like(root.get("examNumber"),"%"+getExamNumber()+"%"));

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

@@ -223,12 +223,12 @@ public class MakrerApi {
                 o.setPt(levelMap.get(o.getId()).getPt());
                 o.setKdpt(levelMap.get(o.getId()).getKdpt());
                 o.setCount(Objects.isNull(o.getCount()) ? 0 : o.getCount());
-                double p = (double) o.getCount() / finalKdtotal;
+                double p = finalKdtotal == 0 ? 0 : (double) o.getCount() / finalKdtotal;
                 BigDecimal bd = new BigDecimal(p).setScale(3, RoundingMode.HALF_EVEN);
                 o.setPercent(bd.doubleValue());
 
                 o.setGcount(Objects.isNull(o.getGcount()) ? 0 : o.getGcount());
-                double gp = (double) o.getGcount() / finalTotal;
+                double gp = finalTotal == 0 ? 0 : (double) o.getGcount() / finalTotal;
                 BigDecimal gbd = new BigDecimal(gp).setScale(3, RoundingMode.HALF_EVEN);
                 o.setGpercent(gbd.doubleValue());
                 int count;

+ 5 - 3
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/PaperApi.java

@@ -165,13 +165,15 @@ public class PaperApi {
             }
             if (startNumber != null && endNumber != null) {
                 predicates.add(builder.between(root.get("examNumber"), startNumber, endNumber));
-            } else if (startNumber != null) {
-                predicates.add(builder.equal(root.get("examNumber"), startNumber));
+            } else if (startNumber != null && endNumber == null) {
+                predicates.add(builder.greaterThanOrEqualTo(root.get("examNumber"), startNumber));
+            } else if (startNumber == null && endNumber != null) {
+                predicates.add(builder.lessThanOrEqualTo(root.get("examNumber"), endNumber));
             }
             if (isManual != null) {
                 predicates.add(builder.equal(root.get("isManual"), isManual));
             }
-            if (missing != missing) {
+            if (missing != null) {
                 predicates.add(builder.equal(root.get("isMissing"), missing));
             }
             //考生姓名

+ 1 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/StageControlService.java

@@ -174,7 +174,7 @@ public class StageControlService {
         if (markSubject.getTest() == 1) {
             papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, markSubject.getTest());
         } else {
-            List<Paper> papersList = paperRepo.findByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndTest(workId, subject, TrialEnum.DEFAULT.getId());
+            List<Paper> papersList = paperRepo.findByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndTestOrderByQuestionId(workId, subject, TrialEnum.DEFAULT.getId());
             papers = papersList.subList(0, taskCount);
         }
         assignTaskService.assignForGrouping(papers, markerGroups, markSubject, null);