Browse Source

联考版-迭代

xiaof 4 years ago
parent
commit
7654f0de03

+ 14 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/task/MarkTask.java

@@ -98,6 +98,12 @@ public class MarkTask implements Serializable {
     //是否标准卷
     private boolean isSample;
 
+    /**
+     * 计算偏差范围使用
+     */
+    @Transient
+    private String dateMineResult;
+
     private String deviationDirection;
 
     public Long getBatchNo() {
@@ -353,6 +359,14 @@ public class MarkTask implements Serializable {
         isSample = sample;
     }
 
+    public String getDateMineResult() {
+        return dateMineResult;
+    }
+
+    public void setDateMineResult(String dateMineResult) {
+        this.dateMineResult = dateMineResult;
+    }
+
     public String getDeviationDirection() {
         return deviationDirection;
     }

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

@@ -13,6 +13,7 @@ import cn.com.qmth.stmms.ms.core.domain.user.Role;
 import cn.com.qmth.stmms.ms.core.repository.*;
 import cn.com.qmth.stmms.ms.marking.config.MarkingConfig;
 import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
+import cn.com.qmth.stmms.ms.marking.service.MarkingService;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.commons.lang.StringUtils;
@@ -195,12 +196,14 @@ public class MarkLogAop {
         MarkUser markUser = (MarkUser) map.get(MARK_USER);
         JSONObject aopResult = JSONObject.parseObject(JSONObject.toJSONString(result));
         boolean isRejected = false, oldRejected = false, oldShift = false, oldShiftScore = false;
+        String daterMineResult = null;
         if (Objects.nonNull(aopResult)) {
             MarkTaskDTO resultBody = JSONObject.parseObject(((JSONObject) aopResult.get(BODY)).toJSONString(), MarkTaskDTO.class);
             isRejected = resultBody.isRejected();//新的是否撤档
             oldRejected = resultBody.isOldRejected();//旧的是否撤档
             oldShift = resultBody.isShift();//旧的改档
             oldShiftScore = resultBody.isShiftScore();//旧的改档打分
+            daterMineResult = resultBody.getDateMineResult();
         }
         JSONObject jsonObject = (JSONObject) jsonArgsArray.get(0);
         Paper paper = JSONObject.parseObject(((JSONObject) jsonObject.get(PAPER)).toJSONString(), Paper.class);
@@ -280,7 +283,7 @@ public class MarkLogAop {
                 js.put("deviation", deviation.intValue());
                 MarkTaskJob markTaskJob = new MarkTaskJob(js.toJSONString(), false, paper.getWorkId());
                 markTaskJobRepo.save(markTaskJob);
-                autoCallback(markTasks, deviation.intValue(), paper, markTaskJob, work.getName());
+                autoCallback(markTasks, deviation.intValue(), paper, markTaskJob, work.getName(), daterMineResult);
             }
         }
         //20191107wangliang加入仲裁自动打回算法 end
@@ -295,7 +298,7 @@ public class MarkLogAop {
      * @param markTaskJob
      * @param workName
      */
-    public void autoCallback(List<MarkTask> markTasks, int deviation, Paper paper, MarkTaskJob markTaskJob, String workName) {
+    public void autoCallback(List<MarkTask> markTasks, int deviation, Paper paper, MarkTaskJob markTaskJob, String workName, String daterMineResult) {
         List<MarkTask> result = markTasks.stream().filter(x -> Objects.isNull(x.getResult())).collect(Collectors.toList());
         if (Objects.nonNull(result) && result.size() > 0) {
             LOGGER.info("数据有误,未完成评卷任务");
@@ -321,7 +324,7 @@ public class MarkLogAop {
                     for (ArbitrateCallback.Distance d : list) {
                         for (MarkTask m : markTasks) {
                             if (Objects.equals(String.valueOf(d.getC()), m.getResult()) && d.getMarkId().longValue() == m.getMarkerId().longValue()) {
-                                m.setDeviationDirection(calcDeviationDirection(levelMap, m.getResult(), m.getLevel()));
+                                m.setDeviationDirection(MarkingService.calcDeviationDirection(levelMap, m.getResult(), daterMineResult));
                                 m.setRejected(true);
                                 m.setOriginLevel(m.getResult());
                                 m.setResult(null);
@@ -349,24 +352,6 @@ public class MarkLogAop {
         LOGGER.info("this:{} markLogAop异步回调结束了", this);
     }
 
-    /**
-     * 计算偏差方向
-     *
-     * @param levelMap
-     * @param result   定档档位
-     * @param level    评卷员打的档位
-     * @return
-     */
-    private String calcDeviationDirection(Map<String, Integer> levelMap, String result, String level) {
-        if (StringUtils.isNotBlank(result) && StringUtils.isNotBlank(level)) {
-            Integer resultInt = levelMap.get(result);
-            Integer levelInt = levelMap.get(level);
-            if (resultInt != null && levelInt != null) {
-                return String.valueOf(levelInt.intValue() - levelInt.intValue());
-            }
-        }
-        return null;
-    }
 
     /**
      * 查询处于哪个档位公用

+ 3 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/MarkTaskAssembler.java

@@ -102,6 +102,8 @@ public class MarkTaskAssembler {
             //打回总次数
             int rejectedCount = markLogRepo.countByWorkIdAndPaperIdAndOperType(paper.getWorkId(), paper.getId(), Objects.nonNull(paper.isRejectedByLeader()) && paper.isRejectedByLeader() ? MarkLogOperType.CALLBACK_LEVEl.getId() : MarkLogOperType.SYSTEM_CALLBACK_LEVEl.getId());
             markTaskDTO.setRejectedCount(rejectedCount);
+            markTaskDTO.setDeviationDirection(markTask.getDeviationDirection());
+
         }
         return markTaskDTO;
     }
@@ -152,6 +154,7 @@ public class MarkTaskAssembler {
             markTaskDTO.setPaperId(paper.getId());
             markTaskDTO.setShift(oldShift);
             markTaskDTO.setShiftScore(oldShiftScore);
+            markTaskDTO.setDateMineResult(markTask.getDateMineResult());
         }
         return markTaskDTO;
     }

+ 19 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/dto/MarkTaskDTO.java

@@ -38,6 +38,9 @@ public class MarkTaskDTO implements Serializable{
     private Boolean isRejectedByLeader;
     //打回总次数
     private Integer rejectedCount;
+    // 计算偏差范围使用
+    private String dateMineResult;
+    private String deviationDirection;
 
     public Integer getRandomSeq() {
         return randomSeq;
@@ -250,4 +253,20 @@ public class MarkTaskDTO implements Serializable{
     public void setLoginName(String loginName) {
         this.loginName = loginName;
     }
+
+    public String getDateMineResult() {
+        return dateMineResult;
+    }
+
+    public void setDateMineResult(String dateMineResult) {
+        this.dateMineResult = dateMineResult;
+    }
+
+    public String getDeviationDirection() {
+        return deviationDirection;
+    }
+
+    public void setDeviationDirection(String deviationDirection) {
+        this.deviationDirection = deviationDirection;
+    }
 }

+ 28 - 5
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingService.java

@@ -131,6 +131,7 @@ public class MarkingService {
         markTask.setResult(levelCode);
         markTask.setLevelValue(level.getLevelValue());
         markTask.setRejected(false);
+        markTask.setDeviationDirection(null);
         markTask.setUpdatedOn(new Date());
         markTask.setMarkerName(maker.getName());
         //激活试卷
@@ -147,6 +148,9 @@ public class MarkingService {
             //定档
             Integer majority = Optional.ofNullable(ParamCache.paramMap.get(markTask.getWorkId()).getMajority()).orElse(1);
             DeterResult determine = determineLevelService.determine(majority.intValue() == 1 ? true : false, markTasks.toArray(sources));
+            if(Objects.nonNull(determine) && Objects.nonNull(determine.getResult())){
+                markTask.setDateMineResult(determine.getResult());
+            }
             //1.过半定档
             if (Objects.nonNull(determine) && Objects.nonNull(determine.getResult()) && determine.getDeterType() == DetermineLevelService.DeterType.MAJORITY) {
                 paper.determineLevel(determine.getResult());
@@ -317,14 +321,13 @@ public class MarkingService {
         //打回后撤销标准卷
         paper.setSample(false);
         List<MarkTask> markTasks = markTaskRepo.findByPaperIdAndStage(paper.getId(), MarkStage.LEVEL);
+
+        List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
+        Map<String, Integer> levelMap = levels.stream().collect(Collectors.toMap(Level::getCode, Level::getLevelValue));
+
         List<MarkLog> markLogList = new ArrayList<>();
         Date date = new Date();
         for (MarkTask markTask : markTasks) {
-            /*if (markTask.getResult() != null && !markTask.getResult().toString().equals(redoLevel)) {
-                markTask.setRejected(true);
-                markTask.setOriginLevel(markTask.getResult());
-                markTask.setResult(null);
-            }*/
             String[] range = ranges.split(",");
             if (range.length > 0) {
                 //加入手动打回日志
@@ -335,6 +338,7 @@ public class MarkingService {
                         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("-");
@@ -438,4 +442,23 @@ public class MarkingService {
             }
         }
     }
+
+    /**
+     * 计算偏差方向
+     *
+     * @param levelMap
+     * @param result   定档档位
+     * @param level    评卷员打的档位
+     * @return
+     */
+    public static String calcDeviationDirection(Map<String, Integer> levelMap, String result, String level) {
+        if (Objects.nonNull(result) && Objects.nonNull(level)) {
+            Integer resultInt = levelMap.get(result);
+            Integer levelInt = levelMap.get(level);
+            if (resultInt != null && levelInt != null) {
+                return String.valueOf(levelInt.intValue() - resultInt.intValue());
+            }
+        }
+        return null;
+    }
 }