Przeglądaj źródła

联考版-v3.1.0-日志记录bug修复。

xiaof 2 lat temu
rodzic
commit
aaec8694de
15 zmienionych plików z 112 dodań i 70 usunięć
  1. 19 10
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/dto/MarkLogOperDTO.java
  2. 30 7
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/exporter/MarkLogExporter.java
  3. 2 2
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/ParamSetting.java
  4. 2 1
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/user/Role.java
  5. 3 2
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkTaskLevelRepo.java
  6. 2 2
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/ChangeLevelApi.java
  7. 4 0
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkSubjectApi.java
  8. 4 4
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/PaperApi.java
  9. 1 1
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/QuestionStatAssembler.java
  10. 21 30
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkLogService.java
  11. 1 0
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkTaskLevelService.java
  12. 1 0
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkTaskScoreService.java
  13. 15 8
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingLevelService.java
  14. 3 3
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingRoughLevelService.java
  15. 4 0
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/StageControlService.java

+ 19 - 10
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/dto/MarkLogOperDTO.java

@@ -3,8 +3,6 @@ package cn.com.qmth.stmms.ms.admin.dto;
 import cn.com.qmth.stmms.ms.commons.utils.excel.ExcelProperty;
 import cn.com.qmth.stmms.ms.core.domain.MarkLogOperType;
 
