xiaofei 1 an în urmă
părinte
comite
fb29d23a3e
26 a modificat fișierele cu 213 adăugiri și 74 ștergeri
  1. 3 2
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkArbitrateController.java
  2. 2 1
      distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkUserGroupController.java
  3. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/ScoreItem.java
  4. 14 5
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/MarkGroupClassProgressDto.java
  5. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkGroup.java
  6. 3 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkArbitrateHistoryMapper.java
  7. 2 0
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkTaskMapper.java
  8. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkUserGroupMapper.java
  9. 2 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkArbitrateHistoryService.java
  10. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkTaskService.java
  11. 1 1
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkUserGroupService.java
  12. 4 9
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkArbitrateHistoryServiceImpl.java
  13. 20 22
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java
  14. 2 2
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java
  15. 4 13
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java
  16. 5 5
      teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserGroupServiceImpl.java
  17. 47 0
      teachcloud-mark/src/main/resources/mapper/MarkArbitrateHistoryMapper.xml
  18. 35 1
      teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml
  19. 2 2
      teachcloud-mark/src/main/resources/mapper/MarkUserClassMapper.xml
  20. 8 0
      teachcloud-mark/src/main/resources/mapper/MarkUserGroupMapper.xml
  21. 3 1
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/enums/JobEnum.java
  22. 29 0
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/ClearTimeoutTaskJob.java
  23. 2 2
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/InitMarkDataJob.java
  24. 2 0
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/JobService.java
  25. 11 0
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java
  26. 8 1
      teachcloud-task/src/main/java/com/qmth/teachcloud/task/start/StartRunning.java

+ 3 - 2
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkArbitrateController.java

@@ -46,10 +46,11 @@ public class MarkArbitrateController {
     public Result list(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId,
                        @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
                        @ApiParam(value = "分组号") @RequestParam(required = false) Integer groupNumber,
-                       @ApiParam(value = "状态") @RequestParam(required = false) String status,
+                       @ApiParam(value = "状态") @RequestParam(required = false) String type,
+                       @ApiParam(value = "班级") @RequestParam(required = false) String className,
                        @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                        @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        IPage<MarkArbitrateDto> markArbitrateDtoIPage = markArbitrateHistoryService.pageArbitrate(examId, paperNumber, groupNumber, status, pageNumber, pageSize);
+        IPage<MarkArbitrateDto> markArbitrateDtoIPage = markArbitrateHistoryService.pageArbitrate(examId, paperNumber, groupNumber, type, className, pageNumber, pageSize);
         return ResultUtil.ok(markArbitrateDtoIPage);
     }
 

+ 2 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/mark/MarkUserGroupController.java

@@ -47,9 +47,10 @@ public class MarkUserGroupController {
                                @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber,
                                @ApiParam(value = "分组号") @RequestParam(required = false) Integer groupNumber,
                                @ApiParam(value = "评卷员") @RequestParam(required = false) String loginName,
+                               @ApiParam(value = "班级") @RequestParam(required = false) String className,
                                @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
                                @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
-        IPage<MarkUserGroupProgressDto> markGroupClassProgressDtoIPage = markUserGroupService.pageGroupUserByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber, loginName, pageNumber, pageSize);
+        IPage<MarkUserGroupProgressDto> markGroupClassProgressDtoIPage = markUserGroupService.pageGroupUserByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber, loginName, className, pageNumber, pageSize);
         return ResultUtil.ok(markGroupClassProgressDtoIPage);
     }
 

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/ScoreItem.java

