Ver código fonte

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

xiaof 2 anos atrás
pai
commit
1c95a5b7c1

+ 15 - 6
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/QualityAnalyseController.java

@@ -1,9 +1,11 @@
 package cn.com.qmth.stmms.ms.admin.api;
 
+import cn.com.qmth.stmms.ms.commons.utils.DigitalToChineseUtil;
 import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
 import cn.com.qmth.stmms.ms.core.domain.Level;
 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.RoughLevel;
 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.repository.LevelRepo;
@@ -11,6 +13,7 @@ import cn.com.qmth.stmms.ms.core.repository.MarkTaskLevelRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkTaskRoughLevelRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
+import cn.com.qmth.stmms.ms.marking.service.DetermineRoughLevelService;
 import cn.com.qmth.stmms.ms.marking.service.MarkerGroupLeaderService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -77,6 +80,12 @@ public class QualityAnalyseController {
         stage = Objects.isNull(stage) ? MarkStage.LEVEL : stage;
         List fList = new ArrayList();
         List<Level> levels = levelRepo.findByWorkId(workId);
+        Map<String, String> codesMap = levels.stream().collect(Collectors.toMap(Level::getCode, Level::getCode));
+        if (MarkStage.ROUGH_LEVEL.equals(stage)) {
+            List<RoughLevel> roughLevels = DetermineRoughLevelService.parseRoughLevels(levels);
+            codesMap = roughLevels.stream().collect(Collectors.toMap(RoughLevel::getRoughCode, m-> DigitalToChineseUtil.int2chineseNum(Integer.parseInt(m.getRoughCode()))));
+        }
+
         List<Long> markerIds = markerGroupLeaderService.listByWorkIdAndSubjectAndStageAndGroupId(workId, subject, stage, groupId);
         String markerId = null;
         if (!CollectionUtils.isEmpty(markerIds)) {
@@ -84,12 +93,12 @@ public class QualityAnalyseController {
         }
         String finalMarkerId = markerId;
         MarkStage finalStage = stage;
-        levels.forEach(l -> {
+        for (Map.Entry<String, String> entry : codesMap.entrySet()) {
             StringBuffer sql = new StringBuffer();
             sql.append("  SELECT                                                        ");
             sql.append("      mu.id markerId,                                           ");
             sql.append("      mu.login_name markerName,                                       ");
-            sql.append("      SUM(IF(mt.result = '" + l.getCode() + "', 1, 0)) levelCount,  ");
+            sql.append("      SUM(IF(mt.result = '" + entry.getKey() + "', 1, 0)) levelCount,  ");
             sql.append("      COUNT(1) total                                            ");
             sql.append("  FROM                                                          ");
             sql.append("      mark_user mu                                              ");
@@ -132,7 +141,7 @@ public class QualityAnalyseController {
             List list = sqlUtil.execSqlForMap(sql.toString());
             Map map = new HashMap();
             List<Map> data = new ArrayList();
-            map.put("name", l.getCode());
+            map.put("name", entry.getValue());
             for (Object o : list) {
                 Map m = (Map) o;
                 //该档任务数
@@ -152,7 +161,7 @@ public class QualityAnalyseController {
             Collections.sort(data, Comparator.comparing(o -> o.get("markerId").toString()));
             map.put("data", data);
             fList.add(map);
-        });
+        }
         return fList;
     }
 
@@ -202,7 +211,7 @@ public class QualityAnalyseController {
                 Map<Long, String> markerMap = markTasks.stream().collect(Collectors.toMap(MarkTaskRoughLevel::getMarkerId, MarkTaskRoughLevel::getMarkerName, (dto1, dto2) -> dto1));
                 List<Long> markerIdList = markerMap.entrySet().stream().map(Map.Entry::getKey).collect(Collectors.toList());
                 Object o = StringUtils.join(markerIdList.toArray(), ",");
-                String sql = new StringBuffer("select mu.login_name as userName, count(t.create_user_id) as sumCount,t.create_user_id as userId from mark_log t left join mark_user mu on t.create_user_id = mu.id where t.stage = ").append(stage.ordinal()).append(" and t.oper_type BETWEEN ").append(MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId()).append(" and ").append(MarkLogOperType.HANDLE_LEVEl.getId()).append(" and t.create_user_id in (").append(o).append(")").toString();
+                String sql = new StringBuffer("select mu.login_name as userName, count(t.create_user_id) as sumCount,t.create_user_id as userId from mark_log t left join mark_user mu on t.create_user_id = mu.id where t.stage = ").append(stage.ordinal()).append(" and t.oper_type in (").append(MarkLogOperType.CALLBACK_LEVEl.getId()).append(",").append(MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId()).append(") and t.create_user_id in (").append(o).append(")").toString();
                 if (Objects.nonNull(startTime)) {
                     sql = sqlUtil.sqlConditionAnd(sql, new String[]{"t.create_time"}, new String[]{startTime}, new String[]{">="});
                 }
@@ -238,7 +247,7 @@ public class QualityAnalyseController {
                 Map<Long, String> markerMap = markTasks.stream().collect(Collectors.toMap(MarkTaskLevel::getMarkerId, MarkTaskLevel::getMarkerName, (dto1, dto2) -> dto1));
                 List<Long> markerIdList = markerMap.entrySet().stream().map(Map.Entry::getKey).collect(Collectors.toList());
                 Object o = StringUtils.join(markerIdList.toArray(), ",");
-                String sql = new StringBuffer("select mu.login_name as userName, count(t.create_user_id) as sumCount,t.create_user_id as userId from mark_log t left join mark_user mu on t.create_user_id = mu.id where t.stage = ").append(stage.ordinal()).append(" and  t.oper_type BETWEEN ").append(MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId()).append(" and ").append(MarkLogOperType.HANDLE_LEVEl.getId()).append(" and t.create_user_id in (").append(o).append(")").toString();
+                String sql = new StringBuffer("select mu.login_name as userName, count(t.create_user_id) as sumCount,t.create_user_id as userId from mark_log t left join mark_user mu on t.create_user_id = mu.id where t.stage = ").append(stage.ordinal()).append(" and  t.oper_type in (").append(MarkLogOperType.CALLBACK_LEVEl.getId()).append(",").append(MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId()).append(") and t.create_user_id in (").append(o).append(")").toString();
                 if (Objects.nonNull(startTime)) {
                     sql = sqlUtil.sqlConditionAnd(sql, new String[]{"t.create_time"}, new String[]{startTime}, new String[]{">="});
                 }

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

@@ -123,7 +123,7 @@ public class ToolService {
                 }
 
                 // 记录日志
-                MarkLog markLog = new MarkLog(workId, work.getName(), paper.getId(), subject, MarkStage.LEVEL, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), 0L, "admin", Role.ADMIN, MarkLogOperType.SYSTEM_ADJUST_LEVEL.getId(), paper.getLevel(), level, "系统批量调档", new Date());
+                MarkLog markLog = new MarkLog(workId, work.getName(), paper.getId(), subject, MarkStage.LEVEL, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), 0L, "admin", Role.ADMIN, MarkLogOperType.SYSTEM_ADJUST_LEVEL.getId(),MarkLogOperType.SYSTEM_ADJUST_LEVEL.getName(), paper.getLevel(), level, "系统批量调档", new Date());
                 markLogs.add(markLog);
 
                 // 有档位变动的试卷

+ 94 - 0
stmms-ms-commons/src/main/java/cn/com/qmth/stmms/ms/commons/utils/DigitalToChineseUtil.java

@@ -0,0 +1,94 @@
+package cn.com.qmth.stmms.ms.commons.utils;
+
+import java.math.BigDecimal;
+
+public class DigitalToChineseUtil {
+
+    private DigitalToChineseUtil() {
+    }
+
+    /**
+     * 中文数字
+     */
+    private static final String[] CN_NUM = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
+
+    /**
+     * 中文数字单位
+     */
+    private static final String[] CN_UNIT = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千"};
+
+    /**
+     * 特殊字符:负
+     */
+    private static final String CN_NEGATIVE = "负";
+
+    /**
+     * 特殊字符:点
+     */
+    private static final String CN_POINT = "点";
+
+    /**
+     * int 转 中文数字
+     * 支持到int最大值
+     *
+     * @param intNum 要转换的整型数
+     * @return 中文数字
+     */
+    public static String int2chineseNum(int intNum) {
+        StringBuffer sb = new StringBuffer();
+        boolean isNegative = false;
+        if (intNum < 0) {
+            isNegative = true;
+            intNum *= -1;
+        }
+        int count = 0;
+        while (intNum > 0) {
+            sb.insert(0, CN_NUM[intNum % 10] + CN_UNIT[count]);
+            intNum = intNum / 10;
+            count++;
+        }
+        if (isNegative) {
+            sb.insert(0, CN_NEGATIVE);
+        }
+        return sb.toString().replaceAll("零[千百十]", "零").replaceAll("零+万", "万")
+                .replaceAll("零+亿", "亿").replaceAll("亿万", "亿零")
+                .replaceAll("零+", "零").replaceAll("零$", "");
+    }
+
+    /**
+     * bigDecimal 转 中文数字
+     * 整数部分只支持到int的最大值
+     *
+     * @param bigDecimalNum 要转换的BigDecimal数
+     * @return 中文数字
+     */
+    public static String bigDecimal2chineseNum(BigDecimal bigDecimalNum) {
+        if (bigDecimalNum == null) {
+            return CN_NUM[0];
+        }
+        StringBuffer sb = new StringBuffer();
+
+        //将小数点后面的零给去除
+        String numStr = bigDecimalNum.abs().stripTrailingZeros().toPlainString();
+        String[] split = numStr.split("\\.");
+        String integerStr = int2chineseNum(Integer.parseInt(split[0]));
+        sb.append(integerStr);
+        //如果传入的数有小数,则进行切割,将整数与小数部分分离
+        if (split.length == 2) {
+            //有小数部分
+            sb.append(CN_POINT);
+            String decimalStr = split[1];
+            char[] chars = decimalStr.toCharArray();
+            for (int i = 0; i < chars.length; i++) {
+                int index = Integer.parseInt(String.valueOf(chars[i]));
+                sb.append(CN_NUM[index]);
+            }
+        }
+        //判断传入数字为正数还是负数
+        int signum = bigDecimalNum.signum();
+        if (signum == -1) {
+            sb.insert(0, CN_NEGATIVE);
+        }
+        return sb.toString();
+    }
+}

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

@@ -1,5 +1,6 @@
 package cn.com.qmth.stmms.ms.core.domain;
 
+import cn.com.qmth.stmms.ms.core.cache.ParamCache;
 import cn.com.qmth.stmms.ms.core.domain.user.Role;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -47,6 +48,8 @@ public class MarkLog implements Serializable {
     @NotNull
 //    @ApiModelProperty(value = "操作类型,1:分档,2:打分,3:回评档位,4:回评分数,5:档位打回,6:档位打回回评,7:一键定档,8:标准卷设置", example = "2")
     private Integer operType;
+
+    private String operName;
     //    @ApiModelProperty(value = "操作前数据")
     private String operDataBefore;
     //    @ApiModelProperty(value = "操作后数据")
@@ -88,7 +91,7 @@ public class MarkLog implements Serializable {
 
     public MarkLog(Long workId, String workName, Long paperId, Subject subject, MarkStage stage, int test,
                    String examNumber, String studentName, Long createUserId, String createUserName, Role createRole,
-                   Integer operType, String operDataBefore, String operDataAfter, String remark, Date date) {
+                   Integer operType, String operName, String operDataBefore, String operDataAfter, String remark, Date date) {
         this.workId = workId;
         this.workName = workName;
         this.paperId = paperId;
@@ -101,10 +104,21 @@ public class MarkLog implements Serializable {
         this.createUserName = createUserName;
         this.createRole = createRole.getName();
         this.operType = operType;
+        this.operName = operName;
         this.operDataAfter = operDataAfter;
         this.operDataBefore = operDataBefore;
         this.remark = remark;
         this.createTime = date;
+        boolean roughLevelEnable = ParamCache.levelConfigMap.get(String.valueOf(workId)).getRoughLevelEnable() == 1;
+        if (MarkStage.ROUGH_LEVEL.equals(stage)) {
+            this.stageName = "粗分档阶段";
+        } else if (MarkStage.LEVEL.equals(stage)) {
+            this.stageName = roughLevelEnable ? "细分档阶段" : "分档阶段";
+        } else if (MarkStage.SCORE.equals(stage)) {
+            this.stageName = "打分阶段";
+        } else {
+            this.stageName = "无";
+        }
     }
 
     public static long getSerialVersionUID() {
@@ -200,6 +214,16 @@ public class MarkLog implements Serializable {
         this.operType = operType;
     }
 
+    @Basic
+    @Column(name = "oper_name")
+    public String getOperName() {
+        return operName;
+    }
+
+    public void setOperName(String operName) {
+        this.operName = operName;
+    }
+
     @Basic
     @Column(name = "oper_data_before")
     public String getOperDataBefore() {

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

@@ -104,7 +104,11 @@ public enum MarkLogOperType {
     /**
      * 改档打档
      */
-    SYSTEM_ADJUST_LEVEL(19, "系统调档");
+    SYSTEM_ADJUST_LEVEL(19, "系统调档"),
+    /**
+     * 改档打档
+     */
+    CANCEL_SAMPLE(20, "取消标准卷");
 
     private int id;
 
@@ -174,6 +178,8 @@ public enum MarkLogOperType {
             return CHANGE_SCORE.getId();
         } else if (value.trim().equals(SYSTEM_ADJUST_LEVEL.name)) {
             return SYSTEM_ADJUST_LEVEL.getId();
+        } else if (value.trim().equals(CANCEL_SAMPLE.name)) {
+            return CANCEL_SAMPLE.getId();
         } else {
             return CRITERION_PAPER_SET.getId();
         }
@@ -222,6 +228,8 @@ public enum MarkLogOperType {
             return CHANGE_SCORE.name;
         } else if (id == SYSTEM_ADJUST_LEVEL.getId()) {
             return SYSTEM_ADJUST_LEVEL.name;
+        } else if (id == CANCEL_SAMPLE.getId()) {
+            return CANCEL_SAMPLE.name;
         } else {
             return CRITERION_PAPER_SET.name;
         }
@@ -234,7 +242,7 @@ public enum MarkLogOperType {
      */
     public static List<Map> listTypes() {
         MarkLogOperType[] values = MarkLogOperType.values();
-        Integer[] ints = {1, 2, 3, 4, 5, 6, 7, 8, 10, 15, 16, 17, 18, 19};
+        Integer[] ints = {1, 2, 3, 4, 5, 6, 7, 8, 10, 15, 16, 17, 18, 19, 20};
         List<Integer> intList = Arrays.asList(ints);
         List<Map> list = new ArrayList<>();
         for (MarkLogOperType value : values) {

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

@@ -33,7 +33,7 @@ public interface MarkLogRepo extends JpaRepository<MarkLog, Long>, JpaSpecificat
      * @param examNumber
      * @return
      */
-    public MarkLog findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(Long createUserId, Integer operType, String subject, String examNumber);
+    public MarkLog findTopByCreateUserIdAndStageAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(Long createUserId, MarkStage stage, Integer operType, String subject, String examNumber);
 
     List<MarkLog> findByCreateUserId(Long userId);
 
@@ -49,11 +49,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);
-
     void deleteByWorkIdAndSubjectAndStage(Long workId, String name, MarkStage stage);
 
-    @Modifying
-    @Query("delete from MarkLog m where m.workId = ?1 and m.subject = ?2 and m.stage = ?3 and m.test = ?4 and m.operType = ?5")
-    void deleteByWorkIdAndSubjectAndStageAndTestAndOperType(Long workId, String subject, MarkStage stage, int test, int operType);
 }

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

@@ -19,6 +19,8 @@ public interface MarkTaskLevelRepo extends JpaRepository<MarkTaskLevel, Long>, J
 
     int countByMarkerIdAndPaperIdAndWorkIdAndRandomSeqNew(Long markerId, Long paperId, Long randomSeqNew, Long workId);
 
+    List<MarkTaskLevel> findByWorkIdAndPaperIdAndStage(Long workId, Long paperId, MarkStage stage);
+
     /**
      * 查询指定阶段试卷的评卷任务
      *

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

@@ -19,6 +19,8 @@ public interface MarkTaskRoughLevelRepo extends JpaRepository<MarkTaskRoughLevel
 
     int countByMarkerIdAndPaperIdAndWorkIdAndRandomSeqNew(Long markerId, Long paperId, Long randomSeqNew, Long workId);
 
+    List<MarkTaskRoughLevel> findByWorkIdAndPaperIdAndStage(Long workId, Long paperId, MarkStage stage);
+
     @Query(value = "select new MarkTaskRoughLevel(m.id, m.markerId , m.markerName, m.result, m.secretNumber, m.stage) from MarkTaskRoughLevel m where m.paper.id = ?1 and m.stage = ?2")
     List<MarkTaskRoughLevel> findByPaperIdAndStageNative(Long id, MarkStage stage);
 

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

@@ -138,6 +138,7 @@ public class MarkLogAop {
 //        Paper paper = JSONObject.parseObject(((JSONObject) jsonArgsArray.get(0)).toJSONString(), Paper.class);
         JSONObject jsonObjectResult = (JSONObject) jsonArgsArray.get(0);
         String paperIds = (String) jsonObjectResult.get("paperIds");
+        MarkStage stage = MarkStage.valueOf((String) jsonObjectResult.get("stage"));
         if (paperIds.length() > 0) {
             String[] ids = paperIds.split(",");
             Date date = new Date();
@@ -146,27 +147,31 @@ public class MarkLogAop {
 
                 String action = null;
                 Integer operType = null;
+                String operName = null;
                 String originLevel = null;
                 if (Objects.nonNull(jsonObjectResult) && Objects.nonNull(jsonObjectResult.get(ACTION))) {
                     action = (String) jsonObjectResult.get(ACTION);
                     if (Objects.equals(SAMPLING, action)) {
                         //标准卷设置
                         operType = MarkLogOperType.CRITERION_PAPER_SET.getId();
+                        operName = MarkLogOperType.CRITERION_PAPER_SET.getName();
                         paper.setOneClick(false);
                     } else if (Objects.equals(LEVELING, action)) {
                         //定档设置
                         operType = MarkLogOperType.ONE_CLICK_LEVEl.getId();
+                        operName = MarkLogOperType.ONE_CLICK_LEVEl.getName();
                         //原始档位
                         originLevel = Objects.nonNull(jsonObjectResult.get("originLevel")) ? (String) jsonObjectResult.get("originLevel") : null;
                         paper.setOneClick(true);
                     } else if (Objects.equals(REJECT, action)) {
                         //档位打回设置
                         operType = MarkLogOperType.CALLBACK_LEVEl.getId();
+                        operName = MarkLogOperType.CALLBACK_LEVEl.getName();
                         paper.setOneClick(false);
                     }
                 }
                 //标准卷设置、定档设置、档位打回start
-                MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), operType, markUser.getSubject().toString(), paper.getExamNumber());
+                MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndStageAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), stage, operType, markUser.getSubject().toString(), paper.getExamNumber());
                 String operResult = DEFAULT_RESULT;
                 if (Objects.nonNull(markLogPrev)) {
                     operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse(DEFAULT_RESULT);
@@ -176,7 +181,7 @@ public class MarkLogAop {
                     operResult = originLevel;
                 }
                 Work work = workRepo.findOne(paper.getWorkId());
-                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), markUser.getSubject(), MarkStage.LEVEL, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), markUser.getId(), markUser.getName(), markUser.getRole(), operType, operResult, String.valueOf(jsonObjectResult.get(LEVEL)), null, date);
+                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), markUser.getSubject(), MarkStage.LEVEL, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), markUser.getId(), markUser.getName(), markUser.getRole(), operType, operName, operResult, String.valueOf(jsonObjectResult.get(LEVEL)), null, date);
                 LOGGER.info("markLog:{}", JSONObject.toJSONString(markLog));
                 //标准卷设置、定档设置、档位打回end
                 markLogRepo.save(markLog);
@@ -228,6 +233,7 @@ public class MarkLogAop {
 
         LOGGER.info("markTaskId:{},paper:{},jsonObjectResult:{}", markTaskId, paper, jsonObjectResult);
         Integer operType = MarkLogOperType.LEVEL.getId();//分档,第一次为分档,之后为回评档位,档位打回后为档位打回回评
+        String operName = MarkLogOperType.LEVEL.getName();
         //分档、打分、回评档位、回评分数、档位打回回评start
 
         if (markStage.ordinal() == 1 && paper.isMarkByLeader()) {//分档,如果已经有科组长定档,则不允许评卷员再分档
@@ -235,58 +241,67 @@ public class MarkLogAop {
         } else if ((markStage.ordinal() == 1 || markStage.ordinal() == 2) && oldRejected && !isRejected) {//档位打回回评
             if (oldShift) {
                 operType = MarkLogOperType.CHANGE_LEVEL.getId();
+                operName = MarkLogOperType.CHANGE_LEVEL.getName();
             } else {
                 operType = MarkLogOperType.CALLBACK_ONCE_LEVEL.getId();
+                operName = MarkLogOperType.CALLBACK_ONCE_LEVEL.getName();
             }
         } else if (markStage.ordinal() == 3) {//打分
             if (oldShiftScore) {
                 operType = MarkLogOperType.CHANGE_SCORE.getId();
+                operName = MarkLogOperType.CHANGE_SCORE.getName();
             } else {
                 operType = MarkLogOperType.SCORE.getId();
+                operName = MarkLogOperType.SCORE.getName();
             }
         }
         //先查是否有档位或分数打回
         String operResult = DEFAULT_RESULT;
         if (markStage.ordinal() == 1) {//分档
             //先查是否有档位打回回评的数据
-            MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), MarkLogOperType.CALLBACK_ONCE_LEVEL.getId(), markUser.getSubject().toString(), paper.getExamNumber());
+            MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndStageAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), markStage, MarkLogOperType.CALLBACK_ONCE_LEVEL.getId(), markUser.getSubject().toString(), paper.getExamNumber());
             if (Objects.isNull(markLogPrev)) {//如果为null,则再查分档和回评档位
                 if (oldRejected && !isRejected) {//档位打回
                     if (oldShift) {
                         operType = MarkLogOperType.CHANGE_LEVEL.getId();
+                        operName = MarkLogOperType.CHANGE_LEVEL.getName();
                     } else {
                         operType = MarkLogOperType.CALLBACK_ONCE_LEVEL.getId();
+                        operName = MarkLogOperType.CALLBACK_ONCE_LEVEL.getName();
                     }
                 } else {
                     operType = selectOperType(markUser.getId(), MarkLogOperType.LEVEL.getId(), MarkLogOperType.ONCE_LEVEl.getId(), markUser.getSubject().toString(), paper.getExamNumber());
-                    markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), operType, markUser.getSubject().toString(), paper.getExamNumber());
+                    operName = MarkLogOperType.convertToName(operType);
+                    markLogPrev = markLogRepo.findTopByCreateUserIdAndStageAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), markStage, operType, markUser.getSubject().toString(), paper.getExamNumber());
                     if (Objects.nonNull(markLogPrev)) {
                         operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse(DEFAULT_RESULT);
                     } else {
                         if (operType != MarkLogOperType.LEVEL.getId()) {
-                            markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), MarkLogOperType.LEVEL.getId(), markUser.getSubject().toString(), paper.getExamNumber());
+                            markLogPrev = markLogRepo.findTopByCreateUserIdAndStageAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), markStage, MarkLogOperType.LEVEL.getId(), markUser.getSubject().toString(), paper.getExamNumber());
                             operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse(DEFAULT_RESULT);
                         }
                     }
                 }
             } else {
                 operType = MarkLogOperType.CALLBACK_ONCE_LEVEL.getId();//档位打回
+                operName = MarkLogOperType.CALLBACK_ONCE_LEVEL.getName();//档位打回
                 operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse(DEFAULT_RESULT);
             }
         } else if (markStage.ordinal() == 2 && !oldShiftScore) {//打分
             operType = selectOperType(markUser.getId(), MarkLogOperType.SCORE.getId(), MarkLogOperType.ONCE_SCORE.getId(), markUser.getSubject().toString(), paper.getExamNumber());
-            MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), operType, markUser.getSubject().toString(), paper.getExamNumber());
+            operName = MarkLogOperType.convertToName(operType);
+            MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndStageAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), markStage, operType, markUser.getSubject().toString(), paper.getExamNumber());
             if (Objects.nonNull(markLogPrev)) {
                 operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse(DEFAULT_RESULT);
             } else {
                 if (operType != MarkLogOperType.SCORE.getId()) {
-                    markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), MarkLogOperType.SCORE.getId(), markUser.getSubject().toString(), paper.getExamNumber());
+                    markLogPrev = markLogRepo.findTopByCreateUserIdAndStageAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markUser.getId(), markStage, MarkLogOperType.SCORE.getId(), markUser.getSubject().toString(), paper.getExamNumber());
                     operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse(DEFAULT_RESULT);
                 }
             }
         }
         Work work = workRepo.findOne(paper.getWorkId());
-        MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), markUser.getSubject(), markStage, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), markUser.getId(), markUser.getName(), markUser.getRole(), operType, operResult, String.valueOf(jsonObjectResult.get(RESULT)), null, new Date());
+        MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), markUser.getSubject(), markStage, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), markUser.getId(), markUser.getName(), markUser.getRole(), operType, operName, operResult, String.valueOf(jsonObjectResult.get(RESULT)), null, new Date());
         LOGGER.info("markLog:{}", JSONObject.toJSONString(markLog));
         //分档、打分、回评档位、回评分数、档位打回、档位打回回评end
         markLogRepo.save(markLog);
@@ -353,12 +368,12 @@ public class MarkLogAop {
                                 m.setOriginLevel(m.getResult());
                                 m.setResult(null);
                                 m.setLevel(null);
-                                MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(m.getMarkerId(), MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId(), m.getSubject().toString(), paper.getExamNumber());
+                                MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndStageAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(m.getMarkerId(), m.getStage(), MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId(), m.getSubject().toString(), paper.getExamNumber());
                                 if (Objects.nonNull(markLogPrev)) {
                                     operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
                                 }
                                 //加入打回日志
-                                MarkLog markLog = new MarkLog(paper.getWorkId(), workName, paper.getId(), m.getSubject(), m.getStage(), m.getTest(), 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);
+                                MarkLog markLog = new MarkLog(paper.getWorkId(), workName, paper.getId(), m.getSubject(), m.getStage(), m.getTest(), paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId(), MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getName(), operResult, String.valueOf(d.getC()), null, date);
                                 markLogList.add(markLog);
                             }
                         }
@@ -417,12 +432,12 @@ public class MarkLogAop {
                                 m.setOriginLevel(m.getResult());
                                 m.setResult(null);
                                 m.setLevel(null);
-                                MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(m.getMarkerId(), MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId(), m.getSubject().toString(), paper.getExamNumber());
+                                MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndStageAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(m.getMarkerId(), m.getStage(), MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId(), m.getSubject().toString(), paper.getExamNumber());
                                 if (Objects.nonNull(markLogPrev)) {
                                     operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
                                 }
                                 //加入打回日志
-                                MarkLog markLog = new MarkLog(paper.getWorkId(), workName, paper.getId(), m.getSubject(), m.getStage(), paper.getTest(), 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);
+                                MarkLog markLog = new MarkLog(paper.getWorkId(), workName, paper.getId(), m.getSubject(), m.getStage(), paper.getTest(), paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId(), MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getName(), operResult, String.valueOf(d.getC()), null, date);
                                 markLogList.add(markLog);
                             }
                         }

+ 31 - 11
stmms-ms-main/src/main/java/cn/com/qmth/stmms/ms/quartz/ScheduledTask.java

@@ -3,12 +3,17 @@ package cn.com.qmth.stmms.ms.quartz;
 import cn.com.qmth.stmms.ms.commons.utils.RandomUtil;
 import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
+import cn.com.qmth.stmms.ms.core.domain.MarkTaskJob;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
 import cn.com.qmth.stmms.ms.core.domain.Work;
 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.repository.*;
+import cn.com.qmth.stmms.ms.marking.service.MarkingLevelService;
+import cn.com.qmth.stmms.ms.marking.service.MarkingRoughLevelService;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.scheduling.annotation.Async;
@@ -52,6 +57,15 @@ public class ScheduledTask implements InitializingBean {
     @Resource
     MarkTaskScoreRepo markTaskScoreRepo;
 
+    @Resource
+    MarkTaskJobRepo markTaskJobRepo;
+
+    @Resource
+    MarkingRoughLevelService markingRoughLevelService;
+
+    @Resource
+    MarkingLevelService markingLevelService;
+
     boolean repairPaper = false, repairTask = false, markTaskJob = false;
 
     /**
@@ -105,7 +119,7 @@ public class ScheduledTask implements InitializingBean {
     public void repairMarkTaskJob(Work work) {
         try {
             // todo 需要改 20220802
-            /*List<MarkTaskJob> markTaskJobList = markTaskJobRepo.findAllByStatusIsFalseAndWorkId(work.getId());
+            List<MarkTaskJob> markTaskJobList = markTaskJobRepo.findAllByStatusIsFalseAndWorkId(work.getId());
 
             if (Objects.nonNull(markTaskJobList) && !markTaskJobList.isEmpty()) {
                 long startTime = System.currentTimeMillis();
@@ -116,21 +130,27 @@ public class ScheduledTask implements InitializingBean {
                         JSONObject jsonObject = JSON.parseObject(m.getDataObject());
                         String type = String.valueOf(jsonObject.get("type"));
                         Long paperId = Long.parseLong(String.valueOf(jsonObject.get("paperId")));
+                        MarkStage stage = MarkStage.valueOf(jsonObject.getString("stage"));
                         Paper paper = paperRepo.findOne(paperId);
-                        List<MarkTask> markTaskList = markTaskRepo.findByWorkIdAndStageAndPaperId(work.getId(), MarkStage.LEVEL, paperId);
-                        if (Objects.nonNull(markTaskList) && !markTaskList.isEmpty()) {
-                            if (Objects.equals("levelsLog", type)) {
-                                markingService.levelsLog(markTaskList, paper, m);//档位差日志记录
-                            } else if (Objects.equals("autoCallback", type)) {
-                                LevelConfig levelConfig = ParamCache.levelConfigMap.get(String.valueOf(work.getId()));
-                                Integer deviationParam = levelConfig == null ? 3 : levelConfig.getDeviation();
-                                Integer deviation = jsonObject.get("deviation") == null ? deviationParam : Integer.parseInt(String.valueOf(jsonObject.get("deviation")));
-                                markLogAop.autoCallback(markTaskList, deviation, paper, m, work.getName(), null);//自动打回记录
+                        if (MarkStage.ROUGH_LEVEL.equals(stage)) {
+                            List<MarkTaskRoughLevel> markTaskList = markTaskRoughLevelRepo.findByWorkIdAndPaperIdAndStage(work.getId(), paperId, stage);
+                            if (Objects.nonNull(markTaskList) && !markTaskList.isEmpty()) {
+                                if (Objects.equals("levelsLog", type)) {
+                                    markingRoughLevelService.levelsLog(markTaskList, paper, stage, m);//档位差日志记录
+                                }
+                            }
+                        } else if (MarkStage.LEVEL.equals(stage)) {
+                            List<MarkTaskLevel> markTaskList = markTaskLevelRepo.findByWorkIdAndPaperIdAndStage(work.getId(), paperId, stage);
+                            if (Objects.nonNull(markTaskList) && !markTaskList.isEmpty()) {
+                                if (Objects.equals("levelsLog", type)) {
+                                    markingLevelService.levelsLog(markTaskList, paper, stage, m);//档位差日志记录
+                                }
                             }
                         }
+
                     }
                 }
-            }*/
+            }
         } catch (Exception e) {
             e.printStackTrace();
             throw new RuntimeException(e);

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

@@ -248,7 +248,7 @@ public class ChangeLevelApi {
 
         //记录日志
         Work work = workRepo.findOne(paper.getWorkId());
-        MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), markUser.getSubject(), changeLevel.getStage(), paper.getTest(), 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());
+        MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), markUser.getSubject(), changeLevel.getStage(), paper.getTest(), paper.getExamNumber(), paper.getStudentName(), markUser.getId(), markUser.getName(), markUser.getRole(), MarkLogOperType.CHANGE_LEVEL_APPLY.getId(),MarkLogOperType.CHANGE_LEVEL_APPLY.getName(), changeLevel.getOriginalLevel(), changeLevel.getSuggestLevel(), null, new Date());
         markLogRepo.save(markLog);
 
         return new ResponseEntity(HttpStatus.OK);
@@ -275,7 +275,7 @@ public class ChangeLevelApi {
             //记录日志
             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.getTest(), 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());
+            MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), paper.getSubject(), changeLevel.getStage(), paper.getTest(), paper.getExamNumber(), paper.getStudentName(), markUser.getId(), markUser.getName(), markUser.getRole(), MarkLogOperType.CHANGE_LEVEL_AGREE.getId(),MarkLogOperType.CHANGE_LEVEL_AGREE.getName(), changeLevel.getOriginalLevel(), changeLevel.getSuggestLevel(), null, new Date());
             markLogRepo.save(markLog);
 
             if (MarkStage.LEVEL.equals(changeLevel.getStage())) {

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

@@ -4,14 +4,12 @@ import cn.com.qmth.stmms.ms.commons.config.SystemConfig;
 import cn.com.qmth.stmms.ms.commons.utils.ServletUtil;
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
 import cn.com.qmth.stmms.ms.core.cache.ParamCache;
-import cn.com.qmth.stmms.ms.core.domain.ExamQuestion;
-import cn.com.qmth.stmms.ms.core.domain.MarkStage;
-import cn.com.qmth.stmms.ms.core.domain.MarkSubject;
-import cn.com.qmth.stmms.ms.core.domain.Paper;
+import cn.com.qmth.stmms.ms.core.domain.*;
 import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
 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.MarkerGroupLeader;
 import cn.com.qmth.stmms.ms.core.domain.user.Role;
 import cn.com.qmth.stmms.ms.core.repository.*;
@@ -59,9 +57,15 @@ public class PaperApi {
     @Autowired
     private PaperAssembler paperAssembler;
 
+    @Resource
+    private MarkUserRepo markUserRepo;
+
     @Autowired
     private PaperRepo paperRepo;
 
+    @Resource
+    private WorkRepo workRepo;
+
     @Autowired
     private MarkSubjectRepo markSubjectRepo;
 
@@ -89,6 +93,9 @@ public class PaperApi {
     @Resource
     private MarkTaskScoreRepo markTaskScoreRepo;
 
+    @Resource
+    private MarkLogRepo markLogRepo;
+
     @Autowired
     SystemConfig systemConfig;
 
@@ -364,9 +371,9 @@ public class PaperApi {
         };
         String[] sortProperties = new String[]{"isSample", "sortNum"};
         if (MarkStage.ROUGH_LEVEL.equals(markSubject.getStage())) {
-            sortProperties =  new String[]{"isRoughSample", "sortNum"};
+            sortProperties = new String[]{"isRoughSample", "sortNum"};
         } else if (MarkStage.LEVEL.equals(markSubject.getStage())) {
-            sortProperties =  new String[]{"isSample", "sortNum"};
+            sortProperties = new String[]{"isSample", "sortNum"};
         }
         Sort sort = new Sort(Sort.Direction.DESC, sortProperties);
         Pageable pageable1 = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), sort);
@@ -509,10 +516,12 @@ public class PaperApi {
         String paperIds = body.get("paperIds");
         String stage = body.get("stage");
         if (paperIds.length() > 0) {
+            List<MarkLog> markLogs = new ArrayList<>();
             String[] ids = paperIds.split(",");
-            if(MarkStage.ROUGH_LEVEL.name().equals(stage)){
+            if (MarkStage.ROUGH_LEVEL.name().equals(stage)) {
                 for (String id : ids) {
                     Paper paper = paperRepo.findOne(Long.valueOf(id));
+                    Work work = workRepo.findOne(paper.getWorkId());
                     paper.determineRoughLevel(null);
                     paper.setMarkByLeader(false);
                     paper.setRoughSample(false);
@@ -525,10 +534,17 @@ public class PaperApi {
                         markTask.setSample(false);
                         markTaskRoughLevelRepo.save(markTask);
                     }
+
+                    // 记录日志
+                    Long userId = ServletUtil.getUserId();
+                    MarkUser markUser = markUserRepo.findOne(userId);
+                    MarkLog markLog = new MarkLog(work.getId(), work.getName(), paper.getId(), paper.getSubject(), MarkStage.ROUGH_LEVEL, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), markUser.getId(), markUser.getName(), markUser.getRole(), MarkLogOperType.CANCEL_SAMPLE.getId(),MarkLogOperType.CANCEL_SAMPLE.getName(), paper.getRoughLevel(), null, null, new Date());
+                    markLogs.add(markLog);
                 }
-            } else if(MarkStage.LEVEL.name().equals(stage)){
+            } else if (MarkStage.LEVEL.name().equals(stage)) {
                 for (String id : ids) {
                     Paper paper = paperRepo.findOne(Long.valueOf(id));
+                    Work work = workRepo.findOne(paper.getWorkId());
                     paper.determineLevel(null);
                     paper.setMarkByLeader(false);
                     paper.setSample(false);
@@ -541,9 +557,19 @@ public class PaperApi {
                         markTask.setSample(false);
                         markTaskLevelRepo.save(markTask);
                     }
+
+                    // 记录日志
+                    Long userId = ServletUtil.getUserId();
+                    MarkUser markUser = markUserRepo.findOne(userId);
+                    MarkLog markLog = new MarkLog(work.getId(), work.getName(), paper.getId(), paper.getSubject(), MarkStage.LEVEL, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), markUser.getId(), markUser.getName(), markUser.getRole(), MarkLogOperType.CANCEL_SAMPLE.getId(),MarkLogOperType.CANCEL_SAMPLE.getName(), paper.getLevel(), null, null, new Date());
+                    markLogs.add(markLog);
                 }
             }
 
+            if (!markLogs.isEmpty()) {
+                markLogRepo.save(markLogs);
+            }
+
             return new ResponseEntity(true, HttpStatus.OK);
         }
         return null;
@@ -626,7 +652,7 @@ public class PaperApi {
                     predicates.add(builder.equal(root.get("secretNumber"), number));
                 } else if (Objects.equals(type, "task")) {
                     List<MarkTaskRoughLevel> markRoughTasks = markTaskRoughLevelRepo.findByWorkIdAndSecretNumber(workId, number);
-                    if(markRoughTasks.isEmpty()){
+                    if (markRoughTasks.isEmpty()) {
                         List<MarkTaskLevel> markTasks = markTaskLevelRepo.findByWorkIdAndSecretNumber(workId, number);
                         if (markTasks == null || markTasks.isEmpty()) {
                             List<MarkTaskScore> markScoreTasks = markTaskScoreRepo.findByWorkIdAndSecretNumber(workId, number);

+ 8 - 17
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkLogService.java

@@ -70,7 +70,7 @@ public class MarkLogService {
             operDateBefore = markTask.getResult();
             operDateAfter = levelCode;
         }
-        return new MarkLog(markTask.getWorkId(), work.getName(), paper.getId(), markTask.getSubject(), stage, markTask.getTest(), paper.getExamNumber(), paper.getStudentName(), markTask.getMarkerId(), markTask.getMarkerName(), Role.MARKER, markLogOperType.getId(), Optional.ofNullable(operDateBefore).orElse("-"), Optional.ofNullable(operDateAfter).orElse("-"), markLogOperType.getName(), new Date());
+        return new MarkLog(markTask.getWorkId(), work.getName(), paper.getId(), markTask.getSubject(), stage, markTask.getTest(), paper.getExamNumber(), paper.getStudentName(), markTask.getMarkerId(), markTask.getMarkerName(), Role.MARKER, markLogOperType.getId(),markLogOperType.getName(), Optional.ofNullable(operDateBefore).orElse("-"), Optional.ofNullable(operDateAfter).orElse("-"), null, new Date());
     }
 
     /**
@@ -111,7 +111,7 @@ public class MarkLogService {
         }
         operDateBefore = markTask.getOriginLevel();
         operDateAfter = levelCode;
-        return new MarkLog(markTask.getWorkId(), work.getName(), paper.getId(), markTask.getSubject(), stage, markTask.getTest(), paper.getExamNumber(), paper.getStudentName(), markTask.getMarkerId(), markTask.getMarkerName(), Role.MARKER, markLogOperType.getId(), Optional.ofNullable(operDateBefore).orElse("-"), Optional.ofNullable(operDateAfter).orElse("-"), markLogOperType.getName(), new Date());
+        return new MarkLog(markTask.getWorkId(), work.getName(), paper.getId(), markTask.getSubject(), stage, markTask.getTest(), paper.getExamNumber(), paper.getStudentName(), markTask.getMarkerId(), markTask.getMarkerName(), Role.MARKER, markLogOperType.getId(),markLogOperType.getName(), Optional.ofNullable(operDateBefore).orElse("-"), Optional.ofNullable(operDateAfter).orElse("-"), null, new Date());
     }
 
     /**
@@ -143,7 +143,7 @@ public class MarkLogService {
             operDateBefore = markTask.getResult();
             operDateAfter = String.valueOf(score);
         }
-        return new MarkLog(markTask.getWorkId(), work.getName(), paper.getId(), markTask.getSubject(), MarkStage.SCORE, markTask.getTest(), paper.getExamNumber(), paper.getStudentName(), markTask.getMarkerId(), markTask.getMarkerName(), Role.MARKER, markLogOperType.getId(), Optional.ofNullable(operDateBefore).orElse("-"), Optional.ofNullable(operDateAfter).orElse("-"), markLogOperType.getName(), new Date());
+        return new MarkLog(markTask.getWorkId(), work.getName(), paper.getId(), markTask.getSubject(), MarkStage.SCORE, markTask.getTest(), paper.getExamNumber(), paper.getStudentName(), markTask.getMarkerId(), markTask.getMarkerName(), Role.MARKER, markLogOperType.getId(),markLogOperType.getName(), Optional.ofNullable(operDateBefore).orElse("-"), Optional.ofNullable(operDateAfter).orElse("-"), null, new Date());
     }
 
     /**
@@ -178,29 +178,20 @@ public class MarkLogService {
         } else {
             throw new RuntimeException("当前阶段不支持科组长操作");
         }
-        return new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), paper.getSubject(), stage, paper.getTest(), 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());
+        return new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), paper.getSubject(), stage, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), markUser.getId(), markUser.getName(), Role.MARK_LEADER, markLogOperType.getId(),markLogOperType.getName(), Optional.ofNullable(operDateBefore).orElse("-"), Optional.ofNullable(operDateAfter).orElse("-"), null, new Date());
     }
 
     /**
      * 分档打回
      *
-     * @param stage       阶段
-     * @param paper       试卷
-     * @param autoReject  是否自动打回
-     * @param markerId    科组长id
-     * @param originLevel 旧档位
+     * @param autoReject 是否自动打回
+     * @param markerId   科组长id
      */
-    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());
+    public String markingPaperReject(boolean autoReject, Long markerId) {
         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.getTest(), paper.getExamNumber(), paper.getStudentName(), userId, userName, role, markLogOperType.getId(), Optional.ofNullable(originLevel).orElse("-"), Optional.ofNullable(operDateAfter).orElse("-"), markLogOperType.getName(), new Date());
+        return String.format("操作角色:%s,操作员ID:%s,操作员姓名:%s", role.name(), userId, userName);
     }
 
-    public void deleteByWorkIdAndSubjectAndStageAndTestAndOperType(Long workId, String subject, MarkStage stage, int test, int operType) {
-        markLogRepo.deleteByWorkIdAndSubjectAndStageAndTestAndOperType(workId, subject, stage, test, operType);
-    }
 }

+ 14 - 9
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingLevelService.java

@@ -127,7 +127,7 @@ public class MarkingLevelService {
                 paper.determineLevel(determine.getResult());
                 paper.setMarkedLogic(false);
                 //档位落差值日志
-//                levelsLog(markTasks, paper);
+                levelsLog(markTasks, paper);
             }
             //仲裁
             else if (determine.getDeterType() == DetermineLevelService.DeterType.ARBITRATE) {
@@ -194,8 +194,9 @@ public class MarkingLevelService {
         JSONObject js = new JSONObject();
         js.put("paperId", paper.getId());
         js.put("type", "levelsLog");
+        js.put("stage", MarkStage.LEVEL.name());
         MarkTaskJob markTaskJob = new MarkTaskJob(js.toJSONString(), false, paper.getWorkId());
-        levelsLog(markTasks, paper, markTaskJob);
+        levelsLog(markTasks, paper, MarkStage.LEVEL, markTaskJob);
         markTaskJobRepo.save(markTaskJob);
         LOG.info("this:{} levelsLog异步回调结束了", this);
     }
@@ -207,7 +208,7 @@ public class MarkingLevelService {
      * @param paper
      * @param markTaskJob
      */
-    public void levelsLog(List<MarkTaskLevel> markTasks, Paper paper, MarkTaskJob markTaskJob) {
+    public void levelsLog(List<MarkTaskLevel> markTasks, Paper paper, MarkStage stage, MarkTaskJob markTaskJob) {
         Map<Long, String> levelsMap = markTasks.stream().collect(Collectors.toMap(MarkTaskLevel::getMarkerId, o -> o.getResult().toUpperCase()));
         arbitrateCallback.judge(levelsMap, paper.getLevel(), new ArbitrateResult() {
             @Override
@@ -218,14 +219,14 @@ public class MarkingLevelService {
                 for (ArbitrateCallback.Distance d : list) {
                     for (MarkTaskLevel m : markTasks) {
                         if (Objects.equals(String.valueOf(d.getC()), m.getResult()) && d.getMarkId().longValue() == m.getMarkerId().longValue()) {
-                            MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(m.getMarkerId(), MarkLogOperType.LEVEl_DIFFERENCE.getId(), m.getSubject().toString(), paper.getExamNumber());
+                            MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndStageAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(m.getMarkerId(), stage, MarkLogOperType.LEVEl_DIFFERENCE.getId(), m.getSubject().toString(), paper.getExamNumber());
                             JSONObject jsonObject = new JSONObject();
                             jsonObject.put("task", m.getResult());
                             jsonObject.put("paper", paper.getLevel());
                             if (Objects.isNull(markLogPrev)) {//新建日志
                                 //加入档位落差值日志
                                 Work work = workRepo.findOne(paper.getWorkId());
-                                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), m.getSubject(), MarkStage.LEVEL, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.LEVEl_DIFFERENCE.getId(), operResult, String.valueOf(d.getDistance()), jsonObject.toJSONString(), date);
+                                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), m.getSubject(), stage, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.LEVEl_DIFFERENCE.getId(),MarkLogOperType.LEVEl_DIFFERENCE.getName(), operResult, String.valueOf(d.getDistance()), jsonObject.toJSONString(), date);
                                 markLogRepo.save(markLog);
                             } else {//更新日志
                                 operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
@@ -235,11 +236,11 @@ public class MarkingLevelService {
                                 markLogRepo.save(markLogPrev);
                             }
                             //档位偏差
-                            MarkLog markLogDevi = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(m.getMarkerId(), MarkLogOperType.LEVEl_DEVIATION.getId(), m.getSubject().toString(), paper.getExamNumber());
+                            MarkLog markLogDevi = markLogRepo.findTopByCreateUserIdAndStageAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(m.getMarkerId(), stage, MarkLogOperType.LEVEl_DEVIATION.getId(), m.getSubject().toString(), paper.getExamNumber());
                             if (Objects.isNull(markLogDevi)) {//新建日志
                                 //加入档位偏差值日志
                                 Work work = workRepo.findOne(paper.getWorkId());
-                                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), m.getSubject(), MarkStage.LEVEL, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.LEVEl_DEVIATION.getId(), operResult, String.valueOf(d.getDeviation()), jsonObject.toJSONString(), date);
+                                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), m.getSubject(), stage, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.LEVEl_DEVIATION.getId(),MarkLogOperType.LEVEl_DEVIATION.getName(), operResult, String.valueOf(d.getDeviation()), jsonObject.toJSONString(), date);
                                 markLogRepo.save(markLog);
                             } else {//更新日志
                                 operResult = Optional.ofNullable(markLogDevi.getOperDataAfter()).orElse("-");
@@ -284,7 +285,7 @@ public class MarkingLevelService {
 
         paper.setSortNum(calcSortNum(paper, markTasks, levels));
         paperRepo.save(paper);
-//        levelsLog(markTasks, paper);
+        levelsLog(markTasks, paper);
         markLogRepo.save(markLog);
         return paper;
     }
@@ -313,6 +314,9 @@ public class MarkingLevelService {
 
         List<MarkTaskLevel> markTasks = markTaskLevelRepo.findByPaperId(paper.getId());
 
+        Work work = workRepo.findOne(paper.getWorkId());
+        MarkLogOperType markLogOperType = autoReject ? MarkLogOperType.SYSTEM_CALLBACK_LEVEl : MarkLogOperType.CALLBACK_LEVEl;
+
         List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
         Map<String, Integer> levelMap = levels.stream().collect(Collectors.toMap(Level::getCode, Level::getLevelValue));
 
@@ -331,7 +335,8 @@ public class MarkingLevelService {
                         markTask.setResult(null);
                         markTask.setLevel(null);
                         markTask.setDeviationDirection(calcDeviationDirection(levelMap, markTask.getOriginLevel(), redoLevel));
-                        MarkLog markLog = markLogService.markingPaperReject(MarkStage.LEVEL, paper, autoReject, rejectKzzId, markTask.getOriginLevel());
+                        String remark = markLogService.markingPaperReject(autoReject, rejectKzzId);
+                        MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), markTask.getSubject(), markTask.getStage(), paper.getTest(), paper.getExamNumber(), paper.getStudentName(), markTask.getMarkerId(), markTask.getMarkerName(), Role.MARKER, markLogOperType.getId(),markLogOperType.getName(), markTask.getOriginLevel(), redoLevel, remark, new Date());
                         markLogList.add(markLog);
                     }
                 }

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

@@ -159,8 +159,9 @@ public class MarkingRoughLevelService {
         JSONObject js = new JSONObject();
         js.put("paperId", paper.getId());
         js.put("type", "levelsLog");
+        js.put("stage", MarkStage.ROUGH_LEVEL.name());
         MarkTaskJob markTaskJob = new MarkTaskJob(js.toJSONString(), false, paper.getWorkId());
-        levelsLog(markTasks, paper, markTaskJob);
+        levelsLog(markTasks, paper, MarkStage.ROUGH_LEVEL, markTaskJob);
         markTaskJobRepo.save(markTaskJob);
         LOG.info("this:{} levelsLog异步回调结束了", this);
     }
@@ -172,9 +173,9 @@ public class MarkingRoughLevelService {
      * @param paper
      * @param markTaskJob
      */
-    public void levelsLog(List<MarkTaskRoughLevel> markTasks, Paper paper, MarkTaskJob markTaskJob) {
+    public void levelsLog(List<MarkTaskRoughLevel> markTasks, Paper paper, MarkStage stage, MarkTaskJob markTaskJob) {
         Map<Long, String> levelsMap = markTasks.stream().collect(Collectors.toMap(MarkTaskRoughLevel::getMarkerId, o -> o.getResult().toUpperCase()));
-        arbitrateCallback.judge(levelsMap, paper.getLevel(), new ArbitrateResult() {
+        arbitrateCallback.judge(levelsMap, paper.getRoughLevel(), new ArbitrateResult() {
             @Override
             public void callback(List<ArbitrateCallback.Distance> list) {
                 LOG.info("this:{} callback levelsLog异步回调进来了", this);
@@ -183,14 +184,14 @@ public class MarkingRoughLevelService {
                 for (ArbitrateCallback.Distance d : list) {
                     for (MarkTaskRoughLevel m : markTasks) {
                         if (Objects.equals(String.valueOf(d.getC()), m.getResult()) && d.getMarkId().longValue() == m.getMarkerId().longValue()) {
-                            MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(m.getMarkerId(), MarkLogOperType.LEVEl_DIFFERENCE.getId(), m.getSubject().toString(), paper.getExamNumber());
+                            MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndStageAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(m.getMarkerId(), stage, MarkLogOperType.LEVEl_DIFFERENCE.getId(), m.getSubject().toString(), paper.getExamNumber());
                             JSONObject jsonObject = new JSONObject();
                             jsonObject.put("task", m.getResult());
                             jsonObject.put("paper", paper.getLevel());
                             if (Objects.isNull(markLogPrev)) {//新建日志
                                 //加入档位落差值日志
                                 Work work = workRepo.findOne(paper.getWorkId());
-                                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), m.getSubject(), MarkStage.LEVEL, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.LEVEl_DIFFERENCE.getId(), operResult, String.valueOf(d.getDistance()), jsonObject.toJSONString(), date);
+                                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), m.getSubject(), stage, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.LEVEl_DIFFERENCE.getId(), MarkLogOperType.LEVEl_DIFFERENCE.getName(), operResult, String.valueOf(d.getDistance()), jsonObject.toJSONString(), date);
                                 markLogRepo.save(markLog);
                             } else {//更新日志
                                 operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
@@ -200,11 +201,11 @@ public class MarkingRoughLevelService {
                                 markLogRepo.save(markLogPrev);
                             }
                             //档位偏差
-                            MarkLog markLogDevi = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(m.getMarkerId(), MarkLogOperType.LEVEl_DEVIATION.getId(), m.getSubject().toString(), paper.getExamNumber());
+                            MarkLog markLogDevi = markLogRepo.findTopByCreateUserIdAndStageAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(m.getMarkerId(), stage, MarkLogOperType.LEVEl_DEVIATION.getId(), m.getSubject().toString(), paper.getExamNumber());
                             if (Objects.isNull(markLogDevi)) {//新建日志
                                 //加入档位偏差值日志
                                 Work work = workRepo.findOne(paper.getWorkId());
-                                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), m.getSubject(), MarkStage.LEVEL, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.LEVEl_DEVIATION.getId(), operResult, String.valueOf(d.getDeviation()), jsonObject.toJSONString(), date);
+                                MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), m.getSubject(), stage, paper.getTest(), paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.LEVEl_DEVIATION.getId(), MarkLogOperType.LEVEl_DEVIATION.getName(), operResult, String.valueOf(d.getDeviation()), jsonObject.toJSONString(), date);
                                 markLogRepo.save(markLog);
                             } else {//更新日志
                                 operResult = Optional.ofNullable(markLogDevi.getOperDataAfter()).orElse("-");
@@ -249,7 +250,7 @@ public class MarkingRoughLevelService {
 
         paper.setSortNum(calcSortNum(paper, markTasks, levels));
         paperRepo.save(paper);
-//        levelsLog(markTasks, paper);
+        levelsLog(markTasks, paper);
         markLogRepo.save(markLog);
         return paper;
     }
@@ -274,6 +275,8 @@ public class MarkingRoughLevelService {
         paper.setRoughSample(false);
         paper.setArbitrated(false);
         List<MarkTaskRoughLevel> markTasks = markTaskRoughLevelRepo.findByPaperId(paper.getId());
+        Work work = workRepo.findOne(paper.getWorkId());
+        MarkLogOperType markLogOperType = autoReject ? MarkLogOperType.SYSTEM_CALLBACK_LEVEl : MarkLogOperType.CALLBACK_LEVEl;
 
         List<MarkLog> markLogList = new ArrayList<>();
         for (MarkTaskRoughLevel markTask : markTasks) {
@@ -290,7 +293,8 @@ public class MarkingRoughLevelService {
                         markTask.setResult(null);
                         markTask.setLevel(null);
                         markTask.setDeviationDirection(calcDeviationDirection(markTask.getOriginLevel(), redoLevel));
-                        MarkLog markLog = markLogService.markingPaperReject(MarkStage.ROUGH_LEVEL, paper, autoReject, rejectKzzId, markTask.getOriginLevel());
+                        String remark = markLogService.markingPaperReject(autoReject, rejectKzzId);
+                        MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), markTask.getSubject(), markTask.getStage(), paper.getTest(), paper.getExamNumber(), paper.getStudentName(), markTask.getMarkerId(), markTask.getMarkerName(), Role.MARKER, markLogOperType.getId(), markLogOperType.getName(), markTask.getOriginLevel(), redoLevel, remark, new Date());
                         markLogList.add(markLog);
                     }
                 }