Bladeren bron

联考版-v3.1.0-日志记录、打分阶段改粗分档。

xiaof 2 jaren geleden
bovenliggende
commit
6990f11089
18 gewijzigde bestanden met toevoegingen van 416 en 149 verwijderingen
  1. 21 21
      sql/msyj-local-v3.1.0.sql
  2. 13 5
      stmms-ms-accesscontrol/src/main/java/cn/com/qmth/stmms/ms/accesscontrol/api/AuthApi.java
  3. 2 2
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/ToolService.java
  4. 27 17
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/MarkLog.java
  5. 1 1
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/MarkLogOperType.java
  6. 3 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkLogRepo.java
  7. 2 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkTaskLevelRepo.java
  8. 2 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkTaskRoughLevelRepo.java
  9. 8 8
      stmms-ms-log/src/main/java/cn/com/qmth/stmms/ms/log/aop/MarkLogAop.java
  10. 19 16
      stmms-ms-log/src/main/java/cn/com/qmth/stmms/ms/log/controller/MarkLogController.java
  11. 16 10
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/ChangeLevelApi.java
  12. 8 10
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkSubjectApi.java
  13. 1 5
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkTaskApi.java
  14. 4 4
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/PaperApi.java
  15. 209 0
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkLogService.java
  16. 50 25
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingLevelService.java
  17. 21 25
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingRoughLevelService.java
  18. 9 0
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingScoreService.java

+ 21 - 21
sql/msyj-local-v3.1.0.sql