@@ -8,7 +8,7 @@ public class ScoreItem {
 
     public static final String SPLIT = ":";
 
-    public static final DecimalFormat NUMBER_FORMAT = new DecimalFormat("####.###");
+    public static final DecimalFormat NUMBER_FORMAT = new DecimalFormat("####.##");
 
     private int mainNumber;
 

+ 14 - 5
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/MarkGroupClassProgressDto.java

@@ -10,7 +10,8 @@ public class MarkGroupClassProgressDto {
     private Integer currentCount;
     private Double percent;
     private Integer arbitrateCount;
-    private String groupNumbers;
+    private Integer groupNumber;
+    private String groupQuestions;
 
     public String getClassName() {
         return className;
@@ -76,11 +77,19 @@ public class MarkGroupClassProgressDto {
         this.arbitrateCount = arbitrateCount;
     }
 
-    public String getGroupNumbers() {
-        return groupNumbers;
+    public Integer getGroupNumber() {
+        return groupNumber;
     }
 
-    public void setGroupNumbers(String groupNumbers) {
-        this.groupNumbers = groupNumbers;
+    public void setGroupNumber(Integer groupNumber) {
+        this.groupNumber = groupNumber;
+    }
+
+    public String getGroupQuestions() {
+        return groupQuestions;
+    }
+
+    public void setGroupQuestions(String groupQuestions) {
+        this.groupQuestions = groupQuestions;
     }
 }

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/entity/MarkGroup.java

@@ -287,7 +287,7 @@ public class MarkGroup implements Serializable {
     }
 
     public void setQuestionList(List<MarkQuestion> questionList) {
-        DecimalFormat format = new DecimalFormat("####.###");
+        DecimalFormat format = new DecimalFormat("####.##");
         Set<Integer> mainNumbers = new LinkedHashSet<>();
         Set<String> mainTitles = new LinkedHashSet<>();
         Set<String> questionTitles = new LinkedHashSet<>();

+ 3 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkArbitrateHistoryMapper.java

@@ -19,9 +19,11 @@ import java.util.List;
  */
 public interface MarkArbitrateHistoryMapper extends BaseMapper<MarkArbitrateHistory> {
 
-    IPage<MarkArbitrateDto> pageArbitrate(@Param("page") Page<MarkArbitrateDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("status") String status);
+    IPage<MarkArbitrateDto> pageArbitrate(@Param("page") Page<MarkArbitrateDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("status") String status, @Param("className") String className);
 
     MarkArbitrateHistory getArbitrateWaitingOne(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber);
 
     List<MarkArbitrateHistory> getHistory(@Param("page") Page<MarkArbitrateHistory> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("status") String status, @Param("userId") Long userId);
+
+    Integer waitArbitrateCount(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("status") String status, @Param("className") String className);
 }

+ 2 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkTaskMapper.java

@@ -36,4 +36,6 @@ public interface MarkTaskMapper extends BaseMapper<MarkTask> {
 
 	List<MarkTask> findUnMarkedFilterClass(@Param("page")Page<MarkTask> page,@Param("examId") Long examId, @Param("paperNumber")String paperNumber, @Param("groupNumber")Integer groupNumber,
 			@Param("userId")Long userId);
+
+    List<MarkTask> listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndClassName(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("userId") Long userId, @Param("className") String className);
 }

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/mapper/MarkUserGroupMapper.java

@@ -26,7 +26,7 @@ public interface MarkUserGroupMapper extends BaseMapper<MarkUserGroup> {
 
     List<MarkUser> listGroupUserByExamIdAndPaperNumberAndGroupNumber(@Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("className") String className);
 
-    IPage<MarkUserGroupProgressDto> pageGroupUserByExamIdAndPaperNumberAndGroupNumber(@Param("page") Page<MarkUserGroupProgressDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("loginName") String loginName);
+    IPage<MarkUserGroupProgressDto> pageGroupUserByExamIdAndPaperNumberAndGroupNumber(@Param("page") Page<MarkUserGroupProgressDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("loginName") String loginName, @Param("className") String className);
 
     IPage<MarkQualityDto> pageQuality(@Param("page") Page<MarkQualityDto> page, @Param("examId") Long examId, @Param("paperNumber") String paperNumber, @Param("groupNumber") Integer groupNumber, @Param("loginName") String loginName);
 }

+ 2 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkArbitrateHistoryService.java

@@ -22,7 +22,7 @@ import java.util.List;
  */
 public interface MarkArbitrateHistoryService extends IService<MarkArbitrateHistory> {
 
-    IPage<MarkArbitrateDto> pageArbitrate(Long examId, String paperNumber, Integer groupNumber, String status, Integer pageNumber, Integer pageSize);
+    IPage<MarkArbitrateDto> pageArbitrate(Long examId, String paperNumber, Integer groupNumber, String status, String className, Integer pageNumber, Integer pageSize);
 
     void clearArbitrate(Long arbitrateId);
 
@@ -42,5 +42,5 @@ public interface MarkArbitrateHistoryService extends IService<MarkArbitrateHisto
 
     List<Task> getHistory(Long examId, String paperNumber, Integer groupNumber, Integer pageNumber, Integer pageSize);
 
-    Integer waitArbitrateCount(Long examId, String paperNumber, Integer groupNumber);
+    Integer waitArbitrateCount(Long examId, String paperNumber, Integer groupNumber, String className);
 }

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkTaskService.java

@@ -25,7 +25,7 @@ public interface MarkTaskService extends IService<MarkTask> {
 
     void exportMarker(Long examId, String courseCode, String paperNumber, HttpServletResponse response);
 
-    List<MarkTask> listByExamIdAndPaperNumberAndGroupNumberAndUserId(Long examId, String paperNumber, Integer groupNumber, Long userId);
+    List<MarkTask> listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndClassName(Long examId, String paperNumber, Integer groupNumber, Long userId, String className);
 
     Integer markedCount(List<MarkTask> groupNumberMarkTask);
 

+ 1 - 1
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/MarkUserGroupService.java

@@ -25,7 +25,7 @@ public interface MarkUserGroupService extends IService<MarkUserGroup> {
 
     List<MarkUser> listGroupUserByExamIdAndPaperNumberAndGroupNumberAndClassName(Long examId, String paperNumber, Integer number, String className);
 
-    IPage<MarkUserGroupProgressDto> pageGroupUserByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber, String loginName, Integer pageNumber, Integer pageSize);
+    IPage<MarkUserGroupProgressDto> pageGroupUserByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber, String loginName, String className, Integer pageNumber, Integer pageSize);
 
     void addMarkUserGroup(Long examId, String paperNumber, Integer groupNumber, List<Long> userIds);
 

+ 4 - 9
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkArbitrateHistoryServiceImpl.java

@@ -67,9 +67,9 @@ public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHi
     private LockService lockService;
 
     @Override
-    public IPage<MarkArbitrateDto> pageArbitrate(Long examId, String paperNumber, Integer groupNumber, String status, Integer pageNumber, Integer pageSize) {
+    public IPage<MarkArbitrateDto> pageArbitrate(Long examId, String paperNumber, Integer groupNumber, String status, String className, Integer pageNumber, Integer pageSize) {
         Page<MarkArbitrateDto> page = new Page<>(pageNumber, pageSize);
-        IPage<MarkArbitrateDto> markArbitrateDtoIPage = this.baseMapper.pageArbitrate(page, examId, paperNumber, groupNumber, status);
+        IPage<MarkArbitrateDto> markArbitrateDtoIPage = this.baseMapper.pageArbitrate(page, examId, paperNumber, groupNumber, status, className);
         for (MarkArbitrateDto arbitrateDto : markArbitrateDtoIPage.getRecords()) {
             if (arbitrateDto.getStudentId() != null) {
                 MarkStudent markStudent = markStudentService.getById(arbitrateDto.getStudentId());
@@ -246,13 +246,8 @@ public class MarkArbitrateHistoryServiceImpl extends ServiceImpl<MarkArbitrateHi
     }
 
     @Override
-    public Integer waitArbitrateCount(Long examId, String paperNumber, Integer groupNumber) {
-        QueryWrapper<MarkArbitrateHistory> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(MarkArbitrateHistory::getExamId, examId)
-                .eq(MarkArbitrateHistory::getPaperNumber, paperNumber)
-                .eq(MarkArbitrateHistory::getGroupNumber, groupNumber)
-                .eq(MarkArbitrateHistory::getStatus, MarkArbitrateStatus.WAITING);
-        return this.count(queryWrapper);
+    public Integer waitArbitrateCount(Long examId, String paperNumber, Integer groupNumber, String className) {
+        return this.baseMapper.waitArbitrateCount(examId, paperNumber, groupNumber, MarkArbitrateStatus.WAITING.name(), className);
     }
 
     private void releaseTask(Long taskId) {

+ 20 - 22
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java

@@ -174,7 +174,7 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
         markGroupTotalProgressDto.setUploadCount(markPaper.getUploadCount());
         markGroupTotalProgressDto.setAbsentCount(markPaper.getAbsentCount());
 
-        List<MarkTask> markTaskList = markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, null, null);
+        List<MarkTask> markTaskList = markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndClassName(examId, paperNumber, null, null, null);
         int taskCount = markTaskList.size();
         int totalMarkedCount = markTaskService.markedCount(markTaskList);
         markGroupTotalProgressDto.setPercent(markTaskService.calcPercent(totalMarkedCount, taskCount));
@@ -197,7 +197,7 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
             markGroupProgressDto.setLeftCount(markGroupProgressDto.getTaskCount() - markGroupProgressDto.getMarkedCount());
             markGroupProgressDto.setCurrentCount(markService.applyCurrentCount(markGroup));
             markGroupProgressDto.setPercent(markTaskService.calcPercent(markGroupProgressDto.getMarkedCount(), markGroupProgressDto.getTaskCount()));
-            markGroupProgressDto.setArbitrateCount(markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, markGroup.getNumber()));
+            markGroupProgressDto.setArbitrateCount(markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, markGroup.getNumber(), null));
             markGroupProgressDtoList.add(markGroupProgressDto);
         }
         markGroupSummaryProgressDto.setGroupInfo(markGroupProgressDtoList);
@@ -211,36 +211,34 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
             Page<MarkGroupClassProgressDto> page = new Page<>(pageNumber, pageSize);
             IPage<MarkGroupClassProgressDto> markGroupClassProgressDtoIPage = markUserClassService.pageClassByExamIdAndPaperNumber(page, examId, paperNumber);
             for (MarkGroupClassProgressDto markGroupClassProgressDto : markGroupClassProgressDtoIPage.getRecords()) {
+                Integer groupNumber = markGroupClassProgressDto.getGroupNumber();
                 List<MarkTask> totalMarkTaskList = new ArrayList<>();
                 List<MarkUser> totalMarkUserList = new ArrayList<>();
                 int count = 0;
-                int classArbitrateCount = 0;
-                for (String s : markGroupClassProgressDto.getGroupNumbers().split(",")) {
-                    Integer groupNumber = Integer.parseInt(s);
-                    totalMarkTaskList.addAll(markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, groupNumber, null));
-                    totalMarkUserList.addAll(markUserGroupService.listGroupUserByExamIdAndPaperNumberAndGroupNumberAndClassName(examId, paperNumber, groupNumber, markGroupClassProgressDto.getClassName()));
-
-                    MarkGroup markGroup = markGroupService.getByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber);
-                    List<MarkUser> markUserList = markUserClassService.listClassMarkerByExamIdAndPaperNumberAndGroupNumberAndClassName(examId, paperNumber, groupNumber, markGroupClassProgressDto.getClassName());
-                    for (MarkUser markUser : markUserList) {
-                        MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, groupNumber, markUser.getUserId());
-                        if (markUserGroup != null) {
-                            int markerCount = markService.applyCurrentCount(markGroup);
-                            count += markerCount;
-                        }
+                totalMarkTaskList.addAll(markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndClassName(examId, paperNumber, groupNumber, null, markGroupClassProgressDto.getClassName()));
+                totalMarkUserList.addAll(markUserGroupService.listGroupUserByExamIdAndPaperNumberAndGroupNumberAndClassName(examId, paperNumber, groupNumber, markGroupClassProgressDto.getClassName()));
+
+                MarkGroup markGroup = markGroupService.getByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber);
+                markGroup.setQuestionList(markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, groupNumber, false));
+                List<MarkUser> markUserList = markUserClassService.listClassMarkerByExamIdAndPaperNumberAndGroupNumberAndClassName(examId, paperNumber, groupNumber, markGroupClassProgressDto.getClassName());
+                for (MarkUser markUser : markUserList) {
+                    MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, groupNumber, markUser.getUserId());
+                    if (markUserGroup != null) {
+                        int markerCount = markService.applyCurrentCount(markGroup);
+                        count += markerCount;
                     }
-
-                    // 待仲裁数量
-                    int arbitrateCount = markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, groupNumber);
-                    classArbitrateCount += arbitrateCount;
                 }
+
+                // 待仲裁数量
+                int arbitrateCount = markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, groupNumber, markGroupClassProgressDto.getClassName());
+                markGroupClassProgressDto.setGroupQuestions(markGroup.getGroupQuestions());
                 markGroupClassProgressDto.setMarkerCount(totalMarkUserList.size());
                 markGroupClassProgressDto.setTaskCount(totalMarkTaskList.size());
                 markGroupClassProgressDto.setMarkedCount(markTaskService.markedCount(totalMarkTaskList));
                 markGroupClassProgressDto.setLeftCount(markGroupClassProgressDto.getTaskCount() - markGroupClassProgressDto.getMarkedCount());
                 markGroupClassProgressDto.setCurrentCount(count);
                 markGroupClassProgressDto.setPercent(markTaskService.calcPercent(markGroupClassProgressDto.getMarkedCount(), markGroupClassProgressDto.getTaskCount()));
-                markGroupClassProgressDto.setArbitrateCount(classArbitrateCount);
+                markGroupClassProgressDto.setArbitrateCount(arbitrateCount);
             }
             return markGroupClassProgressDtoIPage;
         }
