xiaof 4 éve
szülő
commit
14b67c3f61

+ 1 - 0
sql/msyj-org-20210628.sql

@@ -430,6 +430,7 @@ CREATE TABLE `paper`  (
   `is_one_click` bit(1) NULL DEFAULT b'0' COMMENT '是否一键定档',
   `is_rejected_by_leader` bit(1) NULL DEFAULT b'0' COMMENT '是否科组长打回',
   `is_relate` bit(1) NULL DEFAULT b'0' COMMENT '是否关联试卷',
+  `sort_num` INT NULL COMMENT '排序值',
   PRIMARY KEY (`id`) USING BTREE,
   INDEX `idx_paper_exam_number`(`exam_number`) USING BTREE,
   INDEX `idx_union_1`(`batch_no`) USING BTREE,

+ 12 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/Paper.java

@@ -144,6 +144,8 @@ public class Paper implements Serializable {
 
     private boolean isRelate;
 
+    private Integer sortNum;
+
     public int getTest() {
         return test;
     }
@@ -359,6 +361,7 @@ public class Paper implements Serializable {
         this.setTagged(true);
         this.setMarkByLeader(false);
         this.setUpdatedOn(new Date());
+        this.setSortNum(null);
     }
 
     /**
@@ -369,6 +372,7 @@ public class Paper implements Serializable {
         this.setArbitrated(true);
         this.setLevel(null);
         this.setUpdatedOn(new Date());
+        this.setSortNum(null);
     }
 
     public boolean isMarkByLeader() {
@@ -546,4 +550,12 @@ public class Paper implements Serializable {
     public void setRelate(boolean relate) {
         isRelate = relate;
     }
+
+    public Integer getSortNum() {
+        return sortNum;
+    }
+
+    public void setSortNum(Integer sortNum) {
+        this.sortNum = sortNum;
+    }
 }

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

@@ -172,6 +172,7 @@ public class MarkTask implements Serializable {
         this.secretNumber = marker.getId() + subject.ordinal() + paper.getAreaCode() + randomSeqNew;
         this.randomSeqNew = randomSeqNew;
         this.test = test != TrialEnum.DEFAULT.getId() ? TrialEnum.START_TRIAL.getId() : test;
+        this.isSample = paper.isSample();
     }
 
     public MarkTask(Long markerId, String markerName, Subject subject, Long workId, Paper paper, MarkStage stage, Long randomSeqNew, int test) {

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

@@ -395,7 +395,7 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
     void updateScoreByWorkIdAndSubject(Long workId, String subject);
 
     @Modifying
-    @Query(value = "update paper p set p.level = null, p.redo_level = null, p.batch_no = null, p.is_active = false, p.is_arbitrated = false, p.is_manual = false, p.is_rejected = false, p.is_tagged = false, p.mark_by_leader = false, p.is_one_click = false where p.work_id = ?1 and p.subject = ?2", nativeQuery = true)
+    @Query(value = "update paper p set p.level = case p.is_sample when true then p.level else null end,p.sort_num = case p.is_sample when true then p.sort_num else null end, p.redo_level = null, p.batch_no = null, p.is_active = false, p.is_arbitrated = false, p.is_manual = false, p.is_rejected = false, p.is_tagged = false, p.mark_by_leader = false, p.is_one_click = false where p.work_id = ?1 and p.subject = ?2", nativeQuery = true)
     void updateLevelByWorkIdAndSubject(Long workId, String subject);
 
 //    List<Paper> findByWorkIdAndSubjectAndInspectRange(Long workId, Subject subject, Long inspectRange);

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

@@ -257,7 +257,7 @@ public class PaperApi {
             return builder.and(predicates.toArray(new Predicate[predicates.size()]));
         };
 
-        Sort sort = new Sort(Sort.Direction.DESC, "isSample");
+        Sort sort = new Sort(Sort.Direction.DESC, "isSample", "sortNum");
         Pageable pageable1 = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), sort);
         Page<Paper> papers = paperRepo.findAll(specification, pageable1);
         List<PaperDTO> paperDTOs = new ArrayList<>();
@@ -265,8 +265,8 @@ public class PaperApi {
             paperDTOs.add(paperAssembler.toDTO(p));
         });
         // 先按标准卷排序,再按典型值排序
-        List<PaperDTO> list = paperDTOs.stream().sorted(Comparator.comparing(PaperDTO::isSample).reversed().thenComparing((o1, o2) -> o2.getSortSum() -o1.getSortSum())).collect(Collectors.toList());
-        return new PageableDTO(list, papers.getTotalElements(), papers.getTotalPages(), pageable.getPageNumber());
+//        List<PaperDTO> list = paperDTOs.stream().sorted(Comparator.comparing(PaperDTO::isSample).reversed().thenComparing((o1, o2) -> o2.getSortSum() -o1.getSortSum())).collect(Collectors.toList());
+        return new PageableDTO(paperDTOs, papers.getTotalElements(), papers.getTotalPages(), pageable.getPageNumber());
     }
 
     /**

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

@@ -118,16 +118,7 @@ public class PaperAssembler {
             //打回总次数
             int rejectedCount = markLogRepo.countByWorkIdAndPaperIdAndOperType(paper.getWorkId(), paper.getId(), MarkLogOperType.CALLBACK_LEVEl.getId());
             paperDTO.setRejectedCount(rejectedCount);
-            //计算levelValue和(试评阶段不用)
-            if(markSubject.getTest() == 0 && Objects.nonNull(paper.getLevel())) {
-                List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
-                if(!levels.isEmpty() && levels.size() > 0){
-                    Map<String, Integer> map = levels.stream().collect(Collectors.toMap(Level::getCode, Level::getWeight));
-                    List<MarkTask> markTaskList = markTaskRepo.findByPaperIdAndStage(paper.getId(), MarkStage.LEVEL);
-                    int sum = markTaskList.stream().mapToInt(m-> map.get(m.getResult()) == null ? 0 : map.get(m.getResult())).sum();
-                    paperDTO.setSortSum(sum);
-                }
-            }
+            paperDTO.setSortSum(paper.getSortNum());
         }
         return paperDTO;
     }

+ 3 - 3
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/dto/PaperDTO.java

@@ -50,7 +50,7 @@ public class PaperDTO implements Serializable{
     //打回总次数
     private Integer rejectedCount;
    //排序用
-    private int sortSum;
+    private Integer sortSum;
     //考生姓名
     private String studentName;
     private List<MarkTaskDTO> markResults = new ArrayList<>();
@@ -291,11 +291,11 @@ public class PaperDTO implements Serializable{
         this.shiftScore = shiftScore;
     }
 
-    public int getSortSum() {
+    public Integer getSortSum() {
         return sortSum;
     }
 
-    public void setSortSum(int sortSum) {
+    public void setSortSum(Integer sortSum) {
         this.sortSum = sortSum;
     }
 

+ 7 - 2
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/AssignTaskService.java

@@ -178,7 +178,9 @@ public class AssignTaskService {
                     seqNewMap.put(paper.getLevel(), seqNew);
                 }
             }
+            int markerCount = 0;
             for (MarkUser marker : markerGroups.get(idx).getMarkers()) {
+                markerCount ++ ;
                 Long random = getRandom(marker.getId(), paper.getId(), marker.getWorkId(), paper.getExamNumber(), randomMap);
                 MarkTask markTask = null;
                 if (Objects.equals(MarkStage.SCORE, markSubject.getStage())) {
@@ -199,6 +201,11 @@ public class AssignTaskService {
                     if (paper.isSample() && paper.getLevel() != null) {
                         Level level = levelRepo.findByWorkIdAndCode(markSubject.getWorkId(), paper.getLevel());
                         markTask = new MarkTask(marker, paper, level, markSubject.getStage(), random, markSubject.getTest());
+
+                        // 初始化排序值
+                        if(markerCount == markerGroups.get(idx).getMarkers().size()){
+                            paper.setSortNum(level.getWeight() * markerCount);
+                        }
                     } else {
                         markTask = new MarkTask(marker, paper, markSubject.getStage(), random, markSubject.getTest());
                     }
@@ -206,14 +213,12 @@ public class AssignTaskService {
                 }
                 markTaskList.add(markTask);
                 randomMap.put(random, markTask);
-//                markTaskRepo.save(markTask);
             }
             if (markSubject.getTest() != 1) {
                 if (MarkStage.LEVEL.equals(markSubject.getStage())) {
                     //将paper置为激活
                     paper.setActive(true);
                     paper.setBatchNo(currentTime);
-//                    paperRepo.save(paper);
                     paperList.add(paper);
                     //更新subject表formal为正试评卷
 //                    markSubject.setFormal(true);

+ 24 - 2
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingService.java

@@ -11,6 +11,7 @@ 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 cn.com.qmth.stmms.ms.core.vo.Subject;
+import cn.com.qmth.stmms.ms.marking.api.MarkTaskApi;
 import cn.com.qmth.stmms.ms.marking.config.MarkingConfig;
 import cn.com.qmth.stmms.ms.marking.service.arbitration.ArbitrationService;
 import com.alibaba.fastjson.JSONObject;
@@ -126,7 +127,10 @@ public class MarkingService {
          */
 
         MarkUser maker = markUserRepo.findOne(markTask.getMarkerId());
-        Level level = levelRepo.findByWorkIdAndCode(markTask.getWorkId(), levelCode);
+
+        List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
+//        Level level = levelRepo.findByWorkIdAndCode(markTask.getWorkId(), levelCode);
+        Level level = levels.stream().filter(m->levelCode.equals(m.getCode())).findFirst().get();
 
         markTask.setResult(levelCode);
         markTask.setLevelValue(level.getLevelValue());
@@ -178,6 +182,7 @@ public class MarkingService {
             paper.setShift(false);
             //重新分档,打回科组长打回状态改为false
             paper.setRejectedByLeader(false);
+            paper.setSortNum(calcSortNum(paper, markTasks, levels));
             paperRepo.save(paper);
 
             //同步mark_task表中level
@@ -286,10 +291,12 @@ public class MarkingService {
 //    			throw new RuntimeException("标准卷上限已达到");
 //    		}
 //    	}
+        List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
+
         paper.determineLevel(level);
         paper.setMarkByLeader(true);
         paper.setSample(isSample);
-        paperRepo.save(paper);
+
         List<MarkTask> markTasks = markTaskRepo.findByPaperIdAndStage(paper.getId(), MarkStage.LEVEL);
         for (MarkTask markTask : markTasks) {
 //            markTask.setOriginLevel(markTask.getResult());
@@ -299,6 +306,9 @@ public class MarkingService {
             markTask.setSample(paper.isSample());
         }
         markTaskRepo.save(markTasks);
+
+        paper.setSortNum(calcSortNum(paper, markTasks, levels));
+        paperRepo.save(paper);
         levelsLog(markTasks, paper);
         return paper;
     }
@@ -476,4 +486,16 @@ public class MarkingService {
         }
         return null;
     }
+
+    public static Integer calcSortNum(Paper paper, List<MarkTask> markTaskList, List<Level> levels){
+        //计算levelValue和(试评阶段不用)
+        if(paper.getTest() == 0 && Objects.nonNull(paper.getLevel())) {
+            if(!levels.isEmpty() && levels.size() > 0){
+                Map<String, Integer> map = levels.stream().collect(Collectors.toMap(Level::getCode, Level::getWeight));
+                int sum = markTaskList.stream().mapToInt(m-> map.get(m.getResult()) == null ? 0 : map.get(m.getResult())).sum();
+                return sum;
+            }
+        }
+        return 0;
+    }
 }