-import java.util.Date;
-
 public class MarkLogOperDTO {
 
     @ExcelProperty(name = "工作", index = 0, type = 1)
@@ -13,28 +11,31 @@ public class MarkLogOperDTO {
     @ExcelProperty(name = "操作人", index = 1, type = 1)
     private String createUserName;
 
-    @ExcelProperty(name = "角色", index = 2, type = 1)
+    @ExcelProperty(name = "阶段", index = 2, type = 1)
+    private String stageName;
+
+    @ExcelProperty(name = "角色", index = 3, type = 1)
     private String createRole;
 
-    @ExcelProperty(name = "科目", index = 3, type = 1)
+    @ExcelProperty(name = "科目", index = 4, type = 1)
     private String subject;
 
-    @ExcelProperty(name = "准考证号", index = 4, type = 1)
+    @ExcelProperty(name = "准考证号", index = 5, type = 1)
     private String examNumber;
 
-    @ExcelProperty(name = "学生姓名", index = 5, type = 1)
+    @ExcelProperty(name = "学生姓名", index = 6, type = 1)
     private String studentName;
 
-    @ExcelProperty(name = "操作类型", index = 6, type = 1)
+    @ExcelProperty(name = "操作类型", index = 7, type = 1)
     private String operType;
 
-    @ExcelProperty(name = "操作前数据", index = 7, type = 1)
+    @ExcelProperty(name = "操作前数据", index = 8, type = 1)
     private String operDataBefore;
 
-    @ExcelProperty(name = "操作后数据", index = 8, type = 1)
+    @ExcelProperty(name = "操作后数据", index = 9, type = 1)
     private String operDataAfter;
 
-    @ExcelProperty(name = "操作时间", index = 9, type = 1)
+    @ExcelProperty(name = "操作时间", index = 10, type = 1)
     private String createTime;
 
     public String getWorkName() {
@@ -53,6 +54,14 @@ public class MarkLogOperDTO {
         this.createUserName = createUserName;
     }
 
+    public String getStageName() {
+        return stageName;
+    }
+
+    public void setStageName(String stageName) {
+        this.stageName = stageName;
+    }
+
     public String getCreateRole() {
         return createRole;
     }

+ 30 - 7
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/exporter/MarkLogExporter.java

@@ -3,9 +3,13 @@ package cn.com.qmth.stmms.ms.admin.exporter;
 import cn.com.qmth.stmms.ms.admin.dto.MarkLogCollectDTO;
 import cn.com.qmth.stmms.ms.admin.dto.MarkLogOperDTO;
 import cn.com.qmth.stmms.ms.commons.utils.excel.ExportUtils;
+import cn.com.qmth.stmms.ms.core.cache.ParamCache;
 import cn.com.qmth.stmms.ms.core.domain.MarkLog;
 import cn.com.qmth.stmms.ms.core.domain.MarkLogOperType;
+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.repository.MarkLogRepo;
+import cn.com.qmth.stmms.ms.core.repository.MarkSubjectRepo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -13,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.Predicate;
 import javax.servlet.http.HttpServletResponse;
@@ -21,6 +26,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("api/export/log")
@@ -31,6 +37,9 @@ public class MarkLogExporter {
     @Autowired
     MarkLogRepo markLogRepo;
 
+    @Resource
+    MarkSubjectRepo markSubjectRepo;
+
     /**
      * 导出操作日志
      *
@@ -52,10 +61,10 @@ public class MarkLogExporter {
             if (Objects.nonNull(subject)) {
                 predicates.add(cb.equal(root.get("subject").as(String.class), subject));
             }
-            if (Objects.nonNull(examNumber) && examNumber != "") {
+            if (Objects.nonNull(examNumber) && !examNumber.equals("")) {
                 predicates.add(cb.equal(root.get("examNumber").as(String.class), examNumber));
             }
-            if (Objects.nonNull(studentName) && studentName != "") {
+            if (Objects.nonNull(studentName) && !studentName.equals("")) {
                 predicates.add(cb.like(root.get("studentName").as(String.class), "%" + studentName + "%"));
             }
             if (Objects.nonNull(operType)) {
@@ -74,7 +83,7 @@ public class MarkLogExporter {
             }
 
             List<Map> mapList = MarkLogOperType.listTypes();
-            if (mapList != null && mapList.size() > 0) {
+            if (!mapList.isEmpty()) {
                 CriteriaBuilder.In<Object> in = cb.in(root.get("operType"));
                 for (Map map : mapList) {
                     in.value(map.get("id"));
@@ -85,13 +94,27 @@ public class MarkLogExporter {
         };
         List<MarkLog> result = markLogRepo.findAll(specification);
         List<MarkLogOperDTO> markLogOperDTOS = new ArrayList<>();
+        boolean roughLevelEnable = ParamCache.levelConfigMap.get(String.valueOf(workId)).getRoughLevelEnable() == 1;
+        List<MarkSubject> subjectList = markSubjectRepo.findAllByWorkId(workId);
+        Map<String, String> subjectMap = subjectList.stream().collect(Collectors.toMap(x -> x.getSubject().name(), y -> y.getName()));
         //科目名称
         for (MarkLog markLog : result) {
             MarkLogOperDTO markLogOperDTO = new MarkLogOperDTO();
             markLogOperDTO.setWorkName(markLog.getWorkName());
             markLogOperDTO.setCreateUserName(markLog.getCreateUserName());
+            MarkStage stage = markLog.getStage();
+            if (MarkStage.ROUGH_LEVEL.equals(stage)) {
+                markLogOperDTO.setStageName("粗分档阶段");
+            } else if (MarkStage.LEVEL.equals(stage)) {
+                markLogOperDTO.setStageName(roughLevelEnable ? "细分档阶段" : "分档阶段");
+            } else if (MarkStage.SCORE.equals(stage)) {
+                markLogOperDTO.setStageName("打分阶段");
+            } else {
+                markLogOperDTO.setStageName("无");
+            }
             markLogOperDTO.setCreateRole(markLog.getCreateRole());
-            markLogOperDTO.setSubject(markLog.getSubject());
+            String subjectName = subjectMap.containsKey(markLog.getSubject()) ? subjectMap.get(markLog.getSubject()) : markLog.getSubject();
+            markLogOperDTO.setSubject(subjectName);
             markLogOperDTO.setExamNumber(markLog.getExamNumber());
             markLogOperDTO.setStudentName(markLog.getStudentName());
             markLogOperDTO.setOperType(markLog.getOperType());
@@ -125,10 +148,10 @@ public class MarkLogExporter {
             if (Objects.nonNull(subject)) {
                 predicates.add(cb.equal(root.get("subject").as(String.class), subject));
             }
-            if (Objects.nonNull(examNumber) && examNumber != "") {
+            if (Objects.nonNull(examNumber) && !examNumber.equals("")) {
                 predicates.add(cb.equal(root.get("examNumber").as(String.class), examNumber));
             }
-            if (Objects.nonNull(studentName) && studentName != "") {
+            if (Objects.nonNull(studentName) && !studentName.equals("")) {
                 predicates.add(cb.like(root.get("studentName").as(String.class), "%" + studentName + "%"));
             }
             if (Objects.nonNull(createUserId)) {
@@ -160,7 +183,7 @@ public class MarkLogExporter {
             markLogCollectDTO.setExamNumber(markLog.getExamNumber());
             markLogCollectDTO.setCreateUserName(markLog.getCreateUserName());
             markLogCollectDTO.setCreateTime(sdf.format(markLog.getCreateTime()));
-            markLogCollectDTO.setRemark(Objects.isNull(markLog.getRemark())?"":markLog.getRemark());
+            markLogCollectDTO.setRemark(Objects.isNull(markLog.getRemark()) ? "" : markLog.getRemark());
             markLogCollectDTO.setLoginTime(sdf.format(markLog.getLoginTime()));
             markLogCollectDTOS.add(markLogCollectDTO);
         }

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

@@ -57,7 +57,7 @@ public class ParamSetting implements Serializable {
         levelConfig.setAutoCallback(0);//是否自动打回
         levelConfig.setMajority(1);//是否过半定档
         levelConfig.setAutoCallbackShowDeviation(1);//自动打回时显示偏差
-        levelConfig.setCumulativeError(4);//打回累计误差
+//        levelConfig.setCumulativeError(4);//打回累计误差(默认为空)
         levelConfig.setTakeBest(1);//取优原则
         levelConfig.setLevelShowAllPaper(0);//阅卷员是否显示所有试卷
         levelConfig.setPropDenominator(1);//档位百分比分母
@@ -73,7 +73,7 @@ public class ParamSetting implements Serializable {
         roughLevelConfig.setDeviation(4);//仲裁档位差
         roughLevelConfig.setMajority(1);//是否过半定档
         roughLevelConfig.setAutoCallbackShowDeviation(1);//自动打回时显示偏差
-        roughLevelConfig.setCumulativeError(4);//打回累计误差
+//        roughLevelConfig.setCumulativeError(4);//打回累计误差(默认为空)
         roughLevelConfig.setTakeBest(1);//取优原则
         roughLevelConfig.setLevelShowAllPaper(0);//阅卷员是否显示所有试卷
         roughLevelConfig.setPropDenominator(1);//档位百分比分母

+ 2 - 1
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/user/Role.java

@@ -13,7 +13,8 @@ public enum Role {
     INSPECTION("纪检员"),
     COLLECTOR("采集员"),
     UPLOAD("图片客户端"),
-    QC("质检员");
+    QC("质检员"),
+    SYSTEM("系统");
 
     private String name;
 

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

@@ -111,7 +111,7 @@ public interface MarkTaskLevelRepo extends JpaRepository<MarkTaskLevel, Long>, J
 
     List<MarkTaskLevel> findByWorkIdAndSecretNumber(Long workId, String secretNumber);
 
-    @Query(value = "SELECT count(1) from mark_task_level m where m.question_id = ?1 and m.marker_id = ?2 and m.stage = ?3 and m.result is null and m.batch_no = ?4 and m.is_rejected = false", nativeQuery = true)
+    @Query(value = "SELECT count(1) from mark_task_level m inner join paper p on m.paper_id = p.id and p.is_shift = 0 and p.is_shift_score = 0 where m.question_id = ?1 and m.marker_id = ?2 and m.stage = ?3 and m.result is null and m.batch_no = ?4 and m.is_rejected = false", nativeQuery = true)
     int countByQuestionIdAndMarkerIdAndStageAndResultNull(Long questionId, Long markerId, int stage, Long batchNo);
 
     @Query(value = "SELECT count(1) from mark_task_level m inner join paper p on m.paper_id = p.id and p.is_shift = 0 and p.is_shift_score = 0 and p.score_batch_no = ?4 where m.question_id = ?1 and m.marker_id = ?2 and m.stage = ?3 and m.result is null", nativeQuery = true)
@@ -128,7 +128,7 @@ public interface MarkTaskLevelRepo extends JpaRepository<MarkTaskLevel, Long>, J
     @Query(value = "select count(1) from mark_task_level m inner join paper p on m.paper_id = p.id and p.batch_no is not null where m.question_id = ?1 and m.marker_id = ?2", nativeQuery = true)
     long countByQuestionIdAll(Long questionId, Long markId);
 
-    @Query(value = "SELECT count(1) from mark_task_level m where m.question_id = ?1 and m.marker_id = ?2 and m.stage = ?3 and m.result is null and m.batch_no is not null and m.is_rejected = false", nativeQuery = true)
+    @Query(value = "SELECT count(1) from mark_task_level m inner join paper p on m.paper_id = p.id and p.is_shift = 0 and p.is_shift_score = 0 where m.question_id = ?1 and m.marker_id = ?2 and m.stage = ?3 and m.result is null and m.batch_no is not null and m.is_rejected = false", nativeQuery = true)
     int countByQuestionIdAndMarkerIdAndStageAndResultIsNullAll(Long questionId, Long markerId, int stage);
 
     @Query(value = "SELECT count(1) from mark_task_level m where m.question_id = ?1 and m.marker_id = ?2 and m.stage = ?3 and  m.batch_no is not null and m.is_rejected = true", nativeQuery = true)
@@ -186,4 +186,5 @@ public interface MarkTaskLevelRepo extends JpaRepository<MarkTaskLevel, Long>, J
     List<Long> findByWorkIdAndQuestionIdAndMarkerIdAndStageAndBatchNoAndPaperIsMark(Long workId, Long questionId, Long id, MarkStage stage, Long batchNo);
 
     int countByWorkIdAndSubjectAndStageAndTest(Long workId, Subject subject, MarkStage stage, int id);
+
 }

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

@@ -284,7 +284,7 @@ public class ChangeLevelApi {
 
                 List<MarkTaskRoughLevel> markTasks = markTaskRoughLevelRepo.findByPaperId(paper.getId());
                 List<String> ranges = markTasks.stream().map(m -> m.getMarkerId().toString()).collect(Collectors.toList());
-                markingRoughLevelService.reject(paper, changeLevel.getSuggestLevel(), String.join(",", ranges), true, false);
+                markingRoughLevelService.reject(paper, changeLevel.getSuggestLevel(), String.join(",", ranges), true, false, changeLevel.getCreateId());
 
                 //重置已经打分的数据
                 List<MarkTaskLevel> markTasksLevels = markTaskLevelRepo.findByPaperId(paper.getId());
@@ -304,7 +304,7 @@ public class ChangeLevelApi {
 
                 List<MarkTaskLevel> markTasks = markTaskLevelRepo.findByPaperId(paper.getId());
                 List<String> ranges = markTasks.stream().map(m -> m.getMarkerId().toString()).collect(Collectors.toList());
-                markingLevelService.reject(paper, changeLevel.getSuggestLevel(), String.join(",", ranges), true, false);
+                markingLevelService.reject(paper, changeLevel.getSuggestLevel(), String.join(",", ranges), true, false, changeLevel.getCreateId());
 
                 //重置已经打分的数据
                 List<MarkTaskScore> markTasksScore = markTaskScoreRepo.findByPaperId(paper.getId());

+ 4 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkSubjectApi.java

@@ -124,6 +124,10 @@ public class MarkSubjectApi {
             if (count > 0) {
                 throw new RuntimeException("有未发布的评卷任务");
             }
+            count = paperRepo.countByWorkIdAndSubjectAndIsArbitratedTrue(workId, subject);
+            if (count > 0) {
+                throw new RuntimeException("有待仲裁的评卷任务");
+            }
         } else if (MarkStage.LEVEL.equals(markSubject.getStage())) {
             if (markSubject.getTest() == TrialEnum.START_TRIAL.getId()) {
                 throw new RuntimeException("当前为试评阶段,请结束试评后再试");

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

@@ -416,10 +416,10 @@ public class PaperApi {
                 boolean leaderConfirm = leaderConfirmStr == null || "".equals(leaderConfirmStr) || Boolean.parseBoolean(leaderConfirmStr);
                 if (MarkStage.ROUGH_LEVEL.equals(stage)) {
                     paper.setRoughOneClick(false);
-                    markingRoughLevelService.reject(paper, level, ranges, leaderConfirm, false);
+                    markingRoughLevelService.reject(paper, level, ranges, leaderConfirm, false, null);
                 } else if (MarkStage.LEVEL.equals(stage)) {
                     paper.setOneClick(false);
-                    markingLevelService.reject(paper, level, ranges, leaderConfirm, false);
+                    markingLevelService.reject(paper, level, ranges, leaderConfirm, false, null);
                 }
             }
         }
@@ -477,10 +477,10 @@ public class PaperApi {
                         boolean leaderConfirm = leaderConfirmStr == null || "".equals(leaderConfirmStr) || Boolean.parseBoolean(leaderConfirmStr);
                         if (MarkStage.ROUGH_LEVEL.equals(stage)) {
                             paper.setRoughOneClick(false);
-                            markingRoughLevelService.reject(paper, level, ranges, leaderConfirm, false);
+                            markingRoughLevelService.reject(paper, level, ranges, leaderConfirm, false, null);
                         } else if (MarkStage.LEVEL.equals(stage)) {
                             paper.setOneClick(false);
-                            markingLevelService.reject(paper, level, ranges, leaderConfirm, false);
+                            markingLevelService.reject(paper, level, ranges, leaderConfirm, false, null);
                         }
                     }
                 }

+ 1 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/QuestionStatAssembler.java

@@ -68,7 +68,7 @@ public class QuestionStatAssembler {
 
         int shift = 0;
         int shiftScore = 0;
-        int rejectCount = 0;
+        int rejectCount = Integer.parseInt(qStats[7].toString());
         if (MarkStage.LEVEL.equals(stage)) {
             shift = markTaskRoughLevelRepo.countByWorkIdAndSubjectAndMarkerIdAndStageAndShiftAndResult(workId, subject.name(), Long.valueOf(qStats[1].toString()), MarkStage.ROUGH_LEVEL.ordinal());
             shiftScore = markTaskLevelRepo.countByWorkIdAndSubjectAndMarkerIdAndStageAndShiftScoreAndResult(workId, subject.name(), Long.valueOf(qStats[1].toString()), MarkStage.LEVEL.ordinal());

+ 21 - 30
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkLogService.java

@@ -8,7 +8,6 @@ import cn.com.qmth.stmms.ms.core.domain.task.MarkTaskRoughLevel;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTaskScore;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
 import cn.com.qmth.stmms.ms.core.domain.user.Role;
-import cn.com.qmth.stmms.ms.core.repository.MarkLogRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
 import cn.com.qmth.stmms.ms.core.repository.WorkRepo;
 import org.springframework.stereotype.Service;
@@ -29,9 +28,6 @@ public class MarkLogService {
     @Resource
     private WorkRepo workRepo;
 
-    @Resource
-    private MarkLogRepo markLogRepo;
-
     /**
      * 粗分档正评、回评、档位打回回评日志
      *
@@ -81,44 +77,37 @@ public class MarkLogService {
      * @param levelCode 档位
      */
     public MarkLog markingLevelLog(MarkTaskLevel markTask, String levelCode) {
-        boolean roughLevelEnable = ParamCache.levelConfigMap.get(String.valueOf(markTask.getWorkId())).getRoughLevelEnable() == 1;
         Work work = workRepo.findOne(markTask.getWorkId());
         Paper paper = markTask.getPaper();
-        MarkLogOperType markLogOperType = null;
-        String operDateBefore = "-";
+        MarkLogOperType markLogOperType;
+        String operDateBefore;
         String operDateAfter;
         MarkStage stage = MarkStage.LEVEL;
         if (markTask.getResult() == null) {
             // 打回重评
             if (markTask.isRejected()) {
-                if (roughLevelEnable) {
-                    // 细分档阶段改档打分
-                    if (!paper.isShift() && paper.isShiftScore()) {
-                        markLogOperType = MarkLogOperType.CHANGE_SCORE;
-                    }
+                // 打分阶段的改档打档操作
+                if(paper.isShift()) {
+                    stage = MarkStage.SCORE;
+                    markLogOperType = MarkLogOperType.CHANGE_LEVEL;
                 } else {
-                    // 打分阶段改档打档
-                    if (paper.isShift()) {
-                        stage = MarkStage.SCORE;
-                        markLogOperType = MarkLogOperType.CHANGE_LEVEL;
-                    } else {
-                        markLogOperType = MarkLogOperType.CALLBACK_ONCE_LEVEL;
-                    }
+                    markLogOperType = MarkLogOperType.CALLBACK_ONCE_LEVEL;
                 }
-                operDateBefore = markTask.getOriginLevel();
-                operDateAfter = levelCode;
-
             }
             // 正评
             else {
-                markLogOperType = MarkLogOperType.LEVEL;
-                operDateAfter = levelCode;
+                // 细分档阶段的改档打分操作
+                if (!paper.isShift() && paper.isShiftScore()) {
+                    markLogOperType = MarkLogOperType.CHANGE_SCORE;
+                } else {
+                    markLogOperType = MarkLogOperType.LEVEL;
+                }
             }
         } else {
             markLogOperType = MarkLogOperType.ONCE_LEVEl;
-            operDateBefore = markTask.getResult();
-            operDateAfter = levelCode;
         }
+        operDateBefore = markTask.getOriginLevel();
+        operDateAfter = levelCode;
         return new MarkLog(markTask.getWorkId(), work.getName(), paper.getId(), markTask.getSubject(), stage, paper.getExamNumber(), paper.getStudentName(), markTask.getMarkerId(), markTask.getMarkerName(), Role.MARKER, markLogOperType.getId(), Optional.ofNullable(operDateBefore).orElse("-"), Optional.ofNullable(operDateAfter).orElse("-"), markLogOperType.getName(), new Date());
     }
 
@@ -195,15 +184,17 @@ public class MarkLogService {
      * @param stage       阶段
      * @param paper       试卷
      * @param autoReject  是否自动打回
-     * @param markerId    评卷员id
-     * @param markerName  评卷员姓名
+     * @param markerId    科组长id
      * @param originLevel 旧档位
      */
-    public MarkLog markingPaperReject(MarkStage stage, Paper paper, boolean autoReject, Long markerId, String markerName, String originLevel) {
+    public MarkLog markingPaperReject(MarkStage stage, Paper paper, boolean autoReject, Long markerId, String originLevel) {
         MarkLogOperType markLogOperType = autoReject ? MarkLogOperType.SYSTEM_CALLBACK_LEVEl : MarkLogOperType.CALLBACK_LEVEl;
         String operDateAfter = paper.getRedoLevel();
         Work work = workRepo.findOne(paper.getWorkId());
-        return new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), paper.getSubject(), stage, paper.getExamNumber(), paper.getStudentName(), markerId, markerName, Role.MARKER, markLogOperType.getId(), Optional.ofNullable(originLevel).orElse("-"), Optional.ofNullable(operDateAfter).orElse("-"), markLogOperType.getName(), new Date());
+        Long userId = markerId != null ? markerId : autoReject ? -1 : ServletUtil.getUserId();
+        String userName = autoReject ? "system" : markUserRepo.findOne(userId).getLoginName();
+        Role role = autoReject ? Role.SYSTEM : Role.MARK_LEADER;
+        return new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), paper.getSubject(), stage, paper.getExamNumber(), paper.getStudentName(), userId, userName, role, markLogOperType.getId(), Optional.ofNullable(originLevel).orElse("-"), Optional.ofNullable(operDateAfter).orElse("-"), markLogOperType.getName(), new Date());
     }
 
 }

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

@@ -302,6 +302,7 @@ public class MarkTaskLevelService {
                 List<Predicate> predicates = new ArrayList<>();
                 predicates.add(builder.equal(root.get("questionId"), questionId));
                 predicates.add(builder.equal(root.get("markerId"), markerId));
+                predicates.add(builder.equal(root.get("paper").get("isShift"), false));
                 predicates.add(builder.equal(root.get("paper").get("isShiftScore"), isShiftScore));
                 predicates.add(builder.equal(root.get("stage"), MarkStage.LEVEL));
                 predicates.add(builder.isNull(root.get("result")));

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

@@ -275,6 +275,7 @@ public class MarkTaskScoreService {
                 List<Predicate> predicates = new ArrayList<>();
                 predicates.add(builder.equal(root.get("questionId"), questionId));
                 predicates.add(builder.equal(root.get("markerId"), markerId));
+                predicates.add(builder.equal(root.get("paper").get("isShift"), false));
                 predicates.add(builder.equal(root.get("paper").get("isShiftScore"), isShiftScore));
                 predicates.add(builder.equal(root.get("stage"), MarkStage.SCORE));
                 predicates.add(builder.isNull(root.get("result")));

+ 15 - 8
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingLevelService.java

@@ -80,6 +80,9 @@ public class MarkingLevelService {
     @Resource
     MarkLogService markLogService;
 
+    @Resource
+    MarkSubjectRepo markSubjectRepo;
+
     /**
      * 提交分档。如果每个评卷都提交了,则进行仲裁判定,如果没有触发仲裁就定档
      *
@@ -136,15 +139,15 @@ public class MarkingLevelService {
                 paper.setRejectedByLeader(true);
                 //需要打回的评卷员
                 String ranges = String.join(",", determine.getRejectTasks());
-                markingLevelService.reject(paper, null, ranges, true, true);
+                markingLevelService.reject(paper, null, ranges, true, true, null);
             }
 
             // 若开启了粗分档,细分档改档时,对应更新粗分档档位值,与细分档的匹配
             boolean roughLevelEnable = ParamCache.levelConfigMap.get(String.valueOf(markTask.getWorkId())).getRoughLevelEnable() == 1;
-            if(roughLevelEnable){
+            if (roughLevelEnable) {
                 Optional<Level> levelOptional = levels.stream().filter(m -> paper.getLevel().equals(m.getCode())).findFirst();
-                if(!levelOptional.isPresent()){
-                    throw new RuntimeException("分档档位值有误,未查询到档位【"+paper.getLevel()+"】");
+                if (!levelOptional.isPresent()) {
+                    throw new RuntimeException("分档档位值有误,未查询到档位【" + paper.getLevel() + "】");
                 }
 
                 String roughLevel = levelOptional.get().getRoughCode();
@@ -158,9 +161,13 @@ public class MarkingLevelService {
                 paper.setRoughLevel(roughLevel);
             }
 
+            MarkSubject markSubject = markSubjectRepo.findOne(markTask.getWorkId() + "-" + markTask.getSubject());
             //改档后重新分档,状态改为false
-            paper.setShift(false);
-//            paper.setShiftScore(false);
+            if (MarkStage.LEVEL.equals(markSubject.getStage())) {
+                paper.setShiftScore(false);
+            } else if (MarkStage.SCORE.equals(markSubject.getStage())) {
+                paper.setShift(false);
+            }
             //重新分档,打回科组长打回状态改为false
             paper.setRejectedByLeader(false);
             paper.setSortNum(calcSortNum(paper, markTasks, levels));
@@ -295,7 +302,7 @@ public class MarkingLevelService {
      * @param autoReject    是否自动打回
      */
     @Transactional
-    public Paper reject(Paper paper, String redoLevel, String ranges, boolean leaderConfirm, boolean autoReject) {
+    public Paper reject(Paper paper, String redoLevel, String ranges, boolean leaderConfirm, boolean autoReject, Long rejectKzzId) {
         paper.reject(redoLevel);
         //科组长打回标记
         paper.setRejectedByLeader(true);
@@ -324,7 +331,7 @@ public class MarkingLevelService {
                         markTask.setResult(null);
                         markTask.setLevel(null);
                         markTask.setDeviationDirection(calcDeviationDirection(levelMap, markTask.getOriginLevel(), redoLevel));
-                        MarkLog markLog = markLogService.markingPaperReject(MarkStage.LEVEL, paper, autoReject, markTask.getMarkerId(), markTask.getMarkerName(), markTask.getOriginLevel());
+                        MarkLog markLog = markLogService.markingPaperReject(MarkStage.LEVEL, paper, autoReject, rejectKzzId, markTask.getOriginLevel());
                         markLogList.add(markLog);
                     }
                 }

+ 3 - 3
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingRoughLevelService.java

@@ -129,7 +129,7 @@ public class MarkingRoughLevelService {
                 paper.setRejectedByLeader(true);
                 //需要打回的评卷员
                 String ranges = String.join(",", determine.getRejectTasks());
-                markingRoughLevelService.reject(paper, null, ranges, true, true);
+                markingRoughLevelService.reject(paper, null, ranges, true, true, null);
             }
             //改档后重新分档,状态改为false
             paper.setShift(false);
@@ -265,7 +265,7 @@ public class MarkingRoughLevelService {
      * @param ranges    打回评卷员ID集合
      */
     @Transactional
-    public Paper reject(Paper paper, String redoLevel, String ranges, boolean leaderConfirm, boolean autoReject) {
+    public Paper reject(Paper paper, String redoLevel, String ranges, boolean leaderConfirm, boolean autoReject, Long rejectKzzId) {
         paper.roughReject(redoLevel);
         //科组长打回标记
         paper.setRejectedByLeader(true);
@@ -290,7 +290,7 @@ public class MarkingRoughLevelService {
                         markTask.setResult(null);
                         markTask.setLevel(null);
                         markTask.setDeviationDirection(calcDeviationDirection(markTask.getOriginLevel(), redoLevel));
-                        MarkLog markLog = markLogService.markingPaperReject(MarkStage.ROUGH_LEVEL, paper, autoReject, markTask.getMarkerId(), markTask.getMarkerName(), markTask.getOriginLevel());
+                        MarkLog markLog = markLogService.markingPaperReject(MarkStage.ROUGH_LEVEL, paper, autoReject, rejectKzzId, markTask.getOriginLevel());
                         markLogList.add(markLog);
                     }
                 }

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

@@ -309,6 +309,10 @@ public class StageControlService {
         if (count > 0) {
             throw new RuntimeException("有未发布的评卷任务");
         }
+        count = paperRepo.countByWorkIdAndSubjectAndIsArbitratedTrue(workId, subject);
+        if (count > 0) {
+            throw new RuntimeException("有待仲裁的评卷任务");
+        }
         this.isPtFull(workId, markSubject);
         markSubject.setAllLevel(true);
         assignTaskService.initTaskPublishData(workId, subject.name());