소스 검색

美术阅卷11月新增需求-修复BUG

wangliang 5 년 전
부모
커밋
25531df1cc

+ 2 - 2
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/api/QualityAnalyseController.java

@@ -155,7 +155,7 @@ public class QualityAnalyseController {
             @RequestParam(required = false) String startTime,
 //            @ApiParam(value = "结束时间", required = false)
             @RequestParam(required = false) String endTime) {
-        List list = null;
+        List list = new ArrayList();
         Specification<MarkTask> specification = (root, query, builder) -> {
             List<Predicate> predicates = new ArrayList<>();
             predicates.add(builder.equal(root.get("workId"), workId));
@@ -235,7 +235,7 @@ public class QualityAnalyseController {
             @RequestParam(required = false) String startTime,
 //            @ApiParam(value = "结束时间", required = false)
             @RequestParam(required = false) String endTime) {
-        List list = null;
+        List list = new ArrayList();
         Specification<MarkTask> specification = (root, query, builder) -> {
             List<Predicate> predicates = new ArrayList<>();
             predicates.add(builder.equal(root.get("workId"), workId));

+ 32 - 28
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/service/TrialService.java

@@ -7,14 +7,15 @@ 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.repository.*;
 import cn.com.qmth.stmms.ms.core.vo.Subject;
+import cn.com.qmth.stmms.ms.marking.service.MarkingService;
 import cn.com.qmth.stmms.ms.marking.service.StageControlService;
 import com.alibaba.fastjson.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -54,6 +55,9 @@ public class TrialService {
     @Autowired
     MarkerGroupRepo markerGroupRepo;
 
+    @Autowired
+    MarkingService markingService;
+
     /**
      * 检查任务状态
      *
@@ -101,7 +105,7 @@ public class TrialService {
         markSubject.setTest(TrialEnum.START_TRIAL.getId());
         markSubjectRepo.save(markSubject);
         //先删除上次试评试卷(取标准卷用)
-        paperRepo.deleteByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.START_TRIAL.getId());
+//        paperRepo.deleteByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.START_TRIAL.getId());
         //修改试卷test
         paperRepo.updateByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.INIT.getId(), TrialEnum.START_TRIAL.getId());
     }
@@ -128,22 +132,6 @@ public class TrialService {
                     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.删除该科目下所有任务数据
         markTaskRepo.deleteByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.START_TRIAL.getId());
         //3.删除学生数据
@@ -153,16 +141,32 @@ public class TrialService {
 
         //4.删除卷子信息
         examQuestionRepo.deleteByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.INIT.getId());
-        //5.更新该科目下的试卷信息,可暂且不更新
+        //5.更新该科目下的试卷信息(正式卷子,并删除试评卷子)
         List<Paper> paperList = paperRepo.findByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.START_TRIAL.getId());
-        List<Long> paperIds = paperList.stream().map(o -> o.getId()).collect(Collectors.toList());
-//        paperList.forEach(o -> {
-//            o.setLevel(null);//更新档位
-//            o.setScore(null);//更新分数
-//        });
-//        paperRepo.save(paperList);
-        //5.删除学生的试卷信息(服务器图片)
-
+        List<Paper> paperAllList = paperRepo.findByWorkIdAndSubjectAndTest(workId, subject, TrialEnum.DEFAULT.getId());
+        Map<String, Paper> paperAllMap = paperAllList.stream().collect(Collectors.toMap(Paper::getExamNumber, Function.identity()));
+        List<Paper> finalPaperList = new ArrayList<>();
+        Map<String, String> levelMap = new HashMap<>();
+        List<Long> paperIds = new ArrayList<>();
+        paperList.forEach(p -> {
+            if (Objects.nonNull(paperAllMap.get(p.getExamNumber())) && p.isMarkByLeader() && Objects.nonNull(p.getLevel())) {
+                if (Objects.equals(p.getAreaCode(), paperAllMap.get(p.getExamNumber()).getAreaCode())) {
+                    finalPaperList.add(paperAllMap.get(p.getExamNumber()));
+                    levelMap.put(p.getExamNumber(), p.getLevel());
+                }
+            }
+            paperIds.add(p.getId());
+        });
+
+        if (finalPaperList.size() > 0) {
+            finalPaperList.forEach(o -> {
+                markingService.levelMarkPaper(o, levelMap.get(o.getExamNumber()), true);
+                o.setTest(TrialEnum.START_FORMAL.getId());
+            });
+            paperRepo.save(finalPaperList);
+        }
+        //5.删除试评卷子
+        paperRepo.delete(paperList);
         //6.删除log日志
         markLogRepo.deleteByPaperIdIn(paperIds);
         //7.删除分组

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

@@ -1,12 +1,8 @@
 package cn.com.qmth.stmms.ms.marking.api;
 
 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.domain.user.MarkUser;
 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.MarkTaskRepo;
@@ -21,12 +17,8 @@ import org.springframework.data.jpa.domain.Specification;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.persistence.criteria.Predicate;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
 import java.util.*;
 
 /**
@@ -103,22 +95,42 @@ public class MarkTaskApi {
         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);
-                if (examQuestion.getTest() == TrialEnum.DEFAULT.getId()) {
-                    Paper paper = paperRepo.findTopByLevelAndIsSampleAndIsMissingAndSubjectAndTestAndAreaCodeOrderByUpdatedOnDesc(level, isSample, false, examQuestion.getSubject(), TrialEnum.START_TRIAL.getId(), examQuestion.getAreaCode());
-                    if (Objects.nonNull(paper)) {
-                        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
-                        HttpServletRequest request = attributes.getRequest();
-                        HttpSession session = request.getSession();
-                        String token = (String) session.getAttribute("token");
-                        if (Objects.isNull(token)) {
-                            throw new Exception("请先登录");
-                        }
-                        MarkUser markUser = (MarkUser) session.getAttribute("markUser");
-                        MarkTask markTask = new MarkTask(markUser, paper, stage, 1L);
-                        markTaskDTOs.add(markTaskAssembler.toDTO(markTask));
+//                ExamQuestion examQuestion = examQuestionRepo.findOne(questionId);
+//                if (examQuestion.getTest() == TrialEnum.DEFAULT.getId()) {
+//                    Paper paper = paperRepo.findTopByLevelAndIsSampleAndIsMissingAndSubjectAndTestAndAreaCodeOrderByUpdatedOnDesc(level, isSample, false, examQuestion.getSubject(), TrialEnum.START_TRIAL.getId(), examQuestion.getAreaCode());
+//                    if (Objects.nonNull(paper)) {
+//                        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+//                        HttpServletRequest request = attributes.getRequest();
+//                        HttpSession session = request.getSession();
+//                        String token = (String) session.getAttribute("token");
+//                        if (Objects.isNull(token)) {
+//                            throw new Exception("请先登录");
+//                        }
+//                        MarkUser markUser = (MarkUser) session.getAttribute("markUser");
+//                        MarkTask markTask = new MarkTask(markUser, paper, stage, 1L);
+//                        markTaskDTOs.add(markTaskAssembler.toDTO(markTask));
+//                    }
+//                }
+                specification = (root, query, builder) -> {
+                    List<Predicate> predicates = new ArrayList<>();
+                    predicates.add(builder.equal(root.get("questionId"), questionId));
+                    predicates.add(builder.equal(root.get("markerId"), markerId));
+                    predicates.add(builder.equal(root.get("stage"), stage));
+                    if (level == null) {
+                        predicates.add(builder.isNull(root.get("paper").get("level")));
+                    } else if (stage == MarkStage.LEVEL) {
+                        predicates.add(builder.equal(root.get("paper").get("level"), level));
+                    } else if (stage == MarkStage.SCORE) {
+                        predicates.add(builder.isNotNull(root.get("paper").get("level")));
                     }
-                }
+                    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("active"), true));
+                    return builder.and(predicates.toArray(new Predicate[predicates.size()]));
+                };
+                markTasks = markTaskRepo.findAll(specification, pageable);
             }
         }
         markTasks.getContent().forEach(m -> {

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

@@ -196,41 +196,41 @@ public class PaperApi {
         };
 
         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);
-                if (examQuestion.getTest() == TrialEnum.DEFAULT.getId()) {
-                    pageable = new PageRequest(0, 1, Sort.Direction.DESC, "updatedOn");
-                    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()));
-                        predicates.add(builder.equal(root.get("areaCode"), examQuestion.getAreaCode()));
-                        return builder.and(predicates.toArray(new Predicate[predicates.size()]));
-                    };
-                    papers = paperRepo.findAll(specification, pageable);
-                }
-            }
-        }
+//        if (Objects.isNull(papers) || papers.getContent().size() == 0) {
+//            if (Objects.nonNull(isSample) && isSample) {
+//                ExamQuestion examQuestion = examQuestionRepo.findOne(questionId);
+//                if (examQuestion.getTest() == TrialEnum.DEFAULT.getId()) {
+//                    pageable = new PageRequest(0, 1, Sort.Direction.DESC, "updatedOn");
+//                    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()));
+//                        predicates.add(builder.equal(root.get("areaCode"), examQuestion.getAreaCode()));
+//                        return builder.and(predicates.toArray(new Predicate[predicates.size()]));
+//                    };
+//                    papers = paperRepo.findAll(specification, pageable);
+//                }
+//            }
+//        }
         List<PaperDTO> paperDTOs = new ArrayList<>();
         papers.forEach(p -> {
             paperDTOs.add(paperAssembler.toDTO(p));