瀏覽代碼

定档修改

xiaof 5 年之前
父節點
當前提交
31b73b8aa0

+ 8 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/AssignTaskService.java

@@ -7,6 +7,7 @@ import cn.com.qmth.stmms.ms.core.domain.Paper;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkerGroup;
+import cn.com.qmth.stmms.ms.core.repository.MarkSubjectRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkerGroupRepo;
 import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
@@ -31,6 +32,9 @@ public class AssignTaskService {
     @Autowired
     private PaperRepo paperRepo;
 
+    @Autowired
+    private MarkSubjectRepo markSubjectRepo;
+
     @Autowired
     private MarkerGroupRepo markerGroupRepo;
 
@@ -122,6 +126,10 @@ public class AssignTaskService {
                     paper.setActive(true);
                     paper.setBatchNo(currentTime);
                     paperRepo.save(paper);
+
+                    //更新subject表formal为正试评卷
+                    markSubject.setFormal(true);
+                    markSubjectRepo.saveAndFlush(markSubject);
                 }
             }
             idx++;

+ 41 - 31
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingService.java

@@ -119,51 +119,61 @@ public class MarkingService {
             MarkTask[] sources = new MarkTask[markTasks.size()];
             //定档
             DeterResult determine = determineLevelService.determine(markingConfig.isMajority(), markTasks.toArray(sources));
-            if (Objects.nonNull(determine) && Objects.nonNull(determine.getResult())) {
+            //1.过半定档
+            if (Objects.nonNull(determine) && Objects.nonNull(determine.getResult()) && determine.getDeterType() == DetermineLevelService.DeterType.MAJORITY) {
                 paper.determineLevel(determine.getResult());
-                if (determine.getDeterType() == DetermineLevelService.DeterType.WEIGHT) {
-                    paper.setMarkedLogic(true);
-                } else {
-                    paper.setMarkedLogic(false);
-                }
-                //20191108wangliang加入档位落差值计算
-                Map<Long, String> levelsMap = markTasks.stream().collect(Collectors.toMap(MarkTask::getMarkerId, o -> o.getResult().toUpperCase()));
-                List<ArbitrateCallback.Distance> list = ArbitrateCallback.judge(levelsMap, paper.getLevel());
-                String operResult = "-";
-                for (ArbitrateCallback.Distance d : list) {
-                    for (MarkTask 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());
-                            JSONObject jsonObject = new JSONObject();
-                            jsonObject.put("task", m.getResult());
-                            jsonObject.put("paper", paper.getLevel());
-                            if (Objects.isNull(markLogPrev)) {
-                                //加入档位落差值日志
-                                MarkLog markLog = new MarkLog(m.getMarkerId(), m.getMarkerName(), Role.MARKER, m.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.LEVEl_DIFFERENCE.getId(), paper.getWorkId(), paper.getId(), m.getStage(), operResult, String.valueOf(d.getDistance()), jsonObject.toJSONString());
-                                markLogRepo.save(markLog);
-                            } else {
-                                operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
-                                markLogPrev.setOperDataBefore(operResult);
-                                markLogPrev.setOperDataAfter(String.valueOf(d.getDistance()));
-                                markLogPrev.setRemark(jsonObject.toJSONString());
-                                markLogRepo.save(markLogPrev);
-                            }
-                        }
-                    }
-                }
+                paper.setMarkedLogic(false);
+                //档位落差值日志
+                levelsLog(markTasks, paper);
             } else {
                 int[] values = markTasks.stream().mapToInt(MarkTask::getLevelValue).toArray();
                 boolean result = ArbitrationService.arbitrate(markingConfig.getDeviation(), values);
+                //2.最大落差超过仲裁档位,则仲裁打回
                 if (result) {
                     //仲裁
                     paper.arbitrate();
                 }
+                //3.最大落差未超过仲裁档位,则权重计算定档
+                else if (Objects.nonNull(determine) && Objects.nonNull(determine.getResult()) && determine.getDeterType() == DetermineLevelService.DeterType.WEIGHT) {
+                    paper.determineLevel(determine.getResult());
+                    paper.setMarkedLogic(true);
+                    //档位落差值日志
+                    levelsLog(markTasks, paper);
+                }
             }
             paperRepo.save(paper);
         }
         return markTask;
     }
 
+    private void levelsLog(List<MarkTask> markTasks, Paper paper) {
+        //20191108wangliang加入档位落差值计算
+        Map<Long, String> levelsMap = markTasks.stream().collect(Collectors.toMap(MarkTask::getMarkerId, o -> o.getResult().toUpperCase()));
+        List<ArbitrateCallback.Distance> list = ArbitrateCallback.judge(levelsMap, paper.getLevel());
+        String operResult = "-";
+        for (ArbitrateCallback.Distance d : list) {
+            for (MarkTask 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());
+                    JSONObject jsonObject = new JSONObject();
+                    jsonObject.put("task", m.getResult());
+                    jsonObject.put("paper", paper.getLevel());
+                    if (Objects.isNull(markLogPrev)) {
+                        //加入档位落差值日志
+                        MarkLog markLog = new MarkLog(m.getMarkerId(), m.getMarkerName(), Role.MARKER, m.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.LEVEl_DIFFERENCE.getId(), paper.getWorkId(), paper.getId(), m.getStage(), operResult, String.valueOf(d.getDistance()), jsonObject.toJSONString());
+                        markLogRepo.save(markLog);
+                    } else {
+                        operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
+                        markLogPrev.setOperDataBefore(operResult);
+                        markLogPrev.setOperDataAfter(String.valueOf(d.getDistance()));
+                        markLogPrev.setRemark(jsonObject.toJSONString());
+                        markLogRepo.save(markLogPrev);
+                    }
+                }
+            }
+        }
+    }
+
     /**
      * 直接给试卷分档
      *

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

@@ -102,10 +102,6 @@ public class StageControlService {
      * @param markSubject
      */
     private void enterLevelStage(MarkSubject markSubject, int taskCount) throws Exception {
-        //更新
-        markSubject.setFormal(true);
-        markSubjectRepo.saveAndFlush(markSubject);
-
         Long workId = markSubject.getWorkId();
         Subject subject = markSubject.getSubject();
         List<Level> levels = levelRepo.findByWorkId(workId);