Browse Source

联考版-v2.1.0

xiaof 3 năm trước cách đây
mục cha
commit
5ed56fad8a

+ 6 - 3
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/cache/CacheService.java

@@ -22,6 +22,7 @@ public class CacheService {
 
     /**
      * 保存
+     *
      * @param userId
      * @return
      */
@@ -32,6 +33,7 @@ public class CacheService {
 
     /**
      * 删除
+     *
      * @param userId
      * @return
      */
@@ -43,13 +45,14 @@ public class CacheService {
 
     /**
      * 查询
+     *
      * @param userId
      * @return
      */
-    @Cacheable(value=CACHE_NAME,key="'token'+ #userId")
-    public String queryTokenCache(String userId){
+    @Cacheable(value = CACHE_NAME, key = "'token'+ #userId")
+    public String queryTokenCache(String userId) {
         //若找不到缓存将打印出提示语句
-        System.err.println("没有走缓存!"+ userId);
+//        System.err.println("没有走缓存!" + userId);
         return null;
     }
 }

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

@@ -1,6 +1,7 @@
 package cn.com.qmth.stmms.ms.core.repository;
 
 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.task.MarkTask;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkerGroupLeader;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
@@ -8,6 +9,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 
 import java.util.List;
 
@@ -119,7 +121,7 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
      * 统计各评卷员各试题已评数及总数(分档阶段)
      *
      *
-     * @param name
+     * @param subject
      * @param stageId
      * @param batchNo
      * @param markers
@@ -127,8 +129,8 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
      */
     @Query(value = "SELECT q.`id`,t.`marker_id` markerId,mu.login_name loginName,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 JOIN mark_user mu on t.marker_id = mu.id 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 = ? and p.batch_no = ? and t.marker_id in (?) GROUP BY t.marker_id,mu.login_name, t.`marker_name` ORDER BY q.`id`,t.marker_id", nativeQuery = true)
-    List<Object[]> listGroupByQuestionAndMarkerAndBatchNoAndMarkerId(Long workId, String name, Integer stageId, int test, Long batchNo, String markers);
+            "t.work_id = :workId and t.subject = :subject and t.stage = :stageId and p.is_missing = false and p.is_test = :test and p.batch_no = :batchNo and t.marker_id in (:markers) GROUP BY t.marker_id,mu.login_name, t.`marker_name` ORDER BY q.`id`,t.marker_id", nativeQuery = true)
+    List<Object[]> listGroupByQuestionAndMarkerAndBatchNoAndMarkerId(@Param("workId") Long workId, @Param("subject") String subject, @Param("stageId") Integer stageId, @Param("test") int test, @Param("batchNo") Long batchNo, @Param("markers") List<Long> markers);
 
     /**
      * 考区已评数及总数(分档阶段)
@@ -182,8 +184,8 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
      */
     @Query(value = "SELECT q.`id`,t.`marker_id` markerId,mu.login_name loginName,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 JOIN mark_user mu on t.marker_id = mu.id 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.score_batch_no = ? and t.`marker_id` in (?) and p.is_missing = false GROUP BY t.marker_id,mu.login_name, t.`marker_name` ORDER BY q.`id`, t.`marker_id`", nativeQuery = true)
-    List<Object[]> listGroupByQuestionAndMarkerAndScoreBatchNoAndMakerId(Long workId, String name, Integer stageId, Long batchNo, String markers);
+            "t.work_id = :workId and t.subject = :subject and t.stage = :stageId and p.score_batch_no = :batchNo and t.`marker_id` in (:markers) and p.is_missing = false GROUP BY t.marker_id,mu.login_name, t.`marker_name` ORDER BY q.`id`, t.`marker_id`", nativeQuery = true)
+    List<Object[]> listGroupByQuestionAndMarkerAndScoreBatchNoAndMakerId(@Param("workId") Long workId, @Param("subject") String subject, @Param("stageId") Integer stageId, @Param("batchNo") Long batchNo, @Param("markers") List<Long> markers);
 
     /**
      * 统计指定试卷的所有任务数量
@@ -280,5 +282,10 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
     @Query(value = "update mark_task m set m.level = ?1 where m.paper_id = ?2", nativeQuery = true)
     void updateLevelByPaperId(String level, Long id);
 
-    List<MarkTask> findByWorkIdAndSubjectAndStageAndMarkerIdIn(Long workId, Subject subject, MarkStage stage, List<Long> markers);
+    @Query("select s.paper from MarkTask s where s.workId = :workId and s.subject = :subject and s.stage = :stage and s.markerId in (:markers)")
+    List<Paper> findByWorkIdAndSubjectAndStageAndMarkerIdIn(@Param("workId") Long workId, @Param("subject") Subject subject, @Param("stage") MarkStage stage, @Param("markers") List<Long> markers);
+
+    @Query(value = "select s.paper_id, s.marker_id from mark_task s where s.work_id = :workId and s.subject = :subject and s.stage = :stage", nativeQuery = true)
+    List<Object[]> findByWorkIdAndSubjectAndStage(@Param("workId") Long workId, @Param("subject") String subject, @Param("stage") int stage);
+
 }

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

@@ -440,5 +440,7 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
 
     long countByWorkIdAndSubjectAndIdIn(Long workId, Subject subject, List<Long> paperIds);
 
+    List<Paper> findByWorkIdAndSubjectAndIsArbitratedTrue(Long workId, Subject subject);
+
 //    List<Paper> findByWorkIdAndSubjectAndInspectRange(Long workId, Subject subject, Long inspectRange);
 }

+ 147 - 31
stmms-ms-main/src/test/java/BatchCreateDataTest.java

@@ -1,14 +1,12 @@
 import cn.com.qmth.stmms.ms.Application;
 import cn.com.qmth.stmms.ms.commons.utils.RandomUtil;
-import cn.com.qmth.stmms.ms.core.domain.ExamQuestion;
-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.Work;
+import cn.com.qmth.stmms.ms.core.cache.ParamCache;
+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.repository.ExamQuestionRepo;
-import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
-import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
-import cn.com.qmth.stmms.ms.core.repository.WorkRepo;
+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.*;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import net.coobird.thumbnailator.Thumbnails;
 import org.junit.Test;
@@ -18,6 +16,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.util.CollectionUtils;
 
 import java.io.File;
 import java.io.IOException;
@@ -42,30 +41,56 @@ public class BatchCreateDataTest {
     @Autowired
     private WorkRepo workRepo;
 
+    @Autowired
+    private MarkSubjectRepo markSubjectRepo;
+
+    @Autowired
+    private MarkUserRepo markUserRepo;
+
+    @Autowired
+    private ParamSettingRepo paramSettingRepo;
+
+    @Autowired
+    private LevelRepo levelRepo;
+
     @Autowired
     RandomUtil randomUtil;
 
-    //考生数量
-    private int initNumber = 20000;
+    // 考生初始准考证号
+    private int initNumber = 10000;
+    // 考生数量
     private static int COUNT = 60000;
-    private static Long WORK_ID = 10l;
+    // 评卷员数量
+    private static int MARKER_COUNT = 15;
+    // 科组长数量
+    private static int MARKER_LEADER_COUNT = 4;
+    // 工作id
+    private static Long WORK_ID = 1L;
+    // 生成科目
     private List<Subject> subjects = Arrays.asList(Subject.SX, Subject.SC, Subject.SM);
+    // 是否复制图片
+    private boolean isCreateImage = false;
+    // 图片存放目录
     private String baseDir = "D:\\my_workspaces\\ide_workspace_qmth\\idea_workspace\\stmms-ms-server\\upload";
 
+    /**
+     * 生成数据
+     * @throws Exception
+     */
     @Test
-    public void createSxTask() throws Exception {
+    public void createTask() throws Exception {
+        createData();
+    }
+
+    private void createData() throws Exception {
         //默认用id为10的工作
         Work work = workRepo.findOne(WORK_ID);
-        if (work == null) {
-            work = new Work();
-            work.setId(10l);
-            work.setActive(true);
-            work.setCreatedOn(new Date());
-            work.setName("批量图片");
-            workRepo.save(work);
-        }
+        createWork(work);
+
+        // 生成用户
+        createUser();
 
-        randomUtil.getRandom(work.getId(), false);
+        randomUtil.getRandom(WORK_ID, false);
 
         //生成exam_question信息
         List<ExamQuestion> questions = createQuestions();
@@ -104,18 +129,105 @@ public class BatchCreateDataTest {
         }
         logger.info("papers新增:{}", papers.size());
 
-        //生成image
-//        createImage(students);
-        logger.info("image成功");
+        if (isCreateImage) {
+            //生成image
+            createImage(students);
+            logger.info("image成功");
 
-        //生成sheet
-//        createSheet(students);
-        logger.info("sheet成功");
+            //生成sheet
+            createSheet(students);
+            logger.info("sheet成功");
 
-        //生成thumb
-//        createThumb(students);
-        logger.info("thumb成功");
+            //生成thumb
+            createThumb(students);
+            logger.info("thumb成功");
+        }
+    }
+
+    private void createWork(Work work) {
+        if (work == null) {
+            work = new Work();
+            work.setId(WORK_ID);
+            work.setActive(true);
+            work.setCreatedOn(new Date());
+            work.setName("批量测试");
+            workRepo.save(work);
+        }
+
+        List<MarkSubject> markSubjects = markSubjectRepo.findAllByWorkId(work.getId());
+        if (CollectionUtils.isEmpty(markSubjects)) {
 
+            Subject[] subjects = Subject.values();
+            for (int i = 0; i < subjects.length - 1; i++) {
+                MarkSubject markSubject = new MarkSubject(subjects[i], work.getId());
+                markSubject.setWorkId(work.getId());
+                markSubject.setEnable(true);
+                markSubjectRepo.save(markSubject);
+            }
+        }
+
+        //新增工作的同时,初始化该工作的全局参数
+        ParamSetting paramSetting = ParamSetting.init();
+        paramSetting.setWorkId(WORK_ID);
+        paramSettingRepo.save(paramSetting);
+
+        //默认增加档位
+        Level A = new Level(WORK_ID, "A",0, 100, 90, Level.LevelType.ADMITED, 95);
+        Level B = new Level(WORK_ID, "B",1, 89, 85, Level.LevelType.ADMITED, 87);
+        Level C = new Level(WORK_ID, "C",2, 84, 80, Level.LevelType.ADMITED, 82);
+        Level D = new Level(WORK_ID, "D",3, 79, 75, Level.LevelType.ADMITED, 77);
+        Level E = new Level(WORK_ID, "E",4, 74, 70, Level.LevelType.ADMITED, 72);
+        Level F = new Level(WORK_ID, "F",5, 69, 65, Level.LevelType.ADMITED, 67);
+        Level G = new Level(WORK_ID, "G",6, 64, 60, Level.LevelType.ADMITED, 62);
+        Level H = new Level(WORK_ID, "H",7, 59, 55, Level.LevelType.ADMITED, 57);
+        Level I = new Level(WORK_ID, "I",8, 54, 50, Level.LevelType.ADMITED, 52);
+        Level J = new Level(WORK_ID, "J",9, 49, 45, Level.LevelType.ADMITED, 47);
+        Level K = new Level(WORK_ID, "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);
+    }
+
+    private void createUser() {
+        List<MarkUser> markUsers = new ArrayList<>();
+        for (Subject subject : subjects) {
+            // 评卷员
+            for (int i = 1; i <= MARKER_COUNT; i++) {
+                MarkUser markUser = new MarkUser();
+                markUser.setLoginName(subject.name().toLowerCase() + i);
+                markUser.setName(subject.name() + i);
+                markUser.setRole(Role.MARKER);
+                markUser.setPassword("123456");
+                markUser.setPwChangedCount(1);
+                markUser.setSubject(subject);
+                markUser.setWorkId(WORK_ID);
+                markUser.setMarkRight(MarkRight.ALLOW_ALL);
+                markUser.setWeight(1D);
+                markUser.setLeaderConfirm(true);
+                markUser.setLevelCallback(false);
+                markUser.setOneClickLevel(false);
+                markUser.setStandardVolume(false);
+                markUsers.add(markUser);
+            }
+            // 科组长
+            for (int i = 1; i <= MARKER_LEADER_COUNT; i++) {
+                MarkUser markUser = new MarkUser();
+                markUser.setLoginName(subject.name().toLowerCase() + "-kzz" + i);
+                markUser.setName(subject.name() + "KZZ" + i);
+                markUser.setRole(Role.MARK_LEADER);
+                markUser.setPassword("123456");
+                markUser.setPwChangedCount(1);
+                markUser.setSubject(subject);
+                markUser.setWorkId(WORK_ID);
+                markUser.setMarkRight(MarkRight.ALLOW_ALL);
+                markUser.setWeight(null);
+                markUser.setLeaderConfirm(true);
+                markUser.setLevelCallback(true);
+                markUser.setOneClickLevel(true);
+                markUser.setStandardVolume(true);
+                markUsers.add(markUser);
+            }
+        }
+        markUserRepo.save(markUsers);
     }
 
     private List<ExamQuestion> createQuestions() {
@@ -155,6 +267,10 @@ public class BatchCreateDataTest {
 
     private List<Student> createStudent() {
         List<Student> students = new ArrayList<>();
+        StringJoiner stringJoiner = new StringJoiner(",");
+        stringJoiner.add("SX:" + (subjects.contains(Subject.SX) ? 1 : 0))
+                .add("SC:" + (subjects.contains(Subject.SC) ? 1 : 0))
+                .add("SM:" + (subjects.contains(Subject.SM) ? 1 : 0));
         for (int i = 0; i < COUNT; i++) {
             Student student = new Student();
             student.setAreaCode("1");
@@ -164,7 +280,7 @@ public class BatchCreateDataTest {
             student.setSchool("湖北美术学院");
             student.setAbsent(false);
             student.setName("考生" + i);
-            student.setUploadStatus("SX:1,SC:0,SM:0");
+            student.setUploadStatus(stringJoiner.toString());
             student.setWorkId(WORK_ID);
             student.setSourceName("湖北");
             student.setTest("0");

+ 123 - 0
stmms-ms-main/src/test/java/BatchLevelTest.java

@@ -0,0 +1,123 @@
+import cn.com.qmth.stmms.ms.Application;
+import cn.com.qmth.stmms.ms.commons.utils.RandomUtil;
+import cn.com.qmth.stmms.ms.core.domain.Level;
+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.task.MarkTask;
+import cn.com.qmth.stmms.ms.core.repository.LevelRepo;
+import cn.com.qmth.stmms.ms.core.repository.MarkSubjectRepo;
+import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
+import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
+import cn.com.qmth.stmms.ms.core.vo.Subject;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = {Application.class})
+// 指定启动类
+public class BatchLevelTest {
+
+    private static final Logger logger = LoggerFactory.getLogger(BatchLevelTest.class);
+
+    @Autowired
+    private PaperRepo paperRepo;
+
+    @Autowired
+    private MarkSubjectRepo markSubjectRepo;
+
+    @Autowired
+    private MarkTaskRepo markTaskRepo;
+
+    @Autowired
+    private LevelRepo levelRepo;
+
+    @Autowired
+    RandomUtil randomUtil;
+
+    // 工作id
+    private static Long WORK_ID = 1L;
+    // 生成科目
+    private List<Subject> subjects = Arrays.asList(Subject.SC);
+
+    /**
+     * 批量分档
+     *
+     * @throws Exception
+     */
+    @Test
+    public void level() {
+        List<Level> levels = levelRepo.findByWorkIdOrderByCode(WORK_ID);
+        doLevel(levels);
+    }
+
+    private void doLevel(List<Level> levels) {
+        if (CollectionUtils.isEmpty(levels)) {
+            throw new RuntimeException("档位值不存在");
+        }
+
+        for (Subject subject : subjects) {
+            List<Paper> list = new ArrayList<>();
+            List<MarkTask> listTask = new ArrayList<>();
+
+            MarkSubject markSubject = markSubjectRepo.findOne(WORK_ID + "-" + subject.name());
+            List<Paper> papers = paperRepo.findByWorkIdAndSubject(WORK_ID, subject);
+            papers = papers.stream().filter(m -> Objects.nonNull(m.getBatchNo()) && StringUtils.isEmpty(m.getLevel())).collect(Collectors.toList());
+            for (Paper paper : papers) {
+                String level = levels.get(getRandom(levels.size())).getCode();
+                paper.setLevel(level);
+                list.add(paper);
+
+                List<MarkTask> markTasks = markTaskRepo.findByPaperIdAndStage(paper.getId(), markSubject.getStage());
+                for (MarkTask markTask : markTasks) {
+                    markTask.setResult(level);
+                    markTask.setLevel(level);
+                    listTask.add(markTask);
+                }
+            }
+            List<Paper> data1 = new ArrayList<>();
+            for (Paper p : list) {
+                if (data1.size() == 2000) {
+                    paperRepo.save(data1);
+                    data1.clear();
+                }
+                data1.add(p);
+            }
+            //将剩下的数据也导入
+            if (!data1.isEmpty()) {
+                paperRepo.save(data1);
+            }
+
+            List<MarkTask> data2 = new ArrayList<>();
+            for (MarkTask p : listTask) {
+                if (data2.size() == 2000) {
+                    markTaskRepo.save(data2);
+                    data2.clear();
+                }
+                data2.add(p);
+            }
+            //将剩下的数据也导入
+            if (!data2.isEmpty()) {
+                markTaskRepo.save(data2);
+            }
+        }
+
+    }
+
+    private int getRandom(int size) {
+        return (int) (Math.random() * size);
+    }
+
+}

+ 145 - 0
stmms-ms-main/src/test/java/BatchScoreTest.java

@@ -0,0 +1,145 @@
+import cn.com.qmth.stmms.ms.Application;
+import cn.com.qmth.stmms.ms.commons.utils.RandomUtil;
+import cn.com.qmth.stmms.ms.core.domain.Level;
+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.task.MarkTask;
+import cn.com.qmth.stmms.ms.core.repository.*;
+import cn.com.qmth.stmms.ms.core.vo.Subject;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = {Application.class})
+// 指定启动类
+public class BatchScoreTest {
+
+    private static final Logger logger = LoggerFactory.getLogger(BatchScoreTest.class);
+
+    @Autowired
+    private ExamQuestionRepo examQuestionRepo;
+
+    @Autowired
+    private StudentRepo studentRepo;
+
+    @Autowired
+    private PaperRepo paperRepo;
+
+    @Autowired
+    private WorkRepo workRepo;
+
+    @Autowired
+    private MarkSubjectRepo markSubjectRepo;
+
+    @Autowired
+    private MarkUserRepo markUserRepo;
+
+    @Autowired
+    private MarkTaskRepo markTaskRepo;
+
+    @Autowired
+    private LevelRepo levelRepo;
+
+    @Autowired
+    RandomUtil randomUtil;
+
+    // 工作id
+    private static Long WORK_ID = 1L;
+    // 生成科目
+    private List<Subject> subjects = Arrays.asList(Subject.SC);
+
+    /**
+     * 批量打分
+     *
+     * @throws Exception
+     */
+    @Test
+    public void level() {
+        List<Level> levels = levelRepo.findByWorkIdOrderByCode(WORK_ID);
+        doScore(levels);
+    }
+
+    private void doScore(List<Level> levels) {
+        if (CollectionUtils.isEmpty(levels)) {
+            throw new RuntimeException("档位值不存在");
+        }
+
+        for (Subject subject : subjects) {
+            List<Paper> list = new ArrayList<>();
+            List<MarkTask> listTask = new ArrayList<>();
+
+            MarkSubject markSubject = markSubjectRepo.findOne(WORK_ID + "-" + subject.name());
+            List<Paper> papers = paperRepo.findByWorkIdAndSubject(WORK_ID, subject);
+            papers = papers.stream().filter(m -> Objects.nonNull(m.getScoreBatchNo()) && StringUtils.isEmpty(m.getScore())).collect(Collectors.toList());
+            for (Paper paper : papers) {
+                Double score = calcScore(levels, paper);
+                paper.setScore(score);
+                list.add(paper);
+
+                List<MarkTask> markTasks = markTaskRepo.findByPaperIdAndStage(paper.getId(), markSubject.getStage());
+                for (MarkTask markTask : markTasks) {
+                    markTask.setResult(score.toString());
+                    listTask.add(markTask);
+                }
+            }
+            List<Paper> data1 = new ArrayList<>();
+            for (Paper p : list) {
+                if (data1.size() == 2000) {
+                    paperRepo.save(data1);
+                    data1.clear();
+                }
+                data1.add(p);
+            }
+            //将剩下的数据也导入
+            if (!data1.isEmpty()) {
+                paperRepo.save(data1);
+            }
+
+            List<MarkTask> data2 = new ArrayList<>();
+            for (MarkTask p : listTask) {
+                if (data2.size() == 2000) {
+                    markTaskRepo.save(data2);
+                    data2.clear();
+                }
+                data2.add(p);
+            }
+            //将剩下的数据也导入
+            if (!data2.isEmpty()) {
+                markTaskRepo.save(data2);
+            }
+        }
+
+    }
+
+    private Double calcScore(List<Level> levels, Paper paper) {
+        Level level = levels.stream().filter(m -> m.getCode().equals(paper.getLevel())).findFirst().orElseGet(null);
+        Double score = 0D;
+        if (level != null) {
+            int random = getRandom(level.getMaxScore().intValue() - level.getMinScore().intValue());
+            int scoreTemp = level.getMinScore().intValue() + random;
+            if(scoreTemp - level.getMaxScore().intValue() > 0){
+                scoreTemp = level.getMaxScore().intValue();
+            }
+            score = Double.valueOf(scoreTemp);
+        }
+        return score;
+    }
+
+    private int getRandom(int size) {
+        return (int) (Math.random() * size);
+    }
+
+}

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

@@ -199,7 +199,7 @@ public class MarkSubjectApi {
         List<Long> paperIds = null;
         if (!CollectionUtils.isEmpty(markerGroupLeaders)) {
             List<Long> markers = markerGroupLeaders.stream().map(m -> m.getMarkerId()).distinct().collect(Collectors.toList());
-            paperIds = markerGroupLeaderService.listPaperIdsByWorkIdAndSubjectAndStageAndMarkerIds(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getStage(), markers);
+            paperIds = markerGroupLeaderService.listPaperIdsByWorkIdAndSubjectAndStage(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getStage(), markers);
         }
         List<LevelStatDTO> levelStatDTOs = new ArrayList<>();
         List<Level> levels = levelRepo.findByWorkId(markSubject.getWorkId());
@@ -343,7 +343,7 @@ public class MarkSubjectApi {
         List<Long> paperIds = null;
         if (!CollectionUtils.isEmpty(markerGroupLeaders)) {
             List<Long> markers = markerGroupLeaders.stream().map(m -> m.getMarkerId()).distinct().collect(Collectors.toList());
-            paperIds = markerGroupLeaderService.listPaperIdsByWorkIdAndSubjectAndStageAndMarkerIds(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getStage(), markers);
+            paperIds = markerGroupLeaderService.listPaperIdsByWorkIdAndSubjectAndStage(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getStage(), markers);
         }
 
         List<LevelStatDTO> levelStatDTOs = new ArrayList<>();

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

@@ -494,7 +494,7 @@ public class MarkTaskApi {
         List<Long> paperIds = null;
         if (!CollectionUtils.isEmpty(markerGroupLeaders)) {
             List<Long> markers = markerGroupLeaders.stream().map(m -> m.getMarkerId()).distinct().collect(Collectors.toList());
-            paperIds = markerGroupLeaderService.listPaperIdsByWorkIdAndSubjectAndStageAndMarkerIds(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getStage(), markers);
+            paperIds = markerGroupLeaderService.listPaperIdsByWorkIdAndSubjectAndStage(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getStage(), markers);
         }
 
         List<Level> levels = levelRepo.findByWorkIdOrderByCode(workId);

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

@@ -229,7 +229,7 @@ public class PaperApi {
         List<Long> paperIds = null;
         if (!CollectionUtils.isEmpty(markerGroupLeaders)) {
             List<Long> markers = markerGroupLeaders.stream().map(m -> m.getMarkerId()).distinct().collect(Collectors.toList());
-            paperIds = markerGroupLeaderService.listPaperIdsByWorkIdAndSubjectAndStageAndMarkerIds(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getStage(), markers);
+            paperIds = markerGroupLeaderService.listPaperIdsByWorkIdAndSubjectAndStage(markSubject.getWorkId(), markSubject.getSubject(), markSubject.getStage(), markers);
         }
 
         List<Long> finalPaperIds = paperIds;

+ 36 - 12
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/GroupingService.java

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.ms.marking.service;
 
 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.user.MarkUser;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkerGroup;
 import cn.com.qmth.stmms.ms.core.domain.user.Role;
@@ -130,27 +131,48 @@ public class GroupingService {
 
     /**
      * 各评卷员进度
-     *  @param workId
+     *
+     * @param workId
      * @param markSubject
      * @param userMarkLeaders
      * @param isTotalMarkLeader
      * @param objectMap
      */
     public void getGroupMarkersProgress(Long workId, MarkSubject markSubject, List<Long> userMarkLeaders, Long markerId, boolean isTotalMarkLeader, Map<String, Object> objectMap) {
+        long t1 = System.currentTimeMillis();
         List<Map<String, Object>> groupMarkers = new ArrayList<>();
         List<Map<String, List<Long>>> groupLeaderAndMarkers = markerGroupLeaderService.listGroupLeaderAndMarkersByWorkIdAndSubjectAndStage(workId, markSubject.getSubject(), markSubject.getStage());
-        if(!isTotalMarkLeader && Objects.nonNull(markerId)){
-            groupLeaderAndMarkers = groupLeaderAndMarkers.stream().filter(m->m.get("markLeaders").contains(markerId)).collect(Collectors.toList());
+        if (!isTotalMarkLeader && Objects.nonNull(markerId)) {
+            groupLeaderAndMarkers = groupLeaderAndMarkers.stream().filter(m -> m.get("markLeaders").contains(markerId)).collect(Collectors.toList());
         }
+        long t2 = System.currentTimeMillis();
+        System.out.println("t2-t1:" + (t2 - t1));
         if (!CollectionUtils.isEmpty(groupLeaderAndMarkers)) {
+
+            Long batchNo;
+            if (markSubject.getStage().name() == MarkStage.SCORE.name()) {
+                batchNo = paperRepo.findMaxScoreBatchNoByWorkIdAndSubject(workId, markSubject.getSubject());
+            } else {
+                batchNo = paperRepo.findMaxBatchNoByWorkIdAndSubject(workId, markSubject.getSubject());
+            }
+            long t21 = System.currentTimeMillis();
+            System.out.println("t21-t2:" + (t21 - t2));
             for (Map<String, List<Long>> groupLeaderAndMarker : groupLeaderAndMarkers) {
+                long t3 = System.currentTimeMillis();
                 Map<String, Object> tempMap = new HashMap<>();
                 List<Long> markerLeaders = groupLeaderAndMarker.get("markLeaders");
                 List<Long> markers = groupLeaderAndMarker.get("markers");
-                List<Long> paperIds = markerGroupLeaderService.listPaperIdsByWorkIdAndSubjectAndStageAndMarkerIds(workId, markSubject.getSubject(), markSubject.getStage(), markers);
-                //仲裁数量
-                int arbitrate = CollectionUtils.isEmpty(paperIds) ? 0 : paperRepo.countByWorkIdAndSubjectAndIsArbitratedTrueAndIdIn(workId, markSubject.getSubject(), paperIds);
+                long t4 = System.currentTimeMillis();
+                System.out.println("t4-t3:" + (t4 - t3));
 
+                List<Long> paperIds = markerGroupLeaderService.listPaperIdsByWorkIdAndSubjectAndStage(workId, markSubject.getSubject(), markSubject.getStage(), markers);
+                long t41 = System.currentTimeMillis();
+                System.out.println("t41-t4:" + (t41 - t4));
+                //仲裁数量
+                List<Paper> arbitratedPaperList = paperRepo.findByWorkIdAndSubjectAndIsArbitratedTrue(workId, markSubject.getSubject());
+                long arbitrate = CollectionUtils.isEmpty(arbitratedPaperList) || CollectionUtils.isEmpty(paperIds) ? 0L : arbitratedPaperList.stream().filter(m -> paperIds.contains(m.getId())).count();
+                long t5 = System.currentTimeMillis();
+                System.out.println("t5-t4:" + (t5 - t4));
                 if (!CollectionUtils.isEmpty(markerLeaders)) {
                     userMarkLeaders.addAll(markerLeaders);
                     List<Map<String, Object>> markerLeaderList = new ArrayList<>();
@@ -164,19 +186,18 @@ public class GroupingService {
                     }
                     tempMap.put("kzzProgress", markerLeaderList);
                 }
+                long t6 = System.currentTimeMillis();
 
                 // 评卷员
                 //各评卷员评卷进度
                 List<Object[]> qStats;
-                Long batchNo;
-                String markerString = markers.stream().map(m -> String.valueOf(m)).collect(Collectors.joining(","));
                 if (markSubject.getStage().name() == MarkStage.SCORE.name()) {
-                    batchNo = paperRepo.findMaxScoreBatchNoByWorkIdAndSubjectAndIdIn(workId, markSubject.getSubject(), paperIds);
-                    qStats = markTaskRepo.listGroupByQuestionAndMarkerAndScoreBatchNoAndMakerId(workId, markSubject.getSubject().name(), markSubject.getStage().ordinal(), batchNo, markerString);
+                    qStats = markTaskRepo.listGroupByQuestionAndMarkerAndScoreBatchNoAndMakerId(workId, markSubject.getSubject().name(), markSubject.getStage().ordinal(), batchNo, markers);
                 } else {
-                    batchNo = paperRepo.findMaxBatchNoByWorkIdAndSubjectAndIdIn(workId, markSubject.getSubject(), paperIds);
-                    qStats = markTaskRepo.listGroupByQuestionAndMarkerAndBatchNoAndMarkerId(workId, markSubject.getSubject().name(), markSubject.getStage().ordinal(), markSubject.getTest(), batchNo, markerString);
+                    qStats = markTaskRepo.listGroupByQuestionAndMarkerAndBatchNoAndMarkerId(workId, markSubject.getSubject().name(), markSubject.getStage().ordinal(), markSubject.getTest(), batchNo, markers);
                 }
+                long t7 = System.currentTimeMillis();
+                System.out.println("t7-t6:" + (t7 - t6));
                 if (qStats != null) {
                     List<MarkQuestionStatDTO> questionStatDTOs = new ArrayList<>();
                     for (Object[] objects : qStats) {
@@ -188,11 +209,14 @@ public class GroupingService {
                 groupMarkers.add(tempMap);
             }
         }
+        long t9 = System.currentTimeMillis();
+        System.out.println("t9-t2:" + (t9 - t2));
         objectMap.put("groupMarkers", groupMarkers);
     }
 
     /**
      * 总科组长进度
+     *
      * @param workId
      * @param subject
      * @param userMarkLeaders

+ 13 - 3
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/service/MarkerGroupLeaderService.java

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.ms.marking.service;
 
 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.task.MarkTask;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkerGroup;
@@ -128,9 +129,18 @@ public class MarkerGroupLeaderService {
      * @return
      */
     public List<Long> listPaperIdsByWorkIdAndSubjectAndStageAndMarkerIds(Long workId, Subject subject, MarkStage stage, List<Long> markers) {
-        List<MarkTask> markTasks = markTaskRepo.findByWorkIdAndSubjectAndStageAndMarkerIdIn(workId, subject, stage, markers);
-        if (!CollectionUtils.isEmpty(markTasks)) {
-            List<Long> paperIds = markTasks.stream().map(m -> m.getPaper().getId()).distinct().collect(Collectors.toList());
+        List<Paper> papers = markTaskRepo.findByWorkIdAndSubjectAndStageAndMarkerIdIn(workId, subject, stage, markers);
+        if (!CollectionUtils.isEmpty(papers)) {
+            List<Long> paperIds = papers.stream().map(m -> m.getId()).distinct().collect(Collectors.toList());
+            return paperIds;
+        }
+        return null;
+    }
+
+    public List<Long> listPaperIdsByWorkIdAndSubjectAndStage(Long workId, Subject subject, MarkStage stage, List<Long> markers) {
+        List<Object[]> papers = markTaskRepo.findByWorkIdAndSubjectAndStage(workId, subject.name(), stage.ordinal());
+        if (!CollectionUtils.isEmpty(papers)) {
+            List<Long> paperIds = papers.stream().filter(m->markers.contains(Long.valueOf(m[1].toString()))).map(m -> Long.valueOf(m[0].toString())).distinct().collect(Collectors.toList());
             return paperIds;
         }
         return null;