Browse Source

任务投放bug修复

xiaof 5 years ago
parent
commit
43574eb197

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

@@ -45,7 +45,8 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
 
     int countByQuestionIdAndMarkerIdAndStageAndResultIsNull(Long questionId, Long markerId, MarkStage stage);
 
-    int countByQuestionIdAndMarkerIdAndStageAndResult(Long questionId, Long markerId, MarkStage stage, String result);
+    @Query(value = "select count(1) from mark_task m left join paper p on m.paper_id = p.id where m.question_id = ?1 and m.marker_id = ?2 and m.stage = ?3 and m.result = ?4 and p.batch_no = (select max(batch_no) from paper where question_id = ?5 and is_test = 0)", nativeQuery = true)
+    int countByQuestionIdAndMarkerIdAndStageAndResult(Long questionId, Long markerId, int stage, String result, Long questionId1);
 
     int countByWorkIdAndSubjectAndMarkerIdAndStageAndResult(Long workId, Subject subject, Long markerId, MarkStage stage, String result);
 
@@ -102,7 +103,7 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
      */
     @Query(value = "SELECT q.`id`,q.`name`,SUM(IF(t.`result` IS NULL,1,0)),COUNT(t.question_id), q.area_code \n" +
             "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.`marker_id` = ? and t.stage = ? and p.is_missing = false and t.is_active=false GROUP BY t.`question_id` ORDER BY q.`id`", nativeQuery = true)