@@ -291,7 +289,7 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
             if (markGroupDto.getScorePolicy() == null) {
                 throw ExceptionResultEnum.ERROR.exception("开启双评,合分规则必填");
             }
-            String format = new DecimalFormat("####.###").format(markGroupDto.getDoubleRate() / 100);
+            String format = new DecimalFormat("####.##").format(markGroupDto.getDoubleRate() / 100);
             markGroup.setDoubleRate(Double.parseDouble(format));
             markGroup.setArbitrateThreshold(markGroupDto.getArbitrateThreshold());
             markGroup.setScorePolicy(markGroupDto.getScorePolicy());

+ 2 - 2
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkServiceImpl.java

@@ -216,9 +216,9 @@ public class MarkServiceImpl implements MarkService {
 
     @Override
     public void updateQuality(MarkUserGroup markUserGroup) {
-        List<MarkTask> list = markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndUserId(
+        List<MarkTask> list = markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndClassName(
                 markUserGroup.getExamId(), markUserGroup.getPaperNumber(), markUserGroup.getGroupNumber(),
-                markUserGroup.getUserId());
+                markUserGroup.getUserId(), null);
         int finishCount = 0;
         int validCount = 0;
         double sumScore = 0;

+ 4 - 13
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java

@@ -63,7 +63,7 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
             record.setStatus(markPaper == null ? null : markPaper.getStatus().name());
             record.setStatusDisplay(markPaper == null ? null : markPaper.getStatus().getName());
 
-            String percent = record.getTotalCount() > 0 ? new DecimalFormat("####.###").format(record.getMarkedCount() * 100.0 / record.getTotalCount()) : "0";
+            String percent = record.getTotalCount() > 0 ? new DecimalFormat("####.##").format(record.getMarkedCount() * 100.0 / record.getTotalCount()) : "0";
             record.setPercent(percent);
         }
         return markManageDtoIPage;
@@ -86,17 +86,8 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
     }
 
     @Override
