Browse Source

联考版-v3.1.0-测试bug修改

xiaof 2 years ago
parent
commit
1dc03018f8

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

@@ -147,7 +147,7 @@ public class ParamApi {
         }
 
         RoughLevelConfig oldRoughLevelConfig = JSON.parseObject(paramSetting.getRoughLevelConfig(), RoughLevelConfig.class);
-        if ((markSubjects == null || markSubjects.isEmpty()) && countMarkTasks > 0) {
+        if (markSubjects != null && !markSubjects.isEmpty() && countMarkTasks > 0) {
             if (!Objects.equals(deviation, oldRoughLevelConfig.getDeviation())) {
                 throw new RuntimeException("评卷工作已有正评数据,不能修改【仲裁档位差】参数");
             }
@@ -169,7 +169,7 @@ public class ParamApi {
         }
 
         // 开启自动打回,打回累计误差必填
-        if(autoCallback == 1 && cumulativeError == null){
+        if (autoCallback == 1 && cumulativeError == null) {
             throw new RuntimeException("系统自动打回已开启,【打回累计误差】必填");
         }
 
@@ -246,22 +246,22 @@ public class ParamApi {
         }
 
         // 开启自动打回,打回累计误差必填
-        if(autoCallback == 1 && cumulativeError == null){
+        if (autoCallback == 1 && cumulativeError == null) {
             throw new RuntimeException("系统自动打回已开启,【打回累计误差】必填");
         }
 
-        if (oldLevelConfig.getRoughLevelEnable() == 1) {
+        if (oldLevelConfig.getRoughLevelEnable() == 1 && roughLevelEnable == 0) {
             List<MarkStage> markStageList1 = Arrays.asList(new MarkStage[]{MarkStage.ROUGH_LEVEL});
             List<MarkSubject> subjectList = markSubjectRepo.findByWorkIdAndTestAndStageIn(workId, TrialEnum.DEFAULT.getId(), markStageList1);
             int roughLevelCount = markTaskRoughLevelRepo.countByWorkId(workId);
             if (!subjectList.isEmpty() || roughLevelCount > 0) {
                 throw new RuntimeException("评卷工作有科目已进入粗分档阶段或者粗分档阶段已有正评数据,不能修改【是否增加粗档位环节】参数为【否】");
             }
-        } else {
+        } else if (oldLevelConfig.getRoughLevelEnable() == 0 && roughLevelEnable == 1) {
             List<MarkStage> markStageList1 = Arrays.asList(new MarkStage[]{MarkStage.LEVEL});
             List<MarkSubject> subjectList = markSubjectRepo.findByWorkIdAndTestAndStageIn(workId, TrialEnum.DEFAULT.getId(), markStageList1);
             if (!subjectList.isEmpty() || countMarkTasks > 0) {
-                throw new RuntimeException("评卷工作有科目已进入粗分档阶段或者粗分档阶段已有正评数据,不能修改【是否增加粗档位环节】参数为【是】");
+                throw new RuntimeException("评卷工作有科目已进入细分档阶段或者细分档阶段已有正评数据,不能修改【是否增加粗档位环节】参数为【是】");
             }
         }
 
@@ -311,7 +311,7 @@ public class ParamApi {
         List<MarkSubject> markSubjects = markSubjectRepo.findByWorkIdAndTestAndStageIn(workId, TrialEnum.DEFAULT.ordinal(), markStageList);
 
         int countMarkTasks = markTaskScoreRepo.countByWorkId(workId);
-        if ((markSubjects == null || markSubjects.isEmpty()) && countMarkTasks > 0) {
+        if (markSubjects != null && !markSubjects.isEmpty() && countMarkTasks > 0) {
             if (!Objects.equals(roundUp, oldScoreConfig.getRoundUp())) {
                 throw new RuntimeException("评卷工作已有正评数据,不能修改【分数处理方式】参数");
             }

+ 1 - 0
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/DataUploadService.java

@@ -532,6 +532,7 @@ public class DataUploadService {
 
         // 采集员ID
         paper.setScanUserId(scanUserId);
+        paper.setSortNum(0);
 
         if (Objects.nonNull(level) && !"".equals(level)) {
             paper.setLevel(level);

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

@@ -382,7 +382,7 @@ public class Paper implements Serializable {
         this.setTagged(true);
         this.setMarkByLeader(false);
         this.setUpdatedOn(new Date());
-        this.setSortNum(null);
+        this.setSortNum(0);
     }
 
     /**
@@ -398,7 +398,7 @@ public class Paper implements Serializable {
         this.setTagged(true);
         this.setMarkByLeader(false);
         this.setUpdatedOn(new Date());
-        this.setSortNum(null);
+        this.setSortNum(0);
     }
 
     /**

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

@@ -375,4 +375,6 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
     @Modifying
     @Query("update Paper s set s.isAdminMark = ?2 where s.id = ?1")
     void updatePaperAdminMarkById(Long paperId, boolean isMark);
+
+    long countByWorkIdAndSubjectAndRoughLevelAndTest(Long workId, Subject subject, String valueOf, int test);
 }

+ 1 - 2
stmms-ms-log/src/main/java/cn/com/qmth/stmms/ms/log/aop/MarkLogAop.java

@@ -397,7 +397,6 @@ public class MarkLogAop {
 
         List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
         List<RoughLevel> roughLevels = DetermineRoughLevelService.parseRoughLevels(levels);
-        Map<String, Integer> levelMap = roughLevels.stream().collect(Collectors.toMap(RoughLevel::getRoughCode, n -> Integer.parseInt(n.getRoughCode())));
 
         Map<Long, String> levelsMap = markTasks.stream().collect(Collectors.toMap(MarkTaskRoughLevel::getMarkerId, o -> o.getResult().toUpperCase()));
         LOGGER.info("this:{} markLogAop异步回调进来了", this);
@@ -414,7 +413,7 @@ public class MarkLogAop {
                     for (ArbitrateCallback.Distance d : list) {
                         for (MarkTaskRoughLevel m : markTasks) {
                             if (Objects.equals(String.valueOf(d.getC()), m.getResult()) && d.getMarkId().longValue() == m.getMarkerId().longValue()) {
-                                m.setDeviationDirection(MarkingRoughLevelService.calcDeviationDirection(levelMap, m.getResult(), daterMineResult));
+                                m.setDeviationDirection(MarkingRoughLevelService.calcDeviationDirection(m.getResult(), daterMineResult));
                                 m.setRejected(true);
                                 m.setOriginLevel(m.getResult());
                                 m.setResult(null);

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

@@ -278,7 +278,7 @@ public class ChangeLevelApi {
 
                 List<MarkTaskRoughLevel> markTasks = markTaskRoughLevelRepo.findByPaperId(paper.getId());
                 List<String> ranges = markTasks.stream().map(m -> m.getMarkerId().toString()).collect(Collectors.toList());
-                markingRoughLevelService.reject(paper, changeLevel.getSuggestLevel(), String.join(",", ranges));
+                markingRoughLevelService.reject(paper, changeLevel.getSuggestLevel(), String.join(",", ranges), true);
 
                 //重置已经打分的数据
                 List<MarkTaskLevel> markTasksLevels = markTaskLevelRepo.findByPaperId(paper.getId());
@@ -295,7 +295,7 @@ public class ChangeLevelApi {
 
                 List<MarkTaskLevel> markTasks = markTaskLevelRepo.findByPaperId(paper.getId());
                 List<String> ranges = markTasks.stream().map(m -> m.getMarkerId().toString()).collect(Collectors.toList());
-                markingLevelService.reject(paper, changeLevel.getSuggestLevel(), String.join(",", ranges));
+                markingLevelService.reject(paper, changeLevel.getSuggestLevel(), String.join(",", ranges), true);
 
                 //重置已经打分的数据
                 List<MarkTaskScore> markTasksScore = markTaskScoreRepo.findByPaperId(paper.getId());

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

@@ -25,6 +25,7 @@ import cn.com.qmth.stmms.ms.marking.dto.QuestionStatDTO;
 import cn.com.qmth.stmms.ms.marking.service.GroupingService;
 import cn.com.qmth.stmms.ms.marking.service.MarkerGroupLeaderService;
 import cn.com.qmth.stmms.ms.marking.service.MarkingService;
+import org.apache.commons.lang.StringUtils;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -902,14 +903,16 @@ public class MakrerApi {
         if (Objects.isNull(subject)) {
             throw new RuntimeException("科目不能为空");
         }
-        if (Objects.isNull(stage) || (!Objects.equals(MarkStage.LEVEL, stage) && !Objects.equals(MarkStage.SCORE, stage))) {
-            throw new RuntimeException("只有分档和打分阶段才能清除");
-        }
         if (Objects.isNull(password)) {
             throw new RuntimeException("密码不能为空");
         }
 
-        if (!loginConfig.adminLoginConfig().getLoginName().equals(loginName)) {
+        String loginNameStr = loginConfig.adminLoginConfig().getLoginName();
+        if(StringUtils.isBlank(loginNameStr)){
+            throw new RuntimeException("没有设置管理员账号");
+        }
+        List<String> loginNames = Arrays.asList(loginNameStr.split(","));
+        if (!loginNames.contains(loginName)) {
             throw new RuntimeException("只有管理员才能操作");
         }
         if (!loginConfig.adminLoginConfig().getPassword().equals(password)) {

+ 114 - 60
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MarkTaskApi.java

@@ -3,10 +3,7 @@ package cn.com.qmth.stmms.ms.marking.api;
 import cn.com.qmth.stmms.ms.commons.lock.LockService;
 import cn.com.qmth.stmms.ms.commons.utils.ServletUtil;
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
-import cn.com.qmth.stmms.ms.core.domain.Level;
-import cn.com.qmth.stmms.ms.core.domain.MarkStage;
-import cn.com.qmth.stmms.ms.core.domain.MarkSubject;
-import cn.com.qmth.stmms.ms.core.domain.Paper;
+import cn.com.qmth.stmms.ms.core.domain.*;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkerGroupLeader;
 import cn.com.qmth.stmms.ms.core.repository.LevelRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkSubjectRepo;
@@ -16,10 +13,7 @@ import cn.com.qmth.stmms.ms.marking.assembler.PaperAssembler;
 import cn.com.qmth.stmms.ms.marking.dto.LevelDetailDTO;
 import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
 import cn.com.qmth.stmms.ms.marking.dto.PaperDTO;
-import cn.com.qmth.stmms.ms.marking.service.MarkTaskLevelService;
-import cn.com.qmth.stmms.ms.marking.service.MarkTaskRoughLevelService;
-import cn.com.qmth.stmms.ms.marking.service.MarkTaskScoreService;
-import cn.com.qmth.stmms.ms.marking.service.MarkerGroupLeaderService;
+import cn.com.qmth.stmms.ms.marking.service.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -312,61 +306,121 @@ public class MarkTaskApi {
                                                 @RequestParam(required = false) Long questionId) {
         MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject.name());
 
-        List<Level> levels = levelRepo.findByWorkIdOrderByCode(workId);
-        List<Paper> papers;
-        if (questionId == null) {
-            papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, markSubject.getTest());
-        } else {
-            papers = paperRepo.findByWorkIdAndSubjectAndQuestionIdAndIsMissingAndTest(workId, subject, questionId, false, markSubject.getTest());
-        }
+        if (MarkStage.ROUGH_LEVEL.equals(markSubject.getStage())) {
+            List<Level> levels = levelRepo.findByWorkIdOrderByCode(workId);
+            List<RoughLevel> roughLevels = DetermineRoughLevelService.parseRoughLevels(levels);
+            List<Paper> papers;
+            if (questionId == null) {
+                papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, markSubject.getTest());
+            } else {
+                papers = paperRepo.findByWorkIdAndSubjectAndQuestionIdAndIsMissingAndTest(workId, subject, questionId, false, markSubject.getTest());
+            }
+
+
+            long gtotal = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndTest(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getTest());
+            List<LevelDetailDTO> list = new ArrayList<>();
+            for (RoughLevel level : roughLevels) {
+                LevelDetailDTO levelDetailDTO = new LevelDetailDTO();
+                levelDetailDTO.setWorkId(workId);
+                levelDetailDTO.setSubjectName(markSubject.getName());
+                //档位
+                levelDetailDTO.setCode(level.getRoughCode());
+                levelDetailDTO.setMinScore(level.getMinScore());
+                levelDetailDTO.setMaxScore(level.getMaxScore());
+                //数量
+                long count = papers.stream().filter(m -> Objects.nonNull(m.getRoughLevel()) && Objects.equals(level.getRoughCode(), m.getRoughLevel())).count();
+                levelDetailDTO.setLevelCount((int) count);
+                BigDecimal prop = papers.isEmpty() ? new BigDecimal("0") : new BigDecimal(String.valueOf(count * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
+                //占比
+                levelDetailDTO.setLevelProp(prop.doubleValue());
+                //预设占比
+                levelDetailDTO.setExamLevelProp(0);
+                //差值
+//                BigDecimal diff = prop.subtract(new BigDecimal(String.valueOf(level.getPt())));
+                levelDetailDTO.setDiffProp(0);
+                //累计数量
+                int sumCount = (int) (list.stream().mapToInt(LevelDetailDTO::getLevelCount).sum() + count);
+                levelDetailDTO.setCumulateCount(sumCount);
+                //累计占比
+                BigDecimal cumulateProp = papers.isEmpty() ? new BigDecimal("0") : new BigDecimal(String.valueOf(sumCount * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
+                levelDetailDTO.setCumulateProp(cumulateProp.doubleValue());
+
+                //调整
+//                int adjustment = new BigDecimal(String.valueOf(papers.size())).multiply(diff.divide(new BigDecimal("100"))).intValue();
+                levelDetailDTO.setAdjustmentCount(0);
+
+                //考区阈值
+                levelDetailDTO.setKdpt(0);
+                levelDetailDTO.setPt(0);
+                //所有考区档位数量
+                long gcount = paperRepo.countByWorkIdAndSubjectAndRoughLevelAndTest(markSubject.getWorkId(), markSubject.getSubject(), String.valueOf(level.getRoughCode()), markSubject.getTest());
+                levelDetailDTO.setGcount((int) gcount);
+                //所有考区档位占比
+                double gp = gtotal == 0 ? 0 : (double) levelDetailDTO.getGcount() / gtotal * 100;
+                BigDecimal gbd = new BigDecimal(gp).setScale(2, RoundingMode.HALF_EVEN);
+                levelDetailDTO.setGpercent(gbd.doubleValue());
+
+                list.add(levelDetailDTO);
+            }
+            return list;
+        } else if (MarkStage.LEVEL.equals(markSubject.getStage())) {
+            List<Level> levels = levelRepo.findByWorkIdOrderByCode(workId);
+            List<Paper> papers;
+            if (questionId == null) {
+                papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, markSubject.getTest());
+            } else {
+                papers = paperRepo.findByWorkIdAndSubjectAndQuestionIdAndIsMissingAndTest(workId, subject, questionId, false, markSubject.getTest());
+            }
 
 
-        long gtotal = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndTest(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getTest());
-        List<LevelDetailDTO> list = new ArrayList<>();
-        for (Level level : levels) {
-            LevelDetailDTO levelDetailDTO = new LevelDetailDTO();
-            levelDetailDTO.setWorkId(workId);
-            levelDetailDTO.setSubjectName(markSubject.getName());
-            //档位
-            levelDetailDTO.setCode(level.getCode());
-            levelDetailDTO.setMinScore(level.getMinScore());
-            levelDetailDTO.setMaxScore(level.getMaxScore());
-            //数量
-            long count = papers.stream().filter(m -> Objects.nonNull(m.getLevel()) && Objects.equals(level.getCode(), m.getLevel())).count();
-            levelDetailDTO.setLevelCount((int) count);
-            BigDecimal prop = papers.isEmpty() ? new BigDecimal("0") : new BigDecimal(String.valueOf(count * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
-            //占比
-            levelDetailDTO.setLevelProp(prop.doubleValue());
-            //预设占比
-            levelDetailDTO.setExamLevelProp(level.getPt());
-            //差值
-            BigDecimal diff = prop.subtract(new BigDecimal(String.valueOf(level.getPt())));
-            levelDetailDTO.setDiffProp(diff.doubleValue());
-            //累计数量
-            int sumCount = (int) (list.stream().mapToInt(LevelDetailDTO::getLevelCount).sum() + count);
-            levelDetailDTO.setCumulateCount(sumCount);
-            //累计占比
-            BigDecimal cumulateProp = papers.isEmpty() ? new BigDecimal("0") : new BigDecimal(String.valueOf(sumCount * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
-            levelDetailDTO.setCumulateProp(cumulateProp.doubleValue());
-
-            //调整
-            int adjustment = new BigDecimal(String.valueOf(papers.size())).multiply(diff.divide(new BigDecimal("100"))).intValue();
-            levelDetailDTO.setAdjustmentCount(adjustment);
-
-            //考区阈值
-            levelDetailDTO.setKdpt(level.getKdpt());
-            levelDetailDTO.setPt(level.getPt());
-            //所有考区档位数量
-            long gcount = paperRepo.countByWorkIdAndSubjectAndLevelAndTest(markSubject.getWorkId(), markSubject.getSubject(), String.valueOf(level.getCode()), markSubject.getTest());
-            levelDetailDTO.setGcount((int) gcount);
-            //所有考区档位占比
-            double gp = gtotal == 0 ? 0 : (double) levelDetailDTO.getGcount() / gtotal * 100;
-            BigDecimal gbd = new BigDecimal(gp).setScale(2, RoundingMode.HALF_EVEN);
-            levelDetailDTO.setGpercent(gbd.doubleValue());
-
-            list.add(levelDetailDTO);
+            long gtotal = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndTest(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getTest());
+            List<LevelDetailDTO> list = new ArrayList<>();
+            for (Level level : levels) {
+                LevelDetailDTO levelDetailDTO = new LevelDetailDTO();
+                levelDetailDTO.setWorkId(workId);
+                levelDetailDTO.setSubjectName(markSubject.getName());
+                //档位
+                levelDetailDTO.setCode(level.getCode());
+                levelDetailDTO.setMinScore(level.getMinScore());
+                levelDetailDTO.setMaxScore(level.getMaxScore());
+                //数量
+                long count = papers.stream().filter(m -> Objects.nonNull(m.getLevel()) && Objects.equals(level.getCode(), m.getLevel())).count();
+                levelDetailDTO.setLevelCount((int) count);
+                BigDecimal prop = papers.isEmpty() ? new BigDecimal("0") : new BigDecimal(String.valueOf(count * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
+                //占比
+                levelDetailDTO.setLevelProp(prop.doubleValue());
+                //预设占比
+                levelDetailDTO.setExamLevelProp(level.getPt());
+                //差值
+                BigDecimal diff = prop.subtract(new BigDecimal(String.valueOf(level.getPt())));
+                levelDetailDTO.setDiffProp(diff.doubleValue());
+                //累计数量
+                int sumCount = (int) (list.stream().mapToInt(LevelDetailDTO::getLevelCount).sum() + count);
+                levelDetailDTO.setCumulateCount(sumCount);
+                //累计占比
+                BigDecimal cumulateProp = papers.isEmpty() ? new BigDecimal("0") : new BigDecimal(String.valueOf(sumCount * 100)).divide(new BigDecimal(String.valueOf(papers.size())), 2, BigDecimal.ROUND_HALF_UP);
+                levelDetailDTO.setCumulateProp(cumulateProp.doubleValue());
+
+                //调整
+                int adjustment = new BigDecimal(String.valueOf(papers.size())).multiply(diff.divide(new BigDecimal("100"))).intValue();
+                levelDetailDTO.setAdjustmentCount(adjustment);
+
+                //考区阈值
+                levelDetailDTO.setKdpt(level.getKdpt());
+                levelDetailDTO.setPt(level.getPt());
+                //所有考区档位数量
+                long gcount = paperRepo.countByWorkIdAndSubjectAndLevelAndTest(markSubject.getWorkId(), markSubject.getSubject(), String.valueOf(level.getCode()), markSubject.getTest());
+                levelDetailDTO.setGcount((int) gcount);
+                //所有考区档位占比
+                double gp = gtotal == 0 ? 0 : (double) levelDetailDTO.getGcount() / gtotal * 100;
+                BigDecimal gbd = new BigDecimal(gp).setScale(2, RoundingMode.HALF_EVEN);
+                levelDetailDTO.setGpercent(gbd.doubleValue());
+
+                list.add(levelDetailDTO);
+            }
+            return list;
         }
-        return list;
+        return null;
     }
 
     /**

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

@@ -362,8 +362,13 @@ public class PaperApi {
             predicates.add(builder.equal(root.get("isMissing"), false));
             return builder.and(predicates.toArray(new Predicate[predicates.size()]));
         };
-
-        Sort sort = new Sort(Sort.Direction.DESC, "isSample", "sortNum");
+        String[] sortProperties = new String[]{"isSample", "sortNum"};
+        if (MarkStage.ROUGH_LEVEL.equals(markSubject.getStage())) {
+            sortProperties =  new String[]{"isRoughSample", "sortNum"};
+        } else if (MarkStage.LEVEL.equals(markSubject.getStage())) {
+            sortProperties =  new String[]{"isSample", "sortNum"};
+        }
+        Sort sort = new Sort(Sort.Direction.DESC, sortProperties);
         Pageable pageable1 = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), sort);
         Page<Paper> papers = paperRepo.findAll(specification, pageable1);
         List<PaperDTO> paperDTOs = new ArrayList<>();
@@ -406,10 +411,12 @@ public class PaperApi {
                 paper.setRejectedByLeader(true);
                 //需要打回的评卷员
                 String ranges = body.get("range");
+                String leaderConfirmStr = body.get("leaderConfirm");
+                boolean leaderConfirm = leaderConfirmStr == null || "".equals(leaderConfirmStr) || Boolean.parseBoolean(leaderConfirmStr);
                 if (MarkStage.ROUGH_LEVEL.equals(stage)) {
-                    markingRoughLevelService.reject(paper, level, ranges);
+                    markingRoughLevelService.reject(paper, level, ranges, leaderConfirm);
                 } else if (MarkStage.LEVEL.equals(stage)) {
-                    markingLevelService.reject(paper, level, ranges);
+                    markingLevelService.reject(paper, level, ranges, leaderConfirm);
                 }
             }
         }
@@ -462,10 +469,12 @@ public class PaperApi {
                         paper.setRejectedByLeader(true);
                         //需要打回的评卷员
                         String ranges = body.get("range");
+                        String leaderConfirmStr = body.get("leaderConfirm");
+                        boolean leaderConfirm = leaderConfirmStr == null || "".equals(leaderConfirmStr) || Boolean.parseBoolean(leaderConfirmStr);
                         if (MarkStage.ROUGH_LEVEL.equals(stage)) {
-                            markingRoughLevelService.reject(paper, level, ranges);
+                            markingRoughLevelService.reject(paper, level, ranges, leaderConfirm);
                         } else if (MarkStage.LEVEL.equals(stage)) {
-                            markingLevelService.reject(paper, level, ranges);
+                            markingLevelService.reject(paper, level, ranges, leaderConfirm);
                         }
                     }
                 }
@@ -492,23 +501,43 @@ public class PaperApi {
     @Transactional
     public ResponseEntity cancelSample(@RequestBody HashMap<String, String> body) {
         String paperIds = body.get("paperIds");
+        String stage = body.get("stage");
         if (paperIds.length() > 0) {
             String[] ids = paperIds.split(",");
-            for (String id : ids) {
-                Paper paper = paperRepo.findOne(Long.valueOf(id));
-                paper.determineLevel(null);
-                paper.setMarkByLeader(false);
-                paper.setSample(false);
-                paperRepo.save(paper);
-
-                List<MarkTaskLevel> markTasks = markTaskLevelRepo.findByPaperIdAndStage(paper.getId(), MarkStage.LEVEL);
-                for (MarkTaskLevel markTask : markTasks) {
-                    markTask.setResult(null);
-                    markTask.setLevel(null);
-                    markTask.setSample(false);
-                    markTaskLevelRepo.save(markTask);
+            if(MarkStage.ROUGH_LEVEL.name().equals(stage)){
+                for (String id : ids) {
+                    Paper paper = paperRepo.findOne(Long.valueOf(id));
+                    paper.determineRoughLevel(null);
+                    paper.setMarkByLeader(false);
+                    paper.setRoughSample(false);
+                    paperRepo.save(paper);
+
+                    List<MarkTaskRoughLevel> markTasks = markTaskRoughLevelRepo.findByPaperIdAndStage(paper.getId(), MarkStage.ROUGH_LEVEL);
+                    for (MarkTaskRoughLevel markTask : markTasks) {
+                        markTask.setResult(null);
+                        markTask.setLevel(null);
+                        markTask.setSample(false);
+                        markTaskRoughLevelRepo.save(markTask);
+                    }
+                }
+            } else if(MarkStage.LEVEL.name().equals(stage)){
+                for (String id : ids) {
+                    Paper paper = paperRepo.findOne(Long.valueOf(id));
+                    paper.determineLevel(null);
+                    paper.setMarkByLeader(false);
+                    paper.setSample(false);
+                    paperRepo.save(paper);
+
+                    List<MarkTaskLevel> markTasks = markTaskLevelRepo.findByPaperIdAndStage(paper.getId(), MarkStage.LEVEL);
+                    for (MarkTaskLevel markTask : markTasks) {
+                        markTask.setResult(null);
+                        markTask.setLevel(null);
+                        markTask.setSample(false);
+                        markTaskLevelRepo.save(markTask);
+                    }
                 }
             }
+
             return new ResponseEntity(true, HttpStatus.OK);
         }
         return null;

+ 15 - 13
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/PaperAssembler.java

@@ -82,6 +82,7 @@ public class PaperAssembler {
             paperDTO.setArbitrated(paper.isArbitrated());
             paperDTO.setRejected(paper.isRejected());
             paperDTO.setSample(paper.isSample());
+            paperDTO.setRoughSample(paper.isRoughSample());
             paperDTO.setMarkByLeader(paper.isMarkByLeader());
             paperDTO.setTagged(paper.isTagged());
             paperDTO.setMarkedLogic(paper.isMarkedLogic());
@@ -112,20 +113,21 @@ public class PaperAssembler {
             //打回总次数
             int rejectedCount = markLogRepo.countByWorkIdAndPaperIdAndOperType(paper.getWorkId(), paper.getId(), MarkLogOperType.CALLBACK_LEVEl.getId());
             paperDTO.setRejectedCount(rejectedCount);
+            paperDTO.setSortSum(paper.getSortNum());
             //计算levelValue和(试评阶段不用)
-            if (markSubject.getTest() == 0 && Objects.nonNull(paper.getLevel())) {
-                if (paper.isSample()) {
-                    paperDTO.setSortSum(0);
-                } else {
-                    List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
-                    if (!levels.isEmpty()) {
-                        Map<String, Integer> map = levels.stream().collect(Collectors.toMap(Level::getCode, Level::getWeight));
-                        List<MarkTaskLevel> markTaskList = markTaskLevelRepo.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);
-                    }
-                }
-            }
+//            if (markSubject.getTest() == 0 && Objects.nonNull(paper.getLevel())) {
+//                if (paper.isSample()) {
+//                    paperDTO.setSortSum(0);
+//                } else {
+//                    List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
+//                    if (!levels.isEmpty()) {
+//                        Map<String, Integer> map = levels.stream().collect(Collectors.toMap(Level::getCode, Level::getWeight));
+//                        List<MarkTaskLevel> markTaskList = markTaskLevelRepo.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);
+//                    }
+//                }
+//            }
         }
         return paperDTO;
     }

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

@@ -28,6 +28,7 @@ public class PaperDTO implements Serializable{
     private Date updatedOn;
     private String imgSrc;
     private String thumbSrc;
+    private boolean isRoughSample;
     private boolean isSample;
     private boolean markByLeader;
     private boolean markedLogic;
@@ -193,6 +194,14 @@ public class PaperDTO implements Serializable{
         this.thumbSrc = thumbSrc;
     }
 
+    public boolean isRoughSample() {
+        return isRoughSample;
+    }
+
+    public void setRoughSample(boolean roughSample) {
+        isRoughSample = roughSample;
+    }
+
     public boolean isSample() {
         return isSample;
     }

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

@@ -306,7 +306,7 @@ public class MarkTaskRoughLevelService {
 
             if (ParamCache.roughLevelConfigMap.get(String.valueOf(workId)).getLevelShowAllPaper() == 0) {
                 Long batchNo = paperRepo.findMaxRoughBatchNoByWorkIdAndSubject(workId, subject);
-                predicates.add(builder.equal(root.get("paper").get("batchNo"), batchNo));
+                predicates.add(builder.equal(root.get("paper").get("roughBatchNo"), batchNo));
             }
 
             predicates.add(builder.equal(root.get("workId"), workId));

+ 3 - 3
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingLevelService.java

@@ -131,7 +131,7 @@ public class MarkingLevelService {
                 paper.setRejectedByLeader(true);
                 //需要打回的评卷员
                 String ranges = String.join(",", determine.getRejectTasks());
-                markingLevelService.reject(paper, null, ranges);
+                markingLevelService.reject(paper, null, ranges, true);
             }
             //改档后重新分档,状态改为false
             paper.setShift(false);
@@ -265,7 +265,7 @@ public class MarkingLevelService {
      * @param ranges
      */
     @Transactional
-    public Paper reject(Paper paper, String redoLevel, String ranges) {
+    public Paper reject(Paper paper, String redoLevel, String ranges, boolean leaderConfirm) {
         paper.reject(redoLevel);
         //科组长打回标记
         paper.setRejectedByLeader(true);
@@ -288,7 +288,7 @@ public class MarkingLevelService {
                 String operResult = "-";
                 for (String r : range) {
                     // 建议的档位与其中评委所评档位相同时就不打回给此评委
-                    if (Objects.equals(String.valueOf(markTask.getMarkerId()), r) && (StringUtils.isBlank(redoLevel) || !redoLevel.equals(markTask.getResult()))) {
+                    if (Objects.equals(String.valueOf(markTask.getMarkerId()), r) && (StringUtils.isBlank(redoLevel) || leaderConfirm || !redoLevel.equals(markTask.getResult()))) {
                         markTask.setRejected(true);
                         markTask.setOriginLevel(markTask.getResult());
                         markTask.setResult(null);

+ 15 - 20
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkingRoughLevelService.java

@@ -131,7 +131,7 @@ public class MarkingRoughLevelService {
                 paper.setRejectedByLeader(true);
                 //需要打回的评卷员
                 String ranges = String.join(",", determine.getRejectTasks());
-                markingRoughLevelService.reject(paper, null, ranges);
+                markingRoughLevelService.reject(paper, null, ranges, true);
             }
             //改档后重新分档,状态改为false
             paper.setShift(false);
@@ -264,7 +264,7 @@ public class MarkingRoughLevelService {
      * @param ranges
      */
     @Transactional
-    public Paper reject(Paper paper, String redoLevel, String ranges) {
+    public Paper reject(Paper paper, String redoLevel, String ranges, boolean leaderConfirm) {
         paper.roughReject(redoLevel);
         //科组长打回标记
         paper.setRejectedByLeader(true);
@@ -273,9 +273,6 @@ public class MarkingRoughLevelService {
         paper.setRoughSample(false);
         List<MarkTaskRoughLevel> markTasks = markTaskRoughLevelRepo.findByPaperId(paper.getId());
 
-        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 (MarkTaskRoughLevel markTask : markTasks) {
@@ -285,12 +282,12 @@ public class MarkingRoughLevelService {
                 String operResult = "-";
                 for (String r : range) {
                     // 建议的档位与其中评委所评档位相同时就不打回给此评委
-                    if (Objects.equals(String.valueOf(markTask.getMarkerId()), r) && (StringUtils.isBlank(redoLevel) || !redoLevel.equals(markTask.getResult()))) {
+                    if (Objects.equals(String.valueOf(markTask.getMarkerId()), r) && (StringUtils.isBlank(redoLevel) || leaderConfirm || !redoLevel.equals(markTask.getResult()))) {
                         markTask.setRejected(true);
                         markTask.setOriginLevel(markTask.getResult());
                         markTask.setResult(null);
                         markTask.setLevel(null);
-                        markTask.setDeviationDirection(calcDeviationDirection(levelMap, markTask.getOriginLevel(), redoLevel));
+                        markTask.setDeviationDirection(calcDeviationDirection(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("-");
@@ -334,27 +331,25 @@ public class MarkingRoughLevelService {
     /**
      * 计算偏差方向
      *
-     * @param levelMap
-     * @param result   定档档位
-     * @param level    评卷员打的档位
-     * @return
+     * @param result 定档档位
+     * @param level  评卷员打的档位
+     * @return 正数(偏高) 负数(偏低)
      */
-    public static String calcDeviationDirection(Map<String, Integer> levelMap, String result, String level) {
+    public static String calcDeviationDirection(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 - resultInt);
-            }
+            Integer resultInt = Integer.parseInt(result);
+            Integer levelInt = Integer.parseInt(level);
+            return String.valueOf(levelInt - resultInt);
         }
         return null;
     }
 
     public static Integer calcSortNum(Paper paper, List<MarkTaskRoughLevel> markTaskList, List<Level> levels) {
         //计算levelValue和(试评阶段不用)
-        if (paper.getTest() == 0 && Objects.nonNull(paper.getLevel())) {
-            if (!levels.isEmpty()) {
-                Map<String, Integer> map = levels.stream().collect(Collectors.toMap(Level::getCode, Level::getWeight));
+        List<RoughLevel> roughLevels = DetermineRoughLevelService.parseRoughLevels(levels);
+        if (paper.getTest() == 0 && Objects.nonNull(paper.getRoughLevel())) {
+            if (!roughLevels.isEmpty()) {
+                Map<String, Integer> map = roughLevels.stream().collect(Collectors.toMap(RoughLevel::getRoughCode, RoughLevel::getWeight));
                 return markTaskList.stream().mapToInt(m -> map.get(m.getResult()) == null ? 0 : map.get(m.getResult())).sum();
             }
         }

+ 2 - 2
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/arbitration/ArbitrationService.java

@@ -45,8 +45,8 @@ public class ArbitrationService {
      * @return boolean true超过
      */
     public static boolean overDeviation(int deviation, Set<Integer> sources) {
-        Optional<Integer> maxOptional = sources.stream().max(Comparator.comparing(String::valueOf));
-        Optional<Integer> minOptional = sources.stream().min(Comparator.comparing(String::valueOf));
+        Optional<Integer> maxOptional = sources.stream().max(Integer::compare);
+        Optional<Integer> minOptional = sources.stream().min(Integer::compare);
         int max = 0;
         if (maxOptional.isPresent()) {
             max = maxOptional.get();