Pārlūkot izejas kodu

标准卷发布任务逻辑修改

xiaof 4 gadi atpakaļ
vecāks
revīzija
bb08136ff2

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

@@ -155,9 +155,8 @@ public class ParamApi {
 
         //保存打分参数
         ParamSetting paramSetting = paramSettingRepo.findByWorkId(workId);
-        if (flag && (!Objects.equals(roundUp, paramSetting.getRoundUp())
-                || !Objects.equals(changeStage, paramSetting.getChangeStage()))) {
-            throw new RuntimeException("该评卷工作已有评卷数据,不能修改");
+        if (flag && (!Objects.equals(roundUp, paramSetting.getRoundUp()))) {
+            throw new RuntimeException("该评卷工作已有评卷数据,不能修改分数处理方式");
         }
         if (paramSetting == null) {
             paramSetting = ParamSetting.init();

+ 11 - 11
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/WorkService.java

@@ -94,17 +94,17 @@ public class WorkService {
         ParamCache.resetParam(paramSetting);
 
         //默认增加档位
-        Level A = new Level(work.getId(), "A", 100, 90, Level.LevelType.ADMITED, 95);
-        Level B = new Level(work.getId(), "B", 89, 85, Level.LevelType.ADMITED, 87);
-        Level C = new Level(work.getId(), "C", 84, 80, Level.LevelType.ADMITED, 82);
-        Level D = new Level(work.getId(), "D", 79, 75, Level.LevelType.ADMITED, 77);
-        Level E = new Level(work.getId(), "E", 74, 70, Level.LevelType.ADMITED, 72);
-        Level F = new Level(work.getId(), "F", 69, 65, Level.LevelType.ADMITED, 67);
-        Level G = new Level(work.getId(), "G", 64, 60, Level.LevelType.ADMITED, 62);
-        Level H = new Level(work.getId(), "H", 59, 55, Level.LevelType.ADMITED, 57);
-        Level I = new Level(work.getId(), "I", 54, 50, Level.LevelType.ADMITED, 52);
-        Level J = new Level(work.getId(), "J", 49, 45, Level.LevelType.ADMITED, 47);
-        Level K = new Level(work.getId(), "K", 44, 0, Level.LevelType.ADMITED, 40);
+        Level A = new Level(work.getId(), "A",0, 100, 90, Level.LevelType.ADMITED, 95);
+        Level B = new Level(work.getId(), "B",1, 89, 85, Level.LevelType.ADMITED, 87);
+        Level C = new Level(work.getId(), "C",2, 84, 80, Level.LevelType.ADMITED, 82);
+        Level D = new Level(work.getId(), "D",3, 79, 75, Level.LevelType.ADMITED, 77);
+        Level E = new Level(work.getId(), "E",4, 74, 70, Level.LevelType.ADMITED, 72);
+        Level F = new Level(work.getId(), "F",5, 69, 65, Level.LevelType.ADMITED, 67);
+        Level G = new Level(work.getId(), "G",6, 64, 60, Level.LevelType.ADMITED, 62);
+        Level H = new Level(work.getId(), "H",7, 59, 55, Level.LevelType.ADMITED, 57);
+        Level I = new Level(work.getId(), "I",8, 54, 50, Level.LevelType.ADMITED, 52);
+        Level J = new Level(work.getId(), "J",9, 49, 45, Level.LevelType.ADMITED, 47);
+        Level K = new Level(work.getId(), "K",10, 44, 0, Level.LevelType.ADMITED, 40);
         List<Level> levels = Arrays.asList(A, B, C, D, E, F, G, H, I, J, K);
         levelRepo.save(levels);
 

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

@@ -95,9 +95,10 @@ public class Level implements Serializable{
 
     public Level(){}
 
-    public Level(Long workId,String code, int maxScore, int minScore, LevelType levelType,Integer weight) {
+    public Level(Long workId,String code, int levelValue, int maxScore, int minScore, LevelType levelType,Integer weight) {
         this.workId = workId;
         this.code = code;
+        this.levelValue = levelValue;
         this.maxScore = maxScore;
         this.minScore = minScore;
         this.levelType = levelType;

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

@@ -1,5 +1,6 @@
 package cn.com.qmth.stmms.ms.core.domain.task;
 
+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.Paper;
 import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
@@ -159,6 +160,26 @@ public class MarkTask implements Serializable {
         this.test = test != TrialEnum.DEFAULT.getId() ? TrialEnum.START_TRIAL.getId() : test;
     }
 
+    public MarkTask(MarkUser marker, Paper paper, Level level, MarkStage stage, Long randomSeqNew, int test) {
+        this.markerId = marker.getId();
+        this.markerName = marker.getName();
+        this.subject = marker.getSubject();
+        this.workId = marker.getWorkId();
+        this.paper = paper;
+        this.questionId = paper.getQuestionId();
+        this.stage = stage;
+        this.createdOn = new Date();
+        //随机号生成修改规则
+//        this.secretNumber = marker.getId() + subject.ordinal() + paper.getAreaCode() + paper.getExamNumber().substring(3, paper.getExamNumber().length());
+        this.secretNumber = marker.getId() + subject.ordinal() + paper.getAreaCode() + randomSeqNew;
+        this.randomSeqNew = randomSeqNew;
+        this.test = test != TrialEnum.DEFAULT.getId() ? TrialEnum.START_TRIAL.getId() : test;
+
+        this.result = paper.getLevel();
+        this.levelValue = level.getLevelValue();
+        this.updatedOn = new Date();
+    }
+
     public MarkTask() {
     }
 

+ 4 - 4
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/MarkTaskRepo.java

@@ -107,8 +107,8 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
      */
     @Query(value = "SELECT q.`id`,t.`marker_name` markerName,q.`name`,SUM(IF(t.`result` IS NULL,1,0)) leftCount,COUNT(t.question_id) totalCount, SUM(t.is_rejected) rejectedCount, q.area_code areaCode " +
             "FROM mark_task t LEFT OUTER JOIN exam_question q ON t.`question_id` = q.`id` LEFT  JOIN paper p ON t.paper_id = p.id WHERE " +
-            "t.work_id = ? and t.subject = ? and t.stage = ? and p.is_missing = false and p.is_test = ?  GROUP BY t.marker_id, t.`marker_name` ORDER BY q.`id`,t.marker_id", nativeQuery = true)
-    List<Object[]> listGroupByQuestionAndMarker(Long workId, String name, Integer stageId, int test);
+            "t.work_id = ? and t.subject = ? and t.stage = ? and p.is_missing = false and p.is_test = ? or p.is_test = ?  GROUP BY t.marker_id, t.`marker_name` ORDER BY q.`id`,t.marker_id", nativeQuery = true)
+    List<Object[]> listGroupByQuestionAndMarker(Long workId, String name, Integer stageId, int test, int test1);
 
     /**
      * 考区已评数及总数(分档阶段)
@@ -131,8 +131,8 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
      */
     @Query(value = "SELECT q.area_code areaCode, q.area_name areaName, q.`name`,SUM(IF(p.`level` IS NULL,1,0)) leftCount,COUNT(p.question_id) totalCount " +
             "FROM exam_question q LEFT  JOIN paper p ON q.id = p.question_id AND q.subject = p.subject WHERE " +
-            "p.work_id = ? and p.subject = ? and p.is_missing = false and p.is_test = ?  GROUP BY q.area_code, q.area_name ORDER BY q.area_code", nativeQuery = true)
-    List<Object[]> listGroupByAreaName(Long workId, String name, int test);
+            "p.work_id = ? and p.subject = ? and p.is_missing = false and p.is_test = ? or p.is_test = ?  GROUP BY q.area_code, q.area_name ORDER BY q.area_code", nativeQuery = true)
+    List<Object[]> listGroupByAreaName(Long workId, String name, int test, int test1);
 
     /**
      * 统计评卷员各试题已评数及总数(分档阶段)

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

@@ -314,5 +314,11 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
 
     List<Paper> findByWorkIdAndSubjectAndIsOneClickTrue(Long workId, Subject subject);
 
+    int countByWorkIdAndSubjectAndIsMissingFalseAndTestOrTestAndQuestionId(Long workId, Subject subject, int i, int i1, Long id);
+
+    int countByWorkIdAndSubjectAndIsMissingFalseAndTestOrTest(Long workId, Subject subject, int i, int i1);
+
+    List<Paper> findByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndTestOrTestOrderByQuestionId(Long workId, Subject subject, int id, int id1);
+
 //    List<Paper> findByWorkIdAndSubjectAndInspectRange(Long workId, Subject subject, Long inspectRange);
 }

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

@@ -415,7 +415,7 @@ public class MakrerApi {
                 successCount = paperRepo.countByWorkIdAndSubjectAndScoreNotNullAndIsMissingFalseAndActiveTrueAndTest(workId, subject, 0);
             }
             //所有任务数(查询所有有效试卷)
-            int totalCount = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndTest(workId, subject, 0);
+            int totalCount = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndTestOrTest(workId, subject, 0, 3);
 
             BigDecimal waitTotal = BigDecimal.valueOf(totalCount).subtract(BigDecimal.valueOf(successCount));
             //进度
@@ -435,7 +435,7 @@ public class MakrerApi {
         if (markSubject.getStage().name() == MarkStage.SCORE.name()) {
             areas = markTaskRepo.listGroupByAreaName(workId, markSubject.getSubject().name());
         } else {
-            areas = markTaskRepo.listGroupByAreaName(workId, markSubject.getSubject().name(), markSubject.getTest());
+            areas = markTaskRepo.listGroupByAreaName(workId, markSubject.getSubject().name(), markSubject.getTest(), 3);
         }
         if (areas != null) {
             List<QuestionStatDTO> questionStatDTOs = new ArrayList<>();
@@ -462,7 +462,7 @@ public class MakrerApi {
         if (markSubject.getStage().name() == MarkStage.SCORE.name()) {
             qStats = markTaskRepo.listGroupByQuestionAndMarker(workId, markSubject.getSubject().name(), markSubject.getStage().ordinal());
         } else {
-            qStats = markTaskRepo.listGroupByQuestionAndMarker(workId, markSubject.getSubject().name(), markSubject.getStage().ordinal(), markSubject.getTest());
+            qStats = markTaskRepo.listGroupByQuestionAndMarker(workId, markSubject.getSubject().name(), markSubject.getStage().ordinal(), markSubject.getTest(), 3);
         }
         if (qStats != null) {
             List<MarkQuestionStatDTO> questionStatDTOs = new ArrayList<>();

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

@@ -267,6 +267,16 @@ public class MarkSubjectApi {
         stageControlService.goNext(markSubject, map);
     }
 
+    /**
+     * 检查是否已分档完成
+     *
+     */
+    @RequestMapping(value = "{markSubject}/canLevel", method = RequestMethod.GET)
+    public Boolean canLevel(@PathVariable MarkSubject markSubject) {
+        int count = paperRepo.countByWorkIdAndSubjectAndLevelIsNullAndIsMissingFalseAndActiveTrueAndBatchNoNotNullAndTest(markSubject.getWorkId(), markSubject.getSubject(), 0);
+        return count > 0 ? false : true;
+    }
+
 
     /**
      * 打分任务发布

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

@@ -111,7 +111,7 @@ public class MarkTaskApi {
             } else if (stage == MarkStage.LEVEL) {
                 //查询
                 predicates.add(builder.equal(root.get("result"), level));
-                if(ParamCache.paramMap.get(workId).getLevelShowAllPaper() == 1) {
+                if(ParamCache.paramMap.get(workId).getLevelShowAllPaper() == 0) {
                     Long batchNo = paperRepo.findByQuestionId(questionId);
                     if (!Objects.isNull(batchNo)) {
                         predicates.add(builder.equal(root.get("paper").get("batchNo"), batchNo));
@@ -144,7 +144,7 @@ public class MarkTaskApi {
 //            predicates.add(builder.equal(root.get("isActive"), false));
             return builder.and(predicates.toArray(new Predicate[predicates.size()]));
         };
-        Sort sort = new Sort("paper.level", "serialNumber", "randomSeq");
+        Sort sort = new Sort("paper.level", "serialNumber", "randomSeqNew");
         Pageable pageable1 = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), sort);
         Page<MarkTask> markTasks = markTaskRepo.findAll(specification, pageable1);
 
@@ -342,7 +342,7 @@ public class MarkTaskApi {
                                          @RequestParam Long questionId,
                                          @RequestParam(required = false) String areaCode) {
         List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
-        Sort sort = new Sort(Sort.Direction.DESC, "updatedOn");
+        Sort sort = new Sort(Sort.Direction.ASC, "updatedOn");
         Pageable pageable = new PageRequest(0, 5, sort);
         Specification<MarkTask> specification = (root, query, builder) -> {
             List<Predicate> predicates = new ArrayList<>();
@@ -359,6 +359,10 @@ public class MarkTaskApi {
                 }
                 predicates.add(builder.isNotNull(root.get("result")));
             } else if (stage == MarkStage.SCORE) {
+                Long socreBatchNo = paperRepo.findScoreBatchNoByQuestionId(questionId);
+                if (!Objects.isNull(socreBatchNo)) {
+                    predicates.add(builder.equal(root.get("paper").get("scoreBatchNo"), socreBatchNo));
+                }
                 predicates.add(builder.isNotNull(root.get("result")));
             }
             //过滤考区

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

@@ -2,10 +2,7 @@ package cn.com.qmth.stmms.ms.marking.service;
 
 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.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.TaskPublishSetting;
+import cn.com.qmth.stmms.ms.core.domain.*;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkerGroup;
@@ -33,6 +30,9 @@ public class AssignTaskService {
     @Autowired
     private PaperRepo paperRepo;
 
+    @Autowired
+    private LevelRepo levelRepo;
+
     @Autowired
     private MarkSubjectRepo markSubjectRepo;
 
@@ -143,7 +143,12 @@ public class AssignTaskService {
                         markTask.setDisplayNumber((int) display);
                     }
                 } else {
-                    markTask = new MarkTask(marker, paper, markSubject.getStage(), random, markSubject.getTest());
+                    if(paper.isSample() && paper.getLevel() != null){
+                        Level level = levelRepo.findByWorkIdAndCode(markSubject.getWorkId(), paper.getLevel());
+                        markTask = new MarkTask(marker, paper, level, markSubject.getStage(), random, markSubject.getTest());
+                    } else {
+                        markTask = new MarkTask(marker, paper, markSubject.getStage(), random, markSubject.getTest());
+                    }
                 }
                 markTaskList.add(markTask);
                 randomMap.put(random, markTask);

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

@@ -174,7 +174,7 @@ public class StageControlService {
         if (markSubject.getTest() == 1) {
             papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, markSubject.getTest());
         } else {
-            List<Paper> papersList = paperRepo.findByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndTestOrderByQuestionId(workId, subject, TrialEnum.DEFAULT.getId());
+            List<Paper> papersList = paperRepo.findByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndTestOrTestOrderByQuestionId(workId, subject, TrialEnum.DEFAULT.getId(), TrialEnum.START_FORMAL.getId());
             papers = papersList.subList(0, taskCount);
         }
         assignTaskService.assignForGrouping(papers, markerGroups, markSubject, null);
@@ -506,7 +506,7 @@ public class StageControlService {
             //已评任务数
             int areaSuccessCount = paperRepo.countByWorkIdAndSubjectAndLevelNotNullAndIsMissingFalseAndActiveTrueAndTestAndQuestionId(workId, subject, 0, examQuestion.getId());
             //所有任务数(查询所有有效试卷)
-            int areaTotalCount = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndTestAndQuestionId(workId, subject, 0, examQuestion.getId());
+            int areaTotalCount = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndTestOrTestAndQuestionId(workId, subject, 0,3, examQuestion.getId());
 
             BigDecimal areaWaitTotal = BigDecimal.valueOf(areaTotalCount).subtract(BigDecimal.valueOf(areaSuccessCount));
             //进度