ソースを参照

美术阅卷10月新增需求-新增试评开始和结束功能

wangliang 5 年 前
コミット
5febee274b

+ 14 - 1
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/TrialController.java

@@ -22,14 +22,27 @@ public class TrialController {
     @Autowired
     @Autowired
     TrialService trialService;
     TrialService trialService;
 
 
+    /**
+     * 开始试评任务
+     *
+     * @param workId
+     * @param subject
+     * @throws Exception
+     */
+    @RequestMapping(value = "startTrial", method = RequestMethod.GET)
+    public void startTrial(@RequestParam Long workId, @RequestParam Subject subject) throws Exception {
+        trialService.startTrial(workId, subject);
+    }
+
     /**
     /**
      * 删除试评任务,保留标准卷
      * 删除试评任务,保留标准卷
      *
      *
      * @param workId
      * @param workId
      * @param subject
      * @param subject
+     * @throws Exception
      */
      */
     @RequestMapping(value = "finishTrial", method = RequestMethod.GET)
     @RequestMapping(value = "finishTrial", method = RequestMethod.GET)
-    public void finishTrial(@RequestParam Long workId, @RequestParam Subject subject) {
+    public void finishTrial(@RequestParam Long workId, @RequestParam Subject subject) throws Exception {
         trialService.finishTrial(workId, subject);
         trialService.finishTrial(workId, subject);
     }
     }
 }
 }

+ 15 - 15
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/DataUploadService.java

@@ -11,10 +11,7 @@ import cn.com.qmth.stmms.ms.commons.utils.excel.ExcelError;
 import cn.com.qmth.stmms.ms.commons.utils.excel.ExcelReader;
 import cn.com.qmth.stmms.ms.commons.utils.excel.ExcelReader;
 import cn.com.qmth.stmms.ms.commons.utils.excel.ExcelReaderHandle;
 import cn.com.qmth.stmms.ms.commons.utils.excel.ExcelReaderHandle;
 import cn.com.qmth.stmms.ms.commons.utils.image.ImageCompression;
 import cn.com.qmth.stmms.ms.commons.utils.image.ImageCompression;
-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.domain.*;
 import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
 import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
 import cn.com.qmth.stmms.ms.core.repository.*;
 import cn.com.qmth.stmms.ms.core.repository.*;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
