Ver código fonte

联考版-迭代

xiaof 4 anos atrás
pai
commit
356049aa4e

+ 1 - 0
sql/msyj-20210628.sql

@@ -415,6 +415,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;
+    }
 }

+ 33 - 21
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/specification/StudentSpecification.java

@@ -4,6 +4,7 @@ import cn.com.qmth.stmms.ms.commons.utils.specification.PagingAndSortingSpecific
 import cn.com.qmth.stmms.ms.core.domain.Student;
 import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
 import org.springframework.data.jpa.domain.Specification;
+import org.springframework.util.CollectionUtils;
 
 import javax.persistence.criteria.Predicate;
 import java.util.ArrayList;
@@ -134,25 +135,41 @@ public class StudentSpecification extends PagingAndSortingSpecification {
     public Specification<Student> getSpecification() {
         return (root, query, cb) -> {
             List<Predicate> predicates = new ArrayList<Predicate>();
+            List<Predicate> listPermission1 = new ArrayList<>();
             predicates.add(cb.equal(root.get("test"), String.valueOf(TrialEnum.DEFAULT.getId())));
             if (getStudentName() != null) {
                 predicates.add(cb.like(root.get("name"), "%" + getStudentName() + "%"));
             }
-//            if(getExamNumber() != null){
-//                predicates.add(cb.like(root.get("examNumber"),"%"+getExamNumber()+"%"));
-//            }
             if (getWorkId() != null) {
                 predicates.add(cb.equal(root.get("workId"), getWorkId()));
             }
             if (getAreaCode() != null && getAreaCode() != "") {
                 predicates.add(cb.equal(root.get("areaCode"), getAreaCode()));
             }
-            if (getIsAbsent() != null) {
-                predicates.add(cb.equal(root.get("isAbsent"), getIsAbsent()));
+            if ("ONE".equals(getSubject())) {
+                listPermission1.add(cb.equal(root.get("uploadStatus"), "SX:1,SC:1,SM:0"));
+                listPermission1.add(cb.equal(root.get("uploadStatus"), "SX:1,SC:0,SM:1"));
+                listPermission1.add(cb.equal(root.get("uploadStatus"), "SX:0,SC:1,SM:1"));
+
+            } else {
+                if (getIsAbsent() != null) {
+                    predicates.add(cb.equal(root.get("isAbsent"), getIsAbsent()));
+                }
+                if (getUpload() != null && !getUpload()) {
+                    if (Objects.nonNull(getSubject()) && !getSubject().isEmpty()) {
+                        predicates.add(cb.like(root.get("uploadStatus"), "%" + getSubject() + ":0" + "%"));
+                    } else {
+                        predicates.add(cb.equal(root.get("uploadStatus"), "SX:0,SC:0,SM:0"));
+                    }
+                } else if (getUpload() != null && getUpload()) {
+                    if (Objects.nonNull(getSubject())  && !getSubject().isEmpty()) {
+                        predicates.add(cb.like(root.get("uploadStatus"), "%" + getSubject() + ":1" + "%"));
+                    } else {
+                        predicates.add(cb.equal(root.get("uploadStatus"), "SX:1,SC:1,SM:1"));
+                    }
+                }
             }
-//            if (getUploadStatus() != null) {
-//                predicates.add(cb.like(root.get("uploadStatus"), "%" + getUploadStatus() + "%"));
-//            }
+
             if (startNumber != null && endNumber != null) {
                 predicates.add(cb.between(root.get("examNumber"), startNumber, endNumber));
             } else if (startNumber != null) {
@@ -160,25 +177,20 @@ public class StudentSpecification extends PagingAndSortingSpecification {
             } else if (endNumber != null) {
                 predicates.add(cb.equal(root.get("examNumber"), endNumber));
             }
-            if (getUpload() != null && !getUpload()) {
-                if (Objects.nonNull(getSubject()) && !getSubject().isEmpty()) {
-                    predicates.add(cb.like(root.get("uploadStatus"), "%" + getSubject() + ":0" + "%"));
-                } else {
-                    predicates.add(cb.equal(root.get("uploadStatus"), "SX:0,SC:0,SM:0"));
-                }
-            } else if (getUpload() != null && getUpload()) {
-                if (Objects.nonNull(getSubject())  && !getSubject().isEmpty()) {
-                    predicates.add(cb.like(root.get("uploadStatus"), "%" + getSubject() + ":1" + "%"));
-                } else {
-                    predicates.add(cb.equal(root.get("uploadStatus"), "SX:1,SC:1,SM:1"));
-                }
-            }
+
             if (getSchool() != null && getSchool() != "") {
                 predicates.add(cb.equal(root.get("school"), getSchool()));
             }
             if (getExamRoom() != null && getExamRoom() != "") {
                 predicates.add(cb.equal(root.get("examRoom"), getExamRoom()));
             }
+            Predicate Pre_And = cb.and(predicates.toArray(new Predicate[predicates.size()]));
+            if ("ONE".equals(getSubject())) {
+                if (!CollectionUtils.isEmpty(listPermission1)) {
+                    Predicate Pre_Or1 = cb.or(listPermission1.toArray(new Predicate[listPermission1.size()]));
+                    return query.where(Pre_And, Pre_Or1).getRestriction();
+                }
+            }
             return cb.and(predicates.toArray(new Predicate[predicates.size()]));
         };
     }

+ 1 - 5
stmms-ms-main/src/main/resources/application-dev.properties

@@ -1,7 +1,3 @@
-#spring.datasource.url=jdbc:mysql://192.168.10.42:3306/stmms-ms-2-1?useUnicode=true&characterEncoding=UTF-8
-#spring.datasource.username=root
-#spring.datasource.password=root
-
 db.host=localhost
 db.port=3306
 db.dbName=msyj-2.0.0
@@ -100,7 +96,7 @@ score.level.taskSort=paper
 #score.level.taskSort=paper
 
 #\u524D\u7AEF\u9759\u6001\u8D44\u6E90\u76EE\u5F55
-web.upload-path=D:\\company\\qmth\\bat-pro\\msyj-202008-v1.0\\static\\
+web.upload-path=D:\\company\\qmth\\bat-pro\\msyj-2021-local-v2.0.0-nginx\\dist\\
 spring.mvc.static-path-pattern=/**
 spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${sys.config.localhostPath},file:${web.upload-path}
 

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

@@ -257,17 +257,14 @@ 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<>();
         papers.forEach(p -> {
             paperDTOs.add(paperAssembler.toDTO(p));
         });
-        paperDTOs.sort((o1, o2) -> o2.getSortSum() -o1.getSortSum());
-        // 先按标准卷排序,再按典型值排序
-        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());
+        return new PageableDTO(paperDTOs, papers.getTotalElements(), papers.getTotalPages(), pageable.getPageNumber());
     }
 
     /**

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

@@ -180,7 +180,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())) {
@@ -201,6 +203,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());
                     }

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

@@ -126,7 +126,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 +181,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 +290,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 +305,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;
     }
@@ -412,6 +421,7 @@ public class MarkingService {
 
     }
 
+    @Transactional
     public void subjectReset(Long workId, Subject subject, MarkStage stage) {
         // 删除mark_task阶段数据
         markTaskRepo.deleteByWorkIdAndSubjectAndStage(workId, subject, stage);
@@ -461,4 +471,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;
+    }
 }