+            "t.`marker_id` = ? and t.stage = ? and p.is_missing = false  GROUP BY t.`question_id` ORDER BY q.`id`", nativeQuery = true)
     List<Object[]> countGroupByQuestion(Long markerId, Integer stageId);
 
     /**

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

@@ -73,10 +73,24 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
             "SUM(IF(p.`is_arbitrated` = 1, 1, 0))" +
             "FROM paper p " +
             "WHERE p.`question_id` = ? and p.is_missing = false " +
-            "AND p.batch_no = (select max(batch_no) from paper where question_id = ?)"+
+            "AND p.batch_no = (select max(batch_no) from paper where question_id = ? and is_test = 0)"+
             "GROUP BY p.`level` ORDER BY p.`level`", nativeQuery = true)
     List<Object[]> countGroupByLevel(Long questionId, Long questionId1);
 
+    /**
+     * 统计科目指定试题的各档位数量
+     *
+     * @param questionId
+     * @return
+     */
+    @Query(value = "SELECT p.`level`,COUNT(*)," +
+            "SUM(IF(p.`is_rejected` = 1, 1, 0))," +
+            "SUM(IF(p.`is_arbitrated` = 1, 1, 0))" +
+            "FROM paper p " +
+            "WHERE p.`question_id` = ? and p.is_missing = false " +
+            "GROUP BY p.`level` ORDER BY p.`level`", nativeQuery = true)
+    List<Object[]> countGroupByLevelAll(Long questionId);
+
     /**
      * 统计workId各档位数量
      *
@@ -218,11 +232,14 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
 
     int countByWorkIdAndSubjectAndIsMissingFalse(Long workId, Subject subject);
 
-    int countByWorkIdAndSubjectAndLevelIsNullAndIsMissingFalseAndActiveTrueAndBatchNoNotNull(Long workId, Subject subject);
+    int countByWorkIdAndSubjectAndLevelIsNullAndIsMissingFalseAndActiveTrueAndBatchNoNotNullAndTest(Long workId, Subject subject, int test);
+
+    int countByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndBatchNoIsNullAndTest(Long workId, Subject subject, int test);
 
-    int countByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndBatchNoIsNull(Long workId, Subject subject);
+    int countByWorkIdAndSubjectAndLevelNotNullAndIsMissingFalseAndActiveTrueAndTest(Long workId, Subject subject, int test);
 
-    int countByWorkIdAndSubjectAndLevelNotNullAndIsMissingFalseAndActiveTrue(Long workId, Subject subject);
+    @Query("select max(p.batchNo) from Paper p where p.questionId = ?1")
+    long findByQuestionId(Long questionId);
 
 //    List<Paper> findByWorkIdAndSubjectAndInspectRange(Long workId, Subject subject, Long inspectRange);
 }

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

@@ -165,7 +165,8 @@ public class MakrerApi {
                 BigDecimal gbd = new BigDecimal(gp).setScale(3, RoundingMode.HALF_EVEN);
                 o.setGpercent(gbd.doubleValue());
 
-                int count = markTaskRepo.countByQuestionIdAndMarkerIdAndStageAndResult(questionId, marker.getId(), MarkStage.LEVEL, o.getId().toString());
+                int count = markTaskRepo.countByQuestionIdAndMarkerIdAndStageAndResult(questionId, marker.getId(), MarkStage.LEVEL.ordinal(), o.getId().toString(), questionId);
+                o.setPercent(count == 0 ? 0 : o.getPercent());
                 o.setCount(count);
             }
         });

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

@@ -76,7 +76,8 @@ public class MarkSubjectApi {
      */
     @RequestMapping(value = "{markSubjectId}", method = RequestMethod.GET)
     public MarkSubject get(@PathVariable String markSubjectId) {
-        return markSubjectRepo.findOne(markSubjectId);
+        MarkSubject subject =  markSubjectRepo.findOne(markSubjectId);
+        return subject;
     }
 
     /**
@@ -107,9 +108,9 @@ public class MarkSubjectApi {
         List<QuestionStatDTO> questionStatDTOs = new ArrayList<>();
         List<Object[]> qStats = null;
         if (markSubject.getStage() == MarkStage.LEVEL) {
-            qStats = paperRepo.countGroupByQuestionForLevel(markSubject.getWorkId(), markSubject.getSubject().toString(), markSubject.getTest());
+            qStats = paperRepo.countGroupByQuestionForLevel(markSubject.getWorkId(), markSubject.getSubject().toString(), 0);
         } else {
-            qStats = paperRepo.countGroupByQuestionForScore(markSubject.getWorkId(), markSubject.getSubject().toString(), markSubject.getTest());
+            qStats = paperRepo.countGroupByQuestionForScore(markSubject.getWorkId(), markSubject.getSubject().toString(), 0);
         }
         for (Object[] objects : qStats) {
             QuestionStatDTO dto = questionStatAssembler.toDTO(objects);
@@ -128,7 +129,7 @@ public class MarkSubjectApi {
     @RequestMapping(value = "{markSubject}/stat/levels", method = RequestMethod.GET)
     public List<LevelStatDTO> levelStat(HttpServletRequest request, @PathVariable MarkSubject markSubject, @RequestParam Long questionId) {
         List<LevelStatDTO> levelStatDTOs = new ArrayList<>();
-        paperRepo.countGroupByLevel(questionId, questionId)
+        paperRepo.countGroupByLevelAll(questionId)
                 .forEach(o -> {
                     levelStatDTOs.add(levelStatAssembler.toDTO(o));
                 });

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

@@ -74,7 +74,8 @@ public class MarkTaskApi {
                             @RequestParam Long questionId,
                             Pageable pageable) throws Exception {
         List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
-
+        //查询
+        long batchNo = paperRepo.findByQuestionId(questionId);
         Specification<MarkTask> specification = (root, query, builder) -> {
             List<Predicate> predicates = new ArrayList<>();
             predicates.add(builder.equal(root.get("questionId"), questionId));
@@ -84,6 +85,9 @@ public class MarkTaskApi {
                 predicates.add(builder.isNull(root.get("result")));
             } else if (stage == MarkStage.LEVEL) {
                 predicates.add(builder.equal(root.get("result"), level));
+                if(!Objects.isNull(batchNo)){
+                    predicates.add(builder.equal(root.get("paper").get("batchNo"), batchNo));
+                }
             } else if (stage == MarkStage.SCORE) {
                 predicates.add(builder.isNotNull(root.get("result")));
             }

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

@@ -93,7 +93,7 @@ public class TaskApi {
     public boolean reevaluation(@RequestParam("paperId") Long paperId,
                                 @RequestParam("rangs") String ranges){
         Paper paper = paperRepo.findOne(paperId);
-//        paper.reject(null);
+        paper.reject(null);
         //重评后撤销标准卷
 //        paper.setSample(false);
         List<MarkTask> markTasks = markTaskRepo.findByPaperIdAndStage(paper.getId(), MarkStage.LEVEL);
@@ -102,8 +102,8 @@ public class TaskApi {
             if(range.length > 0){
                 for (String r : range) {
                     if(Objects.equals(String.valueOf(markTask.getMarkerId()), r)){
-//                        markTask.setRejected(true);
-//                        markTask.setOriginLevel(markTask.getResult());
+                        markTask.setRejected(true);
+                        markTask.setOriginLevel(markTask.getResult());
                         markTask.setResult(null);
 //                        markTask.setActive(false);
                     }
@@ -111,7 +111,7 @@ public class TaskApi {
             }
         }
         markTaskRepo.save(markTasks);
-//        paperRepo.save(paper);
+        paperRepo.save(paper);
         return true;
     }
 

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

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

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

@@ -65,7 +65,7 @@ public class StageControlService {
         statusMap.put(markSubject.getId(), true);
         MarkStage markStage = markSubject.getStage();
         //是否还有未投放的试卷
-        int waitCount =paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndBatchNoIsNull(markSubject.getWorkId(), markSubject.getSubject());
+        int waitCount =paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndBatchNoIsNullAndTest(markSubject.getWorkId(), markSubject.getSubject(), 0);
         if(waitCount > 0 && markStage.equals(MarkStage.LEVEL)){
             markStage = MarkStage.INIT;
         }
@@ -128,7 +128,7 @@ public class StageControlService {
 
         if(markSubject.getTest() != 1) {
             //是否有未结束的分档任务
-            int count = paperRepo.countByWorkIdAndSubjectAndLevelIsNullAndIsMissingFalseAndActiveTrueAndBatchNoNotNull(workId, subject);
+            int count = paperRepo.countByWorkIdAndSubjectAndLevelIsNullAndIsMissingFalseAndActiveTrueAndBatchNoNotNullAndTest(workId, subject, 0);
             if (count > 0) {
                 statusMap.put(markSubject.getId(), false);
                 throw new RuntimeException("没有分档完成");
@@ -139,7 +139,7 @@ public class StageControlService {
                 statusMap.put(markSubject.getId(), false);
                 throw new RuntimeException("请输入正确的分配任务数量");
             }
-            int waitCount = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndBatchNoIsNull(workId, subject);
+            int waitCount = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndBatchNoIsNullAndTest(workId, subject, 0);
             if (taskCount - waitCount > 0) {
                 statusMap.put(markSubject.getId(), false);
                 throw new RuntimeException("分配任务数量不能大于待评数量");
@@ -172,7 +172,7 @@ public class StageControlService {
             statusMap.put(markSubject.getId(), false);
             throw new RuntimeException("没有设定评卷员");
         }
-        int count = paperRepo.countByWorkIdAndSubjectAndLevelIsNullAndIsMissingFalseAndActiveTrueAndBatchNoNotNull(workId, subject);
+        int count = paperRepo.countByWorkIdAndSubjectAndLevelIsNullAndIsMissingFalseAndActiveTrueAndBatchNoNotNullAndTest(workId, subject, 0);
         if (count > 0) {
             statusMap.put(markSubject.getId(), false);
             throw new RuntimeException("没有分档完成");
@@ -260,7 +260,7 @@ public class StageControlService {
         Long workId = markSubject.getWorkId();
         Subject subject = markSubject.getSubject();
         //已评任务数
-        int successCount = paperRepo.countByWorkIdAndSubjectAndLevelNotNullAndIsMissingFalseAndActiveTrue(workId, subject);
+        int successCount = paperRepo.countByWorkIdAndSubjectAndLevelNotNullAndIsMissingFalseAndActiveTrueAndTest(workId, subject, 0);
         //所有任务数(查询所有有效试卷)
         int totalCount = paperRepo.countByWorkIdAndSubjectAndIsMissingFalse(workId, subject);