-    public List<MarkTask> listByExamIdAndPaperNumberAndGroupNumberAndUserId(Long examId, String paperNumber, Integer groupNumber, Long userId) {
-        QueryWrapper<MarkTask> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(MarkTask::getExamId, examId)
-                .eq(MarkTask::getPaperNumber, paperNumber);
-        if (groupNumber != null) {
-            queryWrapper.lambda().eq(MarkTask::getGroupNumber, groupNumber);
-        }
-        if (userId != null) {
-            queryWrapper.lambda().eq(MarkTask::getUserId, userId);
-        }
-        return this.list(queryWrapper);
+    public List<MarkTask> listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndClassName(Long examId, String paperNumber, Integer groupNumber, Long userId, String className) {
+        return this.baseMapper.listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndClassName(examId, paperNumber, groupNumber, userId, className);
     }
 
     @Override
@@ -110,7 +101,7 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
 
     @Override
     public Double calcPercent(Integer markedCount, Integer taskCount) {
-        String percent = taskCount > 0 ? new DecimalFormat("####.###").format(markedCount * 100.0 / taskCount) : "0";
+        String percent = taskCount > 0 ? new DecimalFormat("####.##").format(markedCount * 100.0 / taskCount) : "0";
         return Double.parseDouble(percent);
     }
 

+ 5 - 5
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkUserGroupServiceImpl.java

@@ -92,12 +92,12 @@ public class MarkUserGroupServiceImpl extends ServiceImpl<MarkUserGroupMapper, M
     }
 
     @Override
