Эх сурвалжийг харах

线下版本-发任务优化-20201118

xiaof 4 жил өмнө
parent
commit
89786725c7

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

@@ -169,7 +169,7 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
             "WHERE t.workId = ?1 and t.subject = ?2 and t.markerId = ?3 and t.stage = ?4 and t.questionId = ?5 ")
     Integer findRandomSeqByWorkIdAndSubjectAndMarkerIdAndStageAndQuestionId(Long workId, Subject subject, Long markerId, MarkStage stage, Long questionId);
 
-    @Query(value = "SELECT count(1) from mark_task m inner join paper p on m.paper_id = p.id and p.is_missing = ?4 and p.batch_no = ?5 where m.question_id = ?1 and m.marker_id = ?2 and m.stage = ?3 and m.result is null and p.is_rejected = false", nativeQuery = true)
+    @Query(value = "SELECT count(1) from mark_task m inner join (select id from paper where is_missing = ?4 and batch_no = ?5 and is_rejected = false) p on m.paper_id = p.id where m.question_id = ?1 and m.marker_id = ?2 and m.stage = ?3 and m.result is null", nativeQuery = true)
     int countByQuestionIdAndMarkerIdAndStageAndResultIsNullAndIsMissing(Long questionId, Long markerId, int stage, boolean isMissing, Long batchNo);
 
     @Query(value = "SELECT count(1) from mark_task m inner join paper p on m.paper_id = p.id and p.is_missing = ?4 and p.score_batch_no = ?5 and p.is_shift = 0 and p.is_shift_score = 0 where m.question_id = ?1 and m.marker_id = ?2 and m.stage = ?3 and m.result is null", nativeQuery = true)

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

@@ -157,6 +157,7 @@ public class MakrerApi {
                 return map;
             }
         });
