Ver código fonte

联考版-v3.1.0-分档模块开发阶段bug修改

xiaof 2 anos atrás
pai
commit
216afa280a

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

@@ -2,14 +2,15 @@ package cn.com.qmth.stmms.ms.admin.api;
 
 import cn.com.qmth.stmms.ms.commons.utils.ServletUtil;
 import cn.com.qmth.stmms.ms.core.cache.ParamCache;
+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.ParamSetting;
 import cn.com.qmth.stmms.ms.core.domain.enums.ParamSettingTypeEnum;
 import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
-import cn.com.qmth.stmms.ms.core.domain.paramsetting.RoughLevelConfig;
 import cn.com.qmth.stmms.ms.core.domain.paramsetting.CollectConfig;
 import cn.com.qmth.stmms.ms.core.domain.paramsetting.LevelConfig;
+import cn.com.qmth.stmms.ms.core.domain.paramsetting.RoughLevelConfig;
 import cn.com.qmth.stmms.ms.core.domain.paramsetting.ScoreConfig;
 import cn.com.qmth.stmms.ms.core.repository.*;
 import com.alibaba.fastjson.JSON;
@@ -38,9 +39,15 @@ public class ParamApi {
     @Resource
     private MarkSubjectRepo markSubjectRepo;
 
+    @Resource
+    private MarkTaskRoughLevelRepo markTaskRoughLevelRepo;
+
     @Resource
     private MarkTaskLevelRepo markTaskLevelRepo;
 
+    @Resource
+    private MarkTaskScoreRepo markTaskScoreRepo;
+
     /**
      * 查询
      *
@@ -70,11 +77,12 @@ public class ParamApi {
         if (paramSetting == null) {
             paramSetting = ParamSetting.init(workId);
         }
-        // todo 需要改查询表,判断粗分档和细分档 20220728
-        int countMarkTasks = markTaskLevelRepo.countByWorkId(workId);
+
+        // 是否全部为采集阶段
+        List<MarkSubject> workIdAndStageNot = markSubjectRepo.findAllByWorkIdAndStageNot(workId, MarkStage.INIT);
 
         CollectConfig oldCollectConfig = JSON.parseObject(paramSetting.getCollectConfig(), CollectConfig.class);
-        if (countMarkTasks > 0 && !Objects.equals(packageScan, oldCollectConfig.getPackageScan())) {
+        if (workIdAndStageNot != null && !workIdAndStageNot.isEmpty() && !Objects.equals(packageScan, oldCollectConfig.getPackageScan())) {
             throw new RuntimeException("该评卷工作当前不是采集阶段,不能修改是【否整包扫描】参数");
         }
         //有采集数据,不能修改采集参数
@@ -103,12 +111,12 @@ public class ParamApi {
     }
 
     /**
-     * 分档规则参数
+     * 分档规则参数
      *
      * @param data data
      */
-    @PostMapping("/level")
-    public ResponseEntity updateLevelParam(@RequestBody String data) {
+    @PostMapping("/rough_level")
+    public ResponseEntity updateFirstLevelParam(@RequestBody String data) {
         Long workId = ServletUtil.getWordId();
         JSONObject object = JSON.parseObject(data);
         Integer deviation = object.getInteger("deviation");
@@ -119,62 +127,57 @@ public class ParamApi {
         Integer levelShowAllPaper = object.getInteger("levelShowAllPaper");
         Integer propDenominator = object.getInteger("propDenominator");
         Integer showStandardPaperManage = object.getInteger("showStandardPaperManage");
-        Integer roughLevelEnable = object.getInteger("roughLevelEnable");
         Integer removeHighAndLow = object.getInteger("removeHighAndLow");
 
         List<MarkSubject> markSubjects = markSubjectRepo.findByWorkIdAndTestNot(workId, TrialEnum.DEFAULT.ordinal());
-        // todo 需要改查询表,判断粗分档和细分档 20220728
-        int countMarkTasks = markTaskLevelRepo.countByWorkId(workId);
+
+        int countMarkTasks = markTaskRoughLevelRepo.countByWorkId(workId);
         //保存分档参数
         ParamSetting paramSetting = paramSettingRepo.findByWorkId(workId);
         if (paramSetting == null) {
             paramSetting = ParamSetting.init(workId);
         }
 
-        LevelConfig oldLevelConfig = JSON.parseObject(paramSetting.getLevelConfig(), LevelConfig.class);
+        RoughLevelConfig oldRoughLevelConfig = JSON.parseObject(paramSetting.getRoughLevelConfig(), RoughLevelConfig.class);
         if ((markSubjects == null || markSubjects.isEmpty()) && countMarkTasks > 0) {
-            if (!Objects.equals(deviation, oldLevelConfig.getDeviation())) {
+            if (!Objects.equals(deviation, oldRoughLevelConfig.getDeviation())) {
                 throw new RuntimeException("该评卷工作已有评卷数据,不能修改【仲裁档位差】参数");
             }
-            if (!Objects.equals(autoCallback, oldLevelConfig.getAutoCallback())) {
+            if (!Objects.equals(autoCallback, oldRoughLevelConfig.getAutoCallback())) {
                 throw new RuntimeException("该评卷工作已有评卷数据,不能修【系统自动打回】参数");
             }
-            if (!Objects.equals(majority, oldLevelConfig.getMajority())) {
+            if (!Objects.equals(majority, oldRoughLevelConfig.getMajority())) {
                 throw new RuntimeException("该评卷工作已有评卷数据,不能修改【是否过半定档】参数");
             }
-            if (!Objects.equals(roughLevelEnable, oldLevelConfig.getRoughLevelEnable())) {
-                throw new RuntimeException("该评卷工作已有评卷数据,不能修改【是否增加粗档位环节】参数");
-            }
-            if (!Objects.equals(removeHighAndLow, oldLevelConfig.getRemoveHighAndLow())) {
+            if (!Objects.equals(removeHighAndLow, oldRoughLevelConfig.getRemoveHighAndLow())) {
                 throw new RuntimeException("该评卷工作已有评卷数据,不能修改【是否开启去高去低再加权评卷】参数");
             }
         }
 
-        oldLevelConfig.setDeviation(deviation);
-        oldLevelConfig.setAutoCallback(autoCallback);
-        oldLevelConfig.setMajority(majority);
-        oldLevelConfig.setTakeBest(takeBest);
-        oldLevelConfig.setLevelShowAllPaper(levelShowAllPaper);
-        oldLevelConfig.setPropDenominator(propDenominator);
-        oldLevelConfig.setShowStandardPaperManage(showStandardPaperManage);
-        oldLevelConfig.setClearData(clearData);
-        oldLevelConfig.setRoughLevelEnable(roughLevelEnable);
-        oldLevelConfig.setRemoveHighAndLow(removeHighAndLow);
+        oldRoughLevelConfig.setDeviation(deviation);
+        oldRoughLevelConfig.setAutoCallback(autoCallback);
+        oldRoughLevelConfig.setMajority(majority);
+        oldRoughLevelConfig.setTakeBest(takeBest);
+        oldRoughLevelConfig.setLevelShowAllPaper(levelShowAllPaper);
+        oldRoughLevelConfig.setPropDenominator(propDenominator);
+        oldRoughLevelConfig.setShowStandardPaperManage(showStandardPaperManage);
+        oldRoughLevelConfig.setClearData(clearData);
+        oldRoughLevelConfig.setRemoveHighAndLow(removeHighAndLow);
 
-        paramSetting.setLevelConfig(JSON.toJSONString(oldLevelConfig));
+        paramSetting.setRoughLevelConfig(JSON.toJSONString(oldRoughLevelConfig));
         paramSettingRepo.saveAndFlush(paramSetting);
-        ParamCache.cacheParam(ParamSettingTypeEnum.LEVEL, workId, paramSetting.getLevelConfig());
+        ParamCache.cacheParam(ParamSettingTypeEnum.ROUGH_LEVEL, workId, paramSetting.getRoughLevelConfig());
 
         return new ResponseEntity(HttpStatus.OK);
     }
 
     /**
-     * 分档规则参数
+     * 分档规则参数
      *
      * @param data data
      */
-    @PostMapping("/rough_level")
-    public ResponseEntity updateFirstLevelParam(@RequestBody String data) {
+    @PostMapping("/level")
+    public ResponseEntity updateLevelParam(@RequestBody String data) {
         Long workId = ServletUtil.getWordId();
         JSONObject object = JSON.parseObject(data);
         Integer deviation = object.getInteger("deviation");
@@ -185,10 +188,10 @@ public class ParamApi {
         Integer levelShowAllPaper = object.getInteger("levelShowAllPaper");
         Integer propDenominator = object.getInteger("propDenominator");
         Integer showStandardPaperManage = object.getInteger("showStandardPaperManage");
+        Integer roughLevelEnable = object.getInteger("roughLevelEnable");
         Integer removeHighAndLow = object.getInteger("removeHighAndLow");
 
         List<MarkSubject> markSubjects = markSubjectRepo.findByWorkIdAndTestNot(workId, TrialEnum.DEFAULT.ordinal());
-        // todo 需要改查询表,判断粗分档和细分档 20220728
         int countMarkTasks = markTaskLevelRepo.countByWorkId(workId);
         //保存分档参数
         ParamSetting paramSetting = paramSettingRepo.findByWorkId(workId);
@@ -196,39 +199,44 @@ public class ParamApi {
             paramSetting = ParamSetting.init(workId);
         }
 
-        RoughLevelConfig oldRoughLevelConfig = JSON.parseObject(paramSetting.getRoughLevelConfig(), RoughLevelConfig.class);
+        LevelConfig oldLevelConfig = JSON.parseObject(paramSetting.getLevelConfig(), LevelConfig.class);
         if ((markSubjects == null || markSubjects.isEmpty()) && countMarkTasks > 0) {
-            if (!Objects.equals(deviation, oldRoughLevelConfig.getDeviation())) {
+            if (!Objects.equals(deviation, oldLevelConfig.getDeviation())) {
                 throw new RuntimeException("该评卷工作已有评卷数据,不能修改【仲裁档位差】参数");
             }
-            if (!Objects.equals(autoCallback, oldRoughLevelConfig.getAutoCallback())) {
+            if (!Objects.equals(autoCallback, oldLevelConfig.getAutoCallback())) {
                 throw new RuntimeException("该评卷工作已有评卷数据,不能修【系统自动打回】参数");
             }
-            if (!Objects.equals(majority, oldRoughLevelConfig.getMajority())) {
+            if (!Objects.equals(majority, oldLevelConfig.getMajority())) {
                 throw new RuntimeException("该评卷工作已有评卷数据,不能修改【是否过半定档】参数");
             }
-            if (!Objects.equals(removeHighAndLow, oldRoughLevelConfig.getRemoveHighAndLow())) {
+            if (!Objects.equals(roughLevelEnable, oldLevelConfig.getRoughLevelEnable())) {
+                throw new RuntimeException("该评卷工作已有评卷数据,不能修改【是否增加粗档位环节】参数");
+            }
+            if (!Objects.equals(removeHighAndLow, oldLevelConfig.getRemoveHighAndLow())) {
                 throw new RuntimeException("该评卷工作已有评卷数据,不能修改【是否开启去高去低再加权评卷】参数");
             }
         }
 
-        oldRoughLevelConfig.setDeviation(deviation);
-        oldRoughLevelConfig.setAutoCallback(autoCallback);
-        oldRoughLevelConfig.setMajority(majority);
-        oldRoughLevelConfig.setTakeBest(takeBest);
-        oldRoughLevelConfig.setLevelShowAllPaper(levelShowAllPaper);
-        oldRoughLevelConfig.setPropDenominator(propDenominator);
-        oldRoughLevelConfig.setShowStandardPaperManage(showStandardPaperManage);
-        oldRoughLevelConfig.setClearData(clearData);
-        oldRoughLevelConfig.setRemoveHighAndLow(removeHighAndLow);
+        oldLevelConfig.setDeviation(deviation);
+        oldLevelConfig.setAutoCallback(autoCallback);
+        oldLevelConfig.setMajority(majority);
+        oldLevelConfig.setTakeBest(takeBest);
+        oldLevelConfig.setLevelShowAllPaper(levelShowAllPaper);
+        oldLevelConfig.setPropDenominator(propDenominator);
+        oldLevelConfig.setShowStandardPaperManage(showStandardPaperManage);
+        oldLevelConfig.setClearData(clearData);
+        oldLevelConfig.setRoughLevelEnable(roughLevelEnable);
+        oldLevelConfig.setRemoveHighAndLow(removeHighAndLow);
 
-        paramSetting.setRoughLevelConfig(JSON.toJSONString(oldRoughLevelConfig));
+        paramSetting.setLevelConfig(JSON.toJSONString(oldLevelConfig));
         paramSettingRepo.saveAndFlush(paramSetting);
-        ParamCache.cacheParam(ParamSettingTypeEnum.ROUGH_LEVEL, workId, paramSetting.getRoughLevelConfig());
+        ParamCache.cacheParam(ParamSettingTypeEnum.LEVEL, workId, paramSetting.getLevelConfig());
 
         return new ResponseEntity(HttpStatus.OK);
     }
 
+
     /**
      * 打分改档参数
      *
@@ -251,8 +259,8 @@ public class ParamApi {
 
         ScoreConfig oldScoreConfig = JSON.parseObject(paramSetting.getScoreConfig(), ScoreConfig.class);
         List<MarkSubject> markSubjects = markSubjectRepo.findByWorkIdAndTestNot(workId, TrialEnum.DEFAULT.ordinal());
-        // todo 更新查询表 20220801
-        int countMarkTasks = markTaskLevelRepo.countByWorkId(workId);
+
+        int countMarkTasks = markTaskScoreRepo.countByWorkId(workId);
         if ((markSubjects == null || markSubjects.isEmpty()) && countMarkTasks > 0) {
             if (!Objects.equals(roundUp, oldScoreConfig.getRoundUp())) {
                 throw new RuntimeException("该评卷工作已有评卷数据,不能修改【分数处理方式】参数");

+ 13 - 6
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/UserApi.java

@@ -1,16 +1,14 @@
 package cn.com.qmth.stmms.ms.admin.api;
 
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
+import cn.com.qmth.stmms.ms.core.cache.ParamCache;
 import cn.com.qmth.stmms.ms.core.domain.MarkLog;
 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.user.MarkRight;
 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.MarkLogRepo;
-import cn.com.qmth.stmms.ms.core.repository.MarkSubjectRepo;
-import cn.com.qmth.stmms.ms.core.repository.MarkTaskLevelRepo;
-import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
+import cn.com.qmth.stmms.ms.core.repository.*;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import cn.com.qmth.stmms.ms.marking.assembler.MarkerAssembler;
 import cn.com.qmth.stmms.ms.marking.dto.MarkerDTO;
@@ -42,6 +40,9 @@ public class UserApi {
     @Autowired
     private MarkSubjectRepo markSubjectRepo;
 
+    @Autowired
+    private MarkTaskRoughLevelRepo markTaskRoughLevelRepo;
+
     @Autowired
     private MarkTaskLevelRepo markTaskLevelRepo;
 
@@ -56,8 +57,14 @@ public class UserApi {
 
     @RequestMapping(value = "{userId}", method = RequestMethod.DELETE)
     public void remove(@PathVariable Long userId) {
-        // todo 增加粗分档和细分档的区分  20220802
-        long count = markTaskLevelRepo.countByMarkerId(userId);
+        MarkUser markUser = markUserRepo.getOne(userId);
+        long count;
+        if (ParamCache.levelConfigMap.get(String.valueOf(markUser.getWorkId())).getRoughLevelEnable() == 1) {
+            count = markTaskRoughLevelRepo.countByMarkerId(userId);
+        } else {
+            count = markTaskLevelRepo.countByMarkerId(userId);
+        }
+
         if (count > 0) {
             throw new RuntimeException("已分配任务,不允许删除");
         }

+ 16 - 10
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/DataUploadService.java

@@ -63,6 +63,9 @@ public class DataUploadService {
     @Autowired
     private ImageCompressionConfig compressionConfig;
 
+    @Autowired
+    private MarkTaskRoughLevelRepo markTaskRoughLevelRepo;
+
     @Autowired
     private MarkTaskLevelRepo markTaskLevelRepo;
 
@@ -260,6 +263,9 @@ public class DataUploadService {
         if (papers != null && papers.size() > 0) {
             throw new Exception("已有采集数据,不能导入考生数据");
         }
+
+        boolean roughLevelEnable = ParamCache.levelConfigMap.get(String.valueOf(workId)).getRoughLevelEnable() == 1;
+
         List<Student> studentList = new ArrayList<>();
 
         ExcelReader excelReader = new ExcelReader(StudentDTO.class);
@@ -320,8 +326,12 @@ public class DataUploadService {
                             List<Paper> papers = paperRepo.findByWorkIdAndExamNumber(workId, student.getExamNumber());
                             if (!papers.isEmpty()) {
                                 for (Paper paper : papers) {
-                                    // todo 增加粗分档和细分档区分 20220802
-                                    Long count = markTaskLevelRepo.countByPaperId(paper.getId());
+                                    long count;
+                                    if (roughLevelEnable) {
+                                        count = markTaskRoughLevelRepo.countByPaperId(paper.getId());
+                                    } else {
+                                        count = markTaskLevelRepo.countByPaperId(paper.getId());
+                                    }
                                     if (count == 0) {
                                         paperRepo.delete(paper);
                                     }
@@ -409,8 +419,8 @@ public class DataUploadService {
         }
 
         MarkStage stage = markSubject.getStage();
-        if(MarkStage.INIT.equals(markSubject.getStage())){
-            if(ParamCache.levelConfigMap.get(String.valueOf(workId)).getRoughLevelEnable() == 1){
+        if (MarkStage.INIT.equals(markSubject.getStage())) {
+            if (ParamCache.levelConfigMap.get(String.valueOf(workId)).getRoughLevelEnable() == 1) {
                 stage = MarkStage.ROUGH_LEVEL;
             } else {
                 stage = MarkStage.LEVEL;
@@ -657,13 +667,9 @@ public class DataUploadService {
         Long workId = ServletUtil.getWordId();
 
         MarkSubject markSubject = markSubjectRepo.findOne(workId + "-" + subject.name());
-        //只能第一次分档才能导入
-        Integer roughLevel = ParamCache.levelConfigMap.get(String.valueOf(workId)).getRoughLevelEnable();
-        // todo 增加校验
-        /*if ((roughLevel == 1 && !stage.equals(MarkStage.INIT))
-                || (roughLevel == 0 && !stage.equals(MarkStage.LEVEL))) {
+        if (stage.equals(MarkStage.SCORE)) {
             throw new RuntimeException("当前阶段不能导入考生数据");
-        }*/
+        }
 
         MarkerGroup markerGroup = markerGroupRepo.findOne(groupId);
         // 删除

+ 1 - 1
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/utils/WaterMarkUtils.java

@@ -121,7 +121,7 @@ public class WaterMarkUtils {
             outImgStream.close();
 
         } catch (Exception e) {
-            // TODO: handle exception
+            //  handle exception
         }
     }
 

+ 5 - 5
stmms-ms-commons/src/main/java/cn/com/qmth/stmms/ms/commons/utils/excel/ExcelWriter.java

@@ -159,16 +159,16 @@ public class ExcelWriter extends ExcelUtils{
                         }
                     }
                 } catch (NoSuchFieldException e) {
-                    // TODO Auto-generated catch block
+                    // Auto-generated catch block
                     e.printStackTrace();
                 } catch (IllegalAccessException e) {
-                    // TODO Auto-generated catch block
+                    // Auto-generated catch block
                     e.printStackTrace();
                 } catch (SecurityException e) {
-                    // TODO Auto-generated catch block
+                    // Auto-generated catch block
                     e.printStackTrace();
                 } catch (IllegalArgumentException e) {
-                    // TODO Auto-generated catch block
+                    // Auto-generated catch block
                     e.printStackTrace();
                 } finally {
                     // 清理资源
@@ -179,7 +179,7 @@ public class ExcelWriter extends ExcelUtils{
         try {
             workbook.write(out);
         } catch (IOException e) {
-            // TODO Auto-generated catch block
+            // Auto-generated catch block
             e.printStackTrace();
         }
     }

+ 1 - 1
stmms-ms-commons/src/main/java/cn/com/qmth/stmms/ms/commons/utils/specification/PagingAndSortingSpecification.java

@@ -66,7 +66,7 @@ public abstract class PagingAndSortingSpecification implements QuerySpecificatio
             pageRequest = new PageRequest(page,size);
         }
         else{
-            //TODO 暂时返还一条数据
+            // 暂时返还一条数据
             pageRequest = new PageRequest(0,1);
         }
         return pageRequest;

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

@@ -154,7 +154,7 @@ public interface MarkTaskRoughLevelRepo extends JpaRepository<MarkTaskRoughLevel
      */
     Long countByPaperId(Long id);
 
-    List<MarkTaskLevel> findByWorkIdAndSecretNumber(Long workId, String secretNumber);
+    List<MarkTaskRoughLevel> findByWorkIdAndSecretNumber(Long workId, String secretNumber);
 
     @Query(value = "SELECT max(t.randomSeq) FROM MarkTaskLevel t " +
             "WHERE t.workId = ?1 and t.subject = ?2 and t.markerId = ?3 and t.stage = ?4 and t.questionId = ?5 ")

+ 10 - 27
stmms-ms-log/src/main/java/cn/com/qmth/stmms/ms/log/aop/MarkLogAop.java

@@ -219,13 +219,13 @@ public class MarkLogAop {
 
         long markTaskId = Long.parseLong(jsonArgsArray.get(0).toString());
         Paper paper = null;
-        if(markStage.equals(MarkStage.ROUGH_LEVEL)){
+        if (markStage.equals(MarkStage.ROUGH_LEVEL)) {
             MarkTaskRoughLevel markTaskRoughLevel = markTaskRoughLevelRepo.findOne(markTaskId);
             paper = markTaskRoughLevel.getPaper();
-        } else if(markStage.equals(MarkStage.LEVEL)){
+        } else if (markStage.equals(MarkStage.LEVEL)) {
             MarkTaskLevel markTaskLevel = markTaskLevelRepo.findOne(markTaskId);
             paper = markTaskLevel.getPaper();
-        } else if(markStage.equals(MarkStage.SCORE)){
+        } else if (markStage.equals(MarkStage.SCORE)) {
             MarkTaskScore markTaskScore = markTaskScoreRepo.findOne(markTaskId);
             paper = markTaskScore.getPaper();
         }
@@ -418,8 +418,6 @@ public class MarkLogAop {
         LOGGER.info("{} aspect path:{}", this.getClass().getMethods()[0], className + "." + methodName);
         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
         HttpServletRequest request = attributes.getRequest();
-        HttpSession session = request.getSession();
-//        String token = (String) session.getAttribute(TOKEN);
         String token = request.getHeader("Authorization");
         if (Objects.isNull(token)) {
             throw new Exception("请先登录");
@@ -427,28 +425,13 @@ public class MarkLogAop {
         token = URLDecoder.decode(token, "UTF-8");
         token = EncrypAES.decrypt(token);
         Object[] args = joinPoint.getArgs(); // 参数值
-        // todo 查看是否有阶段,根据阶段查询  20220802
-        MarkTaskLevel markTask = null;
-        MarkUser markUser = null;
-        if (Objects.nonNull(args) && args.length > 0) {
-            for (Object o : args) {
-                if (o instanceof MarkTaskLevel) {
-                    markTask = (MarkTaskLevel) o;
-                    break;
-                }
-            }
-        }
-        if (Objects.nonNull(markTask)) {
-            markUser = markUserRepo.findOne(markTask.getMarkerId());
-        } else {
-            String userId = request.getHeader("userId");
-            // markLeaderId是批量打回小工具中的参数
-            userId = StringUtils.isBlank(userId) || (StringUtils.isNotBlank(userId) && "0".equals(userId)) ? request.getHeader("markLeaderId") : userId;
-            markUser = markUserRepo.findOne(Long.valueOf(userId));
-            if (Objects.isNull(markUser)) {
-                String[] strs = token.split("#");
-                markUser = strs == null || strs[2] == null || strs[2] == "null" ? null : markUserRepo.findOne(Long.parseLong(strs[2]));
-            }
+        String userId = request.getHeader("userId");
+        // markLeaderId是批量打回小工具中的参数
+        userId = StringUtils.isBlank(userId) || (StringUtils.isNotBlank(userId) && "0".equals(userId)) ? request.getHeader("markLeaderId") : userId;
+        MarkUser markUser = markUserRepo.findOne(Long.valueOf(userId));
+        if (Objects.isNull(markUser)) {
+            String[] strs = token.split("#");
+            markUser = strs == null || strs[2] == null || strs[2].equals("null") ? null : markUserRepo.findOne(Long.parseLong(strs[2]));
         }
         LOGGER.info("markUser:{}", JSONObject.toJSONString(markUser));
 //        String[] argNames = ((MethodSignature) joinPoint.getSignature()).getParameterNames();//参数名

+ 107 - 37
stmms-ms-main/src/main/java/cn/com/qmth/stmms/ms/quartz/ScheduledTask.java

@@ -2,12 +2,13 @@ package cn.com.qmth.stmms.ms.quartz;
 
 import cn.com.qmth.stmms.ms.commons.utils.RandomUtil;
 import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
-import cn.com.qmth.stmms.ms.core.domain.MarkTaskJob;
+import cn.com.qmth.stmms.ms.core.domain.MarkStage;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
 import cn.com.qmth.stmms.ms.core.domain.Work;
-import cn.com.qmth.stmms.ms.core.repository.MarkTaskJobRepo;
-import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
-import cn.com.qmth.stmms.ms.core.repository.WorkRepo;
+import cn.com.qmth.stmms.ms.core.domain.task.MarkTaskLevel;
+import cn.com.qmth.stmms.ms.core.domain.task.MarkTaskRoughLevel;
+import cn.com.qmth.stmms.ms.core.domain.task.MarkTaskScore;
+import cn.com.qmth.stmms.ms.core.repository.*;
 import cn.com.qmth.stmms.ms.log.aop.MarkLogAop;
 import cn.com.qmth.stmms.ms.marking.config.MarkingConfig;
 import cn.com.qmth.stmms.ms.marking.service.MarkingService;
@@ -48,6 +49,15 @@ public class ScheduledTask implements InitializingBean {
     @Resource
     MarkTaskJobRepo markTaskJobRepo;
 
+    @Resource
+    MarkTaskRoughLevelRepo markTaskRoughLevelRepo;
+
+    @Resource
+    MarkTaskLevelRepo markTaskLevelRepo;
+
+    @Resource
+    MarkTaskScoreRepo markTaskScoreRepo;
+
     @Resource
     MarkLogAop markLogAop;
 
@@ -103,9 +113,10 @@ public class ScheduledTask implements InitializingBean {
      */
     public void repairMarkTaskJob(Work work) {
         try {
-            List<MarkTaskJob> markTaskJobList = markTaskJobRepo.findAllByStatusIsFalseAndWorkId(work.getId());
             // todo 需要改 20220802
-            /*if (Objects.nonNull(markTaskJobList) && !markTaskJobList.isEmpty()) {
+            /*List<MarkTaskJob> markTaskJobList = markTaskJobRepo.findAllByStatusIsFalseAndWorkId(work.getId());
+
+            if (Objects.nonNull(markTaskJobList) && !markTaskJobList.isEmpty()) {
                 long startTime = System.currentTimeMillis();
                 this.markTaskJob = true;
                 for (MarkTaskJob m : markTaskJobList) {
@@ -179,35 +190,14 @@ public class ScheduledTask implements InitializingBean {
     /**
      * 修复任务密号
      *
-     * @param workId
+     * @param workId 工作ID
      */
     @Transactional
     public void repairRepeatTask(Long workId) {
         try {
-            String sql = "select * from (select mt.secret_number, count(mt.secret_number) as seq from mark_task mt where mt.work_id = ? group by mt.secret_number) temp where temp.seq > 1 LIMIT 500";
-            List list = sqlUtil.execSqlForMapNative(sql, workId);
-            Set tasks = new HashSet();
-            // todo 需要改 20220802
-            /*if (Objects.nonNull(list) && list.size() > 0) {
-                this.repairTask = true;
-                for (int i = 0; i < list.size(); i++) {
-                    Map map = (Map) list.get(i);
-                    String randomSeq = String.valueOf(map.get("secret_number"));
-                    List<MarkTask> markTaskList = markTaskRepo.findByWorkIdAndSecretNumber(workId, randomSeq);
-                    markTaskList.remove(0);//删除一条
-                    for (MarkTask markTask : markTaskList) {
-                        Long randomNew = this.getRandomTask(markTask.getMarkerId(), markTask.getPaper().getId(), markTask.getWorkId(), markTask.getPaper().getExamNumber());
-                        String secretNumberNew = markTask.getMarkerId() + markTask.getSubject().ordinal() + markTask.getPaper().getAreaCode() + randomNew;
-//                        markTask.setRandomSeqNew(randomNew);
-                        markTask.setSecretNumber(secretNumberNew);
-                        tasks.add(markTask);
-                    }
-                }
-            }
-            if (Objects.nonNull(tasks) && tasks.size() > 0) {
-                LOGGER.info("需要修改的task数为:{}", tasks.size());
-                markTaskRepo.save(tasks);
-            }*/
+            repairMarkTaskRoughLevel(workId);
+            repairMarkTaskLevel(workId);
+            repairMarkTaskScore(workId);
         } catch (Exception e) {
             e.printStackTrace();
             throw new RuntimeException(e);
@@ -216,6 +206,81 @@ public class ScheduledTask implements InitializingBean {
         }
     }
 
+    private void repairMarkTaskRoughLevel(Long workId) {
+        String sql = "select * from (select mt.secret_number, count(mt.secret_number) as seq from mark_task_rough_level mt where mt.work_id = ? group by mt.secret_number) temp where temp.seq > 1 LIMIT 500";
+        List list = sqlUtil.execSqlForMapNative(sql, workId);
+        Set tasks = new HashSet();
+        if (Objects.nonNull(list) && !list.isEmpty()) {
+            this.repairTask = true;
+            for (int i = 0; i < list.size(); i++) {
+                Map map = (Map) list.get(i);
+                String randomSeq = String.valueOf(map.get("secret_number"));
+                List<MarkTaskRoughLevel> markTaskList = markTaskRoughLevelRepo.findByWorkIdAndSecretNumber(workId, randomSeq);
+                markTaskList.remove(0);//删除一条
+                for (MarkTaskRoughLevel markTask : markTaskList) {
+                    Long randomNew = this.getRandomTask(markTask.getMarkerId(), markTask.getPaper().getId(), markTask.getWorkId(), markTask.getPaper().getExamNumber(), MarkStage.ROUGH_LEVEL);
+                    String secretNumberNew = markTask.getMarkerId() + markTask.getSubject().ordinal() + markTask.getPaper().getAreaCode() + randomNew;
+                    markTask.setSecretNumber(secretNumberNew);
+                    tasks.add(markTask);
+                }
+            }
+        }
+        if (!tasks.isEmpty()) {
+            LOGGER.info("需要修改的task数为:{}", tasks.size());
+            markTaskRoughLevelRepo.save(tasks);
+        }
+    }
+
+    private void repairMarkTaskLevel(Long workId) {
+        String sql = "select * from (select mt.secret_number, count(mt.secret_number) as seq from mark_task_level mt where mt.work_id = ? group by mt.secret_number) temp where temp.seq > 1 LIMIT 500";
+        List list = sqlUtil.execSqlForMapNative(sql, workId);
+        Set tasks = new HashSet();
+        if (Objects.nonNull(list) && !list.isEmpty()) {
+            this.repairTask = true;
+            for (int i = 0; i < list.size(); i++) {
+                Map map = (Map) list.get(i);
+                String randomSeq = String.valueOf(map.get("secret_number"));
+                List<MarkTaskLevel> markTaskList = markTaskLevelRepo.findByWorkIdAndSecretNumber(workId, randomSeq);
+                markTaskList.remove(0);//删除一条
+                for (MarkTaskLevel markTask : markTaskList) {
+                    Long randomNew = this.getRandomTask(markTask.getMarkerId(), markTask.getPaper().getId(), markTask.getWorkId(), markTask.getPaper().getExamNumber(), MarkStage.LEVEL);
+                    String secretNumberNew = markTask.getMarkerId() + markTask.getSubject().ordinal() + markTask.getPaper().getAreaCode() + randomNew;
+                    markTask.setSecretNumber(secretNumberNew);
+                    tasks.add(markTask);
+                }
+            }
+        }
+        if (!tasks.isEmpty()) {
+            LOGGER.info("需要修改的task数为:{}", tasks.size());
+            markTaskLevelRepo.save(tasks);
+        }
+    }
+
+    private void repairMarkTaskScore(Long workId) {
+        String sql = "select * from (select mt.secret_number, count(mt.secret_number) as seq from mark_task_score mt where mt.work_id = ? group by mt.secret_number) temp where temp.seq > 1 LIMIT 500";
+        List list = sqlUtil.execSqlForMapNative(sql, workId);
+        Set tasks = new HashSet();
+        if (Objects.nonNull(list) && !list.isEmpty()) {
+            this.repairTask = true;
+            for (int i = 0; i < list.size(); i++) {
+                Map map = (Map) list.get(i);
+                String randomSeq = String.valueOf(map.get("secret_number"));
+                List<MarkTaskScore> markTaskList = markTaskScoreRepo.findByWorkIdAndSecretNumber(workId, randomSeq);
+                markTaskList.remove(0);//删除一条
+                for (MarkTaskScore markTask : markTaskList) {
+                    Long randomNew = this.getRandomTask(markTask.getMarkerId(), markTask.getPaper().getId(), markTask.getWorkId(), markTask.getPaper().getExamNumber(), MarkStage.SCORE);
+                    String secretNumberNew = markTask.getMarkerId() + markTask.getSubject().ordinal() + markTask.getPaper().getAreaCode() + randomNew;
+                    markTask.setSecretNumber(secretNumberNew);
+                    tasks.add(markTask);
+                }
+            }
+        }
+        if (!tasks.isEmpty()) {
+            LOGGER.info("需要修改的task数为:{}", tasks.size());
+            markTaskScoreRepo.save(tasks);
+        }
+    }
+
     /**
      * 修复试卷随机号
      *
@@ -251,13 +316,18 @@ public class ScheduledTask implements InitializingBean {
      * @param examNumber
      * @return
      */
-    private Long getRandomTask(Long markerId, Long paperId, Long workId, String examNumber) {
+    private Long getRandomTask(Long markerId, Long paperId, Long workId, String examNumber, MarkStage stage) {
         int count = 0, result = 0;
         Long random = 0L;
-        // todo 需要改 20220802
-        /*while (true) {
+        while (true) {
             random = randomUtil.getRandomMap().get(workId).get(new Random().nextInt(randomUtil.getRandomMap().get(workId).size()));
-            result = markTaskRepo.countByMarkerIdAndPaperIdAndWorkIdAndRandomSeqNew(markerId, paperId, workId, random);
+            if (MarkStage.ROUGH_LEVEL.equals(stage)) {
+                result = markTaskRoughLevelRepo.countByMarkerIdAndPaperIdAndWorkIdAndRandomSeqNew(markerId, paperId, workId, random);
+            } else if (MarkStage.LEVEL.equals(stage)) {
+                result = markTaskLevelRepo.countByMarkerIdAndPaperIdAndWorkIdAndRandomSeqNew(markerId, paperId, workId, random);
+            } else if (MarkStage.SCORE.equals(stage)) {
+                result = markTaskScoreRepo.countByMarkerIdAndPaperIdAndWorkIdAndRandomSeqNew(markerId, paperId, workId, random);
+            }
             if (result == 0 && Long.parseLong(examNumber) != random) {
                 break;
             } else {
@@ -265,9 +335,9 @@ public class ScheduledTask implements InitializingBean {
             }
             if (count > 1000) {
                 randomUtil.getRandom(workId, true);
-                getRandomTask(markerId, paperId, workId, examNumber);
+                getRandomTask(markerId, paperId, workId, examNumber, stage);
             }
-        }*/
+        }
         return random;
     }
 

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

@@ -384,7 +384,6 @@ public class PaperApi {
         String level = body.get("level");
         String tagged = body.get("tagged");
         MarkStage stage = MarkStage.valueOf(body.get("stage"));
-        // todo 增加科组长操作的粗分档阶段  20220806
         if (action != null && level != null) {
             if (action.equals("leveling")) {
                 paper.setOneClick(true);

+ 7 - 8
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/QuestionStatAssembler.java

@@ -69,17 +69,16 @@ public class QuestionStatAssembler {
         int shift = 0;
         int shiftScore = 0;
         int rejectCount = 0;
-        if (MarkStage.ROUGH_LEVEL.equals(stage)) {
-            shift = markTaskRoughLevelRepo.countByWorkIdAndSubjectAndMarkerIdAndStageAndShiftAndResult(workId, subject.name(), Long.valueOf(qStats[1].toString()), stage.ordinal());
-            // todo 改档打分数量不对 202200817
-            shiftScore = markTaskRoughLevelRepo.countByWorkIdAndSubjectAndMarkerIdAndStageAndShiftScoreAndResult(workId, subject.name(), Long.valueOf(qStats[1].toString()), MarkStage.SCORE.ordinal());
+        if (MarkStage.LEVEL.equals(stage)) {
+            shift = markTaskRoughLevelRepo.countByWorkIdAndSubjectAndMarkerIdAndStageAndShiftAndResult(workId, subject.name(), Long.valueOf(qStats[1].toString()), MarkStage.ROUGH_LEVEL.ordinal());
+            shiftScore = markTaskLevelRepo.countByWorkIdAndSubjectAndMarkerIdAndStageAndShiftScoreAndResult(workId, subject.name(), Long.valueOf(qStats[1].toString()), MarkStage.LEVEL.ordinal());
             //所有打回
-            rejectCount = markTaskRoughLevelRepo.findByWorkIdAndSubjectAndMarkerIdAndStageReject(workId, subject.name(), Long.valueOf(qStats[1].toString()), stage.ordinal());
-        } else if (MarkStage.LEVEL.equals(stage)) {
-            shift = markTaskLevelRepo.countByWorkIdAndSubjectAndMarkerIdAndStageAndShiftAndResult(workId, subject.name(), Long.valueOf(qStats[1].toString()), stage.ordinal());
+            rejectCount = markTaskRoughLevelRepo.findByWorkIdAndSubjectAndMarkerIdAndStageReject(workId, subject.name(), Long.valueOf(qStats[1].toString()), MarkStage.ROUGH_LEVEL.ordinal());
+        } else if (MarkStage.SCORE.equals(stage)) {
+            shift = markTaskLevelRepo.countByWorkIdAndSubjectAndMarkerIdAndStageAndShiftAndResult(workId, subject.name(), Long.valueOf(qStats[1].toString()), MarkStage.LEVEL.ordinal());
             shiftScore = markTaskScoreRepo.countByWorkIdAndSubjectAndMarkerIdAndStageAndShiftScoreAndResult(workId, subject.name(), Long.valueOf(qStats[1].toString()), MarkStage.SCORE.ordinal());
             //所有打回
-            rejectCount = markTaskLevelRepo.findByWorkIdAndSubjectAndMarkerIdAndStageReject(workId, subject.name(), Long.valueOf(qStats[1].toString()), stage.ordinal());
+            rejectCount = markTaskLevelRepo.findByWorkIdAndSubjectAndMarkerIdAndStageReject(workId, subject.name(), Long.valueOf(qStats[1].toString()), MarkStage.LEVEL.ordinal());
         }
 
         MarkQuestionStatDTO qpDTO = null;

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

@@ -153,7 +153,7 @@ public class MarkingLevelService {
             }
             //改档后重新分档,状态改为false
             paper.setShift(false);
-            paper.setShiftScore(false);
+//            paper.setShiftScore(false);
             //重新分档,打回科组长打回状态改为false
             paper.setRejectedByLeader(false);
             paper.setSortNum(calcSortNum(paper, markTasks, levels));

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

@@ -101,7 +101,7 @@ public class StageControlService {
             enterLevelStage(markSubject, taskCount, questionId);
         } else if (MarkStage.SCORE.equals(markStage)) {
             enterToScoreStage(markSubject);
-            //TODO 进入抽查阶段
+            // 进入抽查阶段
             /*if (!markSubject.isAllLevel()) {
                 markSubject.setStage(MarkStage.SCORE);
                 enterScoreStage(markSubject);
@@ -110,7 +110,7 @@ public class StageControlService {
                 enterInspectStage(markSubject);
             }*/
         } else if (MarkStage.INSPECT.equals(markStage)) {
-            //TODO 结束评卷
+            // 结束评卷
             markSubject.setStage(MarkStage.END);
         }
         markSubjectRepo.save(markSubject);
@@ -625,7 +625,6 @@ public class StageControlService {
      * @param markSubject
      */
     private void enterInspectStage(MarkSubject markSubject) {
-        // TODO: 2017/10/11
         Long workId = markSubject.getWorkId();
         Subject subject = markSubject.getSubject();
 //        List<MarkUser> checkers = markUserRepo.findByWorkIdAndSubjectAndRole(workId, subject, Role.INSPECTOR);