-    public IPage<MarkUserGroupProgressDto> pageGroupUserByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber, String loginName, Integer pageNumber, Integer pageSize) {
+    public IPage<MarkUserGroupProgressDto> pageGroupUserByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber, String loginName, String className, Integer pageNumber, Integer pageSize) {
         Page<MarkUserGroupProgressDto> page = new Page<>(pageNumber, pageSize);
-        IPage<MarkUserGroupProgressDto> markUserGroupProgressDtoIPage = this.baseMapper.pageGroupUserByExamIdAndPaperNumberAndGroupNumber(page, examId, paperNumber, groupNumber, loginName);
+        IPage<MarkUserGroupProgressDto> markUserGroupProgressDtoIPage = this.baseMapper.pageGroupUserByExamIdAndPaperNumberAndGroupNumber(page, examId, paperNumber, groupNumber, loginName, className);
         for (MarkUserGroupProgressDto record : markUserGroupProgressDtoIPage.getRecords()) {
             record.setGroupQuestions(markQuestionService.assembleGroupQuestionsByExamIdAndPaperNumberAndNumber(examId, paperNumber, record.getGroupNumber()));
-            List<MarkTask> markTaskList = markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndUserId(examId, paperNumber, record.getGroupNumber(), record.getUserId());
+            List<MarkTask> markTaskList = markTaskService.listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndClassName(examId, paperNumber, record.getGroupNumber(), record.getUserId(), null);
             record.setTaskCount(markTaskList.size());
             record.setMarkedCount(markTaskService.markedCount(markTaskList));
             MarkGroup markGroup = markGroupService.getByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, record.getGroupNumber());
@@ -211,7 +211,7 @@ public class MarkUserGroupServiceImpl extends ServiceImpl<MarkUserGroupMapper, M
                 qualityDto.setLoginName(sysUser.getLoginName());
                 qualityDto.setName(sysUser.getRealName());
                 qualityDto.setOrgName(sysUser.getOrgName());
-                String percent = qualityDto.getFinishCount() > 0 ? new DecimalFormat("####.###").format((qualityDto.getFinishCount() - qualityDto.getHeaderFinishCount()) * 100.0 / qualityDto.getFinishCount()) : "0";
+                String percent = qualityDto.getFinishCount() > 0 ? new DecimalFormat("####.##").format((qualityDto.getFinishCount() - qualityDto.getHeaderFinishCount()) * 100.0 / qualityDto.getFinishCount()) : "0";
                 qualityDto.setAdoptionRate(Double.parseDouble(percent));
                 String avgScore = qualityDto.getAvgScore() != null && qualityDto.getAvgScore() > 0 ? new DecimalFormat("####.##").format(qualityDto.getAvgScore()) : "0";
                 qualityDto.setAvgScore(Double.parseDouble(avgScore));
@@ -272,7 +272,7 @@ public class MarkUserGroupServiceImpl extends ServiceImpl<MarkUserGroupMapper, M
             SysUser sysUser = sysUserService.getById(markUserGroup.getUserId());
             markQualityChartDto.setLoginName(sysUser.getLoginName());
             markQualityChartDto.setName(sysUser.getRealName());
-            markQualityChartDto.setTotalAvgScore(Double.parseDouble(new DecimalFormat("####.###").format(totalAvgScore)));
+            markQualityChartDto.setTotalAvgScore(Double.parseDouble(new DecimalFormat("####.##").format(totalAvgScore)));
             markQualityChartDto.setAvgScore(markUserGroup.getAvgScore());
             markQualityChartDto.setMaxScore(markUserGroup.getMaxScore());
             markQualityChartDto.setMinScore(markUserGroup.getMinScore());

+ 47 - 0
teachcloud-mark/src/main/resources/mapper/MarkArbitrateHistoryMapper.xml

@@ -43,6 +43,24 @@
             <if test="status != null and status != ''">
                 AND status = #{status}
             </if>
+        <if test="className != null and className != ''">
+            AND EXISTS( SELECT
+                        1
+                    FROM
+                        mark_user_class muc
+                    WHERE
+                        mah.exam_id = muc.exam_id
+                        AND mah.paper_number = muc.paper_number
+                        AND mah.group_number = muc.group_number
+                        AND muc.class_name = #{className}
+                        AND EXISTS( SELECT
+                                1
+                            FROM
+                                mark_student ms
+                            WHERE
+                                mah.student_id = ms.id
+                                AND muc.class_name = ms.class_name))
+        </if>
     </select>
     <select id="getArbitrateWaitingOne" resultType="com.qmth.teachcloud.mark.entity.MarkArbitrateHistory">
         SELECT
@@ -67,5 +85,34 @@
           AND t.status = #{status}
         ORDER BY t.update_time DESC
     </select>
+    <select id="waitArbitrateCount" resultType="java.lang.Integer">
+        SELECT
+            count(1)
+        FROM
+            mark_arbitrate_history mah
+        WHERE
+            mah.exam_id = #{examId}
+          AND mah.paper_number = #{paperNumber}
+          AND mah.group_number = #{groupNumber}
+          AND mah.status = #{status}
+          <if test="className != null and className != ''">
+          AND EXISTS( SELECT
+                          1
+                      FROM
+                          mark_user_class muc
+                      WHERE
+                          mah.exam_id = muc.exam_id
+                        AND mah.paper_number = muc.paper_number
+                        AND mah.group_number = muc.group_number
+                        AND muc.class_name = #{className}
+                        AND EXISTS( SELECT
+                                        1
+                                    FROM
+                                        mark_student ms
+                                    WHERE
+                                        mah.student_id = ms.id
+                                      AND muc.class_name = ms.class_name))
+          </if>
+    </select>
 
 </mapper>

+ 35 - 1
teachcloud-mark/src/main/resources/mapper/MarkTaskMapper.xml

@@ -163,7 +163,7 @@
 		)
         </where>
     </select>