+        long t1 = System.currentTimeMillis();
         //当前考区各档位定档数量
         paperRepo.countGroupByLevel(questionId)
                 .forEach(o -> {
@@ -228,7 +229,7 @@ public class MakrerApi {
 
                 o.setPt(levelMap.get(o.getId()).getPt());
                 o.setKdpt(levelMap.get(o.getId()).getKdpt());
-                o.setCount(Objects.isNull(o.getCount()) ? 0 : o.getCount());
+//                o.setCount(Objects.isNull(o.getCount()) ? 0 : o.getCount());
                 double p = finalKdtotal == 0 ? 0 : (double) o.getCount() / finalKdtotal * 100;
                 BigDecimal bd = new BigDecimal(p).setScale(3, RoundingMode.HALF_EVEN);
                 o.setPercent(bd.doubleValue());
@@ -341,7 +342,7 @@ public class MakrerApi {
                 o.setGpercent(gbd.doubleValue());
 
                 int count;
-                if(ParamCache.paramMap.get(marker.getWorkId()).getScoreShowAllPaper() == 1){
+                if (ParamCache.paramMap.get(marker.getWorkId()).getScoreShowAllPaper() == 1) {
                     count = markTaskRepo.countScoreByQuestionIdAndMarkerIdAndStageAndResultAll(questionId, marker.getId(), MarkStage.SCORE.ordinal(), o.getId().toString());
                 } else {
                     count = markTaskRepo.countScoreByQuestionIdAndMarkerIdAndStageAndResult(questionId, marker.getId(), MarkStage.SCORE.ordinal(), o.getId().toString(), batchNo);

+ 8 - 5
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/MarkTaskAssembler.java

@@ -5,13 +5,11 @@ import cn.com.qmth.stmms.ms.commons.config.SystemConfig;
 import cn.com.qmth.stmms.ms.commons.constant.SystemConstant;
 import cn.com.qmth.stmms.ms.commons.utils.MD5Util;
 import cn.com.qmth.stmms.ms.core.cache.ParamCache;
-import cn.com.qmth.stmms.ms.core.domain.MarkLogOperType;
-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.Student;
+import cn.com.qmth.stmms.ms.core.domain.*;
 import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
 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.repository.ChangeLevelRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkLogRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkUserRepo;
 import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
@@ -43,6 +41,9 @@ public class MarkTaskAssembler {
     @Autowired
     MarkUserRepo markUserRepo;
 
+    @Autowired
+    ChangeLevelRepo changeLevelRepo;
+
     public MarkTaskDTO toDTO(MarkTask markTask) {
 
         MarkTaskDTO markTaskDTO = null;
@@ -172,7 +173,9 @@ public class MarkTaskAssembler {
             Paper paper = markTask.getPaper();
             if (paper.isShift()) {
                 markTaskDTO.setLevel(markTask.getResult());
-                markTaskDTO.setOriginLevel(markTask.getOriginLevel());
+//                markTaskDTO.setOriginLevel(markTask.getOriginLevel());
+                ChangeLevel changeLevel = changeLevelRepo.findByWorkIdAndSubjectAndPaperIdAndAuditStatusAndIsCurr(markTask.getWorkId(), markTask.getSubject().name(), paper.getId());
+                markTaskDTO.setOriginLevel(changeLevel != null ? changeLevel.getOriginalLevel(): "");
             }
             if(paper.isShiftScore()){
                 markTaskDTO.setLevel(paper.getLevel());

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

@@ -47,7 +47,7 @@ public class AssignTaskService {
 
     @Autowired
     RandomUtil randomUtil;
-    
+
     @Autowired
     SqlUtil sqlUtil;
 
@@ -109,7 +109,8 @@ public class AssignTaskService {
     /**
      * 分组任务模式,将该科目的评卷员分成N组,将该科目试卷平均分给这些组,每组内的评卷员每人将这些试卷打分
      * 比如:6个评卷员分2组,有1000份试卷,每组评500份,每个评卷员评500份
-     *  @param papers
+     *
+     * @param papers
      * @param markerGroups
      * @param taskList
      */
@@ -127,7 +128,7 @@ public class AssignTaskService {
 //        Map<Long, MarkTask> randomMap = markTasks.stream().collect(Collectors.toMap(MarkTask::getRandomSeqNew, Function.identity(), (dto1, dto2) -> dto1));
         List<Object[]> markTasks = markTaskRepo.findAllByWorkId(markSubject.getWorkId());
         Map<Long, Object> randomMap = new HashMap<>();
-        markTasks.forEach(m-> randomMap.put(Long.valueOf(m[1].toString()), m[0]));
+        markTasks.forEach(m -> randomMap.put(Long.valueOf(m[1].toString()), m[0]));
         //定序序号记录
         Map map = new HashMap();
         while (iterator.hasNext()) {
@@ -163,7 +164,7 @@ public class AssignTaskService {
                     markTask.setSerialNumber(serialNumber);
                     markTask.setDisplayNumber(displayNumber);
                 } else {
-                    if(paper.isSample() && paper.getLevel() != null){
+                    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 {
@@ -192,7 +193,22 @@ public class AssignTaskService {
             }
             idx++;
         }
-        markTaskRepo.save(markTaskList);
+
+        List<MarkTask> data = new ArrayList<>();
+        int mod = markTaskList.size() / 5000;
+        for (MarkTask markTask : markTaskList) {
+            if (data.size() == markTaskList.size() / mod) {
+                markTaskRepo.save(data);
+                data.clear();
+            }
+            data.add(markTask);
+        }
+        //将剩下的数据也导入
+        if (!data.isEmpty()) {
+            markTaskRepo.save(data);
+        }
+
+//        markTaskRepo.save(markTaskList);
         paperRepo.save(paperList);
         if (markSubject.getTest() != 1) {
             //更新subject表formal为正试评卷
@@ -244,14 +260,14 @@ public class AssignTaskService {
         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("          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.question_id, p.subject , p.level                ");
         sql.append("  ORDER BY p.level                                                            ");
-        List list =  sqlUtil.execSqlForMap(sql.toString());
+        List list = sqlUtil.execSqlForMap(sql.toString());
         List<TaskPublishSetting> taskPublishSettings = new ArrayList<>(list.size());
         for (Object o : list) {
             Map map = (Map) o;