Bladeren bron

打分任务发布修改

xiaof 4 jaren geleden
bovenliggende
commit
9dd6dd86b1

+ 10 - 0
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/TaskPublishSetting.java

@@ -15,6 +15,8 @@ public class TaskPublishSetting {
 
     private Long workId;
 
+    private Long questionId;
+
     private String subject;
 
     private String code;
@@ -51,6 +53,14 @@ public class TaskPublishSetting {
         this.workId = workId;
     }
 
+    public Long getQuestionId() {
+        return questionId;
+    }
+
+    public void setQuestionId(Long questionId) {
+        this.questionId = questionId;
+    }
+
     public String getSubject() {
         return subject;
     }

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

@@ -34,6 +34,8 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
 
     List<Paper> findByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndTestOrderByQuestionId(Long workId, Subject subject, int test);
 
+    List<Paper> findByWorkIdAndQuestionIdAndSubjectAndIsMissingFalseAndActiveFalseAndTestOrderByQuestionId(Long workId, Long questionId, Subject subject, int test);
+
     List<Paper> findByWorkIdAndSubjectAndIsMissingFalseAndActiveTrue(Long workId, Subject subject, Sort sort);
 
     List<Paper> findByWorkIdAndSubjectAndIsMissingFalseAndActiveTrueAndLevelIn(Long workId, Subject subject, List<String> levelList);
@@ -83,6 +85,14 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
             "GROUP BY p.`level` ORDER BY p.`level`", nativeQuery = true)
     List<Object[]> countGroupByLevel(Long questionId, Long batchNo);
 
+    @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[]> countGroupByLevel(Long questionId);
+
     /**
      * 统计科目指定试题的各档位打分数量
      *
@@ -284,8 +294,12 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
 
     int countByWorkIdAndSubjectAndLevelIsNullAndIsMissingFalseAndActiveTrueAndBatchNoNotNullAndTest(Long workId, Subject subject, int test);
 
+    int countByWorkIdAndQuestionIdAndSubjectAndLevelIsNullAndIsMissingFalseAndTest(Long workId, Long questionId, Subject subject, int test);
+
     int countByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndBatchNoIsNullAndTest(Long workId, Subject subject, int test);
 
+    int countByWorkIdAndQuestionIdAndSubjectAndIsMissingFalseAndActiveFalseAndBatchNoIsNullAndTest(Long workId, Long questionId, Subject subject, int test);
+
     int countByWorkIdAndSubjectAndLevelNotNullAndIsMissingFalseAndActiveTrueAndTest(Long workId, Subject subject, int test);
 
     @Query("select max(p.batchNo) from Paper p where p.questionId = ?1")
@@ -332,7 +346,7 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
             "SUM(IF(p.`is_shift` = 1, 1, 0))," +
             "SUM(IF(p.`is_shift_score` = 1, 1, 0)) " +
             "FROM paper p " +
-            "WHERE p.`question_id` = ? and p.is_missing = false and p.is_test = ? and p.score is null " +
+            "WHERE p.`question_id` = ? and p.is_missing = false and p.is_test = ? and p.score is null and p.score_batch_no is not null " +
             "GROUP BY p.`score`", nativeQuery = true)
     List<Object[]> countScoreGroupByLevelAll(Long questionId, int test);
 
@@ -340,5 +354,7 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
 
     int countByWorkIdAndSubjectAndQuestionIdAndLevelAndScoreNotNull(Long workId, Subject subject, Long questionId, String valueOf);
 
+    List<Paper> findByWorkIdAndQuestionIdAndSubjectAndIsMissingFalseAndActiveTrueAndScoreBatchNoIsNull(Long workId, Long questionId0, Subject subject, Sort sort);
+
 //    List<Paper> findByWorkIdAndSubjectAndInspectRange(Long workId, Subject subject, Long inspectRange);
 }

+ 10 - 2
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/TaskPublishSettingRepo.java

@@ -20,7 +20,15 @@ public interface TaskPublishSettingRepo extends JpaRepository<TaskPublishSetting
     List<Map> findByWorkIdAndSubjectAndTest(Long workId, String subject, int ordinal);
 
     @Query("select max(t.publishCount) from TaskPublishSetting t where t.workId = ?1 and t.subject = ?2")
-    int maxPublishCount(Long workId, String subject);
+    Integer maxPublishCount(Long workId, String subject);
 
-    List<TaskPublishSetting> findByWorkIdAndSubjectAndPublishCount(Long workId, String subject, int maxCount);
+    @Query(value = "SELECT work_id workId, question_id questionId, subject, code, sum(total_count) totalCount, sum(success_count) successCount, sum(wait_count) waitCount FROM task_publish_setting where work_id = ?1 and subject = ?2 and publish_count = ?3 group by work_id, question_id, subject, code", nativeQuery = true)
+    List<Map> findAllByWorkIdAndSubjectAndPublishCount(Long workId, String subject, int maxCount);
+
+    List<TaskPublishSetting> findByWorkIdAndQuestionIdAndSubjectAndPublishCount(Long workId, Long questionId, String name, int maxCount);
+
+    @Query("select max(t.publishCount) from TaskPublishSetting t where t.workId = ?1 and t.questionId = ?2 and t.subject = ?3")
+    Integer maxPublishCountByQuestionId(Long workId, Long questionId, String name);
+
+    List<TaskPublishSetting> findByWorkIdAndSubjectAndPublishCount(Long workId, String name, int max);
 }

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

@@ -333,8 +333,9 @@ public class MarkSubjectApi {
      */
     @RequestMapping(value = "{markSubject}/publishScore", method = RequestMethod.POST)
     public void publishScore(@PathVariable MarkSubject markSubject, @RequestBody Map map) throws Exception {
+        Object questionId = map.get("questionId");
         List<TaskPublishSetting> taskList = JSONObject.parseArray(JSONObject.toJSONString(map.get("taskList")), TaskPublishSetting.class);
-        stageControlService.enterScoreStage(markSubject, taskList);
+        stageControlService.enterScoreStage(markSubject, taskList, questionId);
     }
 
     /**
@@ -353,8 +354,8 @@ public class MarkSubjectApi {
      * @param markSubject 评卷科目id
      */
     @RequestMapping(value = "{markSubject}/scoreProgress", method = RequestMethod.GET)