-    
+
     <select id="findUnMarkedFilterClass" resultType="com.qmth.teachcloud.mark.entity.MarkTask">
         SELECT
         	*
@@ -203,4 +203,38 @@
 		)
         </where>
     </select>
+    <select id="listByExamIdAndPaperNumberAndGroupNumberAndUserIdAndClassName"
+            resultType="com.qmth.teachcloud.mark.entity.MarkTask">
+        SELECT
+            *
+        FROM
+            mark_task mt
+        WHERE
+            mt.exam_id = #{examId}
+          AND mt.paper_number = #{paperNumber}
+          <if test="groupNumber != null">
+              AND mt.group_number = #{groupNumber}
+          </if>
+          <if test="userId != null">
+              AND mt.user_id = #{userId}
+          </if>
+          <if test="className != null and className != ''">
+              AND EXISTS( SELECT
+                              1
+                          FROM
+                              mark_user_class muc
+                          WHERE
+                              mt.exam_id = muc.exam_id
+                            AND mt.paper_number = muc.paper_number
+                            AND mt.group_number = muc.group_number
+                            AND muc.class_name = #{className}
+                            AND EXISTS( SELECT
+                              1
+                            FROM
+                              mark_student ms
+                            WHERE
+                              mt.student_id = ms.id
+                                AND muc.class_name = ms.class_name))
+          </if>
+    </select>
 </mapper>

