Sfoglia il codice sorgente

机构版-3.0.0-bug修复

xiaof 2 anni fa
parent
commit
6e9cf87c60

+ 1 - 1
stmms-ms-admin/src/main/java/cn/com/qmth/stmms/ms/admin/exporter/PaperExporter.java

@@ -154,7 +154,7 @@ public class PaperExporter {
     @GetMapping("{workId}/mark")
     public void exportMark(@PathVariable Long workId, HttpServletResponse response) {
         List<MarkExpDTO> markExpDTOS = new ArrayList<>();
-        List<Paper> papers = paperRepo.findByWorkIdAndIsMarkTrue(workId);
+        List<Paper> papers = paperRepo.findByWorkIdAndIsAdminMarkTrue(workId);
         for (Paper paper : papers) {
             MarkExpDTO markExpDTO = new MarkExpDTO();
             markExpDTO.setWorkId(workId);

+ 14 - 1
stmms-ms-core/src/main/java/cn/com/qmth/stmms/ms/core/domain/Paper.java

@@ -149,10 +149,15 @@ public class Paper implements Serializable {
     private Long scanUserId;
 
     /**
-     * 是否标记
+     * 是否科组长标记
      */
     private boolean isMark;
 
+    /**
+     * 是否管理员标记
+     */
+    private boolean isAdminMark;
+
     public int getTest() {
         return test;
     }
@@ -581,4 +586,12 @@ public class Paper implements Serializable {
     public void setMark(boolean mark) {
         isMark = mark;
     }
+
+    public boolean isAdminMark() {
+        return isAdminMark;
+    }
+
+    public void setAdminMark(boolean adminMark) {
+        isAdminMark = adminMark;
+    }
 }

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

@@ -278,4 +278,10 @@ public interface MarkTaskRepo extends JpaRepository<MarkTask, Long>, JpaSpecific
     @Modifying
     @Query("update MarkTask m set m.isMark = ?2 where m.id = ?1")
     void updateMarkTaskMarkById(Long markTaskId, Boolean isMark);
+
+    @Query("select m.paper.id from MarkTask m where m.workId = ?1 and m.questionId = ?2 and m.markerId = ?3 and m.stage = ?4 and m.isMark = ?5")
+    List<Long> findByWorkIdAndQuestionIdAndMarkerIdAndStageAndIsMark(Long workId, Long questionId, Long markerId, MarkStage stage, boolean isMark);
+
+    @Query("select m.paper.id from MarkTask m where m.workId = ?1 and m.questionId = ?2 and m.markerId = ?3 and m.stage = ?4 and m.batchNo = ?5 and m.isMark = true")
+    List<Long> findByWorkIdAndQuestionIdAndMarkerIdAndStageAndBatchNoAndPaperIsMark(Long workId, Long questionId,Long markerId, MarkStage stage, Long batchNo);
 }

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

@@ -407,9 +407,11 @@ public interface PaperRepo extends JpaRepository<Paper, Long>, JpaSpecificationE
     @Query("update Paper s set s.isMark = ?2 where s.id = ?1")
     void updatePaperMarkById(Long paperId, boolean isMark);
 
-    List<Paper> findByWorkIdAndIsMarkTrue(Long workId);
+    List<Paper> findByWorkIdAndIsAdminMarkTrue(Long workId);
 
     List<Paper> findByWorkIdAndSubjectOrderByLevelAscSortNumDesc(Long workId, Subject subject);
 
-//    List<Paper> findByWorkIdAndSubjectAndInspectRange(Long workId, Subject subject, Long inspectRange);
+    @Modifying
+    @Query("update Paper s set s.isAdminMark = ?2 where s.id = ?1")
+    void updatePaperAdminMarkById(Long paperId, boolean isMark);
 }

+ 18 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/api/MakrerApi.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.stmms.ms.marking.api;
 
+import ch.qos.logback.classic.turbo.TurboFilter;
 import cn.com.qmth.stmms.ms.accesscontrol.config.LoginConfig;
 import cn.com.qmth.stmms.ms.commons.threadPool.MyThreadPool;
 import cn.com.qmth.stmms.ms.commons.utils.SqlUtil;
@@ -20,6 +21,7 @@ import cn.com.qmth.stmms.ms.marking.assembler.QuestionStatAssembler;
 import cn.com.qmth.stmms.ms.marking.dto.*;
 import cn.com.qmth.stmms.ms.marking.service.MarkingService;
 import javassist.bytecode.stackmap.BasicBlock;
+import org.junit.rules.TestRule;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -567,6 +569,22 @@ public class MakrerApi {
         }
         manualScoreDTO.setCount(manualCount);
         levelStatDTOs.add(manualScoreDTO);
+
+        // 标记试卷(评卷员标记的和科组长标记的都统计)
+        LevelStatDTO markPaperDTO = new LevelStatDTO();
+        markPaperDTO.setId("markPaper");
+        int markPaperCount;
+        if (ParamCache.paramMap.get(marker.getWorkId()).getScoreShowAllPaper() == 1) {
+            // 评卷员和科组长标记的试卷
+            List<Long> markTaskPaperId = markTaskRepo.findByWorkIdAndQuestionIdAndMarkerIdAndStageAndIsMark(markSubject.getWorkId(), questionId,marker.getId(), markSubject.getStage(), true);
+            markPaperCount = Math.toIntExact(markTaskPaperId.stream().distinct().count());
+        } else {
+            // 评卷员标记的试卷
+            List<Long> markTaskPaperIdAll = markTaskRepo.findByWorkIdAndQuestionIdAndMarkerIdAndStageAndBatchNoAndPaperIsMark(markSubject.getWorkId(), questionId, marker.getId(), markSubject.getStage(), batchNo);
+            markPaperCount = Math.toIntExact(markTaskPaperIdAll.stream().distinct().count());
+        }
+        markPaperDTO.setCount(markPaperCount);
+        levelStatDTOs.add(markPaperDTO);
         return levelStatDTOs;
     }
 

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

@@ -110,13 +110,13 @@ public class MarkTaskApi {
         Long scoreBatchNo = null;
         if (stage == MarkStage.LEVEL) {
             List<Object> batchNos = paperRepo.findBatchNoByWorkIdAndSubject(workId, markUser.getSubject().name());
-            if (batchNos != null && batchNos.size() > 0) {
+            if (batchNos != null && !batchNos.isEmpty()) {
                 Object object = batchNos.get(0);
                 batchNo = Long.valueOf(object.toString());
             }
         } else if (stage == MarkStage.SCORE) {
             List<Object> batchNos = paperRepo.findScoreBatchNoByWorkIdAndSubject(workId, markUser.getSubject().name());
-            if (batchNos != null && batchNos.size() > 0) {
+            if (batchNos != null && !batchNos.isEmpty()) {
                 Object object = batchNos.get(0);
                 if (Objects.nonNull(object)) {
                     scoreBatchNo = Long.valueOf(object.toString());
@@ -291,6 +291,49 @@ public class MarkTaskApi {
         return new PageableDTO(markTaskDTOs, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
     }
 
+    /**
+     * 评卷员的标记试卷查询
+     * @param markerId 评卷员ID
+     * @param workId 工作ID
+     * @param subject 科目
+     * @param questionId 考区ID
+     * @param pageable 分页
+     */
+    @GetMapping("/markedPapers")
+    public PageableDTO listMarkedPapers(@RequestParam(required = false) Long workId,
+                                        @RequestParam Long markerId,
+                                       @RequestParam Subject subject,
+                                       @RequestParam MarkStage stage,
+                                       @RequestParam Long questionId,
+                                       Pageable pageable) {
+        List<MarkTaskDTO> markTaskDTOs = new ArrayList<>();
+        Specification<MarkTask> specification = (root, query, builder) -> {
+            List<Predicate> predicates = new ArrayList<>();
+
+            if (ParamCache.paramMap.get(workId).getScoreShowAllPaper() == 0) {
+                if(MarkStage.LEVEL.equals(stage)){
+                    Long batchNo = paperRepo.findMaxBatchNoByWorkIdAndSubject(workId, subject);
+                    predicates.add(builder.equal(root.get("paper").get("batchNo"), batchNo));
+                } else {
+                    Long batchNo = paperRepo.findMaxScoreBatchNoByWorkIdAndSubject(workId, subject);
+                    predicates.add(builder.equal(root.get("paper").get("scoreBatchNo"), batchNo));
+                }
+            }
+
+            predicates.add(builder.equal(root.get("workId"), workId));
+            predicates.add(builder.equal(root.get("questionId"), questionId));
+            predicates.add(builder.equal(root.get("markerId"), markerId));
+            predicates.add(builder.equal(root.get("isMark"), true));
+            return builder.and(predicates.toArray(new Predicate[predicates.size()]));
+        };
+        Sort sort = new Sort("paper.level", "serialNumber", "randomSeq");
+        Pageable pageable1 = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), sort);
+        Page<MarkTask> markTasks = markTaskRepo.findAll(specification, pageable1);
+
+        markTasks.getContent().forEach(m -> markTaskDTOs.add(markTaskAssembler.toManualDTO(m)));
+        return new PageableDTO(markTaskDTOs, markTasks.getTotalElements(), markTasks.getTotalPages(), pageable.getPageNumber());
+    }
+
     /**
      * randomSeqNew排序
      *

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

@@ -8,6 +8,7 @@ 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.enums.TrialEnum;
 import cn.com.qmth.stmms.ms.core.domain.task.MarkTask;
+import cn.com.qmth.stmms.ms.core.domain.user.Role;
 import cn.com.qmth.stmms.ms.core.repository.ExamQuestionRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkSubjectRepo;
 import cn.com.qmth.stmms.ms.core.repository.MarkTaskRepo;
@@ -139,18 +140,18 @@ public class PaperApi {
 
     @RequestMapping(value = "listByQuestion", method = RequestMethod.GET)
     public PageableDTO listByQuestion(@RequestParam Long workId,
-                                     @RequestParam(required = false) String areaCode,
-                                     @RequestParam Subject subject,
-                                     @RequestParam(required = false) Long startNumber,
-                                     @RequestParam(required = false) Long endNumber,
-                                     @RequestParam(required = false) Boolean isManual,
-                                     @RequestParam(required = false) Boolean missing,
-                                     @RequestParam(required = false) Boolean isRelate,
-                                     @RequestParam(required = false) String studentName,
+                                      @RequestParam(required = false) String areaCode,
+                                      @RequestParam Subject subject,
+                                      @RequestParam(required = false) Long startNumber,
+                                      @RequestParam(required = false) Long endNumber,
+                                      @RequestParam(required = false) Boolean isManual,
+                                      @RequestParam(required = false) Boolean missing,
+                                      @RequestParam(required = false) Boolean isRelate,
+                                      @RequestParam(required = false) String studentName,
                                       @RequestParam(required = false) Long scanUserId,
-                                      @RequestParam(required = false) Boolean isMark,
-                                     @RequestParam(required = false) String sortBy,
-                                     Pageable pageable) {
+                                      @RequestParam(required = false) Boolean isAdminMark,
+                                      @RequestParam(required = false) String sortBy,
+                                      Pageable pageable) {
         Sort sort = null;
         if (Objects.equals("2", sortBy)) {
             sort = new Sort(Sort.Direction.ASC, "examNumber");
@@ -187,8 +188,8 @@ public class PaperApi {
             if (isRelate != null) {
                 predicates.add(builder.equal(root.get("isRelate"), isRelate));
             }
-            if (isMark != null) {
-                predicates.add(builder.equal(root.get("isMark"), isMark));
+            if (isAdminMark != null) {
+                predicates.add(builder.equal(root.get("isAdminMark"), isAdminMark));
             }
             //考生姓名
             if (studentName != null && !studentName.equals("")) {
@@ -263,7 +264,7 @@ public class PaperApi {
 //                predicates.add(builder.equal(root.get("batchNo"), batchNo));
                     } else {
                         predicates.add(builder.equal(root.get("level"), level));
-                        predicates.add(builder.isNotNull(root.get("batchNo")));
+//                        predicates.add(builder.isNotNull(root.get("batchNo")));
                     }
                 }
             }
@@ -748,8 +749,12 @@ public class PaperApi {
      */
     @RequestMapping(value = "/mark_paper", method = RequestMethod.POST)
     @Transactional
-    public Object markPaper(@RequestParam Long paperId, @RequestParam boolean isMark) {
-        paperRepo.updatePaperMarkById(paperId, isMark);
+    public Object markPaper(@RequestParam Long paperId, @RequestParam boolean isMark, @RequestParam Role role) {
+        if (Role.SUPER_ADMIN.equals(role) || Role.ADMIN.equals(role)) {
+            paperRepo.updatePaperAdminMarkById(paperId, isMark);
+        } else if (Role.MARK_LEADER.equals(role)) {
+            paperRepo.updatePaperMarkById(paperId, isMark);
+        }
         return true;
     }
 

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

@@ -105,6 +105,8 @@ public class PaperAssembler {
             int rejectedCount = markLogRepo.countByWorkIdAndPaperIdAndOperType(paper.getWorkId(), paper.getId(), MarkLogOperType.CALLBACK_LEVEl.getId());
             paperDTO.setRejectedCount(rejectedCount);
             paperDTO.setSortSum(paper.getSortNum());
+            paperDTO.setMark(paper.isMark());
+            paperDTO.setAdminMark(paper.isAdminMark());
         }
         return paperDTO;
     }
@@ -171,6 +173,7 @@ public class PaperAssembler {
             paperDTO.setShiftScore(paper.isShiftScore());
             paperDTO.setStudentName(student.getName());
             paperDTO.setMark(paper.isMark());
+            paperDTO.setAdminMark(paper.isAdminMark());
         }
         return paperDTO;
     }

+ 9 - 0
stmms-ms-marking/src/main/java/cn/com/qmth/stmms/ms/marking/dto/PaperDTO.java

@@ -56,6 +56,7 @@ public class PaperDTO implements Serializable{
     private boolean isOneClick;
     private String secretNumber;
     private boolean isMark;
+    private boolean isAdminMark;
     private List<MarkTaskDTO> markResults = new ArrayList<>();
 
     public int getPaperTest() {
@@ -350,6 +351,14 @@ public class PaperDTO implements Serializable{
         isMark = mark;
     }
 
+    public boolean isAdminMark() {
+        return isAdminMark;
+    }
+
+    public void setAdminMark(boolean adminMark) {
+        isAdminMark = adminMark;
+    }
+
     public String getSecretNumber() {
         return secretNumber;
     }