@@ -314,13 +311,15 @@ public class DataUploadService {
         if (Objects.isNull(work)) {
         if (Objects.isNull(work)) {
             throw new Exception("没有此工作区,请检查workId是否正确");
             throw new Exception("没有此工作区,请检查workId是否正确");
         }
         }
+        List<MarkSubject> markSubjectList = work.getSubjects().stream().filter(o -> o.getId().toUpperCase().contains(subject.toString().toUpperCase()))
+                .collect(Collectors.toList());
+        MarkSubject markSubject = markSubjectList.get(0);
+        if (markSubject.getTest() == TrialEnum.START_TRIAL.getId()) {
+            throw new Exception("已经开始试评,请先停止试评再重新导入数据");
+        }
         //更新科目
         //更新科目
-        work.getSubjects().stream().filter(o -> o.getId().toUpperCase().contains(subject.toString().toUpperCase()))
-                .collect(Collectors.toList())
-                .forEach(o -> {
-                    o.setTest(TrialEnum.INIT.getId());
-                    markSubjectRepo.save(o);
-                });
+        markSubject.setTest(TrialEnum.INIT.getId());
+        markSubjectRepo.save(markSubject);
         JSONObject jsonObject = new JSONObject();
         JSONObject jsonObject = new JSONObject();
         jsonObject.put(String.valueOf(TrialEnum.INIT.getId()), subject);
         jsonObject.put(String.valueOf(TrialEnum.INIT.getId()), subject);
         //全量删除全量增加
         //全量删除全量增加
@@ -349,13 +348,12 @@ public class DataUploadService {
                     ExamQuestion questionNew = null;
                     ExamQuestion questionNew = null;
                     ExamQuestion isExist = examQuestionRepo.findByWorkIdAndSubjectAndAreaCode(workId, subject, dto.getAreaCode());
                     ExamQuestion isExist = examQuestionRepo.findByWorkIdAndSubjectAndAreaCode(workId, subject, dto.getAreaCode());
                     if (Objects.isNull(isExist)) {
                     if (Objects.isNull(isExist)) {
-                        questionNew = new ExamQuestion(dto.getAreaCode(), subject, workId, dto.getAreaName());
-                        questionNew.setTest(TrialEnum.INIT.getId());
-                        examQuestionRepo.save(questionNew);
+                        throw new Exception("请先上传试卷");
                     } else {
                     } else {
                         questionNew = new ExamQuestion();
                         questionNew = new ExamQuestion();
                         BeanUtils.copyProperties(isExist, questionNew);
                         BeanUtils.copyProperties(isExist, questionNew);
                         questionNew.setTest(TrialEnum.INIT.getId());
                         questionNew.setTest(TrialEnum.INIT.getId());
+                        questionNew.setName(new StringBuffer("试评").append(subject.getName()).append(dto.getAreaCode()).toString());
                         questionNew.setId(null);
                         questionNew.setId(null);
                         examQuestionRepo.save(questionNew);
                         examQuestionRepo.save(questionNew);
                     }
                     }
@@ -363,7 +361,7 @@ public class DataUploadService {
                     Student studentNew = null;
                     Student studentNew = null;
                     Student student = studentRepo.findByWorkIdAndExamNumberAndTest(workId, dto.getExamNumber(), String.valueOf(TrialEnum.DEFAULT.getId()));
                     Student student = studentRepo.findByWorkIdAndExamNumberAndTest(workId, dto.getExamNumber(), String.valueOf(TrialEnum.DEFAULT.getId()));
                     if (student == null) {
                     if (student == null) {
-                        throw new Exception("没有学生" + student.getName() + " 信息");
+                        throw new Exception("没有学生" + student.getName() + "信息");
                     } else {
                     } else {
                         if (!student.getUploadStatus().contains("SX:1,SC:1,SM:1")) {
                         if (!student.getUploadStatus().contains("SX:1,SC:1,SM:1")) {
                             throw new Exception("学生" + student.getName() + "未上传完试卷");
                             throw new Exception("学生" + student.getName() + "未上传完试卷");
@@ -375,13 +373,15 @@ public class DataUploadService {
                         studentRepo.save(studentNew);
                         studentRepo.save(studentNew);
                     }
                     }
                     //复制paper
                     //复制paper
-                    Paper paper = paperRepo.findByWorkIdAndSubjectAndExamNumberAndAreaCode(workId, subject, student.getExamNumber(), dto.getAreaCode());
+                    Paper paper = paperRepo.findByWorkIdAndSubjectAndExamNumberAndAreaCodeAndTest(workId, subject, student.getExamNumber(), dto.getAreaCode(), TrialEnum.DEFAULT.getId());
                     Paper paperNew = new Paper();
                     Paper paperNew = new Paper();
                     BeanUtils.copyProperties(paper, paperNew);
                     BeanUtils.copyProperties(paper, paperNew);
                     paperNew.setId(null);
                     paperNew.setId(null);
                     paperNew.setTest(TrialEnum.INIT.getId());
                     paperNew.setTest(TrialEnum.INIT.getId());
                     Long random = getRandom(studentNew.getWorkId(), studentNew.getExamNumber());
                     Long random = getRandom(studentNew.getWorkId(), studentNew.getExamNumber());
                     paperNew.setRandomSeq(random);
                     paperNew.setRandomSeq(random);
+                    paperNew.setQuestionName(questionNew.getName());
+                    paperNew.setQuestionId(questionNew.getId());
                     paperNew.setSecretNumber(new StringBuffer(String.valueOf(subject.ordinal())).append(questionNew.getAreaCode()).append(random).toString());
                     paperNew.setSecretNumber(new StringBuffer(String.valueOf(subject.ordinal())).append(questionNew.getAreaCode()).append(random).toString());
                     paperRepo.save(paperNew);
                     paperRepo.save(paperNew);
                 } catch (Exception e) {
                 } catch (Exception e) {

+ 77 - 24
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/TrialService.java

@@ -1,15 +1,20 @@
 package cn.com.qmth.stmms.ms.admin.service;
 package cn.com.qmth.stmms.ms.admin.service;
 
 
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
 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.Work;
 import cn.com.qmth.stmms.ms.core.domain.Work;
 import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
 import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
 import cn.com.qmth.stmms.ms.core.repository.*;
 import cn.com.qmth.stmms.ms.core.repository.*;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
+import cn.com.qmth.stmms.ms.marking.service.StageControlService;
+import com.alibaba.fastjson.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
-import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * @Description: 试评任务
  * @Description: 试评任务
@@ -36,40 +41,88 @@ public class TrialService {
     @Autowired
     @Autowired
     PaperRepo paperRepo;
     PaperRepo paperRepo;
 
 
+    @Autowired
+    StageControlService stageControlService;
+
+    @Autowired
+    ExamQuestionRepo examQuestionRepo;
+
+    /**
+     * 开始试评任务
+     *
+     * @param workId
+     * @param subject
+     * @throws Exception
+     */
+    @Transactional
+    public void startTrial(Long workId, Subject subject) throws Exception {
+        Work work = workRepo.findOne(workId);
+        if (Objects.isNull(work)) {
+            throw new Exception("没有此工作区,请检查workId是否正确");
+        }
+        List<MarkSubject> markSubjectList = work.getSubjects().stream().filter(o -> o.getId().toUpperCase().contains(subject.toString().toUpperCase()))
+                .collect(Collectors.toList());
+        MarkSubject markSubject = markSubjectList.get(0);
+        //分配任务
+        stageControlService.goNext(markSubject);
+        //修改科目test
+        markSubject.setTest(TrialEnum.START_TRIAL.getId());
+        markSubjectRepo.save(markSubject);
+        //先删除上次试评试卷(取标准卷用)
+        paperRepo.deleteByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.START_TRIAL.getId());
+        //修改试卷test
+        paperRepo.updateByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.INIT.getId(), TrialEnum.START_TRIAL.getId());
+    }
+
     /**
     /**
      * 删除试评任务,保留标准卷
      * 删除试评任务,保留标准卷
      *
      *
      * @param workId
      * @param workId
      * @param subject
      * @param subject
+     * @throws Exception
      */
      */
     @Transactional
     @Transactional
-    public void finishTrial(Long workId, Subject subject) {
+    public void finishTrial(Long workId, Subject subject) throws Exception {
         Work work = workRepo.findOne(workId);
         Work work = workRepo.findOne(workId);
+        if (Objects.isNull(work)) {
+            throw new Exception("没有此工作区,请检查workId是否正确");
+        }
         //1.更新科目为处始状态并设置test为false
         //1.更新科目为处始状态并设置test为false
-        AtomicBoolean deleteStu = new AtomicBoolean(false);
-        work.getSubjects().forEach(o -> {
-            if (o.getId().toUpperCase().contains(subject.toString().toUpperCase())) {
-                o.setTest(TrialEnum.DEFAULT.getId());
-                o.setStage(MarkStage.INIT);
-                o.setTotalScore(0);
-                o.setSampleCount(0);
-            }
-            if (o.getTest() == TrialEnum.DEFAULT.getId()) {
-                deleteStu.set(true);
-            } else {
-                deleteStu.set(false);
-            }
-        });
-        markSubjectRepo.save(work.getSubjects());
+        work.getSubjects().stream().filter(o -> o.getId().toUpperCase().contains(subject.toString().toUpperCase()))
+                .collect(Collectors.toList())
+                .forEach(o -> {
+                    o.setTest(TrialEnum.DEFAULT.getId());
+                    o.setStage(MarkStage.INIT);
+                    o.setSampleCount(0);
+                    markSubjectRepo.save(o);
+                });
+//        AtomicBoolean deleteStu = new AtomicBoolean(false);
+//        work.getSubjects().forEach(o -> {
+//            if (o.getId().toUpperCase().contains(subject.toString().toUpperCase())) {
+//                o.setTest(TrialEnum.DEFAULT.getId());
+//                o.setStage(MarkStage.INIT);
+//                o.setTotalScore(0);
+//                o.setSampleCount(0);
+//            }
+//            if (o.getTest() == TrialEnum.DEFAULT.getId()) {
+//                deleteStu.set(true);
+//            } else {
+//                deleteStu.set(false);
+//            }
+//        });
+//        markSubjectRepo.save(work.getSubjects());
 
 
         //2.删除该科目下所有任务数据
         //2.删除该科目下所有任务数据
-        markTaskRepo.deleteByWorkIdAndSubject(workId, subject);
-        //3.删除所有学生数据(只有当前work下所有科目都设置为false则删除)
-        if (deleteStu.get()) {
-            studentRepo.deleteByWorkId(workId);
-        }
-        //4.更新该科目下的试卷信息,可暂且不更新
-//        List<Paper> paperList = paperRepo.findByWorkIdAndSubjectAndTest(workId, subject, true);
+        markTaskRepo.deleteByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.START_TRIAL.getId());
+        //3.删除学生数据
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put(String.valueOf(TrialEnum.INIT.getId()), subject);
+        studentRepo.deleteByWorkIdAndTest(workId, jsonObject.toJSONString());
+
+        //4.删除卷子信息
+        examQuestionRepo.deleteByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.INIT.getId());
+        //5.更新该科目下的试卷信息,可暂且不更新
+//        List<Paper> paperList = paperRepo.findByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.START_TRIAL.getId());
 //        paperList.forEach(o -> {
 //        paperList.forEach(o -> {
 //            o.setLevel(null);//更新档位
 //            o.setLevel(null);//更新档位
 //            o.setScore(null);//更新分数
 //            o.setScore(null);//更新分数

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

@@ -2,6 +2,7 @@ package cn.com.qmth.stmms.ms.core.domain.task;
 
 
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
 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.Paper;
+import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 
 
@@ -114,6 +115,22 @@ public class MarkTask implements Serializable {
         this.randomSeqNew = randomSeqNew;
         this.randomSeqNew = randomSeqNew;
     }
     }
 
 
+    public MarkTask(MarkUser marker, Paper paper, 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;
+    }
+
     public MarkTask() {
     public MarkTask() {
     }
     }
 
 

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

@@ -92,7 +92,7 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
      * @param subject
      * @param subject
      * @return
      * @return
      */
      */
-    Long deleteByWorkIdAndSubject(Long workId, Subject subject);
+    Long deleteByWorkIdAndSubjectAndTest(Long workId, Subject subject, int test);
 
 
     /**
     /**
      * 统计评卷员各试题已评数及总数(分档阶段)
      * 统计评卷员各试题已评数及总数(分档阶段)

+ 15 - 7
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/repository/PaperRepo.java

@@ -24,6 +24,8 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
 
 
     List<Paper> findByWorkIdAndSubjectAndIsMissing(Long workId, Subject subject, boolean isMissing);
     List<Paper> findByWorkIdAndSubjectAndIsMissing(Long workId, Subject subject, boolean isMissing);
 
 
+    List<Paper> findByWorkIdAndSubjectAndIsMissingAndTest(Long workId, Subject subject, boolean isMissing, int test);
+
     List<Paper> findByWorkIdAndSubject(Long workId, Subject subject, Sort sort);
     List<Paper> findByWorkIdAndSubject(Long workId, Subject subject, Sort sort);
 
 
     List<Paper> findByQuestionId(Long questionId, Sort sort);
     List<Paper> findByQuestionId(Long questionId, Sort sort);
@@ -47,9 +49,9 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
      * @return
      * @return
      */
      */
     @Query(value = "SELECT p.`question_id`,p.question_name,SUM(IF(p.level IS NULL,1,0)),COUNT(p.`question_id`), MAX(p.area_code) \n" +
     @Query(value = "SELECT p.`question_id`,p.question_name,SUM(IF(p.level IS NULL,1,0)),COUNT(p.`question_id`), MAX(p.area_code) \n" +
-            "FROM paper p WHERE p.`work_id` = ? AND p.`subject` = ? AND p.`is_missing` = false " +
+            "FROM paper p WHERE p.`work_id` = ? AND p.`subject` = ? AND p.`is_missing` = false AND p.`is_test` = ? " +
             "GROUP BY p.`question_id` ,p.question_name ORDER BY p.`question_id`", nativeQuery = true)
             "GROUP BY p.`question_id` ,p.question_name ORDER BY p.`question_id`", nativeQuery = true)
-    List<Object[]> countGroupByQuestionForLevel(Long workId, String subject);
+    List<Object[]> countGroupByQuestionForLevel(Long workId, String subject, int test);
 
 
     /**
     /**
      * 统计科目指定试题的各档位数量
      * 统计科目指定试题的各档位数量
@@ -86,9 +88,9 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
      * @return
      * @return
      */
      */
     @Query(value = "SELECT p.`question_id`,p.question_name,SUM(IF(p.score IS NULL,1,0)),COUNT(p.`question_id`) ,MAX(p.area_code) \n" +
     @Query(value = "SELECT p.`question_id`,p.question_name,SUM(IF(p.score IS NULL,1,0)),COUNT(p.`question_id`) ,MAX(p.area_code) \n" +
-            "FROM paper p WHERE p.`work_id` = ? AND p.`subject` = ?" +
+            "FROM paper p WHERE p.`work_id` = ? AND p.`subject` = ? AND p.`is_test` = ? " +
             "GROUP BY p.`question_id` ,p.question_name ORDER BY p.`question_id`", nativeQuery = true)
             "GROUP BY p.`question_id` ,p.question_name ORDER BY p.`question_id`", nativeQuery = true)
-    List<Object[]> countGroupByQuestionForScore(Long workId, String string);
+    List<Object[]> countGroupByQuestionForScore(Long workId, String string, int test);
 
 
     /**
     /**
      * 统计科目未分档的试卷数
      * 统计科目未分档的试卷数
@@ -99,6 +101,8 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
      */
      */
     Long countByWorkIdAndSubjectAndLevelIsNull(Long workId, Subject subject);
     Long countByWorkIdAndSubjectAndLevelIsNull(Long workId, Subject subject);
 
 
+    Long countByWorkIdAndSubjectAndTestAndLevelIsNull(Long workId, Subject subject, int test);
+
     long countByWorkIdAndScoreIsNull(Long workId);
     long countByWorkIdAndScoreIsNull(Long workId);
 
 
     Long countByWorkId(Long workId);
     Long countByWorkId(Long workId);
@@ -124,7 +128,7 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
      */
      */
     Paper findByWorkIdAndSubjectAndExamNumber(Long workId, Subject subject, String examNumber);
     Paper findByWorkIdAndSubjectAndExamNumber(Long workId, Subject subject, String examNumber);
 
 
-    Paper findByWorkIdAndSubjectAndExamNumberAndAreaCode(Long workId, Subject subject, String examNumber, String areaCode);
+    Paper findByWorkIdAndSubjectAndExamNumberAndAreaCodeAndTest(Long workId, Subject subject, String examNumber, String areaCode, int test);
 
 
     /**
     /**
      * 根据条件查询指定试卷
      * 根据条件查询指定试卷
@@ -172,7 +176,7 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
      * @param test
      * @param test
      * @return
      * @return
      */
      */
-    List<Paper> findByWorkIdAndSubjectAndTest(Long workId, Subject subject, boolean test);
+    List<Paper> findByWorkIdAndSubjectAndTest(Long workId, Subject subject, int test);
 
 
     @Modifying
     @Modifying
     @Query(nativeQuery = true, value = "update paper set inspect_range = null where inspect_range = :inspectRange")
     @Query(nativeQuery = true, value = "update paper set inspect_range = null where inspect_range = :inspectRange")
@@ -183,6 +187,11 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
     @Query(value = "update Paper p set p.inspectRange = ?1 where p.examNumber in ?2")
     @Query(value = "update Paper p set p.inspectRange = ?1 where p.examNumber in ?2")
     void markInspectRange(Long inspectRange, List<String> examNumbers);
     void markInspectRange(Long inspectRange, List<String> examNumbers);
 
 
+    @Modifying
+    @Query(value = "update Paper p set p.test = ?4 where p.workId = ?1 and p.subject = ?2 and p.test = ?3")
+    void updateByWorkIdAndSubjectAndTest(Long workId, Subject subject, int oldTest, int newTest);
+
+
     long countByWorkIdAndSubjectAndIsSampleIsTrue(Long workId, Subject subject);
     long countByWorkIdAndSubjectAndIsSampleIsTrue(Long workId, Subject subject);
 
 
     long countByWorkIdAndSubjectAndLevel(Long workId, Subject subject, String code);
     long countByWorkIdAndSubjectAndLevel(Long workId, Subject subject, String code);
@@ -198,5 +207,4 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
     void deleteByWorkIdAndSubjectAndTest(Long workId, Subject subject, int test);
     void deleteByWorkIdAndSubjectAndTest(Long workId, Subject subject, int test);
 
 
 //    List<Paper> findByWorkIdAndSubjectAndInspectRange(Long workId, Subject subject, Long inspectRange);
 //    List<Paper> findByWorkIdAndSubjectAndInspectRange(Long workId, Subject subject, Long inspectRange);
-
 }
 }

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

@@ -106,9 +106,9 @@ public class MarkSubjectApi {
         List<QuestionStatDTO> questionStatDTOs = new ArrayList<>();
         List<QuestionStatDTO> questionStatDTOs = new ArrayList<>();
         List<Object[]> qStats = null;
         List<Object[]> qStats = null;
         if (markSubject.getStage() == MarkStage.LEVEL) {
         if (markSubject.getStage() == MarkStage.LEVEL) {
-            qStats = paperRepo.countGroupByQuestionForLevel(markSubject.getWorkId(), markSubject.getSubject().toString());
+            qStats = paperRepo.countGroupByQuestionForLevel(markSubject.getWorkId(), markSubject.getSubject().toString(), markSubject.getTest());
         } else {
         } else {
-            qStats = paperRepo.countGroupByQuestionForScore(markSubject.getWorkId(), markSubject.getSubject().toString());
+            qStats = paperRepo.countGroupByQuestionForScore(markSubject.getWorkId(), markSubject.getSubject().toString(), markSubject.getTest());
         }
         }
         for (Object[] objects : qStats) {
         for (Object[] objects : qStats) {
             QuestionStatDTO dto = questionStatAssembler.toDTO(objects);
             QuestionStatDTO dto = questionStatAssembler.toDTO(objects);

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

@@ -1,8 +1,11 @@
 package cn.com.qmth.stmms.ms.marking.api;
 package cn.com.qmth.stmms.ms.marking.api;
 
 
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
+import cn.com.qmth.stmms.ms.core.domain.ExamQuestion;
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
+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.task.MarkTask;
+import cn.com.qmth.stmms.ms.core.repository.ExamQuestionRepo;
 import cn.com.qmth.stmms.ms.core.repository.LevelRepo;
 import cn.com.qmth.stmms.ms.core.repository.LevelRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
 import cn.com.qmth.stmms.ms.marking.assembler.MarkTaskAssembler;
 import cn.com.qmth.stmms.ms.marking.assembler.MarkTaskAssembler;
@@ -17,10 +20,7 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Predicate;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
+import java.util.*;
 
 
 /**
 /**
  * 评卷任务数据api
  * 评卷任务数据api
@@ -42,6 +42,9 @@ public class MarkTaskApi {
     @Autowired
     @Autowired
     private MarkTaskAssembler markTaskAssembler;
     private MarkTaskAssembler markTaskAssembler;
 
 
+    @Autowired
+    ExamQuestionRepo examQuestionRepo;
+
     /**
     /**
      * 评卷员的评卷任务
      * 评卷员的评卷任务
      *
      *
@@ -81,6 +84,22 @@ public class MarkTaskApi {
         };
         };
 
 
         Page<MarkTask> markTasks = markTaskRepo.findAll(specification, pageable);
         Page<MarkTask> markTasks = markTaskRepo.findAll(specification, pageable);
+        if (Objects.isNull(markTasks) || markTasks.getContent().size() == 0) {
+            if (Objects.nonNull(isSample) && isSample) {
+                ExamQuestion examQuestion = examQuestionRepo.findOne(questionId);
+                specification = (root, query, builder) -> {
+                    List<Predicate> predicates = new ArrayList<>();
+                    if (isSample != null) {
+                        predicates.add(builder.equal(root.get("paper").get("isSample"), isSample));
+                    }
+                    predicates.add(builder.equal(root.get("paper").get("isMissing"), false));
+                    predicates.add(builder.equal(root.get("paper").get("subject"), examQuestion.getSubject()));
+                    predicates.add(builder.equal(root.get("paper").get("test"), TrialEnum.START_TRIAL.getId()));
+                    return builder.and(predicates.toArray(new Predicate[predicates.size()]));
+                };
+                markTasks = markTaskRepo.findAll(specification, pageable);
+            }
+        }
         markTasks.getContent().forEach(m -> {
         markTasks.getContent().forEach(m -> {
             markTaskDTOs.add(markTaskAssembler.toDTO(m));
             markTaskDTOs.add(markTaskAssembler.toDTO(m));
         });
         });

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

@@ -1,32 +1,33 @@
 package cn.com.qmth.stmms.ms.marking.api;
 package cn.com.qmth.stmms.ms.marking.api;
 
 
-import java.util.*;
-
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
 import cn.com.qmth.stmms.ms.commons.web.PageableDTO;
+import cn.com.qmth.stmms.ms.core.domain.ExamQuestion;
+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;
+import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
+import cn.com.qmth.stmms.ms.core.repository.ExamQuestionRepo;
+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 cn.com.qmth.stmms.ms.core.vo.Subject;
 import cn.com.qmth.stmms.ms.marking.assembler.MarkTaskAssembler;
 import cn.com.qmth.stmms.ms.marking.assembler.MarkTaskAssembler;
 import cn.com.qmth.stmms.ms.marking.assembler.PaperAssembler;
 import cn.com.qmth.stmms.ms.marking.assembler.PaperAssembler;
 import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
 import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
 import cn.com.qmth.stmms.ms.marking.dto.PaperDTO;
 import cn.com.qmth.stmms.ms.marking.dto.PaperDTO;
 import cn.com.qmth.stmms.ms.marking.service.MarkingService;
 import cn.com.qmth.stmms.ms.marking.service.MarkingService;
-
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.*;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.http.ResponseEntity;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
-
-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.task.MarkTask;
-import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
-import cn.com.qmth.stmms.ms.core.repository.PaperRepo;
-
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Predicate;
+import java.util.*;
 
 
 /**
 /**
  * 试卷相关api
  * 试卷相关api
@@ -51,138 +52,142 @@ public class PaperApi {
     @Autowired
     @Autowired
     private MarkingService markingService;
     private MarkingService markingService;
 
 
+    @Autowired
+    ExamQuestionRepo examQuestionRepo;
+
     /**
     /**
      * 单个试卷信息
      * 单个试卷信息
+     *
      * @param paperId 试卷id
      * @param paperId 试卷id
      * @return
      * @return
      */
      */
-    @RequestMapping(value = "{paperId}",method = RequestMethod.GET)
-    public PaperDTO get(@PathVariable Long paperId){
+    @RequestMapping(value = "{paperId}", method = RequestMethod.GET)
+    public PaperDTO get(@PathVariable Long paperId) {
         return paperAssembler.toDTO(paperRepo.findOne(paperId));
         return paperAssembler.toDTO(paperRepo.findOne(paperId));
     }
     }
 
 
     /**
     /**
      * 单个试卷信息
      * 单个试卷信息
+     *
      * @param questionId 试题id
      * @param questionId 试题id
-     * @param sn 密号
+     * @param sn         密号
      * @param examNumber 准考证号
      * @param examNumber 准考证号
      * @return
      * @return
      */
      */
-    @RequestMapping(value = "/one",method = RequestMethod.GET)
+    @RequestMapping(value = "/one", method = RequestMethod.GET)
     public PaperDTO getOne(@RequestParam Long questionId,
     public PaperDTO getOne(@RequestParam Long questionId,
                            @RequestParam(required = false) String sn,
                            @RequestParam(required = false) String sn,
-                           @RequestParam(required = false) String examNumber){
+                           @RequestParam(required = false) String examNumber) {
         PaperDTO paperDTO = null;
         PaperDTO paperDTO = null;
-        Specification<Paper> specification = (root,query,builder) -> {
+        Specification<Paper> specification = (root, query, builder) -> {
             List<Predicate> predicates = new ArrayList<>();
             List<Predicate> predicates = new ArrayList<>();
-            predicates.add(builder.equal(root.get("questionId"),questionId));
-            if(sn != null){
-                predicates.add(builder.equal(root.get("secretNumber"),sn));
+            predicates.add(builder.equal(root.get("questionId"), questionId));
+            if (sn != null) {
+                predicates.add(builder.equal(root.get("secretNumber"), sn));
             }
             }
-            if(examNumber != null){
-                predicates.add(builder.equal(root.get("examNumber"),examNumber));
+            if (examNumber != null) {
+                predicates.add(builder.equal(root.get("examNumber"), examNumber));
             }
             }
 
 
             return builder.and(predicates.toArray(new Predicate[predicates.size()]));
             return builder.and(predicates.toArray(new Predicate[predicates.size()]));
         };
         };
-        Optional<Paper> paperOptional = paperRepo.findAll(specification,new PageRequest(0,1))
+        Optional<Paper> paperOptional = paperRepo.findAll(specification, new PageRequest(0, 1))
                 .getContent().stream().findFirst();
                 .getContent().stream().findFirst();
-        if(paperOptional.isPresent()){
+        if (paperOptional.isPresent()) {
             paperDTO = paperAssembler.toDTO(paperOptional.get());
             paperDTO = paperAssembler.toDTO(paperOptional.get());
         }
         }
         return paperDTO;
         return paperDTO;
     }
     }
-    
+
     @RequestMapping(value = "search/byTaskSecretNumber", method = RequestMethod.GET)
     @RequestMapping(value = "search/byTaskSecretNumber", method = RequestMethod.GET)
     public PaperDTO getByTaskSecretNumber(@RequestParam Long questionId,
     public PaperDTO getByTaskSecretNumber(@RequestParam Long questionId,
-                                           @RequestParam String sn) {
-    	PaperDTO paperDTO = null;
-        Specification<MarkTask> specification = (root,query,builder) -> {
+                                          @RequestParam String sn) {
+        PaperDTO paperDTO = null;
+        Specification<MarkTask> specification = (root, query, builder) -> {
             List<Predicate> predicates = new ArrayList<>();
             List<Predicate> predicates = new ArrayList<>();
-            predicates.add(builder.equal(root.get("paper").get("questionId"),questionId));
-            if(sn != null){
-                predicates.add(builder.equal(root.get("secretNumber"),sn));
+            predicates.add(builder.equal(root.get("paper").get("questionId"), questionId));
+            if (sn != null) {
+                predicates.add(builder.equal(root.get("secretNumber"), sn));
             }
             }
             return builder.and(predicates.toArray(new Predicate[predicates.size()]));
             return builder.and(predicates.toArray(new Predicate[predicates.size()]));
         };
         };
-        Optional<MarkTask> taskOptional = markTaskRepo.findAll(specification,new PageRequest(0,1))
+        Optional<MarkTask> taskOptional = markTaskRepo.findAll(specification, new PageRequest(0, 1))
                 .getContent().stream().findFirst();
                 .getContent().stream().findFirst();
-        if(taskOptional.isPresent()){
+        if (taskOptional.isPresent()) {
             paperDTO = paperAssembler.toDTO(taskOptional.get().getPaper());
             paperDTO = paperAssembler.toDTO(taskOptional.get().getPaper());
         }
         }
         return paperDTO;
         return paperDTO;
     }
     }
 
 
-    @RequestMapping(value="listByQuestion",method = RequestMethod.GET)
+    @RequestMapping(value = "listByQuestion", method = RequestMethod.GET)
     public PageableDTO listByQuerion(@RequestParam Long workId,
     public PageableDTO listByQuerion(@RequestParam Long workId,
-    								 @RequestParam String areaCode,
+                                     @RequestParam String areaCode,
                                      @RequestParam Subject subject,
                                      @RequestParam Subject subject,
                                      @RequestParam(required = false) Long startNumber,
                                      @RequestParam(required = false) Long startNumber,
                                      @RequestParam(required = false) Long endNumber,
                                      @RequestParam(required = false) Long endNumber,
                                      @RequestParam(required = false) Boolean isManual,
                                      @RequestParam(required = false) Boolean isManual,
-                                     Pageable pageable){
-        Specification<Paper> specification = (root,query,builder) -> {
+                                     Pageable pageable) {
+        Specification<Paper> specification = (root, query, builder) -> {
             List<Predicate> predicates = new ArrayList<>();
             List<Predicate> predicates = new ArrayList<>();
-            predicates.add(builder.equal(root.get("workId"),workId));
-            predicates.add(builder.equal(root.get("areaCode"),areaCode));
-            predicates.add(builder.equal(root.get("subject"),subject));
-            if(startNumber != null && endNumber != null){
-                predicates.add(builder.between(root.get("examNumber"),startNumber,endNumber));
-            }
-            else if(startNumber != null){
-                predicates.add(builder.equal(root.get("examNumber"),startNumber));
+            predicates.add(builder.equal(root.get("workId"), workId));
+            predicates.add(builder.equal(root.get("areaCode"), areaCode));
+            predicates.add(builder.equal(root.get("subject"), subject));
+            if (startNumber != null && endNumber != null) {
+                predicates.add(builder.between(root.get("examNumber"), startNumber, endNumber));
+            } else if (startNumber != null) {
+                predicates.add(builder.equal(root.get("examNumber"), startNumber));
             }
             }
-            if(isManual != null){
-                predicates.add(builder.equal(root.get("isManual"),isManual));
+            if (isManual != null) {
+                predicates.add(builder.equal(root.get("isManual"), isManual));
             }
             }
 
 
             return builder.and(predicates.toArray(new Predicate[predicates.size()]));
             return builder.and(predicates.toArray(new Predicate[predicates.size()]));
         };
         };
         List<PaperDTO> paperDTOs = new ArrayList<>();
         List<PaperDTO> paperDTOs = new ArrayList<>();
-        Page<Paper> paperPage = paperRepo.findAll(specification,pageable);
+        Page<Paper> paperPage = paperRepo.findAll(specification, pageable);
         paperPage.getContent().forEach(p -> {
         paperPage.getContent().forEach(p -> {
             paperDTOs.add(paperAssembler.toDTO(p));
             paperDTOs.add(paperAssembler.toDTO(p));
         });
         });
-        return new PageableDTO(paperDTOs,paperPage.getTotalElements(),paperPage.getTotalPages(),pageable.getPageNumber());
+        return new PageableDTO(paperDTOs, paperPage.getTotalElements(), paperPage.getTotalPages(), pageable.getPageNumber());
     }
     }
 
 
     /**
     /**
      * 试卷列表
      * 试卷列表
+     *
      * @param questionId 试题id
      * @param questionId 试题id
-     * @param level 档位,如果为空,则测序待评
-     * @param arbi 是否仲裁
-     * @param reject 是否打回
-     * @param pageable 分页参数
+     * @param level      档位,如果为空,则测序待评
+     * @param arbi       是否仲裁
+     * @param reject     是否打回
+     * @param pageable   分页参数
      * @return
      * @return
      */
      */
     @RequestMapping(method = RequestMethod.GET)
     @RequestMapping(method = RequestMethod.GET)
     public PageableDTO list(@RequestParam Long questionId,
     public PageableDTO list(@RequestParam Long questionId,
-                               @RequestParam(required = false) String level,
-                               @RequestParam(required = false) Boolean isSample,
-                               @RequestParam(required = false) Boolean markedLogic,
-                               @RequestParam(required = false) Boolean arbi,
-                               @RequestParam(required = false) Boolean reject,
-                               Pageable pageable) {
-        Specification<Paper> specification = (root,query,builder) -> {
+                            @RequestParam(required = false) String level,
+                            @RequestParam(required = false) Boolean isSample,
+                            @RequestParam(required = false) Boolean markedLogic,
+                            @RequestParam(required = false) Boolean arbi,
+                            @RequestParam(required = false) Boolean reject,
+                            Pageable pageable) {
+        Specification<Paper> specification = (root, query, builder) -> {
             List<Predicate> predicates = new ArrayList<>();
             List<Predicate> predicates = new ArrayList<>();
-            predicates.add(builder.equal(root.get("questionId"),questionId));
-            if(Objects.isNull(level)){
+            predicates.add(builder.equal(root.get("questionId"), questionId));
+            if (Objects.isNull(level)) {
                 predicates.add(builder.isNull(root.get("level")));
                 predicates.add(builder.isNull(root.get("level")));
+            } else {
+                predicates.add(builder.equal(root.get("level"), level));
             }
             }
-            else{
-                predicates.add(builder.equal(root.get("level"),level));
+            if (arbi != null) {
+                predicates.add(builder.equal(root.get("isArbitrated"), arbi));
             }
             }
-            if(arbi != null){
-                predicates.add(builder.equal(root.get("isArbitrated"),arbi));
+            if (reject != null) {
+                predicates.add(builder.equal(root.get("isRejected"), reject));
             }
             }
-            if(reject != null){
-                predicates.add(builder.equal(root.get("isRejected"),reject));
+            if (isSample != null) {
+                predicates.add(builder.equal(root.get("isSample"), isSample));
             }
             }
-            if(isSample != null){
-                predicates.add(builder.equal(root.get("isSample"),isSample));
-            }
-            if(markedLogic != null){
-                predicates.add(builder.equal(root.get("markedLogic"),markedLogic));
+            if (markedLogic != null) {
+                predicates.add(builder.equal(root.get("markedLogic"), markedLogic));
             }
             }
             //空白卷不展示
             //空白卷不展示
             predicates.add(builder.equal(root.get("isMissing"), false));
             predicates.add(builder.equal(root.get("isMissing"), false));
@@ -190,18 +195,50 @@ public class PaperApi {
 
 
         };
         };
 
 
-        Page<Paper> papers = paperRepo.findAll(specification,pageable);
+        Page<Paper> papers = paperRepo.findAll(specification, pageable);
+        if (Objects.isNull(papers) || papers.getContent().size() == 0) {
+            if (Objects.nonNull(isSample) && isSample) {
+                ExamQuestion examQuestion = examQuestionRepo.findOne(questionId);
+                specification = (root, query, builder) -> {
+                    List<Predicate> predicates = new ArrayList<>();
+                    if (Objects.isNull(level)) {
+                        predicates.add(builder.isNull(root.get("level")));
+                    } else {
+                        predicates.add(builder.equal(root.get("level"), level));
+                    }
+                    if (arbi != null) {
+                        predicates.add(builder.equal(root.get("isArbitrated"), arbi));
+                    }
+                    if (reject != null) {
+                        predicates.add(builder.equal(root.get("isRejected"), reject));
+                    }
+                    if (isSample != null) {
+                        predicates.add(builder.equal(root.get("isSample"), isSample));
+                    }
+                    if (markedLogic != null) {
+                        predicates.add(builder.equal(root.get("markedLogic"), markedLogic));
+                    }
+                    //空白卷不展示
+                    predicates.add(builder.equal(root.get("isMissing"), false));
+                    predicates.add(builder.equal(root.get("subject"), examQuestion.getSubject()));
+                    predicates.add(builder.equal(root.get("test"), TrialEnum.START_TRIAL.getId()));
+                    return builder.and(predicates.toArray(new Predicate[predicates.size()]));
+                };
+                papers = paperRepo.findAll(specification, pageable);
+            }
+        }
         List<PaperDTO> paperDTOs = new ArrayList<>();
         List<PaperDTO> paperDTOs = new ArrayList<>();
         papers.forEach(p -> {
         papers.forEach(p -> {
             paperDTOs.add(paperAssembler.toDTO(p));
             paperDTOs.add(paperAssembler.toDTO(p));
         });
         });
-        return new PageableDTO(paperDTOs,papers.getTotalElements(),papers.getTotalPages(),pageable.getPageNumber());
+        return new PageableDTO(paperDTOs, papers.getTotalElements(), papers.getTotalPages(), pageable.getPageNumber());
     }
     }
 
 
     /**
     /**
      * 试卷处理。提交评卷
      * 试卷处理。提交评卷
+     *
      * @param paper 试卷id
      * @param paper 试卷id
-     * @param body 试卷信息
+     * @param body  试卷信息
      * @return
      * @return
      */
      */
     @RequestMapping(value = "{paper}", method = RequestMethod.PATCH)
     @RequestMapping(value = "{paper}", method = RequestMethod.PATCH)
@@ -214,9 +251,9 @@ public class PaperApi {
         String ranges = body.get("range");
         String ranges = body.get("range");
         if (action != null && level != null) {
         if (action != null && level != null) {
             if (action.equals("leveling")) {
             if (action.equals("leveling")) {
-                markingService.levelMarkPaper(paper, level,false);
+                markingService.levelMarkPaper(paper, level, false);
             } else if (action.equals("sampling")) {
             } else if (action.equals("sampling")) {
-                markingService.levelMarkPaper(paper, level,true);
+                markingService.levelMarkPaper(paper, level, true);
             } else if (action.equals("reject")) {
             } else if (action.equals("reject")) {
                 markingService.reject(paper, level, ranges);
                 markingService.reject(paper, level, ranges);
             }
             }
@@ -231,6 +268,7 @@ public class PaperApi {
 
 
     /**
     /**
      * 标记试卷
      * 标记试卷
+     *
      * @param paper 试卷id
      * @param paper 试卷id
      * @return
      * @return
      */
      */
@@ -245,8 +283,9 @@ public class PaperApi {
 
 
     /**
     /**
      * 该试卷的评卷记录
      * 该试卷的评卷记录
+     *
      * @param paperId 试卷id
      * @param paperId 试卷id
-     * @param stage 评卷阶段
+     * @param stage   评卷阶段
      * @return
      * @return
      */
      */
     @RequestMapping(value = "{paperId}/marktasks", method = RequestMethod.GET)
     @RequestMapping(value = "{paperId}/marktasks", method = RequestMethod.GET)

+ 3 - 2
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/MarkTaskAssembler.java

@@ -6,6 +6,7 @@ import cn.com.qmth.stmms.ms.commons.constant.SystemConstant;
 import cn.com.qmth.stmms.ms.core.domain.MarkStage;
 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.Paper;
 import cn.com.qmth.stmms.ms.core.domain.Student;
 import cn.com.qmth.stmms.ms.core.domain.Student;
+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.task.MarkTask;
 import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
 import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
 import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
 import cn.com.qmth.stmms.ms.marking.dto.MarkTaskDTO;
@@ -50,7 +51,7 @@ public class MarkTaskAssembler {
             String imgSrc = null;
             String imgSrc = null;
             String thumbSrc = null;
             String thumbSrc = null;
             if (imageConfig.isImageEnc()) {
             if (imageConfig.isImageEnc()) {
-                Student student = studentRepo.findByWorkIdAndExamNumber(paper.getWorkId(), paper.getExamNumber());
+                Student student = studentRepo.findByWorkIdAndExamNumberAndTest(paper.getWorkId(), paper.getExamNumber(), String.valueOf(TrialEnum.DEFAULT.getId()));
                 imgSrc = systemConfig.getImageUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.IMAGE);
                 imgSrc = systemConfig.getImageUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.IMAGE);
                 thumbSrc = systemConfig.getThumbUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.THUMB);
                 thumbSrc = systemConfig.getThumbUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.THUMB);
             } else {
             } else {
@@ -89,7 +90,7 @@ public class MarkTaskAssembler {
             String imgSrc = null;
             String imgSrc = null;
             String thumbSrc = null;
             String thumbSrc = null;
             if (imageConfig.isImageEnc()) {
             if (imageConfig.isImageEnc()) {
-                Student student = studentRepo.findByWorkIdAndExamNumber(paper.getWorkId(), paper.getExamNumber());
+                Student student = studentRepo.findByWorkIdAndExamNumberAndTest(paper.getWorkId(), paper.getExamNumber(), String.valueOf(TrialEnum.DEFAULT.getId()));
                 imgSrc = systemConfig.getImageUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.IMAGE);
                 imgSrc = systemConfig.getImageUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.IMAGE);
                 thumbSrc = systemConfig.getThumbUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.THUMB);
                 thumbSrc = systemConfig.getThumbUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.THUMB);
             } else {
             } else {

+ 3 - 2
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/assembler/PaperAssembler.java

@@ -5,6 +5,7 @@ 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.constant.SystemConstant;
 import cn.com.qmth.stmms.ms.core.domain.Paper;
 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.Student;
+import cn.com.qmth.stmms.ms.core.domain.enums.TrialEnum;
 import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
 import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
 import cn.com.qmth.stmms.ms.core.repository.StudentRepo;
 import cn.com.qmth.stmms.ms.marking.dto.PaperDTO;
 import cn.com.qmth.stmms.ms.marking.dto.PaperDTO;
@@ -36,7 +37,7 @@ public class PaperAssembler {
         String imgSrc = null;
         String imgSrc = null;
         String thumbSrc = null;
         String thumbSrc = null;
         if (imageConfig.isImageEnc()) {
         if (imageConfig.isImageEnc()) {
-            Student student = studentRepo.findByWorkIdAndExamNumber(paper.getWorkId(), paper.getExamNumber());
+            Student student = studentRepo.findByWorkIdAndExamNumberAndTest(paper.getWorkId(), paper.getExamNumber(), String.valueOf(TrialEnum.DEFAULT.getId()));
             imgSrc = systemConfig.getImageUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.IMAGE);
             imgSrc = systemConfig.getImageUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.IMAGE);
             thumbSrc = systemConfig.getThumbUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.THUMB);
             thumbSrc = systemConfig.getThumbUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.THUMB);
         } else {
         } else {
@@ -82,7 +83,7 @@ public class PaperAssembler {
         String thumbSrc = null;
         String thumbSrc = null;
         String sheetSrc = null;
         String sheetSrc = null;
         if (imageConfig.isImageEnc()) {
         if (imageConfig.isImageEnc()) {
-            Student student = studentRepo.findByWorkIdAndExamNumber(paper.getWorkId(), paper.getExamNumber());
+            Student student = studentRepo.findByWorkIdAndExamNumberAndTest(paper.getWorkId(), paper.getExamNumber(), String.valueOf(TrialEnum.DEFAULT.getId()));
             imgSrc = systemConfig.getImageUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.IMAGE);
             imgSrc = systemConfig.getImageUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.IMAGE);
             thumbSrc = systemConfig.getThumbUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.THUMB);
             thumbSrc = systemConfig.getThumbUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.THUMB);
             sheetSrc = systemConfig.getSheetUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.SHEET);
             sheetSrc = systemConfig.getSheetUrl(paper.getWorkId(), paper.getSubject().ordinal(), student.getId(), SystemConstant.SHEET);

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

@@ -66,7 +66,7 @@ public class AssignTaskService {
                 for (int j = 0; j < markerPaperList.size(); j++) {
                 for (int j = 0; j < markerPaperList.size(); j++) {
                     Paper paper = markerPaperList.get(j);
                     Paper paper = markerPaperList.get(j);
                     Long random = getRandom(marker.getId(), paper.getId(), marker.getWorkId(), paper.getExamNumber());
                     Long random = getRandom(marker.getId(), paper.getId(), marker.getWorkId(), paper.getExamNumber());
-                    MarkTask markTask = new MarkTask(marker, paper, markSubject.getStage(), random);
+                    MarkTask markTask = new MarkTask(marker, paper, markSubject.getStage(), random, markSubject.getTest());
                     markTask.setRandomSeq(i * randomBundleSize + j + 1);
                     markTask.setRandomSeq(i * randomBundleSize + j + 1);
                     markTasks.add(markTask);
                     markTasks.add(markTask);
                 }
                 }
@@ -107,7 +107,7 @@ public class AssignTaskService {
             Paper paper = iterator.next();
             Paper paper = iterator.next();
             for (MarkUser marker : markerGroups.get(idx).getMarkers()) {
             for (MarkUser marker : markerGroups.get(idx).getMarkers()) {
                 Long random = getRandom(marker.getId(), paper.getId(), marker.getWorkId(), paper.getExamNumber());
                 Long random = getRandom(marker.getId(), paper.getId(), marker.getWorkId(), paper.getExamNumber());
-                MarkTask markTask = new MarkTask(marker, paper, markSubject.getStage(), random);
+                MarkTask markTask = new MarkTask(marker, paper, markSubject.getStage(), random, markSubject.getTest());
                 markTaskRepo.save(markTask);
                 markTaskRepo.save(markTask);
             }
             }
             idx++;
             idx++;

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

@@ -1,15 +1,5 @@
 package cn.com.qmth.stmms.ms.marking.service;
 package cn.com.qmth.stmms.ms.marking.service;
 
 
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Sort;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import cn.com.qmth.stmms.ms.core.domain.*;
 import cn.com.qmth.stmms.ms.core.domain.*;
 import cn.com.qmth.stmms.ms.core.domain.user.MarkRight;
 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.MarkUser;
@@ -17,6 +7,15 @@ import cn.com.qmth.stmms.ms.core.domain.user.MarkerGroup;
 import cn.com.qmth.stmms.ms.core.domain.user.Role;
 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.repository.*;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Sort;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * 评卷阶段控制服务
  * 评卷阶段控制服务
@@ -102,7 +101,7 @@ public class StageControlService {
             statusMap.put(markSubject.getId(), false);
             statusMap.put(markSubject.getId(), false);
             throw new RuntimeException("没有设定档位");
             throw new RuntimeException("没有设定档位");
         }
         }
-        List<Paper> papers = paperRepo.findByWorkIdAndSubjectAndIsMissing(workId, subject, false);
+        List<Paper> papers = paperRepo.findByWorkIdAndSubjectAndIsMissingAndTest(workId, subject, false, markSubject.getTest());
         List<MarkUser> markers = markUserRepo.findByWorkIdAndSubjectAndRole(workId, subject, Role.MARKER);
         List<MarkUser> markers = markUserRepo.findByWorkIdAndSubjectAndRole(workId, subject, Role.MARKER);
         List<MarkUser> levelMarkers = markers.stream().filter(m -> m.getMarkRight() == MarkRight.ALLOW_ALL || m.getMarkRight() == MarkRight.ALLOW_LEVELING).collect(Collectors.toList());
         List<MarkUser> levelMarkers = markers.stream().filter(m -> m.getMarkRight() == MarkRight.ALLOW_ALL || m.getMarkRight() == MarkRight.ALLOW_LEVELING).collect(Collectors.toList());
         if (levelMarkers.size() == 0) {
         if (levelMarkers.size() == 0) {
@@ -138,12 +137,12 @@ public class StageControlService {
             statusMap.put(markSubject.getId(), false);
             statusMap.put(markSubject.getId(), false);
             throw new RuntimeException("没有设定评卷员");
             throw new RuntimeException("没有设定评卷员");
         }
         }
-        Long count = paperRepo.countByWorkIdAndSubjectAndLevelIsNull(workId, subject);
+        Long count = paperRepo.countByWorkIdAndSubjectAndTestAndLevelIsNull(workId, subject, markSubject.getTest());
         if (count > 0) {
         if (count > 0) {
             statusMap.put(markSubject.getId(), false);
             statusMap.put(markSubject.getId(), false);
             throw new RuntimeException("没有分档完成");
             throw new RuntimeException("没有分档完成");
         }
         }
-        this.isPtFull(workId,markSubject);
+        this.isPtFull(workId, markSubject);
         Sort sort = new Sort("questionId");
         Sort sort = new Sort("questionId");
         List<Paper> papers = paperRepo.findByWorkIdAndSubject(workId, subject, sort);
         List<Paper> papers = paperRepo.findByWorkIdAndSubject(workId, subject, sort);
         List<MarkerGroup> markerGroups = markerGroupRepo.findByWorkIdAndSubject(workId, subject);
         List<MarkerGroup> markerGroups = markerGroupRepo.findByWorkIdAndSubject(workId, subject);
@@ -153,37 +152,36 @@ public class StageControlService {
         }
         }
         assignTaskService.assignForGrouping(papers, markerGroups, markSubject);
         assignTaskService.assignForGrouping(papers, markerGroups, markSubject);
     }
     }
-    
+
     /**
     /**
-     * 
      * @param workId
      * @param workId
      * @param markSubject
      * @param markSubject
      */
      */
-	private void isPtFull(Long workId,MarkSubject markSubject) {
-		//控制分档比例
+    private void isPtFull(Long workId, MarkSubject markSubject) {
+        //控制分档比例
         List<Level> levels = levelRepo.findByWorkId(workId);
         List<Level> levels = levelRepo.findByWorkId(workId);
         for (Level targetLevel : levels) {
         for (Level targetLevel : levels) {
-        	int pt = targetLevel.getPt();
-        	long count = paperRepo.countByWorkIdAndSubjectAndLevel(workId, markSubject.getSubject(),targetLevel.getCode());
-        	long total = paperRepo.countByWorkIdAndSubject(workId, markSubject.getSubject());
-        	
-        	if ((count * 1.0D) / total * 1.0D > pt / 100.D) {
-        		statusMap.put(markSubject.getId(), false);
-        		throw new RuntimeException(targetLevel.getCode() + "档已满,占比总阀值已达" + pt + "%。");
-        	}
-        	//判断考点阀值是否已满
-        	int kdpt = targetLevel.getKdpt();
-        	List<ExamQuestion> examQuestions = examQuestionRepo.findByWorkIdAndSubject(workId, markSubject.getSubject());
-        	for (ExamQuestion examQuestion : examQuestions) {
-        		long kdcount = paperRepo.countByWorkIdAndSubjectAndQuestionIdAndLevel(workId, markSubject.getSubject(), examQuestion.getId(), targetLevel.getCode());
-        		long kdtotal = paperRepo.countByWorkIdAndSubjectAndQuestionId(workId, markSubject.getSubject(), examQuestion.getId());
-        		if ((kdcount * 1.0D) / kdtotal * 1.0D > kdpt / 100.D) {
-        			statusMap.put(markSubject.getId(), false);
-        			throw new RuntimeException(targetLevel.getCode() + "档已满,考点阀值已达" + kdpt + "%。");
-        		}
-			}
+            int pt = targetLevel.getPt();
+            long count = paperRepo.countByWorkIdAndSubjectAndLevel(workId, markSubject.getSubject(), targetLevel.getCode());
+            long total = paperRepo.countByWorkIdAndSubject(workId, markSubject.getSubject());
+
+            if ((count * 1.0D) / total * 1.0D > pt / 100.D) {
+                statusMap.put(markSubject.getId(), false);
+                throw new RuntimeException(targetLevel.getCode() + "档已满,占比总阀值已达" + pt + "%。");
+            }
+            //判断考点阀值是否已满
+            int kdpt = targetLevel.getKdpt();
+            List<ExamQuestion> examQuestions = examQuestionRepo.findByWorkIdAndSubject(workId, markSubject.getSubject());
+            for (ExamQuestion examQuestion : examQuestions) {
+                long kdcount = paperRepo.countByWorkIdAndSubjectAndQuestionIdAndLevel(workId, markSubject.getSubject(), examQuestion.getId(), targetLevel.getCode());
+                long kdtotal = paperRepo.countByWorkIdAndSubjectAndQuestionId(workId, markSubject.getSubject(), examQuestion.getId());
+                if ((kdcount * 1.0D) / kdtotal * 1.0D > kdpt / 100.D) {
+                    statusMap.put(markSubject.getId(), false);
+                    throw new RuntimeException(targetLevel.getCode() + "档已满,考点阀值已达" + kdpt + "%。");
+                }
+            }
         }
         }
-	}
+    }
 
 
     /**
     /**
      * 进入到抽查阶段
      * 进入到抽查阶段