+ 2 - 2
teachcloud-mark/src/main/resources/mapper/MarkUserClassMapper.xml

@@ -34,13 +34,13 @@
             resultType="com.qmth.teachcloud.mark.dto.mark.manage.MarkGroupClassProgressDto">
         SELECT
             class_name className,
-            GROUP_CONCAT(group_number) groupNumbers
+            group_number groupNumber
         FROM
             mark_user_class
         WHERE
             exam_id = #{examId}
           AND paper_number = #{paperNumber}
-        GROUP BY class_name
+        ORDER BY group_number, class_name
     </select>
 
 </mapper>

+ 8 - 0
teachcloud-mark/src/main/resources/mapper/MarkUserGroupMapper.xml

@@ -96,6 +96,14 @@
             <if test="loginName != null and loginName != ''">
                 AND su.login_name like concat('%',#{loginName},'%')
             </if>
+            <if test="className != null and className != ''">
+                AND EXISTS (select 1 from mark_user_class muc
+                    where mug.exam_id = muc.exam_id
+                        and mug.paper_number = muc.paper_number
+                        and mug.group_number = muc.group_number
+                        and mug.user_id = muc.user_id
+                        and muc.class_name = #{className})
+            </if>
         </where>
     </select>
     <select id="pageQuality" resultType="com.qmth.teachcloud.mark.dto.mark.manage.MarkQualityDto">

+ 3 - 1
teachcloud-task/src/main/java/com/qmth/teachcloud/task/enums/JobEnum.java

@@ -39,7 +39,9 @@ public enum JobEnum {
     BUILD_MARK_TASK("创建评卷任务"),
     BUILD_MARK_TASK_GROUP("创建评卷任务任务组"),
     INIT_MARK_DATA("初始化阅卷数据"),
-    INIT_MARK_DATA_GROUP("初始化阅卷数据任务组");
+    INIT_MARK_DATA_GROUP("初始化阅卷数据任务组"),
+    CLEAR_TIMEOUT_TASK("清空过期任务"),
+    CLEAR_TIMEOUT_TASK_GROUP("清空过期任务任务组");
 
     private String title;
 

+ 29 - 0
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/ClearTimeoutTaskJob.java

@@ -0,0 +1,29 @@
+package com.qmth.teachcloud.task.job;
+
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.task.job.service.JobService;
+import org.quartz.JobExecutionContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import javax.annotation.Resource;
+
+/**
+ * 初始化阅卷数据(课程、考生、卡格式、解析题卡结构)
+ */
+public class ClearTimeoutTaskJob extends QuartzJobBean {
+    private final static Logger log = LoggerFactory.getLogger(ClearTimeoutTaskJob.class);
+
+    @Resource
+    JobService jobService;
+
+    @Override
+    protected void executeInternal(JobExecutionContext jobExecutionContext) {
+        try {
+            jobService.initMarkData();
+        } catch (Exception e) {
+            log.error(SystemConstant.LOG_ERROR, e);
+        }
+    }
+}

+ 2 - 2
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/InitMarkDataJob.java

@@ -10,7 +10,7 @@ import org.springframework.scheduling.quartz.QuartzJobBean;
 import javax.annotation.Resource;
 
 /**
- * 初始化阅卷数据(课程、考生、卡格式、解析题卡结构)
+ * 清空过期任务
  */
 public class InitMarkDataJob extends QuartzJobBean {
     private final static Logger log = LoggerFactory.getLogger(InitMarkDataJob.class);
@@ -21,7 +21,7 @@ public class InitMarkDataJob extends QuartzJobBean {
     @Override
     protected void executeInternal(JobExecutionContext jobExecutionContext) {
         try {
-            jobService.initMarkData();
+            jobService.clearTimeoutTask();
         } catch (Exception e) {
             log.error(SystemConstant.LOG_ERROR, e);
         }

+ 2 - 0
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/JobService.java

@@ -56,4 +56,6 @@ public interface JobService {
      * 初始化阅卷数据
      */
     void initMarkData();
+
+    void clearTimeoutTask();
 }

+ 11 - 0
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java

@@ -20,6 +20,7 @@ import com.qmth.teachcloud.mark.service.MarkGroupService;
 import com.qmth.teachcloud.mark.service.MarkPaperService;
 import com.qmth.teachcloud.mark.service.MarkService;
 import com.qmth.teachcloud.mark.service.MarkUserGroupService;
+import com.qmth.teachcloud.mark.utils.TaskLockUtil;
 import com.qmth.teachcloud.task.job.service.JobService;
 import com.qmth.teachcloud.task.service.PrintFinishService;
 import org.slf4j.Logger;
@@ -166,6 +167,16 @@ public class JobServiceImpl implements JobService {
         }
     }
 
+    @Override
+    public void clearTimeoutTask() {
+        try {
+            long timeoutMinute = 60l;
+            TaskLockUtil.clearTimeoutTask(timeoutMinute * 60 * 1000);
+        } catch (Exception e) {
+            log.error("CronCleanTask error", e);
+        }
+    }
+
     /**
      * 组装job
      *

+ 8 - 1
teachcloud-task/src/main/java/com/qmth/teachcloud/task/start/StartRunning.java

@@ -96,7 +96,6 @@ public class StartRunning implements CommandLineRunner {
         quartzService.addJob(SubjectCalculateJob.class, JobEnum.UPDATE_MARKER_QUALITY.name(), JobEnum.UPDATE_MARKER_QUALITY_GROUP.name(), "0 */1 * * * ?", qualityJobMap);
         log.info("增加更新评卷员质量监控指标定时任务 end");
 
-
 //        // 每1分钟一次
         log.info("增加评卷任务生成定时任务 start");
         Map buildMarkTaskJobMap = new HashMap();
@@ -113,6 +112,14 @@ public class StartRunning implements CommandLineRunner {
         quartzService.addJob(InitMarkDataJob.class, JobEnum.INIT_MARK_DATA.name(), JobEnum.INIT_MARK_DATA_GROUP.name(), "0 */5 * * * ?", initMarkDataJobMap);
         log.info("增加初始化阅卷数据定时任务 end");
 
+        // 每10分钟一次
+        log.info("增加清空过期任务定时任务 start");
+        Map clearTimeoutTaskJobMap = new HashMap();
+        clearTimeoutTaskJobMap.computeIfAbsent("name", v -> InitMarkDataJob.class.getName());
+        quartzService.deleteJob(JobEnum.CLEAR_TIMEOUT_TASK.name(), JobEnum.CLEAR_TIMEOUT_TASK_GROUP.name());
+        quartzService.addJob(InitMarkDataJob.class, JobEnum.CLEAR_TIMEOUT_TASK.name(), JobEnum.CLEAR_TIMEOUT_TASK_GROUP.name(), "0 0/10 6-23 * * ?", clearTimeoutTaskJobMap);
+        log.info("增加清空过期任务定时任务 end");
+
         log.info("服务器启动时执行 end");
     }
 }