-    public List scoreProgress(@PathVariable MarkSubject markSubject) {
-        return stageControlService.scoreProgress(markSubject);
+    public List scoreProgress(@PathVariable MarkSubject markSubject,@RequestParam Long questionId) {
+        return stageControlService.scoreProgress(markSubject, questionId);
     }
 
     /**

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

@@ -221,6 +221,7 @@ public class PaperApi {
                 if (Objects.isNull(level)) {
                     predicates.add(builder.isNotNull(root.get("level")));
                     predicates.add(builder.isNull(root.get("score")));
+                    predicates.add(builder.isNotNull(root.get("scoreBatchNo")));
                 } else {
                     predicates.add(builder.equal(root.get("level"), level));
                     predicates.add(builder.isNotNull(root.get("score")));

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

@@ -224,44 +224,33 @@ public class AssignTaskService {
 
     private void initTaskPublishData(MarkSubject markSubject) {
         StringBuffer sql = new StringBuffer();
-        sql.append("  SELECT                                                                         ");
-        sql.append("      a.work_id workId,                                                          ");
-        sql.append("      b.subject,                                                                 ");
-        sql.append("      a.code,                                                                    ");
-        sql.append("      IFNULL(b.totalCount, 0) totalCount                                        ");
-//        sql.append("      IFNULL(b.successCount, 0) successCount,                                    ");
-//        sql.append("      IFNULL(b.waitCount, 0) waitCount                                           ");
-        sql.append("  FROM                                                                           ");
-        sql.append("      level a                                                                    ");
-        sql.append("          LEFT JOIN                                                              ");
-        sql.append("      (SELECT                                                                    ");
-        sql.append("          p.work_id workId,                                                      ");
-        sql.append("              p.subject,                                                         ");
-        sql.append("              p.level,                                                           ");
-        sql.append("              COUNT(1) AS totalCount                                            ");
-//        sql.append("              SUM(IF(p.score IS NOT NULL, 1, 0)) successCount,                   ");
-//        sql.append("              SUM(IF(p.score IS NULL, 1, 0)) waitCount                           ");
-        sql.append("      FROM                                                                       ");
-        sql.append("          paper p                                                                ");
-        sql.append("      WHERE                                                                      ");
+        sql.append("  SELECT                                                                    ");
+        sql.append("          p.work_id workId,                                                  ");
+        sql.append("          p.question_id questionId,                                          ");
+        sql.append("          p.subject,                                                         ");
+        sql.append("          p.level,                                                           ");
+        sql.append("              COUNT(1) AS totalCount                                         ");
+//        sql.append("              SUM(IF(p.score IS NOT NULL, 1, 0)) successCount,               ");
+//        sql.append("              SUM(IF(p.score IS NULL, 1, 0)) waitCount                        ");
+        sql.append("      FROM                                                                   ");
+        sql.append("          paper p                                                            ");
+        sql.append("      WHERE                                                                  ");
         sql.append("          p.work_id = '"+markSubject.getWorkId()+"' AND p.subject = '"+markSubject.getSubject().name()+"'                                    ");
-        sql.append("              AND p.is_test = 0                                                  ");
-        sql.append("              AND p.level IS NOT NULL                                            ");
-        sql.append("              AND p.is_missing = FALSE                                           ");
-        sql.append("              AND p.is_active = TRUE                                             ");
-        sql.append("      GROUP BY p.work_id , p.subject , p.level) b ON a.work_id = b.workId        ");
-        sql.append("          AND a.code = b.level                                                   ");
-        sql.append("  WHERE                                                                          ");
-        sql.append("      a.work_id = '"+markSubject.getWorkId()+"'                                  ");
-        sql.append("  ORDER BY a.code                                                                ");
+        sql.append("              AND p.is_test = 0                                              ");
+        sql.append("              AND p.level IS NOT NULL                                        ");
+        sql.append("              AND p.is_missing = FALSE                                       ");
+        sql.append("              AND p.is_active = TRUE                                         ");
+        sql.append("      GROUP BY p.work_id , p.question_id, p.subject , p.level                ");
+        sql.append("  ORDER BY p.level                                                            ");
         List list =  sqlUtil.execSqlForMap(sql.toString());
         List<TaskPublishSetting> taskPublishSettings = new ArrayList<>(list.size());
         for (Object o : list) {
             Map map = (Map) o;
             TaskPublishSetting taskPublishSetting = new TaskPublishSetting();
             taskPublishSetting.setWorkId(Long.valueOf(map.get("workId").toString()));
+            taskPublishSetting.setQuestionId(Long.valueOf(map.get("questionId").toString()));
             taskPublishSetting.setSubject((String) map.get("subject"));
-            taskPublishSetting.setCode((String) map.get("code"));
+            taskPublishSetting.setCode((String) map.get("level"));
             taskPublishSetting.setTotalCount(Integer.valueOf(map.get("totalCount").toString()));
             taskPublishSetting.setSuccessCount(0);
             taskPublishSetting.setWaitCount(Integer.valueOf(map.get("totalCount").toString()));

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

@@ -159,10 +159,10 @@ public class StageControlService {
                 throw new RuntimeException("没有分档完成");
             }
 
-            if(Objects.nonNull(questionId)){
+            if (Objects.nonNull(questionId)) {
                 Long questionId1 = Long.valueOf(questionId.toString());
                 int qcount = paperRepo.countByWorkIdAndQuestionIdAndSubjectAndLevelIsNullAndIsMissingFalseAndTest(workId, questionId1, subject, 0);
-                if(qcount == 0){
+                if (qcount == 0) {
                     statusMap.put(markSubject.getId(), false);
                     throw new RuntimeException("没有可分档任务");
                 }
@@ -174,7 +174,7 @@ public class StageControlService {
                 throw new RuntimeException("请输入正确的分配任务数量");
             }
             int waitCount;
-            if(Objects.isNull(questionId)) {
+            if (Objects.isNull(questionId)) {
                 waitCount = paperRepo.countByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndBatchNoIsNullAndTest(workId, subject, 0);
             } else {
                 Long questionId1 = Long.valueOf(questionId.toString());
@@ -191,7 +191,7 @@ public class StageControlService {
             papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, markSubject.getTest());
         } else {
             List<Paper> papersList;
-            if(Objects.isNull(questionId)) {
+            if (Objects.isNull(questionId)) {
                 papersList = paperRepo.findByWorkIdAndSubjectAndIsMissingFalseAndActiveFalseAndTestOrderByQuestionId(workId, subject, TrialEnum.DEFAULT.getId());
             } else {
                 Long questionId1 = Long.valueOf(questionId.toString());
@@ -323,7 +323,7 @@ public class StageControlService {
         assignTaskService.assignForGrouping(papers, markerGroups, markSubject, null);
     }
 
-    private void enterToScoreStage(MarkSubject markSubject) {
+    public void enterToScoreStage(MarkSubject markSubject) {
         Long workId = markSubject.getWorkId();
         Subject subject = markSubject.getSubject();
         List<MarkUser> markers = markUserRepo.findByWorkIdAndSubjectAndRole(workId, subject, Role.MARKER);
@@ -337,7 +337,6 @@ public class StageControlService {
             statusMap.put(markSubject.getId(), false);
             throw new RuntimeException("没有分档完成");
         }
-        //todo 待修改
         this.isPtFull(workId, markSubject);
         List<MarkerGroup> markerGroups = markerGroupRepo.findByWorkIdAndSubject(workId, subject);
         if (markerGroups.size() == 0) {
@@ -348,7 +347,8 @@ public class StageControlService {
         assignTaskService.assignForGroupingScore(markerGroups, markSubject);
     }
 
-    public void enterScoreStage(MarkSubject markSubject, List<TaskPublishSetting> taskList) throws Exception {
+    @Transactional
+    public void enterScoreStage(MarkSubject markSubject, List<TaskPublishSetting> taskList, Object questionId) throws Exception {
         Long workId = markSubject.getWorkId();
         Subject subject = markSubject.getSubject();
         List<MarkUser> markers = markUserRepo.findByWorkIdAndSubjectAndRole(workId, subject, Role.MARKER);
@@ -373,7 +373,7 @@ public class StageControlService {
         for (TaskPublishSetting taskPublishSetting : taskList) {
             if (Objects.nonNull(taskPublishSetting.getTaskCount()) && taskPublishSetting.getTaskCount() > 0 && taskPublishSetting.getWaitCount() < taskPublishSetting.getTaskCount()) {
                 statusMap.put(markSubject.getId(), false);
-                throw new RuntimeException(taskPublishSetting.getCode()+"档位本次任务数量必须小于等于未评数量");
+                throw new RuntimeException(taskPublishSetting.getCode() + "档位本次任务数量必须小于等于未评数量");
             }
         }
         //已发布任务是否都已完成
@@ -386,26 +386,80 @@ public class StageControlService {
         //总的发布任务数
         int totalTaskCount = taskList.stream().mapToInt(TaskPublishSetting::getTaskCount).sum();
 
-        Sort sort = new Sort("questionId","level");
-        List<Paper> papers = paperRepo.findByWorkIdAndSubjectAndIsMissingFalseAndActiveTrueAndScoreBatchNoIsNull(workId, subject, sort);
+        Sort sort = new Sort("questionId", "level");
+        List<Paper> papers;
+        //questionId为空,为所有考区
+        if (Objects.isNull(questionId)) {
+            int totalCount = taskList.stream().mapToInt(TaskPublishSetting::getTotalCount).sum();
+            int successCount = taskList.stream().mapToInt(TaskPublishSetting::getSuccessCount).sum();
+            papers = paperRepo.findByWorkIdAndSubjectAndIsMissingFalseAndActiveTrueAndScoreBatchNoIsNull(workId, subject, sort);
+            if (successCount > 0) {
+                statusMap.put(markSubject.getId(), false);
+                throw new RuntimeException("单考区发布过任务,不能再发布所有考区任务");
+            } else if (totalTaskCount - totalCount != 0) {
+                statusMap.put(markSubject.getId(), false);
+                throw new RuntimeException("选择所有考区时,要发布所有任务");
+            }
+        } else {
+            Long questionId0 = Long.valueOf(questionId.toString());
+            papers = paperRepo.findByWorkIdAndQuestionIdAndSubjectAndIsMissingFalseAndActiveTrueAndScoreBatchNoIsNull(workId, questionId0, subject, sort);
+        }
         papers = papers.subList(0, totalTaskCount);
 
         assignTaskService.assignForGrouping(papers, markerGroups, markSubject, taskList);
 
         //保存发布数据
-        int max = taskPublishSettingRepo.maxPublishCount(workId, subject.name()) + 1;
+        int max = taskPublishSettingRepo.maxPublishCount(workId, subject.name());
         long scoreBatchNo = papers.get(0).getScoreBatchNo();
-        taskList.stream().map(m->{
-            m.setWorkId(workId);
-            m.setSubject(subject.name());
-            m.setSuccessCount(m.getSuccessCount() + m.getTaskCount());
-            m.setWaitCount(m.getTotalCount() - m.getSuccessCount());
-            m.setTaskCount(0);
-            m.setBatchNo(scoreBatchNo);
-            m.setPublishCount(max);
-            return m;
-        }).collect(Collectors.toList());
-        taskPublishSettingRepo.save(taskList);
+        List<TaskPublishSetting> taskListAll = taskPublishSettingRepo.findByWorkIdAndSubjectAndPublishCount(workId, subject.name(), max);
+        if (Objects.isNull(questionId)) {
+            Map<String, TaskPublishSetting> map = taskList.stream().collect(Collectors.toMap(TaskPublishSetting::getCode, p -> p));
+            taskListAll.stream().map(m -> {
+                m.setId(null);
+                m.setWorkId(workId);
+                m.setQuestionId(m.getQuestionId());
+                m.setSubject(subject.name());
+                m.setCode(m.getCode());
+                m.setSuccessCount(m.getTotalCount());
+                m.setWaitCount(0);
+                m.setSortRule(map.get(m.getCode()).getSortRule());
+                m.setDisplayNumber(map.get(m.getCode()).getDisplayNumber());
+                m.setTaskCount(0);
+                m.setBatchNo(scoreBatchNo);
+                m.setPublishCount(max + 1);
+                return m;
+            }).collect(Collectors.toList());
+            taskPublishSettingRepo.save(taskListAll);
+        } else {
+            Long questionId0 = Long.valueOf(questionId.toString());
+            List<TaskPublishSetting> finalList = taskListAll.stream().map(m -> {
+                TaskPublishSetting taskPublishSetting = new TaskPublishSetting();
+                taskPublishSetting.setId(null);
+                taskPublishSetting.setWorkId(m.getWorkId());
+                taskPublishSetting.setQuestionId(m.getQuestionId());
+                taskPublishSetting.setSubject(m.getSubject());
+                taskPublishSetting.setCode(m.getCode());
+                taskPublishSetting.setSuccessCount(m.getSuccessCount());
+                taskPublishSetting.setTotalCount(m.getTotalCount());
+                taskPublishSetting.setWaitCount(m.getTotalCount());
+                taskPublishSetting.setSortRule(m.getSortRule());
+                taskPublishSetting.setTaskCount(0);
+                taskPublishSetting.setPublishCount(max + 1);
+                taskPublishSetting.setBatchNo(scoreBatchNo);
+                for (TaskPublishSetting tps : taskList) {
+                    if (m.getQuestionId().equals(questionId0) && m.getCode().equals(tps.getCode())) {
+                        taskPublishSetting.setSuccessCount(tps.getSuccessCount() + tps.getTaskCount());
+                        taskPublishSetting.setWaitCount(tps.getTotalCount() - tps.getSuccessCount());
+                        taskPublishSetting.setSortRule(tps.getSortRule());
+                        taskPublishSetting.setDisplayNumber(tps.getDisplayNumber());
+                        taskPublishSetting.setTaskCount(0);
+                    }
+                }
+                return taskPublishSetting;
+            }).collect(Collectors.toList());
+            taskPublishSettingRepo.save(finalList);
+        }
+
     }
 
     /**
@@ -502,13 +556,26 @@ public class StageControlService {
      *
      * @param markSubject
      */
-    public List scoreProgress(MarkSubject markSubject) {
-        List<TaskPublishSetting> publishSettings = taskPublishSettingRepo.findByWorkIdAndSubject(markSubject.getWorkId(), markSubject.getSubject().name());
+    public List scoreProgress(MarkSubject markSubject, Long questionId) {
+        /*List<TaskPublishSetting> publishSettings = taskPublishSettingRepo.findByWorkIdAndSubject(markSubject.getWorkId(), markSubject.getSubject().name());
         if (publishSettings != null && publishSettings.size() > 0) {
             int maxCount = taskPublishSettingRepo.maxPublishCount(markSubject.getWorkId(), markSubject.getSubject().name());
             return taskPublishSettingRepo.findByWorkIdAndSubjectAndPublishCount(markSubject.getWorkId(), markSubject.getSubject().name(), maxCount);
+        }*/
+
+        Integer maxCount = taskPublishSettingRepo.maxPublishCountByQuestionId(markSubject.getWorkId(), Long.valueOf(questionId.toString()), markSubject.getSubject().name());
+        if (maxCount != null && maxCount.intValue() >= 0) {
+            List settingList = null;
+            //单个考区
+            if (questionId != null) {
+                settingList = taskPublishSettingRepo.findByWorkIdAndQuestionIdAndSubjectAndPublishCount(markSubject.getWorkId(), questionId, markSubject.getSubject().name(), maxCount);
+            }
+            //所有考区
+            else {
+                settingList = taskPublishSettingRepo.findAllByWorkIdAndSubjectAndPublishCount(markSubject.getWorkId(), markSubject.getSubject().name(), maxCount);
+            }
+            return settingList;
         }
-
         return null;
     }