@@ -218,27 +218,27 @@ CREATE TABLE `level`  (
 -- ----------------------------
 DROP TABLE IF EXISTS `mark_log`;
 CREATE TABLE `mark_log`  (
-  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
-  `create_user_id` bigint(20) NULL DEFAULT NULL COMMENT '操作人id',
-  `create_user_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作人名字',
-  `create_role` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作人角色',
-  `subject` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '科目',
-  `exam_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '准考证号',
-  `student_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
-  `login_time` datetime(0) NULL DEFAULT NULL COMMENT '登录时间(采集专用)',
-  `logout_time` datetime(0) NULL DEFAULT NULL COMMENT '登出时间(采集专用)',
-  `oper_type` int(11) NULL DEFAULT NULL COMMENT '操作类型,1:分档,2:打分,3:回评档位,4:回评分数,5:档位打回,6:档位打回回评,7:一键定档,8:标准卷设置',
-  `oper_data_before` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作前数据',
-  `oper_data_after` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作后数据',
-  `create_time` datetime(0) NULL DEFAULT NULL COMMENT '操作时间',
-  `work_id` bigint(20) NULL DEFAULT NULL COMMENT '考区id',
-  `paper_id` bigint(20) NULL DEFAULT NULL COMMENT '试卷id',
-  `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
-  `stage` bigint(20) NULL DEFAULT NULL COMMENT '试卷阶段,0:初始,1:分档,2:打分',
-  `work_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
-  PRIMARY KEY (`id`) USING BTREE,
-  INDEX `union_001_index`(`create_user_id`, `oper_type`, `subject`, `exam_number`) USING BTREE,
-  INDEX `idx_union_2`(`work_id`, `paper_id`, `oper_type`) USING BTREE
+ `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `work_id` bigint(20) NULL DEFAULT NULL COMMENT '考区id',
+ `work_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+ `paper_id` bigint(20) NULL DEFAULT NULL COMMENT '试卷id',
+ `subject` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '科目',
+ `stage` bigint(20) NULL DEFAULT NULL COMMENT '试卷阶段,0:初始,1:分档,2:打分',
+ `exam_number` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '准考证号',
+ `student_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学生姓名',
+ `create_user_id` bigint(20) NULL DEFAULT NULL COMMENT '操作人id',
+ `create_user_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作人名字',
+ `create_role` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作人角色',
+ `oper_type` int(11) NULL DEFAULT NULL COMMENT '操作类型,1:分档,2:打分,3:回评档位,4:回评分数,5:档位打回,6:档位打回回评,7:一键定档,8:标准卷设置',
+ `oper_data_before` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作前数据',
+ `oper_data_after` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作后数据',
+ `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+ `create_time` datetime(0) NULL DEFAULT NULL COMMENT '操作时间',
+ `login_time` datetime(0) NULL DEFAULT NULL COMMENT '登录时间(采集专用)',
+ `logout_time` datetime(0) NULL DEFAULT NULL COMMENT '登出时间(采集专用)',
+ PRIMARY KEY (`id`) USING BTREE,
+ INDEX `union_001_index`(`create_user_id`, `oper_type`, `subject`, `exam_number`) USING BTREE,
+ INDEX `idx_union_2`(`work_id`, `paper_id`, `oper_type`) USING BTREE
 ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '操作日志' ROW_FORMAT = Dynamic;
 
 -- ----------------------------

+ 13 - 5
stmms-ms-accesscontrol/src/main/java/cn/com/qmth/stmms/ms/accesscontrol/api/AuthApi.java

@@ -5,6 +5,9 @@ import cn.com.qmth.stmms.ms.commons.utils.EncrypAES;
 import cn.com.qmth.stmms.ms.core.cache.CacheService;
 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.task.MarkTaskLevel;
+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.*;
@@ -82,15 +85,20 @@ public class AuthApi {
 
         if (Objects.equals(Role.MARKER, domain.getRole())) {
             MarkSubject markSubject = markSubjectRepo.findOne(domain.getWorkId() + "-" + domain.getSubject().name());
-            List markTasks = null;
+            int count = 0;
             if (MarkStage.ROUGH_LEVEL.equals(markSubject.getStage())) {
-                markTasks = markTaskRoughLevelRepo.findByWorkIdAndSubjectAndMarkerIdAndStageLimit(domain.getWorkId(), domain.getSubject().name(), domain.getId(), markSubject.getStage().ordinal());
+                List<MarkTaskRoughLevel> markTaskRoughLevelList = markTaskRoughLevelRepo.findByWorkIdAndSubjectAndMarkerIdAndStageLimit(domain.getWorkId(), domain.getSubject().name(), domain.getId(), MarkStage.ROUGH_LEVEL.ordinal());
+                count = markTaskRoughLevelList.size();
             } else if (MarkStage.LEVEL.equals(markSubject.getStage())) {
-                markTasks = markTaskLevelRepo.findByWorkIdAndSubjectAndMarkerIdAndStageLimit(domain.getWorkId(), domain.getSubject().name(), domain.getId(), markSubject.getStage().ordinal());
+                List<MarkTaskLevel> markTaskLevelList = markTaskLevelRepo.findByWorkIdAndSubjectAndMarkerIdAndStageLimit(domain.getWorkId(), domain.getSubject().name(), domain.getId(), MarkStage.LEVEL.ordinal());
+                List<MarkTaskRoughLevel> markTaskRoughLevelList = markTaskRoughLevelRepo.findByWorkIdAndSubjectAndMarkerIdAndStageLimit(domain.getWorkId(), domain.getSubject().name(), domain.getId(), MarkStage.ROUGH_LEVEL.ordinal());
+                count = markTaskLevelList.size() + markTaskRoughLevelList.size();
             } else if (MarkStage.SCORE.equals(markSubject.getStage())) {
-                markTasks = markTaskScoreRepo.findByWorkIdAndSubjectAndMarkerIdAndStageLimit(domain.getWorkId(), domain.getSubject().name(), domain.getId(), markSubject.getStage().ordinal());
+                List<MarkTaskScore> markTaskScoreList = markTaskScoreRepo.findByWorkIdAndSubjectAndMarkerIdAndStageLimit(domain.getWorkId(), domain.getSubject().name(), domain.getId(), MarkStage.SCORE.ordinal());
+                List<MarkTaskLevel> markTaskLevelList = markTaskLevelRepo.findByWorkIdAndSubjectAndMarkerIdAndStageLimit(domain.getWorkId(), domain.getSubject().name(), domain.getId(), MarkStage.LEVEL.ordinal());
+                count = markTaskScoreList.size() + markTaskLevelList.size();
             }
-            if (CollectionUtils.isEmpty(markTasks)) {
+            if (count == 0) {
                 throw new RuntimeException("没有评卷任务");
             }
         }

+ 2 - 2
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/ToolService.java

@@ -43,7 +43,7 @@ public class ToolService {
 
     public List<SysAdjustLevelDTO> listAdjustLevels(Long workId, Subject subject) {
         Work work = workRepo.findOne(workId);
-        if(work == null){
+        if (work == null) {
             throw new RuntimeException("不存在此工作");
         }
 
@@ -123,7 +123,7 @@ public class ToolService {
                 }
 
                 // 记录日志
-                MarkLog markLog = new MarkLog(0L, "admin", Role.ADMIN, subject, paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.SYSTEM_ADJUST_LEVEL.getId(), workId, paper.getId(), MarkStage.LEVEL, paper.getLevel(), level, "系统批量调档", work.getName(), new Date());
+                MarkLog markLog = new MarkLog(workId, work.getName(), paper.getId(), subject, MarkStage.LEVEL, paper.getExamNumber(), paper.getStudentName(), 0L, "admin", Role.ADMIN, MarkLogOperType.SYSTEM_ADJUST_LEVEL.getId(), paper.getLevel(), level, "系统批量调档", new Date());
                 markLogs.add(markLog);
 
                 // 有档位变动的试卷

+ 27 - 17
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/MarkLog.java

@@ -2,7 +2,6 @@ package cn.com.qmth.stmms.ms.core.domain;
 
 import cn.com.qmth.stmms.ms.core.domain.user.Role;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
-//import io.swagger.annotations.ApiModelProperty;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.hibernate.annotations.DynamicInsert;
 import org.hibernate.annotations.DynamicUpdate;
@@ -37,7 +36,7 @@ public class MarkLog implements Serializable {
     @NotNull
 //    @ApiModelProperty(value = "角色")
     private String createRole;
-//    @ApiModelProperty(value = "科目")
+    //    @ApiModelProperty(value = "科目")
     private String subject;
     @NotNull
 //    @ApiModelProperty(value = "准考证号")
@@ -48,11 +47,11 @@ public class MarkLog implements Serializable {
     @NotNull
 //    @ApiModelProperty(value = "操作类型,1:分档,2:打分,3:回评档位,4:回评分数,5:档位打回,6:档位打回回评,7:一键定档,8:标准卷设置", example = "2")
     private Integer operType;
-//    @ApiModelProperty(value = "操作前数据")
+    //    @ApiModelProperty(value = "操作前数据")
     private String operDataBefore;
-//    @ApiModelProperty(value = "操作后数据")
+    //    @ApiModelProperty(value = "操作后数据")
     private String operDataAfter;
-//    @Temporal(value = TemporalType.DATE)
+    //    @Temporal(value = TemporalType.DATE)
     @NotNull
 //    @ApiModelProperty(value = "操作时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@@ -61,15 +60,18 @@ public class MarkLog implements Serializable {
     private Long workId;
 
     private String workName;
-//    @NotNull
+    //    @NotNull
     private Long paperId;
-//    @ApiModelProperty(value = "备注")
+    //    @ApiModelProperty(value = "备注")
     private String remark;
     @NotNull
     @Enumerated(value = EnumType.ORDINAL)
 //    @ApiModelProperty(value = "阶段", example = "3")
     private MarkStage stage;
 
+    @Transient
+    private String stageName;
+
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date loginTime;
 
@@ -80,23 +82,23 @@ public class MarkLog implements Serializable {
 
     }
 
-    public MarkLog(Long createUserId, String createUserName, Role createRole,
-                   Subject subject, String examNumber, String studentName,
-                   Integer operType, Long workId, Long paperId, MarkStage stage, String operDataBefore, String operDataAfter, String remark, String workName, Date date) {
-        this.createUserId = createUserId;
-        this.createUserName = createUserName;
-        this.createRole = createRole.getName();
+    public MarkLog(Long workId, String workName, Long paperId, Subject subject, MarkStage stage,
+                   String examNumber, String studentName, Long createUserId, String createUserName, Role createRole,
+                   Integer operType, String operDataBefore, String operDataAfter, String remark, Date date) {
+        this.workId = workId;
+        this.workName = workName;
+        this.paperId = paperId;
         this.subject = subject.toString();
+        this.stage = stage;
         this.examNumber = examNumber;
         this.studentName = studentName;
+        this.createUserId = createUserId;
+        this.createUserName = createUserName;
+        this.createRole = createRole.getName();
         this.operType = operType;
-        this.workId = workId;
-        this.paperId = paperId;
-        this.stage = stage;
         this.operDataAfter = operDataAfter;
         this.operDataBefore = operDataBefore;
         this.remark = remark;
-        this.workName = workName;
         this.createTime = date;
     }
 
@@ -278,4 +280,12 @@ public class MarkLog implements Serializable {
     public void setLogoutTime(Date logoutTime) {
         this.logoutTime = logoutTime;
     }
+
+    public String getStageName() {
+        return stageName;
+    }
+
+    public void setStageName(String stageName) {
+        this.stageName = stageName;
+    }
 }

+ 1 - 1
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/MarkLogOperType.java

@@ -234,7 +234,7 @@ public enum MarkLogOperType {
      */
     public static List<Map> listTypes() {
         MarkLogOperType[] values = MarkLogOperType.values();
-        Integer[] ints = {1, 2, 3, 4, 8, 7, 10, 5, 15, 16, 17, 18, 19};
+        Integer[] ints = {1, 2, 3, 4, 5, 6, 7, 8, 10, 15, 16, 17, 18, 19};
         List<Integer> intList = Arrays.asList(ints);
         List<Map> list = new ArrayList<>();
         for (MarkLogOperType value : values) {

+ 3 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkLogRepo.java

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.ms.core.repository;
 
 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.Paper;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import org.springframework.data.domain.Page;
@@ -46,4 +47,6 @@ public interface MarkLogRepo extends JpaRepository<MarkLog, Long>, JpaSpecificat
 
     @Query("select count(distinct s.createTime) from MarkLog s where s.workId = ?1 and s.paperId = ?2 and s.operType = ?3")
     int countByWorkIdAndPaperIdAndOperType(Long workId, Long id, int id1);
+
+    MarkLog findTopByStageAndCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(MarkStage stage, Long markerId, int id, String toString, String examNumber);
 }

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

@@ -184,4 +184,6 @@ public interface MarkTaskLevelRepo extends JpaRepository<MarkTaskLevel, Long>, J
 
     @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);
+
+    int countByWorkIdAndSubjectAndStageAndTest(Long workId, Subject subject, MarkStage stage, int id);
 }

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

@@ -151,4 +151,6 @@ public interface MarkTaskRoughLevelRepo extends JpaRepository<MarkTaskRoughLevel
 
     @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);
+
+    int countByWorkIdAndSubjectAndStageAndTest(Long workId, Subject subject, MarkStage stage, int id);
 }

+ 8 - 8
stmms-ms-log/src/main/java/cn/com/qmth/stmms/ms/log/aop/MarkLogAop.java

@@ -130,7 +130,7 @@ public class MarkLogAop {
      * @param result
      * @throws Exception
      */
-    @AfterReturning(value = "paperAspect()", returning = RESULT)
+//    @AfterReturning(value = "paperAspect()", returning = RESULT)
     @Transactional
     public void afterReturnPaperPoint(JoinPoint joinPoint, Object result) throws Exception {
         Map<String, Object> map = getAspectCommon(joinPoint);
@@ -177,7 +177,7 @@ public class MarkLogAop {
                     operResult = originLevel;
                 }
                 Work work = workRepo.findOne(paper.getWorkId());
-                MarkLog markLog = new MarkLog(markUser.getId(), markUser.getName(), markUser.getRole(), markUser.getSubject(), paper.getExamNumber(), paper.getStudentName(), operType, paper.getWorkId(), paper.getId(), MarkStage.LEVEL, operResult, String.valueOf(jsonObjectResult.get(LEVEL)), null, work.getName(), date);
+                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), markUser.getSubject(), MarkStage.LEVEL, paper.getExamNumber(), paper.getStudentName(), markUser.getId(), markUser.getName(), markUser.getRole(), operType, operResult, String.valueOf(jsonObjectResult.get(LEVEL)), null, date);
                 LOGGER.info("markLog:{}", JSONObject.toJSONString(markLog));
                 //标准卷设置、定档设置、档位打回end
                 markLogRepo.save(markLog);
@@ -194,7 +194,7 @@ public class MarkLogAop {
      * @param result
      * @throws Exception
      */
-    @AfterReturning(value = "markAspect()", returning = RESULT)
+//    @AfterReturning(value = "markAspect()", returning = RESULT)
     @Transactional
     public void afterReturnMarkPoint(JoinPoint joinPoint, Object result) throws Exception {
         Map<String, Object> map = getAspectCommon(joinPoint);
@@ -233,13 +233,13 @@ public class MarkLogAop {
 
         if (markStage.ordinal() == 1 && paper.isMarkByLeader()) {//分档,如果已经有科组长定档,则不允许评卷员再分档
             return;
-        } else if (markStage.ordinal() == 1 && oldRejected && !isRejected) {//档位打回回评
+        } else if ((markStage.ordinal() == 1 || markStage.ordinal() == 2) && oldRejected && !isRejected) {//档位打回回评
             if (oldShift) {
                 operType = MarkLogOperType.CHANGE_LEVEL.getId();
             } else {
                 operType = MarkLogOperType.CALLBACK_ONCE_LEVEL.getId();
             }
-        } else if (markStage.ordinal() == 2) {//打分
+        } else if (markStage.ordinal() == 3) {//打分
             if (oldShiftScore) {
                 operType = MarkLogOperType.CHANGE_SCORE.getId();
             } else {
@@ -287,7 +287,7 @@ public class MarkLogAop {
             }
         }
         Work work = workRepo.findOne(paper.getWorkId());
-        MarkLog markLog = new MarkLog(markUser.getId(), markUser.getName(), markUser.getRole(), markUser.getSubject(), paper.getExamNumber(), paper.getStudentName(), operType, paper.getWorkId(), paper.getId(), markStage, operResult, String.valueOf(jsonObjectResult.get(RESULT)), null, work.getName(), new Date());
+        MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), markUser.getSubject(), markStage, paper.getExamNumber(), paper.getStudentName(), markUser.getId(), markUser.getName(), markUser.getRole(), operType, operResult, String.valueOf(jsonObjectResult.get(RESULT)), null, new Date());
         LOGGER.info("markLog:{}", JSONObject.toJSONString(markLog));
         //分档、打分、回评档位、回评分数、档位打回、档位打回回评end
         markLogRepo.save(markLog);
@@ -359,7 +359,7 @@ public class MarkLogAop {
                                     operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
                                 }
                                 //加入打回日志
-                                MarkLog markLog = new MarkLog(m.getMarkerId(), m.getMarkerName(), Role.MARKER, m.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId(), paper.getWorkId(), paper.getId(), m.getStage(), operResult, String.valueOf(d.getC()), MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getName(), workName, date);
+                                MarkLog markLog = new MarkLog(paper.getWorkId(), workName, paper.getId(), m.getSubject(), m.getStage(), paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId(), operResult, String.valueOf(d.getC()), MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getName(), date);
                                 markLogList.add(markLog);
                             }
                         }
@@ -423,7 +423,7 @@ public class MarkLogAop {
                                     operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
                                 }
                                 //加入打回日志
-                                MarkLog markLog = new MarkLog(m.getMarkerId(), m.getMarkerName(), Role.MARKER, m.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId(), paper.getWorkId(), paper.getId(), m.getStage(), operResult, String.valueOf(d.getC()), MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getName(), workName, date);
+                                MarkLog markLog = new MarkLog(paper.getWorkId(), workName, paper.getId(), m.getSubject(), m.getStage(), paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId(), operResult, String.valueOf(d.getC()), MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getName(), date);
                                 markLogList.add(markLog);
                             }
                         }

+ 19 - 16
stmms-ms-log/src/main/java/cn/com/qmth/stmms/ms/log/controller/MarkLogController.java

@@ -3,6 +3,7 @@ package cn.com.qmth.stmms.ms.log.controller;
 import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
 import cn.com.qmth.stmms.ms.commons.utils.specification.PagingAndSortingDTO;
 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.*;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
 import cn.com.qmth.stmms.ms.core.domain.user.Role;
@@ -20,7 +21,6 @@ import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
-import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -34,11 +34,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
-//import io.swagger.annotations.Api;
-//import io.swagger.annotations.ApiOperation;
-//import io.swagger.annotations.ApiParam;
 
-//@Api(tags = "纪检审计接口controller")
+/**
+ * 纪检审计接口controller
+ */
 @RestController
 @RequestMapping("api/marklog")
 public class MarkLogController {
@@ -61,22 +60,13 @@ public class MarkLogController {
     @Autowired
     private PaperAssembler paperAssembler;
 
-    JdbcTemplate jdbcTemplate;
-
-    //    @ApiOperation(value = "纪检审计查询接口")
     @GetMapping("/selectMarkLog")
     public PagingAndSortingDTO selectMarkLog(
-//            @ApiParam(value = "科目", required = false)
             @RequestParam(required = false) String subject,
-//                                             @ApiParam(value = "准考证号", required = false)
             @RequestParam(required = false) Long examNumber,
-//                                             @ApiParam(value = "学生姓名", required = false)
             @RequestParam(required = false) String studentName,
-//                                             @ApiParam(value = "操作类型(1:分档,2:打分,3:回评档位,4:回评分数,5:档位打回,6:档位打回回评,7:一键定档,8:标准卷设置)", required = false)
             @RequestParam(required = false) Integer operType,
-//                                             @ApiParam(value = "开始时间", required = false)
             @RequestParam(required = false) String startTime,
-//                                             @ApiParam(value = "结束时间", required = false)
             @RequestParam(required = false) String endTime,
             @RequestParam(required = false) Long workId,
             @RequestParam Integer curPage,
@@ -90,7 +80,7 @@ public class MarkLogController {
             if (Objects.nonNull(examNumber)) {
                 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)) {
@@ -108,7 +98,7 @@ public class MarkLogController {
                 predicates.add(cb.equal(root.get("workId").as(Long.class), workId));
             }
             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"));
@@ -118,6 +108,19 @@ public class MarkLogController {
             return cb.and(predicates.toArray(new Predicate[predicates.size()]));
         };
         Page<MarkLog> result = markLogRepo.findAll(specification, pageable);
+        boolean roughLevelEnable = ParamCache.levelConfigMap.get(String.valueOf(workId)).getRoughLevelEnable() == 1;
+        for (MarkLog markLog : result.getContent()) {
+            MarkStage stage = markLog.getStage();
+            if(MarkStage.ROUGH_LEVEL.equals(stage)){
+                markLog.setStageName("粗分档阶段");
+            } else if(MarkStage.LEVEL.equals(stage)){
+                markLog.setStageName(roughLevelEnable ? "细分档阶段" : "分档阶段");
+            } else if(MarkStage.SCORE.equals(stage)){
+                markLog.setStageName("打分阶段");
+            } else {
+                markLog.setStageName("无");
+            }
+        }
         return new PagingAndSortingDTO(result.getNumber(), result.getSize(), result.getTotalPages(),
                 result.getTotalElements(), result.getContent());
     }

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

@@ -210,7 +210,7 @@ public class ChangeLevelApi {
         }
 
         List<ChangeLevel> list = changeLevelRepo.findAllByWorkIdAndSubjectAndStageAndPaperId(markSubject.getWorkId(), markSubject.getSubject().name(), markSubject.getStage(), paperId);
-        list.stream().map(m -> {
+        list = list.stream().map(m -> {
             m.setIsCurr(0);
             return m;
         }).collect(Collectors.toList());
@@ -248,7 +248,7 @@ public class ChangeLevelApi {
 
         //记录日志
         Work work = workRepo.findOne(paper.getWorkId());
-        MarkLog markLog = new MarkLog(markUser.getId(), markUser.getName(), markUser.getRole(), markUser.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.CHANGE_LEVEL_APPLY.getId(), paper.getWorkId(), paper.getId(), MarkStage.SCORE, changeLevel.getOriginalLevel(), changeLevel.getSuggestLevel(), null, work.getName(), new Date());
+        MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), markUser.getSubject(), changeLevel.getStage(), paper.getExamNumber(), paper.getStudentName(), markUser.getId(), markUser.getName(), markUser.getRole(), MarkLogOperType.CHANGE_LEVEL_APPLY.getId(), changeLevel.getOriginalLevel(), changeLevel.getSuggestLevel(), MarkLogOperType.CHANGE_LEVEL_APPLY.getName(), new Date());
         markLogRepo.save(markLog);
 
         return new ResponseEntity(HttpStatus.OK);
@@ -272,18 +272,27 @@ public class ChangeLevelApi {
         if (auditStatus == 1) {
             Paper paper = paperRepo.findOne(changeLevel.getPaperId());
 
+            //记录日志
+            MarkUser markUser = markUserRepo.findOne(userId);
+            Work work = workRepo.findOne(paper.getWorkId());
+            MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), paper.getSubject(), changeLevel.getStage(), paper.getExamNumber(), paper.getStudentName(), markUser.getId(), markUser.getName(), markUser.getRole(), MarkLogOperType.CHANGE_LEVEL_AGREE.getId(), changeLevel.getOriginalLevel(), changeLevel.getSuggestLevel(), MarkLogOperType.CHANGE_LEVEL_AGREE.getName(), new Date());
+            markLogRepo.save(markLog);
+
             if (MarkStage.LEVEL.equals(changeLevel.getStage())) {
                 //重置细分档档位
                 paper.setLevel(null);
 
                 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);
+                markingRoughLevelService.reject(paper, changeLevel.getSuggestLevel(), String.join(",", ranges), true, false);
 
                 //重置已经打分的数据
                 List<MarkTaskLevel> markTasksLevels = markTaskLevelRepo.findByPaperId(paper.getId());
                 if (markTasksLevels != null && !markTasksLevels.isEmpty()) {
                     markTasksLevels.forEach(o -> {
+                        if (o.getResult() != null) {
+                            o.setOriginLevel(o.getResult());
+                        }
                         o.setResult(null);
                         o.setLevel(null);
                     });
@@ -295,12 +304,15 @@ 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);
+                markingLevelService.reject(paper, changeLevel.getSuggestLevel(), String.join(",", ranges), true, false);
 
                 //重置已经打分的数据
                 List<MarkTaskScore> markTasksScore = markTaskScoreRepo.findByPaperId(paper.getId());
                 if (markTasksScore != null && !markTasksScore.isEmpty()) {
                     markTasksScore.forEach(o -> {
+                        if (o.getResult() != null) {
+                            o.setOriginLevel(o.getResult());
+                        }
                         o.setResult(null);
                         o.setLevel(null);
                     });
@@ -312,12 +324,6 @@ public class ChangeLevelApi {
             paper.setShiftScore(true);
 
             paperRepo.save(paper);
-
-            //记录日志
-            MarkUser markUser = markUserRepo.findOne(userId);
-            Work work = workRepo.findOne(paper.getWorkId());
-            MarkLog markLog = new MarkLog(markUser.getId(), markUser.getName(), markUser.getRole(), paper.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.CHANGE_LEVEL_AGREE.getId(), paper.getWorkId(), paper.getId(), MarkStage.SCORE, changeLevel.getOriginalLevel(), changeLevel.getSuggestLevel(), null, work.getName(), new Date());
-            markLogRepo.save(markLog);
         }
         return new ResponseEntity(HttpStatus.OK);
     }

+ 8 - 10
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkSubjectApi.java

@@ -173,16 +173,14 @@ public class MarkSubjectApi {
     @GetMapping("/{markSubjectId}")
     public MarkSubject get(@PathVariable String markSubjectId) {
         MarkSubject markSubject = markSubjectRepo.findOne(markSubjectId);
-//        if (markSubject.getTest() == 0) {
-            int count = 0;
-            if (MarkStage.ROUGH_LEVEL.equals(markSubject.getStage())) {
-                count = markTaskRoughLevelRepo.countByWorkIdAndSubjectAndStage(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getStage());
-            } else if (MarkStage.LEVEL.equals(markSubject.getStage())) {
-                count = markTaskLevelRepo.countByWorkIdAndSubjectAndStage(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getStage());
-            }
-            markSubject.setFormal(count > 0);
-            markSubject.setRoughLevelEnable(ParamCache.levelConfigMap.get(String.valueOf(markSubject.getWorkId())).getRoughLevelEnable() == 1);
-//        }
+        int count = 0;
+        if (MarkStage.ROUGH_LEVEL.equals(markSubject.getStage())) {
+            count = markTaskRoughLevelRepo.countByWorkIdAndSubjectAndStageAndTest(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getStage(), TrialEnum.DEFAULT.getId());
+        } else if (MarkStage.LEVEL.equals(markSubject.getStage())) {
+            count = markTaskLevelRepo.countByWorkIdAndSubjectAndStageAndTest(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getStage(), TrialEnum.DEFAULT.getId());
+        }
+        markSubject.setFormal(count > 0);
+        markSubject.setRoughLevelEnable(ParamCache.levelConfigMap.get(String.valueOf(markSubject.getWorkId())).getRoughLevelEnable() == 1);
         return markSubject;
     }
 

+ 1 - 5
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkTaskApi.java

@@ -1,6 +1,5 @@
 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.domain.*;
@@ -60,9 +59,6 @@ public class MarkTaskApi {
     @Autowired
     private MarkSubjectRepo markSubjectRepo;
 
-    @Autowired
-    private LockService lockService;
-
     @Resource
     private MarkerGroupLeaderService markerGroupLeaderService;
 
@@ -151,7 +147,7 @@ public class MarkTaskApi {
     /**
      * 批量提交评卷任务
      *
-     * @param body 评卷内容
+     * @param body 评卷内容yoc
      */
     @RequestMapping(value = "/batch", method = RequestMethod.PATCH)
     public ResponseEntity batch(@RequestBody HashMap<String, String> body) {

+ 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);
+                    markingRoughLevelService.reject(paper, level, ranges, leaderConfirm, false);
                 } else if (MarkStage.LEVEL.equals(stage)) {
                     paper.setOneClick(false);
-                    markingLevelService.reject(paper, level, ranges, leaderConfirm);
+                    markingLevelService.reject(paper, level, ranges, leaderConfirm, false);
                 }
             }
         }
@@ -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);
+                            markingRoughLevelService.reject(paper, level, ranges, leaderConfirm, false);
                         } else if (MarkStage.LEVEL.equals(stage)) {
                             paper.setOneClick(false);
-                            markingLevelService.reject(paper, level, ranges, leaderConfirm);
+                            markingLevelService.reject(paper, level, ranges, leaderConfirm, false);
                         }
                     }
                 }

+ 209 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkLogService.java

@@ -0,0 +1,209 @@
+package cn.com.qmth.stmms.ms.marking.service;
+
+import cn.com.qmth.stmms.ms.commons.utils.ServletUtil;
+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;
+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;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.Optional;
+
+/**
+ * 日志Service
+ */
+@Service
+public class MarkLogService {
+
+    @Resource
+    private MarkUserRepo markUserRepo;
+
+    @Resource
+    private WorkRepo workRepo;
+
+    @Resource
+    private MarkLogRepo markLogRepo;
+
+    /**
+     * 粗分档正评、回评、档位打回回评日志
+     *
+     * @param markTask  任务
+     * @param levelCode 档位
+     */
+    public MarkLog markingRoughLevelLog(MarkTaskRoughLevel markTask, String levelCode) {
+        Work work = workRepo.findOne(markTask.getWorkId());
+        Paper paper = markTask.getPaper();
+        MarkLogOperType markLogOperType;
+        String operDateBefore = "-";
+        String operDateAfter;
+        MarkStage stage = MarkStage.ROUGH_LEVEL;
+        // 正评或者打回重评
+        if (markTask.getResult() == null) {
+            // 打回重评
+            if (markTask.isRejected()) {
+                // 细分档阶段改档打档
+                if (paper.isShift()) {
+                    stage = MarkStage.LEVEL;
+                    markLogOperType = MarkLogOperType.CHANGE_LEVEL;
+                } else {
+                    markLogOperType = MarkLogOperType.CALLBACK_ONCE_LEVEL;
+                }
+                operDateBefore = markTask.getOriginLevel();
+                operDateAfter = levelCode;
+            }
+            // 正评
+            else {
+                markLogOperType = MarkLogOperType.LEVEL;
+                operDateAfter = levelCode;
+            }
+        }
+        // 回评
+        else {
+            markLogOperType = MarkLogOperType.ONCE_LEVEl;
+            operDateBefore = markTask.getResult();
+            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());
+    }
+
+    /**
+     * 细分档正评、回评、档位打回回评日志
+     *
+     * @param markTask  任务
+     * @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 = "-";
+        String operDateAfter;
+        MarkStage stage = MarkStage.LEVEL;
+        if (markTask.getResult() == null) {
+            // 打回重评
+            if (markTask.isRejected()) {
+                if (roughLevelEnable) {
+                    // 细分档阶段改档打分
+                    if (!paper.isShift() && paper.isShiftScore()) {
+                        markLogOperType = MarkLogOperType.CHANGE_SCORE;
+                    }
+                } else {
+                    // 打分阶段改档打档
+                    if (paper.isShift()) {
+                        stage = MarkStage.SCORE;
+                        markLogOperType = MarkLogOperType.CHANGE_LEVEL;
+                    } else {
+                        markLogOperType = MarkLogOperType.CALLBACK_ONCE_LEVEL;
+                    }
+                }
+                operDateBefore = markTask.getOriginLevel();
+                operDateAfter = levelCode;
+
+            }
+            // 正评
+            else {
+                markLogOperType = MarkLogOperType.LEVEL;
+                operDateAfter = levelCode;
+            }
+        } else {
+            markLogOperType = MarkLogOperType.ONCE_LEVEl;
+            operDateBefore = markTask.getResult();
+            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());
+    }
+
+    /**
+     * 打分、回评打分、档位打回回评日志
+     *
+     * @param markTask 任务
+     * @param score    分数
+     */
+    public MarkLog markingScoreLog(MarkTaskScore markTask, int score) {
+        Work work = workRepo.findOne(markTask.getWorkId());
+        Paper paper = markTask.getPaper();
+        MarkLogOperType markLogOperType;
+        String operDateBefore = "-";
+        String operDateAfter;
+        if (markTask.getResult() == null) {
+            // 改档打分
+            if (!paper.isShift() && paper.isShiftScore()) {
+                markLogOperType = MarkLogOperType.CHANGE_SCORE;
+                operDateBefore = markTask.getOriginLevel();
+                operDateAfter = String.valueOf(score);
+            }
+            // 正评
+            else {
+                markLogOperType = MarkLogOperType.SCORE;
+                operDateAfter = String.valueOf(score);
+            }
+        } else {
+            markLogOperType = MarkLogOperType.ONCE_SCORE;
+            operDateBefore = markTask.getResult();
+            operDateAfter = String.valueOf(score);
+        }
+        return new MarkLog(markTask.getWorkId(), work.getName(), paper.getId(), markTask.getSubject(), MarkStage.SCORE, paper.getExamNumber(), paper.getStudentName(), markTask.getMarkerId(), markTask.getMarkerName(), Role.MARKER, markLogOperType.getId(), Optional.ofNullable(operDateBefore).orElse("-"), Optional.ofNullable(operDateAfter).orElse("-"), markLogOperType.getName(), new Date());
+    }
+
+    /**
+     * 科组长设置标准卷、一键定档
+     *
+     * @param stage    阶段
+     * @param paper    试卷
+     * @param level    档位
+     * @param isSample 是否标准卷
+     */
+    public MarkLog markingPaper(MarkStage stage, Paper paper, String level, boolean isSample) {
+        Work work = workRepo.findOne(paper.getWorkId());
+        Long userId = ServletUtil.getUserId();
+        MarkUser markUser = markUserRepo.findOne(userId);
+        MarkLogOperType markLogOperType = null;
+        String operDateBefore;
+        String operDateAfter;
+        // 标准卷
+        if (isSample) {
+            markLogOperType = MarkLogOperType.CRITERION_PAPER_SET;
+        }
+        // 一键定档
+        else {
+            markLogOperType = MarkLogOperType.ONE_CLICK_LEVEl;
+        }
+        if (MarkStage.ROUGH_LEVEL.equals(stage)) {
+            operDateBefore = paper.getRoughLevel();
+            operDateAfter = level;
+        } else if (MarkStage.LEVEL.equals(stage)) {
+            operDateBefore = paper.getLevel();
+            operDateAfter = level;
+        } else {
+            throw new RuntimeException("当前阶段不支持科组长操作");
+        }
+        return new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), paper.getSubject(), stage, paper.getExamNumber(), paper.getStudentName(), markUser.getId(), markUser.getName(), Role.MARK_LEADER, markLogOperType.getId(), Optional.ofNullable(operDateBefore).orElse("-"), Optional.ofNullable(operDateAfter).orElse("-"), markLogOperType.getName(), new Date());
+    }
+
+    /**
+     * 分档打回
+     *
+     * @param stage       阶段
+     * @param paper       试卷
+     * @param autoReject  是否自动打回
+     * @param markerId    评卷员id
+     * @param markerName  评卷员姓名
+     * @param originLevel 旧档位
+     */
+    public MarkLog markingPaperReject(MarkStage stage, Paper paper, boolean autoReject, Long markerId, String markerName, 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());
+    }
+
+}

+ 50 - 25
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingLevelService.java

@@ -2,9 +2,10 @@ package cn.com.qmth.stmms.ms.marking.service;
 
 import cn.com.qmth.stmms.ms.commons.constant.ArbitrateCallback;
 import cn.com.qmth.stmms.ms.commons.constant.ArbitrateResult;
+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.user.MarkUser;
+import cn.com.qmth.stmms.ms.core.domain.task.MarkTaskRoughLevel;
 import cn.com.qmth.stmms.ms.core.domain.user.Role;
 import cn.com.qmth.stmms.ms.core.repository.*;
 import com.alibaba.fastjson.JSONObject;
@@ -32,10 +33,10 @@ public class MarkingLevelService {
     private DetermineLevelService determineLevelService;
 
     @Resource
-    private MarkTaskLevelRepo markTaskLevelRepo;
+    private MarkTaskRoughLevelRepo markTaskRoughLevelRepo;
 
-    @Autowired
-    private MarkUserRepo markUserRepo;
+    @Resource
+    private MarkTaskLevelRepo markTaskLevelRepo;
 
     @Autowired
     private PaperRepo paperRepo;
@@ -76,6 +77,9 @@ public class MarkingLevelService {
     @Resource
     MarkingLevelService markingLevelService;
 
+    @Resource
+    MarkLogService markLogService;
+
     /**
      * 提交分档。如果每个评卷都提交了,则进行仲裁判定,如果没有触发仲裁就定档
      *
@@ -94,19 +98,20 @@ public class MarkingLevelService {
             return markTask;
         }
 
-        MarkUser maker = markUserRepo.findOne(markTask.getMarkerId());
-
         List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
         Level level = levels.stream().filter(m -> levelCode.equals(m.getCode())).findFirst().get();
 
+        MarkLog markLog = markLogService.markingLevelLog(markTask, levelCode);
+
         markTask.setResult(levelCode);
+        markTask.setOriginLevel(null);
         markTask.setLevelValue(level.getLevelValue());
         markTask.setRejected(false);
         markTask.setDeviationDirection(null);
         markTask.setUpdatedOn(new Date());
-        markTask.setMarkerName(maker.getName());
 
         markTaskLevelRepo.save(markTask);
+        markLogRepo.save(markLog);
 
         //判断该任务的试卷是否所有评卷员都评完,要进行仲裁判定或定档
         List<MarkTaskLevel> markTasks = markTaskLevelRepo.findByPaperId(paper.getId());
@@ -119,7 +124,7 @@ public class MarkingLevelService {
                 paper.determineLevel(determine.getResult());
                 paper.setMarkedLogic(false);
                 //档位落差值日志
-                levelsLog(markTasks, paper);
+//                levelsLog(markTasks, paper);
             }
             //仲裁
             else if (determine.getDeterType() == DetermineLevelService.DeterType.ARBITRATE) {
@@ -131,8 +136,28 @@ public class MarkingLevelService {
                 paper.setRejectedByLeader(true);
                 //需要打回的评卷员
                 String ranges = String.join(",", determine.getRejectTasks());
-                markingLevelService.reject(paper, null, ranges, true);
+                markingLevelService.reject(paper, null, ranges, true, true);
+            }
+
+            // 若开启了粗分档,细分档改档时,对应更新粗分档档位值,与细分档的匹配
+            boolean roughLevelEnable = ParamCache.levelConfigMap.get(String.valueOf(markTask.getWorkId())).getRoughLevelEnable() == 1;
+            if(roughLevelEnable){
+                Optional<Level> levelOptional = levels.stream().filter(m -> paper.getLevel().equals(m.getCode())).findFirst();
+                if(!levelOptional.isPresent()){
+                    throw new RuntimeException("分档档位值有误,未查询到档位【"+paper.getLevel()+"】");
+                }
+
+                String roughLevel = levelOptional.get().getRoughCode();
+                List<MarkTaskRoughLevel> markTaskRoughLevelList = markTaskRoughLevelRepo.findByPaperId(paper.getId());
+                for (MarkTaskRoughLevel markTaskRoughLevel : markTaskRoughLevelList) {
+                    markTaskRoughLevel.setResult(roughLevel);
+                    markTaskRoughLevel.setLevel(roughLevel);
+                }
+                markTaskRoughLevelRepo.save(markTaskRoughLevelList);
+
+                paper.setRoughLevel(roughLevel);
             }
+
             //改档后重新分档,状态改为false
             paper.setShift(false);
 //            paper.setShiftScore(false);
@@ -193,7 +218,7 @@ public class MarkingLevelService {
                             if (Objects.isNull(markLogPrev)) {//新建日志
                                 //加入档位落差值日志
                                 Work work = workRepo.findOne(paper.getWorkId());
-                                MarkLog markLog = new MarkLog(m.getMarkerId(), m.getMarkerName(), Role.MARKER, m.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.LEVEl_DIFFERENCE.getId(), paper.getWorkId(), paper.getId(), MarkStage.LEVEL, operResult, String.valueOf(d.getDistance()), jsonObject.toJSONString(), work.getName(), date);
+                                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), m.getSubject(), MarkStage.LEVEL, paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.LEVEl_DIFFERENCE.getId(), operResult, String.valueOf(d.getDistance()), jsonObject.toJSONString(), date);
                                 markLogRepo.save(markLog);
                             } else {//更新日志
                                 operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
@@ -207,7 +232,7 @@ public class MarkingLevelService {
                             if (Objects.isNull(markLogDevi)) {//新建日志
                                 //加入档位偏差值日志
                                 Work work = workRepo.findOne(paper.getWorkId());
-                                MarkLog markLog = new MarkLog(m.getMarkerId(), m.getMarkerName(), Role.MARKER, m.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.LEVEl_DEVIATION.getId(), paper.getWorkId(), paper.getId(), MarkStage.LEVEL, operResult, String.valueOf(d.getDeviation()), jsonObject.toJSONString(), work.getName(), date);
+                                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), m.getSubject(), MarkStage.LEVEL, paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.LEVEl_DEVIATION.getId(), operResult, String.valueOf(d.getDeviation()), jsonObject.toJSONString(), date);
                                 markLogRepo.save(markLog);
                             } else {//更新日志
                                 operResult = Optional.ofNullable(markLogDevi.getOperDataAfter()).orElse("-");
@@ -235,6 +260,8 @@ public class MarkingLevelService {
     public Paper levelMarkPaper(Paper paper, String level, boolean isSample) {
         List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
 
+        MarkLog markLog = markLogService.markingPaper(MarkStage.ROUGH_LEVEL, paper, level, isSample);
+
         paper.determineLevel(level);
         paper.setMarkByLeader(true);
         paper.setSample(isSample);
@@ -250,7 +277,8 @@ public class MarkingLevelService {
 
         paper.setSortNum(calcSortNum(paper, markTasks, levels));
         paperRepo.save(paper);
-        levelsLog(markTasks, paper);
+//        levelsLog(markTasks, paper);
+        markLogRepo.save(markLog);
         return paper;
     }
 
@@ -260,12 +288,14 @@ public class MarkingLevelService {
      * 更新评卷任务状态为打回
      * 如果评卷任务的档位和建议档位一致,不打回该任务
      *
-     * @param paper
-     * @param redoLevel 建议重评档位
-     * @param ranges
+     * @param paper         试卷
+     * @param redoLevel     建议重评档位
+     * @param ranges        打回评卷员id集合
+     * @param leaderConfirm 科组长是否需要确认
+     * @param autoReject    是否自动打回
      */
     @Transactional
-    public Paper reject(Paper paper, String redoLevel, String ranges, boolean leaderConfirm) {
+    public Paper reject(Paper paper, String redoLevel, String ranges, boolean leaderConfirm, boolean autoReject) {
         paper.reject(redoLevel);
         //科组长打回标记
         paper.setRejectedByLeader(true);
@@ -280,26 +310,21 @@ public class MarkingLevelService {
         Map<String, Integer> levelMap = levels.stream().collect(Collectors.toMap(Level::getCode, Level::getLevelValue));
 
         List<MarkLog> markLogList = new ArrayList<>();
-        Date date = new Date();
         for (MarkTaskLevel markTask : markTasks) {
             String[] range = ranges.split(",");
             if (range.length > 0) {
                 //加入手动打回日志
-                String operResult = "-";
                 for (String r : range) {
                     // 建议的档位与其中评委所评档位相同时就不打回给此评委
                     if (Objects.equals(String.valueOf(markTask.getMarkerId()), r) && (StringUtils.isBlank(redoLevel) || leaderConfirm || !redoLevel.equals(markTask.getResult()))) {
                         markTask.setRejected(true);
-                        markTask.setOriginLevel(markTask.getResult());
+                        if (markTask.getResult() != null) {
+                            markTask.setOriginLevel(markTask.getResult());
+                        }
                         markTask.setResult(null);
                         markTask.setLevel(null);
                         markTask.setDeviationDirection(calcDeviationDirection(levelMap, markTask.getOriginLevel(), redoLevel));
-                        MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markTask.getMarkerId(), MarkLogOperType.HANDLE_LEVEl.getId(), markTask.getSubject().toString(), paper.getExamNumber());
-                        if (Objects.nonNull(markLogPrev)) {
-                            operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
-                        }
-                        Work work = workRepo.findOne(paper.getWorkId());
-                        MarkLog markLog = new MarkLog(markTask.getMarkerId(), markTask.getMarkerName(), Role.MARKER, markTask.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.HANDLE_LEVEl.getId(), paper.getWorkId(), paper.getId(), MarkStage.LEVEL, operResult, markTask.getOriginLevel(), MarkLogOperType.HANDLE_LEVEl.getName(), work.getName(), date);
+                        MarkLog markLog = markLogService.markingPaperReject(MarkStage.LEVEL, paper, autoReject, markTask.getMarkerId(), markTask.getMarkerName(), markTask.getOriginLevel());
                         markLogList.add(markLog);
                     }
                 }

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

@@ -4,7 +4,6 @@ import cn.com.qmth.stmms.ms.commons.constant.ArbitrateCallback;
 import cn.com.qmth.stmms.ms.commons.constant.ArbitrateResult;
 import cn.com.qmth.stmms.ms.core.domain.*;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTaskRoughLevel;
-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.*;
 import com.alibaba.fastjson.JSONObject;
@@ -34,12 +33,6 @@ public class MarkingRoughLevelService {
     @Resource
     private MarkTaskRoughLevelRepo markTaskRoughLevelRepo;
 
-    @Resource
-    private MarkTaskLevelRepo markTaskLevelRepo;
-
-    @Autowired
-    private MarkUserRepo markUserRepo;
-
     @Autowired
     private PaperRepo paperRepo;
 
@@ -79,6 +72,9 @@ public class MarkingRoughLevelService {
     @Resource
     MarkingRoughLevelService markingRoughLevelService;
 
+    @Resource
+    MarkLogService markLogService;
+
     /**
      * 提交分档。如果每个评卷都提交了,则进行仲裁判定,如果没有触发仲裁就定档
      *
@@ -97,15 +93,17 @@ public class MarkingRoughLevelService {
             return markTask;
         }
 
-        MarkUser maker = markUserRepo.findOne(markTask.getMarkerId());
+        MarkLog markLog = markLogService.markingRoughLevelLog(markTask, levelCode);
+
         markTask.setResult(levelCode);
+        markTask.setOriginLevel(null);
         markTask.setLevelValue(Integer.valueOf(levelCode));
         markTask.setRejected(false);
         markTask.setDeviationDirection(null);
         markTask.setUpdatedOn(new Date());
-        markTask.setMarkerName(maker.getName());
 
         markTaskRoughLevelRepo.save(markTask);
+        markLogRepo.save(markLog);
 
         //判断该任务的试卷是否所有评卷员都评完,要进行仲裁判定或定档
         List<MarkTaskRoughLevel> markTasks = markTaskRoughLevelRepo.findByPaperId(paper.getId());
@@ -131,7 +129,7 @@ public class MarkingRoughLevelService {
                 paper.setRejectedByLeader(true);
                 //需要打回的评卷员
                 String ranges = String.join(",", determine.getRejectTasks());
-                markingRoughLevelService.reject(paper, null, ranges, true);
+                markingRoughLevelService.reject(paper, null, ranges, true, true);
             }
             //改档后重新分档,状态改为false
             paper.setShift(false);
@@ -192,7 +190,7 @@ public class MarkingRoughLevelService {
                             if (Objects.isNull(markLogPrev)) {//新建日志
                                 //加入档位落差值日志
                                 Work work = workRepo.findOne(paper.getWorkId());
-                                MarkLog markLog = new MarkLog(m.getMarkerId(), m.getMarkerName(), Role.MARKER, m.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.LEVEl_DIFFERENCE.getId(), paper.getWorkId(), paper.getId(), MarkStage.LEVEL, operResult, String.valueOf(d.getDistance()), jsonObject.toJSONString(), work.getName(), date);
+                                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), m.getSubject(), MarkStage.LEVEL, paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.LEVEl_DIFFERENCE.getId(), operResult, String.valueOf(d.getDistance()), jsonObject.toJSONString(), date);
                                 markLogRepo.save(markLog);
                             } else {//更新日志
                                 operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
@@ -206,7 +204,7 @@ public class MarkingRoughLevelService {
                             if (Objects.isNull(markLogDevi)) {//新建日志
                                 //加入档位偏差值日志
                                 Work work = workRepo.findOne(paper.getWorkId());
-                                MarkLog markLog = new MarkLog(m.getMarkerId(), m.getMarkerName(), Role.MARKER, m.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.LEVEl_DEVIATION.getId(), paper.getWorkId(), paper.getId(), MarkStage.LEVEL, operResult, String.valueOf(d.getDeviation()), jsonObject.toJSONString(), work.getName(), date);
+                                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), m.getSubject(), MarkStage.LEVEL, paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.LEVEl_DEVIATION.getId(), operResult, String.valueOf(d.getDeviation()), jsonObject.toJSONString(), date);
                                 markLogRepo.save(markLog);
                             } else {//更新日志
                                 operResult = Optional.ofNullable(markLogDevi.getOperDataAfter()).orElse("-");
@@ -234,6 +232,8 @@ public class MarkingRoughLevelService {
     public Paper levelMarkPaper(Paper paper, String level, boolean isSample) {
         List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
 
+        MarkLog markLog = markLogService.markingPaper(MarkStage.ROUGH_LEVEL, paper, level, isSample);
+
         paper.determineRoughLevel(level);
         paper.setMarkByLeader(true);
         paper.setRoughSample(isSample);
@@ -249,7 +249,8 @@ public class MarkingRoughLevelService {
 
         paper.setSortNum(calcSortNum(paper, markTasks, levels));
         paperRepo.save(paper);
-        levelsLog(markTasks, paper);
+//        levelsLog(markTasks, paper);
+        markLogRepo.save(markLog);
         return paper;
     }
 
@@ -259,12 +260,12 @@ public class MarkingRoughLevelService {
      * 更新评卷任务状态为打回
      * 如果评卷任务的档位和建议档位一致,不打回该任务
      *
-     * @param paper
+     * @param paper     打回试卷
      * @param redoLevel 建议重评档位
-     * @param ranges
+     * @param ranges    打回评卷员ID集合
      */
     @Transactional
-    public Paper reject(Paper paper, String redoLevel, String ranges, boolean leaderConfirm) {
+    public Paper reject(Paper paper, String redoLevel, String ranges, boolean leaderConfirm, boolean autoReject) {
         paper.roughReject(redoLevel);
         //科组长打回标记
         paper.setRejectedByLeader(true);
@@ -275,26 +276,21 @@ public class MarkingRoughLevelService {
         List<MarkTaskRoughLevel> markTasks = markTaskRoughLevelRepo.findByPaperId(paper.getId());
 
         List<MarkLog> markLogList = new ArrayList<>();
-        Date date = new Date();
         for (MarkTaskRoughLevel markTask : markTasks) {
             String[] range = ranges.split(",");
             if (range.length > 0) {
                 //加入手动打回日志
-                String operResult = "-";
                 for (String r : range) {
                     // 建议的档位与其中评委所评档位相同时就不打回给此评委
                     if (Objects.equals(String.valueOf(markTask.getMarkerId()), r) && (StringUtils.isBlank(redoLevel) || leaderConfirm || !redoLevel.equals(markTask.getResult()))) {
                         markTask.setRejected(true);
-                        markTask.setOriginLevel(markTask.getResult());
+                        if (markTask.getResult() != null) {
+                            markTask.setOriginLevel(markTask.getResult());
+                        }
                         markTask.setResult(null);
                         markTask.setLevel(null);
                         markTask.setDeviationDirection(calcDeviationDirection(markTask.getOriginLevel(), redoLevel));
-                        MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markTask.getMarkerId(), MarkLogOperType.HANDLE_LEVEl.getId(), markTask.getSubject().toString(), paper.getExamNumber());
-                        if (Objects.nonNull(markLogPrev)) {
-                            operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
-                        }
-                        Work work = workRepo.findOne(paper.getWorkId());
-                        MarkLog markLog = new MarkLog(markTask.getMarkerId(), markTask.getMarkerName(), Role.MARKER, markTask.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.HANDLE_LEVEl.getId(), paper.getWorkId(), paper.getId(), MarkStage.LEVEL, operResult, markTask.getOriginLevel(), MarkLogOperType.HANDLE_LEVEl.getName(), work.getName(), date);
+                        MarkLog markLog = markLogService.markingPaperReject(MarkStage.ROUGH_LEVEL, paper, autoReject, markTask.getMarkerId(), markTask.getMarkerName(), markTask.getOriginLevel());
                         markLogList.add(markLog);
                     }
                 }

+ 9 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingScoreService.java

@@ -3,6 +3,7 @@ package cn.com.qmth.stmms.ms.marking.service;
 import cn.com.qmth.stmms.ms.commons.constant.ArbitrateCallback;
 import cn.com.qmth.stmms.ms.core.cache.CacheService;
 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.Paper;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTaskScore;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
@@ -61,6 +62,9 @@ public class MarkingScoreService {
     @Autowired
     AssignTaskService assignTaskService;
 
+    @Resource
+    MarkLogService markLogService;
+
 
     /**
      * 打分。取出组内所有评分,如果都给了分,取平均分更新试卷成绩
@@ -70,11 +74,16 @@ public class MarkingScoreService {
      */
     @Transactional
     public MarkTaskScore scoring(MarkTaskScore markTask, int score) {
+        MarkLog markLog = markLogService.markingScoreLog(markTask, score);
+
+        markTask.setOriginLevel(null);
         markTask.setResult(String.valueOf(score));
         markTask.setUpdatedOn(new Date());
         MarkUser maker = markUserRepo.findOne(markTask.getMarkerId());
         markTask.setMarkerName(maker.getName());
         markTaskScoreRepo.save(markTask);
+        markLogRepo.save(markLog);
+
         Paper paper = markTask.getPaper();
         List<MarkTaskScore> markTasks = markTaskScoreRepo.findByPaperId(paper.getId());
         long leftCount = markTasks.stream().filter(i -> i.getResult() == null).count();