Kaynağa Gözat

联考版-v2.1.0

xiaof 3 yıl önce
ebeveyn
işleme
e266caf551
16 değiştirilmiş dosya ile 221 ekleme ve 136 silme
  1. 2 0
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/ParamApi.java
  2. 4 7
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/UserApi.java
  3. 8 3
      stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/TrialService.java
  4. 11 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/ParamSetting.java
  5. 2 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/ChangeLevelRepo.java
  6. 2 0
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkerGroupLeaderRepo.java
  7. 7 1
      stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/PaperRepo.java
  8. 1 1
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MakrerApi.java
  9. 44 44
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkSubjectApi.java
  10. 14 16
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkTaskApi.java
  11. 54 20
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/PaperApi.java
  12. 1 0
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/PaperAssembler.java
  13. 9 0
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/dto/PaperDTO.java
  14. 1 1
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/AssignTaskService.java
  15. 29 27
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkerGroupLeaderService.java
  16. 32 16
      stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingService.java

+ 2 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/ParamApi.java

@@ -120,6 +120,7 @@ public class ParamApi {
                                            @RequestParam Integer deviation,
                                            @RequestParam Integer autoCallback,
                                            @RequestParam Integer majority,
+                                           @RequestParam Integer clearData,
                                            @RequestParam Integer cumulativeError,
                                            @RequestParam Integer levelShowAllPaper,
                                            @RequestParam Integer propDenominator,
@@ -149,6 +150,7 @@ public class ParamApi {
         paramSetting.setCumulativeError(cumulativeError);
         paramSetting.setLevelShowAllPaper(levelShowAllPaper);
         paramSetting.setPropDenominator(propDenominator);
+        paramSetting.setClearData(clearData);
         paramSetting.setAutoCallbackShowDeviation(autoCallbackShowDeviation);
         paramSetting.setShowStandardPaperManage(showStandardPaperManage);
         paramSettingRepo.saveAndFlush(paramSetting);

+ 4 - 7
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/UserApi.java

@@ -22,10 +22,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import javax.persistence.criteria.Predicate;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -257,9 +254,9 @@ public class UserApi {
      * @return
      */
     @RequestMapping(value = "/list_group", method = RequestMethod.GET)
-    public List<Map<String, Object>> listGroup(@RequestParam Long workId,
-                                               @RequestParam Subject subject,
-                                               @RequestParam(required = false) MarkStage stage) {
+    public Set<Map<String, Object>> listGroup(@RequestParam Long workId,
+                                              @RequestParam Subject subject,
+                                              @RequestParam(required = false) MarkStage stage) {
         return markerGroupLeaderService.listGroupByWorkIdAndSubjectAndStage(workId, subject, stage);
     }
 

+ 8 - 3
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/TrialService.java

@@ -72,6 +72,9 @@ public class TrialService {
     @Autowired
     MarkUserRepo markUserRepo;
 
+    @Autowired
+    MarkerGroupLeaderRepo markerGroupLeaderRepo;
+
     /**
      * 检查任务状态
      *
@@ -196,15 +199,17 @@ public class TrialService {
         paperRepo.delete(paperList);
         //7.删除分组
         markerGroupRepo.deleteBySubjectAndWorkId(subject, workId);
+        // 删除分组内成员
+        markerGroupLeaderRepo.deleteByWorkIdAndSubjectAndStage(workId, subject, MarkStage.LEVEL);
 
         // 所有用户强制退出
         List<MarkUser> userList = markUserRepo.findByWorkIdAndSubject(workId, subject);
-        userList = userList.stream().filter(m-> Role.MARKER.equals(m.getRole()) || Role.MARK_LEADER.equals(m.getRole())).collect(Collectors.toList());
-        if(!CollectionUtils.isEmpty(userList)){
+        userList = userList.stream().filter(m -> Role.MARKER.equals(m.getRole()) || Role.MARK_LEADER.equals(m.getRole())).collect(Collectors.toList());
+        if (!CollectionUtils.isEmpty(userList)) {
             for (MarkUser user : userList) {
                 cacheService.deleteTokenCache(user.getId().toString());
             }
         }
-        dbBackupUtils.startBackup(workId,"试评");
+        dbBackupUtils.startBackup(workId, "试评");
     }
 }

+ 11 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/ParamSetting.java

@@ -38,6 +38,8 @@ public class ParamSetting implements Serializable {
 
     private Integer roundUp;
 
+    private Integer clearData;
+
     private Integer changeStage;
 
     private Integer scoreShowAllPaper;
@@ -61,6 +63,7 @@ public class ParamSetting implements Serializable {
         paramSetting.setMajority(1);
         paramSetting.setLevelShowAllPaper(0);
         paramSetting.setRoundUp(1);
+        paramSetting.setRoundUp(0);
         paramSetting.setChangeStage(0);
         paramSetting.setScoreShowAllPaper(0);
         paramSetting.setPropDenominator(1);
@@ -165,6 +168,14 @@ public class ParamSetting implements Serializable {
         this.roundUp = roundUp;
     }
 
+    public Integer getClearData() {
+        return clearData;
+    }
+
+    public void setClearData(Integer clearData) {
+        this.clearData = clearData;
+    }
+
     public Integer getChangeStage() {
         return changeStage;
     }

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

@@ -24,4 +24,6 @@ public interface ChangeLevelRepo extends JpaRepository<ChangeLevel, Long>, JpaSp
 
     @Query("select s from ChangeLevel s where s.workId = ?1 and s.subject = ?2 and s.paperId = ?3 and s.auditStatus = 1 and s.isCurr = 1")
     ChangeLevel findByWorkIdAndSubjectAndPaperIdAndAuditStatusAndIsCurr(Long workId, String name, Long paperId);
+
+    void deleteByWorkIdAndSubject(Long workId, String name);
 }

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

@@ -16,4 +16,6 @@ public interface MarkerGroupLeaderRepo extends JpaRepository<MarkerGroupLeader,
     List<MarkerGroupLeader> findByWorkIdAndSubjectAndStageAndMarkLeaderId(Long workId, Subject subject, MarkStage stage, Long markLeaderId);
 
     List<MarkerGroupLeader> findByWorkIdAndSubjectAndStageAndGroupId(Long workId, Subject subject, MarkStage level, Long groupId);
+
+    void deleteByWorkIdAndSubjectAndStage(Long workId, Subject subject, MarkStage stage);
 }

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

@@ -416,7 +416,7 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
     long countByWorkIdAndQuestionIdAndIsMissingIsFalse(Long workId, Long questionId);
 
     @Modifying
-    @Query(value = "update paper p set p.score = null, p.score_batch_no = null, p.is_shift = false, p.is_shift_score = false where p.work_id = ?1 and p.subject = ?2", nativeQuery = true)
+    @Query(value = "update paper p set p.is_rejected = false, p.is_tagged = false, p.score = null, p.score_batch_no = null, p.is_shift = false, p.is_shift_score = false, p.is_rejected_by_leader = false where p.work_id = ?1 and p.subject = ?2", nativeQuery = true)
     void updateScoreByWorkIdAndSubject(Long workId, String name);
 
     @Modifying
@@ -442,5 +442,11 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
 
     List<Paper> findByWorkIdAndSubjectAndIsArbitratedTrue(Long workId, Subject subject);
 
+    int countByWorkIdAndSubjectAndIsMissingFalse(Long workId, Subject subject);
+
+    @Modifying
+    @Query("update Paper s set s.level = ?2, s.redoLevel = null where s.id = ?1")
+    void updateLevelById(Long paperId, String originalLevel);
+
 //    List<Paper> findByWorkIdAndSubjectAndInspectRange(Long workId, Subject subject, Long inspectRange);
 }

+ 1 - 1
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MakrerApi.java

@@ -307,7 +307,7 @@ public class MakrerApi {
                 long total = 0;
                 if (propDenominator == 1) {
                     // 全部考生
-                    total = paperRepo.countByWorkIdAndQuestionId(markSubject.getWorkId(), questionId);
+                    total = paperRepo.countByWorkIdAndQuestionIdAndIsMissingIsFalse(markSubject.getWorkId(), questionId);
                 } else if (propDenominator == 2) {
                     // 去除缺考考生
                     total = paperRepo.countByWorkIdAndQuestionIdAndIsMissingIsFalse(markSubject.getWorkId(), questionId);

+ 44 - 44
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkSubjectApi.java

@@ -154,9 +154,9 @@ public class MarkSubjectApi {
             }
         }
         //当前考区总数
-        long total = paperRepo.countByWorkIdAndQuestionId(markSubject.getWorkId(), questionId);
+        long total = paperRepo.countByWorkIdAndQuestionIdAndIsMissingIsFalse(markSubject.getWorkId(), questionId);
         //所有考区总数
-        long gtotal = paperRepo.countByWorkIdAndSubject(markSubject.getWorkId(), markSubject.getSubject());
+        long gtotal = paperRepo.countByWorkIdAndSubjectAndIsMissingFalse(markSubject.getWorkId(), markSubject.getSubject());
         levelStatDTOs.forEach(o -> {
             if (o.getId() != null) {
                 //当前考区档位占比
@@ -203,7 +203,7 @@ public class MarkSubjectApi {
         }
         List<LevelStatDTO> levelStatDTOs = new ArrayList<>();
         List<Level> levels = levelRepo.findByWorkId(markSubject.getWorkId());
-        if (CollectionUtils.isEmpty(paperIds)) {
+//        if (CollectionUtils.isEmpty(paperIds)) {
             paperRepo.countGroupByLevelAll(questionId, markSubject.getTest())
                     .forEach(o -> levelStatDTOs.add(levelStatAssembler.toDTO(o)));
             for (Level level : levels) {
@@ -218,9 +218,9 @@ public class MarkSubjectApi {
                 }
             }
             //当前考区总数
-            long total = paperRepo.countByWorkIdAndQuestionId(markSubject.getWorkId(), questionId);
+            long total = paperRepo.countByWorkIdAndQuestionIdAndIsMissingIsFalse(markSubject.getWorkId(), questionId);
             //所有考区总数
-            long gtotal = paperRepo.countByWorkIdAndSubject(markSubject.getWorkId(), markSubject.getSubject());
+            long gtotal = paperRepo.countByWorkIdAndSubjectAndIsMissingFalse(markSubject.getWorkId(), markSubject.getSubject());
             levelStatDTOs.forEach(o -> {
                 if (o.getId() != null) {
                     //当前考区档位占比
@@ -240,45 +240,45 @@ public class MarkSubjectApi {
                     o.setPt(level.getPt());
                 }
             });
-        } else {
-            paperRepo.countGroupByLevelAllAndIdIn(questionId, markSubject.getTest(), paperIds)
-                    .forEach(o -> levelStatDTOs.add(levelStatAssembler.toDTO(o)));
-            for (Level level : levels) {
-                long count = levelStatDTOs.stream().filter(l -> String.valueOf(l.getId()).equals(level.getCode())).count();
-                //没有该档位,新增
-                if (count == 0) {
-                    LevelStatDTO dto = new LevelStatDTO();
-                    dto.setId(level.getCode());
-                    dto.setCount(0);
-                    dto.setPercent(0.0);
-                    levelStatDTOs.add(dto);
-                }
-            }
-            //当前考区总数
-            long total = paperRepo.countByWorkIdAndQuestionIdAndIdIn(markSubject.getWorkId(), questionId, paperIds);
-            //所有考区总数
-            long gtotal = paperRepo.countByWorkIdAndSubjectAndIdIn(markSubject.getWorkId(), markSubject.getSubject(), paperIds);
-            List<Long> finalPaperIds = paperIds;
-            levelStatDTOs.forEach(o -> {
-                if (o.getId() != null) {
-                    //当前考区档位占比
-                    double p = total == 0 ? 0 : (double) o.getCount() / total * 100;
-                    BigDecimal bd = new BigDecimal(p).setScale(3, RoundingMode.HALF_EVEN);
-                    o.setPercent(bd.doubleValue());
-                    //考区阈值
-                    Level level = levels.stream().filter(l -> l.getCode().equals(o.getId())).collect(Collectors.toList()).get(0);
-                    o.setKdpt(level.getKdpt());
-                    //所有考区档位数量
-                    long gcount = paperRepo.countByWorkIdAndSubjectAndLevelAndIdIn(markSubject.getWorkId(), markSubject.getSubject(), String.valueOf(o.getId()), finalPaperIds);
-                    o.setGcount((int) gcount);
-                    //所有考区档位占比
-                    double gp = gtotal == 0 ? 0 : (double) o.getGcount() / gtotal * 100;
-                    BigDecimal gbd = new BigDecimal(gp).setScale(3, RoundingMode.HALF_EVEN);
-                    o.setGpercent(gbd.doubleValue());
-                    o.setPt(level.getPt());
-                }
-            });
-        }
+//        } else {
+//            paperRepo.countGroupByLevelAllAndIdIn(questionId, markSubject.getTest(), paperIds)
+//                    .forEach(o -> levelStatDTOs.add(levelStatAssembler.toDTO(o)));
+//            for (Level level : levels) {
+//                long count = levelStatDTOs.stream().filter(l -> String.valueOf(l.getId()).equals(level.getCode())).count();
+//                //没有该档位,新增
+//                if (count == 0) {
+//                    LevelStatDTO dto = new LevelStatDTO();
+//                    dto.setId(level.getCode());
+//                    dto.setCount(0);
+//                    dto.setPercent(0.0);
+//                    levelStatDTOs.add(dto);
+//                }
+//            }
+//            //当前考区总数
+//            long total = paperRepo.countByWorkIdAndQuestionIdAndIdIn(markSubject.getWorkId(), questionId, paperIds);
+//            //所有考区总数
+//            long gtotal = paperRepo.countByWorkIdAndSubjectAndIdIn(markSubject.getWorkId(), markSubject.getSubject(), paperIds);
+//            List<Long> finalPaperIds = paperIds;
+//            levelStatDTOs.forEach(o -> {
+//                if (o.getId() != null) {
+//                    //当前考区档位占比
+//                    double p = total == 0 ? 0 : (double) o.getCount() / total * 100;
+//                    BigDecimal bd = new BigDecimal(p).setScale(3, RoundingMode.HALF_EVEN);
+//                    o.setPercent(bd.doubleValue());
+//                    //考区阈值
+//                    Level level = levels.stream().filter(l -> l.getCode().equals(o.getId())).collect(Collectors.toList()).get(0);
+//                    o.setKdpt(level.getKdpt());
+//                    //所有考区档位数量
+//                    long gcount = paperRepo.countByWorkIdAndSubjectAndLevelAndIdIn(markSubject.getWorkId(), markSubject.getSubject(), String.valueOf(o.getId()), finalPaperIds);
+//                    o.setGcount((int) gcount);
+//                    //所有考区档位占比
+//                    double gp = gtotal == 0 ? 0 : (double) o.getGcount() / gtotal * 100;
+//                    BigDecimal gbd = new BigDecimal(gp).setScale(3, RoundingMode.HALF_EVEN);
+//                    o.setGpercent(gbd.doubleValue());
+//                    o.setPt(level.getPt());
+//                }
+//            });
+//        }
         Collections.sort(levelStatDTOs, (o1, o2) -> {
             if (o1.getId() == null || o2.getId() == null) {
                 return 1;

+ 14 - 16
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkTaskApi.java

@@ -118,13 +118,13 @@ public class MarkTaskApi {
         Long scoreBatchNo = null;
         if (stage == MarkStage.LEVEL) {
             List<Object> batchNos = paperRepo.findBatchNoByWorkIdAndSubject(workId, markUser.getSubject().name());
-            if(batchNos !=null && batchNos.size() > 0){
+            if (batchNos != null && batchNos.size() > 0) {
                 Object object = batchNos.get(0);
                 batchNo = Long.valueOf(object.toString());
             }
         } else if (stage == MarkStage.SCORE) {
             List<Object> batchNos = paperRepo.findScoreBatchNoByWorkIdAndSubject(workId, markUser.getSubject().name());
-            if(batchNos !=null && batchNos.size() > 0){
+            if (batchNos != null && batchNos.size() > 0) {
                 Object object = batchNos.get(0);
                 scoreBatchNo = Long.valueOf(object.toString());
             }
@@ -460,8 +460,14 @@ public class MarkTaskApi {
             if (Objects.nonNull(questionId)) {
                 predicates.add(builder.equal(root.get("questionId"), questionId));
             }
-            predicates.add(builder.equal(root.get("isOneClick"), true));
-            return builder.and(predicates.toArray(new Predicate[predicates.size()]));
+            predicates.add(builder.equal(root.get("markByLeader"), true));
+            List<Predicate> list = new ArrayList<>();
+            list.add(builder.equal(root.get("isSample"), true));
+            list.add(builder.equal(root.get("isOneClick"), true));
+            list.add(builder.equal(root.get("isRejectedByLeader"), true));
+            Predicate Pre_And = builder.and(predicates.toArray(new Predicate[predicates.size()]));
+            Predicate Pre_Or = builder.or(list.toArray(new Predicate[list.size()]));
+            return query.where(Pre_And, Pre_Or).getRestriction();
         };
 
         Sort sort = new Sort(Sort.Direction.DESC, "updatedOn");
@@ -490,27 +496,19 @@ public class MarkTaskApi {
                                                 @RequestParam(required = false) Long questionId) {
         MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject.name());
         Long markerId = ServletUtil.getUserId();
-        List<MarkerGroupLeader> markerGroupLeaders = markerGroupLeaderService.listByWorkIdAndSubjectAndStageAndMarkLeaderId(markSubject.getWorkId(), markSubject, markerId);
+        /*List<MarkerGroupLeader> markerGroupLeaders = markerGroupLeaderService.listByWorkIdAndSubjectAndStageAndMarkLeaderId(markSubject.getWorkId(), markSubject, markerId);
         List<Long> paperIds = null;
         if (!CollectionUtils.isEmpty(markerGroupLeaders)) {
             List<Long> markers = markerGroupLeaders.stream().map(m -> m.getMarkerId()).distinct().collect(Collectors.toList());
             paperIds = markerGroupLeaderService.listPaperIdsByWorkIdAndSubjectAndStage(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getStage(), markers);
-        }
+        }*/
 
         List<Level> levels = levelRepo.findByWorkIdOrderByCode(workId);
         List<Paper> papers;
         if (questionId == null) {
-            if(!CollectionUtils.isEmpty(paperIds)) {
-                papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTestAndIdIn(workId, subject, false, TrialEnum.DEFAULT.getId(), paperIds);
-            } else {
-                papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, TrialEnum.DEFAULT.getId());
-            }
+            papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, TrialEnum.DEFAULT.getId());
         } else {
-            if(!CollectionUtils.isEmpty(paperIds)) {
-                papers = paperRepo.findByworkIdAndSubjectAndQuestionIdAndIsMissingAndTestAndIdIn(workId, subject, questionId, false, TrialEnum.DEFAULT.getId(), paperIds);
-            } else {
-                papers = paperRepo.findByworkIdAndSubjectAndQuestionIdAndIsMissingAndTest(workId, subject, questionId, false, TrialEnum.DEFAULT.getId());
-            }
+            papers = paperRepo.findByworkIdAndSubjectAndQuestionIdAndIsMissingAndTest(workId, subject, questionId, false, TrialEnum.DEFAULT.getId());
         }
 
         List<LevelDetailDTO> list = new ArrayList<>();

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

@@ -239,28 +239,50 @@ public class PaperApi {
                 predicates.add(builder.equal(root.get("questionId"), questionId));
             }
             //isScore为true时,为科组长打分详情页面数据查询条件
-            if(isScore) {
-                //level为null时,查询待评数量
-                if (StringUtils.isEmpty(level)) {
-                    predicates.add(builder.isNotNull(root.get("level")));
-                    predicates.add(builder.isNull(root.get("score")));
-                    predicates.add(builder.isNotNull(root.get("scoreBatchNo")));
+            if (isSample != null && isSample) {
+                if (isScore) {
+                    //level为null时,查询待评数量
+                    if (!StringUtils.isEmpty(level)) {
+                        predicates.add(builder.equal(root.get("level"), level));
+                        predicates.add(builder.isNotNull(root.get("score")));
+                    }
                 } else {
-                    predicates.add(builder.equal(root.get("level"), level));
-                    predicates.add(builder.isNotNull(root.get("score")));
+                    if (!StringUtils.isEmpty(level)) {
+                        predicates.add(builder.equal(root.get("level"), level));
+                        predicates.add(builder.isNotNull(root.get("batchNo")));
+                    }
+//                    if (!CollectionUtils.isEmpty(finalPaperIds)) {
+//                        CriteriaBuilder.In<Object> in = builder.in(root.get("id"));
+//                        for (Long id : finalPaperIds) {
+//                            in.value(id);
+//                        }
+//                        predicates.add(builder.and(builder.and(in)));
+//                    }
                 }
             } else {
-                if (StringUtils.isEmpty(level)) {
-                    predicates.add(builder.isNull(root.get("level")));
-                    //查询当前批次号数据
-//                predicates.add(builder.equal(root.get("batchNo"), batchNo));
+                if (isScore) {
+                    //level为null时,查询待评数量
+                    if (StringUtils.isEmpty(level)) {
+                        predicates.add(builder.isNotNull(root.get("level")));
+                        predicates.add(builder.isNull(root.get("score")));
+                        predicates.add(builder.isNotNull(root.get("scoreBatchNo")));
+                    } else {
+                        predicates.add(builder.equal(root.get("level"), level));
+                        predicates.add(builder.isNotNull(root.get("score")));
+                    }
                 } else {
-                    predicates.add(builder.equal(root.get("level"), level));
-                    if(Objects.nonNull(isSample) && !isSample) {
-                        predicates.add(builder.isNotNull(root.get("batchNo")));
+                    if (StringUtils.isEmpty(level)) {
+                        predicates.add(builder.isNull(root.get("level")));
+                        //查询当前批次号数据
+//                predicates.add(builder.equal(root.get("batchNo"), batchNo));
+                    } else {
+                        predicates.add(builder.equal(root.get("level"), level));
+                        if (Objects.nonNull(isSample) && !isSample) {
+                            predicates.add(builder.isNotNull(root.get("batchNo")));
+                        }
                     }
                 }
-                if(!CollectionUtils.isEmpty(finalPaperIds)) {
+                if (!CollectionUtils.isEmpty(finalPaperIds)) {
                     CriteriaBuilder.In<Object> in = builder.in(root.get("id"));
                     for (Long id : finalPaperIds) {
                         in.value(id);
@@ -306,14 +328,20 @@ public class PaperApi {
         String action = body.get("action");
         String level = body.get("level");
         String tagged = body.get("tagged");
-        //需要打回的评卷员
-        String ranges = body.get("range");
         if (action != null && level != null) {
             if (action.equals("leveling")) {
+                paper.setOneClick(true);
+                paper.setRejectedByLeader(false);
                 markingService.levelMarkPaper(paper, level, false);
             } else if (action.equals("sampling")) {
+                paper.setOneClick(false);
+                paper.setRejectedByLeader(false);
                 markingService.levelMarkPaper(paper, level, true);
             } else if (action.equals("reject")) {
+                paper.setOneClick(false);
+                paper.setRejectedByLeader(true);
+                //需要打回的评卷员
+                String ranges = body.get("range");
                 markingService.reject(paper, level, ranges);
             }
         }
@@ -343,14 +371,20 @@ public class PaperApi {
             String[] ids = paperIds.split(",");
             for (String id : ids) {
                 Paper paper = paperRepo.findOne(Long.valueOf(id));
-                //需要打回的评卷员
-                String ranges = body.get("range");
                 if (action != null && level != null) {
                     if (action.equals("leveling")) {
+                        paper.setOneClick(true);
+                        paper.setRejectedByLeader(false);
                         markingService.levelMarkPaper(paper, level, false);
                     } else if (action.equals("sampling")) {
+                        paper.setOneClick(false);
+                        paper.setRejectedByLeader(false);
                         markingService.levelMarkPaper(paper, level, true);
                     } else if (action.equals("reject")) {
+                        paper.setOneClick(false);
+                        paper.setRejectedByLeader(true);
+                        //需要打回的评卷员
+                        String ranges = body.get("range");
                         markingService.reject(paper, level, ranges);
                     }
                 }

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

@@ -114,6 +114,7 @@ public class PaperAssembler {
             paperDTO.setPaperTest(paper.getTest());
             paperDTO.setShift(paper.isShift());
             paperDTO.setShiftScore(paper.isShiftScore());
+            paperDTO.setOneClick(paper.isOneClick());
             paperDTO.setIsRejectedByLeader(paper.isRejectedByLeader() == null ? false : paper.isRejectedByLeader());
             //打回总次数
             int rejectedCount = markLogRepo.countByWorkIdAndPaperIdAndOperType(paper.getWorkId(), paper.getId(), MarkLogOperType.CALLBACK_LEVEl.getId());

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

@@ -53,6 +53,7 @@ public class PaperDTO implements Serializable{
     private int sortSum;
     //考生姓名
     private String studentName;
+    private boolean isOneClick;
     private List<MarkTaskDTO> markResults = new ArrayList<>();
 
     public int getPaperTest() {
@@ -330,4 +331,12 @@ public class PaperDTO implements Serializable{
     public void setPaperId(Long paperId) {
         this.paperId = paperId;
     }
+
+    public boolean isOneClick() {
+        return isOneClick;
+    }
+
+    public void setOneClick(boolean oneClick) {
+        isOneClick = oneClick;
+    }
 }

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

@@ -263,7 +263,7 @@ public class AssignTaskService {
             markSubjectRepo.saveAndFlush(markSubject);
         }
         //只有全部任务投放完成,才能删除分组
-        int count = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndBatchNoIsNullAndTest(markSubject.getWorkId(), markSubject.getSubject(), 0);
+//        int count = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndBatchNoIsNullAndTest(markSubject.getWorkId(), markSubject.getSubject(), 0);
         //进入分档阶段后,清空当前分组,以便打分阶段前重新分组
         /*if (MarkStage.LEVEL.equals(markSubject.getStage()) && count == 0) {
             for (MarkerGroup markerGroup : markerGroups) {

+ 29 - 27
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkerGroupLeaderService.java

@@ -49,27 +49,29 @@ public class MarkerGroupLeaderService {
         }
         Set<MarkUser> groupMarkers = markerGroup.getMarkers();
         List<MarkUser> markLeaders = groupMarkers.stream().filter(m -> Role.MARK_LEADER.equals(m.getRole())).collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(markLeaders)) {
+            throw new RuntimeException("每个分组至少有一个科组长");
+        }
         MarkerGroup group = markerGroupRepo.save(markerGroup);
-        if (!CollectionUtils.isEmpty(markLeaders)) {
-            List<MarkUser> markers = groupMarkers.stream().filter(m -> Role.MARKER.equals(m.getRole())).collect(Collectors.toList());
-            if (!CollectionUtils.isEmpty(markers)) {
-                List<MarkerGroupLeader> leaderList = new ArrayList<>();
-                for (MarkUser markLeader : markLeaders) {
-                    for (MarkUser marker : markers) {
-                        MarkerGroupLeader markerGroupLeader = new MarkerGroupLeader();
-                        markerGroupLeader.setWorkId(markerGroup.getWorkId());
-                        markerGroupLeader.setSubject(markerGroup.getSubject());
-                        markerGroupLeader.setStage(stage);
-                        markerGroupLeader.setGroupId(group.getId());
-                        markerGroupLeader.setGroupName(group.getName());
-                        markerGroupLeader.setMarkLeaderId(markLeader.getId());
-                        markerGroupLeader.setMarkerId(marker.getId());
-                        leaderList.add(markerGroupLeader);
-                    }
+        List<MarkUser> markers = groupMarkers.stream().filter(m -> Role.MARKER.equals(m.getRole())).collect(Collectors.toList());
+        if (!CollectionUtils.isEmpty(markers)) {
+            List<MarkerGroupLeader> leaderList = new ArrayList<>();
+            for (MarkUser markLeader : markLeaders) {
+                for (MarkUser marker : markers) {
+                    MarkerGroupLeader markerGroupLeader = new MarkerGroupLeader();
+                    markerGroupLeader.setWorkId(markerGroup.getWorkId());
+                    markerGroupLeader.setSubject(markerGroup.getSubject());
+                    markerGroupLeader.setStage(stage);
+                    markerGroupLeader.setGroupId(group.getId());
+                    markerGroupLeader.setGroupName(group.getName());
+                    markerGroupLeader.setMarkLeaderId(markLeader.getId());
+                    markerGroupLeader.setMarkerId(marker.getId());
+                    leaderList.add(markerGroupLeader);
                 }
-                markerGroupLeaderRepo.save(leaderList);
             }
+            markerGroupLeaderRepo.save(leaderList);
         }
+
         return group;
     }
 
@@ -140,7 +142,7 @@ public class MarkerGroupLeaderService {
     public List<Long> listPaperIdsByWorkIdAndSubjectAndStage(Long workId, Subject subject, MarkStage stage, List<Long> markers) {
         List<Object[]> papers = markTaskRepo.findByWorkIdAndSubjectAndStage(workId, subject.name(), stage.ordinal());
         if (!CollectionUtils.isEmpty(papers)) {
-            List<Long> paperIds = papers.stream().filter(m->markers.contains(Long.valueOf(m[1].toString()))).map(m -> Long.valueOf(m[0].toString())).distinct().collect(Collectors.toList());
+            List<Long> paperIds = papers.stream().filter(m -> markers.contains(Long.valueOf(m[1].toString()))).map(m -> Long.valueOf(m[0].toString())).distinct().collect(Collectors.toList());
             return paperIds;
         }
         return null;
@@ -166,15 +168,14 @@ public class MarkerGroupLeaderService {
      * @param stage
      * @return
      */
-    public List<Map<String, Object>> listGroupByWorkIdAndSubjectAndStage(Long workId, Subject subject, MarkStage stage) {
+    public Set<Map<String, Object>> listGroupByWorkIdAndSubjectAndStage(Long workId, Subject subject, MarkStage stage) {
         stage = Objects.isNull(stage) ? MarkStage.LEVEL : stage;
         List<MarkerGroupLeader> markerGroupLeaders = markerGroupLeaderRepo.findByWorkIdAndSubjectAndStage(workId, subject, stage);
-        Map<Long, String> map = markerGroupLeaders.stream().collect(Collectors.toMap(m -> m.getGroupId(), m -> m.getGroupName()));
-        List<Map<String, Object>> list = new ArrayList<>();
-        for (Map.Entry<Long, String> entry : map.entrySet()) {
+        Set<Map<String, Object>> list = new HashSet<>();
+        for (MarkerGroupLeader markerGroupLeader : markerGroupLeaders) {
             Map<String, Object> stringMap = new HashMap<>();
-            stringMap.computeIfAbsent("groupId", v -> entry.getKey());
-            stringMap.computeIfAbsent("groupName", v -> entry.getValue());
+            stringMap.computeIfAbsent("groupId", v -> markerGroupLeader.getGroupId());
+            stringMap.computeIfAbsent("groupName", v -> markerGroupLeader.getGroupName());
             list.add(stringMap);
         }
         return list;
@@ -182,6 +183,7 @@ public class MarkerGroupLeaderService {
 
     /**
      * 根据分组查询组内评卷员
+     *
      * @param workId
      * @param subject
      * @param level
@@ -189,13 +191,13 @@ public class MarkerGroupLeaderService {
      * @return
      */
     public List<Long> listByWorkIdAndSubjectAndStageAndGroupId(Long workId, Subject subject, MarkStage level, Long groupId) {
-        if(Objects.isNull(groupId)){
+        if (Objects.isNull(groupId)) {
             return null;
         }
         List<MarkerGroupLeader> markerGroupLeaders = markerGroupLeaderRepo.findByWorkIdAndSubjectAndStageAndGroupId(workId, subject, level, groupId);
         List<Long> markerIds = null;
-        if(!CollectionUtils.isEmpty(markerGroupLeaders)){
-            markerIds = markerGroupLeaders.stream().map(m->m.getMarkerId()).distinct().collect(Collectors.toList());
+        if (!CollectionUtils.isEmpty(markerGroupLeaders)) {
+            markerIds = markerGroupLeaders.stream().map(m -> m.getMarkerId()).distinct().collect(Collectors.toList());
         }
         return markerIds;
     }

+ 32 - 16
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingService.java

@@ -72,9 +72,15 @@ public class MarkingService {
     @Autowired
     MarkerGroupRepo markerGroupRepo;
 
+    @Autowired
+    MarkerGroupLeaderRepo markerGroupLeaderRepo;
+
     @Autowired
     TaskPublishSettingRepo taskPublishSettingRepo;
 
+    @Autowired
+    ChangeLevelRepo changeLevelRepo;
+
     @Autowired
     private CacheService cacheService;
 
@@ -102,7 +108,7 @@ public class MarkingService {
         MarkUser maker = markUserRepo.findOne(markTask.getMarkerId());
 
         List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
-        Level level = levels.stream().filter(m->levelCode.equals(m.getCode())).findFirst().get();
+        Level level = levels.stream().filter(m -> levelCode.equals(m.getCode())).findFirst().get();
 
         markTask.setResult(levelCode);
         markTask.setLevelValue(level.getLevelValue());
@@ -124,7 +130,7 @@ 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())){
+            if (Objects.nonNull(determine) && Objects.nonNull(determine.getResult())) {
                 markTask.setDateMineResult(determine.getResult());
             }
             //1.过半定档
@@ -300,6 +306,7 @@ public class MarkingService {
         paper.reject(redoLevel);
         //科组长打回标记
         paper.setRejectedByLeader(true);
+        paper.setMarkByLeader(true);
         //打回后撤销标准卷
         paper.setSample(false);
         List<MarkTask> markTasks = markTaskRepo.findByPaperIdAndStage(paper.getId(), MarkStage.LEVEL);
@@ -402,27 +409,36 @@ public class MarkingService {
         markUserRepo.updateByWorkIdAndSubject(workId, subject);
         // 删除mark_group分组
         markerGroupRepo.deleteBySubjectAndWorkId(subject, workId);
-        if (MarkStage.SCORE.equals(stage)) {
-            // 打分阶段
+        // 删除各组成员
+        markerGroupLeaderRepo.deleteByWorkIdAndSubjectAndStage(workId, subject, stage);
+        // 分档阶段
+        if (MarkStage.LEVEL.equals(stage)) {
+            // 清除paper中的档位,各种状态
+            paperRepo.updateLevelByWorkIdAndSubject(workId, subject.name());
+        }
+        // 打分阶段
+        else if (MarkStage.SCORE.equals(stage)) {
             // 清除paper中的分数
             paperRepo.updateScoreByWorkIdAndSubject(workId, subject.name());
-            //初始化打分任务数据
             // 删除task_publish_setting数据
             taskPublishSettingRepo.deleteByWorkIdAndSubject(workId, subject.name());
-            // 重新计算打分数量
+            //初始化打分任务数据
             assignTaskService.initTaskPublishData(workId, subject.name());
-        } else if (MarkStage.LEVEL.equals(stage)) {
-            // 分档阶段
-            // 清除paper中的档位,各种状态
-            paperRepo.updateLevelByWorkIdAndSubject(workId, subject.name());
+            // 还原改档审核同意前的档位(第一步)
+            List<ChangeLevel> changeLevels = changeLevelRepo.findByWorkIdAndSubjectAndAuditStatus(workId, subject.name());
+            for (ChangeLevel changeLevel : changeLevels) {
+                paperRepo.updateLevelById(changeLevel.getPaperId(), changeLevel.getOriginalLevel());
+            }
+            // 清除改档打分记录(第二步)
+            changeLevelRepo.deleteByWorkIdAndSubject(workId, subject.name());
         } else {
             throw new RuntimeException("当前阶段无法重置数据");
         }
 
         // 所有用户强制退出
         List<MarkUser> userList = markUserRepo.findByWorkIdAndSubject(workId, subject);
-        userList = userList.stream().filter(m-> Role.MARKER.equals(m.getRole()) || Role.MARK_LEADER.equals(m.getRole())).collect(Collectors.toList());
-        if(!CollectionUtils.isEmpty(userList)){
+        userList = userList.stream().filter(m -> Role.MARKER.equals(m.getRole()) || Role.MARK_LEADER.equals(m.getRole())).collect(Collectors.toList());
+        if (!CollectionUtils.isEmpty(userList)) {
             for (MarkUser user : userList) {
                 cacheService.deleteTokenCache(user.getId().toString());
             }
@@ -448,12 +464,12 @@ public class MarkingService {
         return null;
     }
 
-    public static Integer calcSortNum(Paper paper, List<MarkTask> markTaskList, List<Level> levels){
+    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){
+        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();
+                int sum = markTaskList.stream().mapToInt(m -> map.get(m.getResult()) == null ? 0 : map.get(m.getResult())).sum();
                 return sum;
             }
         }