Sfoglia il codice sorgente

3.4.1 评卷管理列表,增加任务数,正在阅卷任务数,问题卷数字段

xiaofei 10 mesi fa
parent
commit
b1154e47d9

+ 23 - 0
distributed-print-business/src/main/resources/db/log/xf.sql

@@ -26,3 +26,26 @@ INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1185', '打回', '/api/admin/mark/task/reject', 'URL', '917', '25', 'AUTH', '1', '1', '1');
 INSERT INTO `sys_privilege` (`id`, `name`, `url`, `type`, `parent_id`, `sequence`, `property`, `enable`, `default_auth`, `front_display`) VALUES ('1186', '打回历史列表查询', '/api/admin/mark/reject/list', 'URL', '917', '26', 'AUTH', '1', '1', '1');
 UPDATE `sys_privilege` SET `related` = '928,929,932,933,934,935,936,937,938,939,940,941,942,943,964,965,966,967,968,1008,1183,1186' WHERE (`id` = '944');
+
+CREATE TABLE `mark_reject_history`  (
+      `id` bigint NOT NULL,
+      `exam_id` bigint NULL DEFAULT NULL COMMENT '考试ID',
+      `paper_number` varchar(45) NULL DEFAULT NULL COMMENT '试卷编号',
+      `group_number` int NULL DEFAULT NULL COMMENT '分组号',
+      `task_id` bigint NULL DEFAULT NULL COMMENT '任务ID',
+      `student_id` bigint NULL DEFAULT NULL COMMENT '考生ID',
+      `basic_student_id` bigint NULL DEFAULT NULL COMMENT 'basic_exam_student表id',
+      `student_code` varchar(255) NULL DEFAULT NULL COMMENT '学号',
+      `secret_number` varchar(255) NULL DEFAULT NULL COMMENT '任务密号',
+      `user_id` int NULL DEFAULT NULL COMMENT '评卷用户ID',
+      `reject_reason` varchar(255) NULL DEFAULT NULL COMMENT '打回原因',
+      `reject_score_list` varchar(255) NULL DEFAULT NULL COMMENT '打回后分数列表',
+      `marker_score_list` varchar(255) NULL DEFAULT NULL COMMENT '打回前分数列表',
+      `marker_score` double NULL DEFAULT NULL COMMENT '总分',
+      `marker_time` bigint NULL DEFAULT NULL COMMENT '评卷时间',
+      `reject_user_id` bigint NULL DEFAULT NULL COMMENT '打回用户ID',
+      `reject_time` bigint NOT NULL COMMENT '打回时间',
+      PRIMARY KEY (`id`) USING BTREE,
+      INDEX `index2`(`task_id` ASC) USING BTREE,
+      INDEX `index1`(`exam_id` ASC, `paper_number` ASC, `group_number` ASC) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;

+ 27 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/dto/mark/manage/MarkManageDto.java

@@ -16,12 +16,23 @@ public class MarkManageDto {
     private String openCollege;
     private String paperNumber;
     private String paperType;
+    /**
+     * 任务数
+     */
     private Integer totalCount;
     private Integer markedCount;
     /**
      * 识别缺考未确认数量
      */
     private Integer omrAbsentCount;
+    /**
+     * 问题卷数
+     */
+    private Integer problemCount;
+    /**
+     * 正在评卷数
+     */
+    private Integer currentCount;
     private String percent;
     private MarkPaperStatus status;
     private String statusDisplay;
@@ -98,6 +109,22 @@ public class MarkManageDto {
         this.omrAbsentCount = omrAbsentCount;
     }
 
+    public Integer getProblemCount() {
+        return problemCount;
+    }
+
+    public void setProblemCount(Integer problemCount) {
+        this.problemCount = problemCount;
+    }
+
+    public Integer getCurrentCount() {
+        return currentCount;
+    }
+
+    public void setCurrentCount(Integer currentCount) {
+        this.currentCount = currentCount;
+    }
+
     public String getPercent() {
         return percent;
     }

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

@@ -52,4 +52,6 @@ public interface MarkGroupService extends IService<MarkGroup> {
     long countByExamIdAndPaperNumber(Long examId, String paperNumber);
 
     void updateTotalScore(Long examId, String paperNumber, Integer groupNumber, Double totalScore);
+
+    Integer countCurrentCountByExamIdAndPaperNumber(Long examId, String paperNumber);
 }

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

@@ -29,4 +29,6 @@ public interface MarkProblemHistoryService extends IService<MarkProblemHistory>
     void deleteByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber);
 
 	MarkProblemHistory findByTaskIdAndStatus(Long taskId, MarkProblemStatus status);
+
+    Integer countByExamIdAndPaperNumberAndStatus(Long examId, String paperNumber, MarkProblemStatus status);
 }

+ 14 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkGroupServiceImpl.java

@@ -27,6 +27,7 @@ import com.qmth.teachcloud.mark.enums.ScorePolicy;
 import com.qmth.teachcloud.mark.lock.LockService;
 import com.qmth.teachcloud.mark.mapper.MarkGroupMapper;
 import com.qmth.teachcloud.mark.service.*;
+import com.qmth.teachcloud.mark.utils.BigDecimalUtils;
 import com.qmth.teachcloud.mark.utils.Calculator;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -34,6 +35,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -543,4 +545,16 @@ public class MarkGroupServiceImpl extends MppServiceImpl<MarkGroupMapper, MarkGr
                 .eq(MarkGroup::getNumber, groupNumber);
         this.update(markGroupUpdateWrapper);
     }
+
+    @Override
+    public Integer countCurrentCountByExamIdAndPaperNumber(Long examId, String paperNumber) {
+        int total = 0;
+        List<MarkGroup> markGroupList = this.listGroupByExamIdAndPaperNumber(examId, paperNumber);
+        if (CollectionUtils.isNotEmpty(markGroupList)) {
+            for (MarkGroup markGroup : markGroupList) {
+                total += markService.applyCurrentCount(markGroup);
+            }
+        }
+        return total;
+    }
 }

+ 108 - 99
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkProblemHistoryServiceImpl.java

@@ -41,111 +41,120 @@ import com.qmth.teachcloud.mark.service.MarkTaskService;
  */
 @Service
 public class MarkProblemHistoryServiceImpl extends ServiceImpl<MarkProblemHistoryMapper, MarkProblemHistory>
-		implements MarkProblemHistoryService {
+        implements MarkProblemHistoryService {
 
-	@Resource
-	private MarkStudentService markStudentService;
-	@Resource
-	private MarkQuestionService markQuestionService;
-	@Resource
-	private SysUserService sysUserService;
-	@Resource
-	private MarkTaskService markTaskService;
-	@Resource
-	private TeachcloudCommonService teachcloudCommonService;
-	@Resource
-	private MarkService markService;
-	@Resource
-	private LockService lockService;
+    @Resource
+    private MarkStudentService markStudentService;
+    @Resource
+    private MarkQuestionService markQuestionService;
+    @Resource
+    private SysUserService sysUserService;
+    @Resource
+    private MarkTaskService markTaskService;
+    @Resource
+    private TeachcloudCommonService teachcloudCommonService;
+    @Resource
+    private MarkService markService;
+    @Resource
+    private LockService lockService;
 
-	@Override
-	public IPage<MarkProblemDto> pageProblem(Long examId, String paperNumber, Integer groupNumber, String problemType,
-			String status, String secretNumber, Integer pageNumber, Integer pageSize) {
-		Page<MarkProblemDto> page = new Page<>(pageNumber, pageSize);
-		IPage<MarkProblemDto> markProblemDtoIPage = this.baseMapper.pageProblem(page, examId, paperNumber, groupNumber,
-				problemType, status, secretNumber);
-		for (MarkProblemDto problemDto : markProblemDtoIPage.getRecords()) {
-			MarkStudentVo markStudent = markStudentService.getMarkStudentVoByStudentId(problemDto.getStudentId());
-			problemDto.setStudentName(markStudent.getStudentName());
-			problemDto.setStudentCode(markStudent.getStudentCode());
-			problemDto.setSheetUrls(teachcloudCommonService.filePreview(markStudent.getSheetPathList()));
-			problemDto.setProblemTypeName(problemDto.getType().getDesc());
-			problemDto.setStatusName(problemDto.getStatus().getName());
-			problemDto.setGroupQuestions(markQuestionService
-					.assembleGroupQuestionsByExamIdAndPaperNumberAndNumber(examId, paperNumber, problemDto.getGroupNumber()));
-			if (problemDto.getUserId() != null) {
-				SysUser sysUser = sysUserService.getById(problemDto.getUserId());
-				if (sysUser != null) {
-					problemDto.setUserLoginName(sysUser.getLoginName());
-					problemDto.setUserName(sysUser.getRealName());
-				}
-			}
-			if (problemDto.getUpdateUserId() != null) {
-				SysUser sysUser = sysUserService.getById(problemDto.getUpdateUserId());
-				if (sysUser != null) {
-					problemDto.setUpdateUserLoginName(sysUser.getLoginName());
-					problemDto.setUpdateUserName(sysUser.getRealName());
-				}
-			}
-		}
-		return markProblemDtoIPage;
-	}
+    @Override
+    public IPage<MarkProblemDto> pageProblem(Long examId, String paperNumber, Integer groupNumber, String problemType,
+                                             String status, String secretNumber, Integer pageNumber, Integer pageSize) {
+        Page<MarkProblemDto> page = new Page<>(pageNumber, pageSize);
+        IPage<MarkProblemDto> markProblemDtoIPage = this.baseMapper.pageProblem(page, examId, paperNumber, groupNumber,
+                problemType, status, secretNumber);
+        for (MarkProblemDto problemDto : markProblemDtoIPage.getRecords()) {
+            MarkStudentVo markStudent = markStudentService.getMarkStudentVoByStudentId(problemDto.getStudentId());
+            problemDto.setStudentName(markStudent.getStudentName());
+            problemDto.setStudentCode(markStudent.getStudentCode());
+            problemDto.setSheetUrls(teachcloudCommonService.filePreview(markStudent.getSheetPathList()));
+            problemDto.setProblemTypeName(problemDto.getType().getDesc());
+            problemDto.setStatusName(problemDto.getStatus().getName());
+            problemDto.setGroupQuestions(markQuestionService
+                    .assembleGroupQuestionsByExamIdAndPaperNumberAndNumber(examId, paperNumber, problemDto.getGroupNumber()));
+            if (problemDto.getUserId() != null) {
+                SysUser sysUser = sysUserService.getById(problemDto.getUserId());
+                if (sysUser != null) {
+                    problemDto.setUserLoginName(sysUser.getLoginName());
+                    problemDto.setUserName(sysUser.getRealName());
+                }
+            }
+            if (problemDto.getUpdateUserId() != null) {
+                SysUser sysUser = sysUserService.getById(problemDto.getUpdateUserId());
+                if (sysUser != null) {
+                    problemDto.setUpdateUserLoginName(sysUser.getLoginName());
+                    problemDto.setUpdateUserName(sysUser.getRealName());
+                }
+            }
+        }
+        return markProblemDtoIPage;
+    }
 
-	@Override
-	public void resetProblem(List<Long> ids) {
-		SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-		for (Long id : ids) {
-			MarkProblemHistory markProblemHistory = this.getById(id);
-			MarkTask markTask = markTaskService.getById(markProblemHistory.getTaskId());
-			if (markTask != null) {
-				try {
-					lockService.watch(LockType.EXAM_SUBJECT, markTask.getExamId(), markTask.getPaperNumber());
-					lockService.watch(LockType.GROUP, markTask.getExamId(), markTask.getPaperNumber(),
-							markTask.getGroupNumber());
-					if (markTask.getStatus().equals(MarkTaskStatus.PROBLEM)) {
-						markService.rejectMarkTask(markProblemHistory, markTask, sysUser.getId());
-					}
-				} catch (Exception e) {
-					log.error("问题卷打回失败", e);
-				} finally {
-					lockService.unwatch(LockType.GROUP, markTask.getExamId(), markTask.getPaperNumber(),
-							markTask.getGroupNumber());
-					lockService.unwatch(LockType.EXAM_SUBJECT, markTask.getExamId(), markTask.getPaperNumber());
-				}
-			}
-		}
+    @Override
+    public void resetProblem(List<Long> ids) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        for (Long id : ids) {
+            MarkProblemHistory markProblemHistory = this.getById(id);
+            MarkTask markTask = markTaskService.getById(markProblemHistory.getTaskId());
+            if (markTask != null) {
+                try {
+                    lockService.watch(LockType.EXAM_SUBJECT, markTask.getExamId(), markTask.getPaperNumber());
+                    lockService.watch(LockType.GROUP, markTask.getExamId(), markTask.getPaperNumber(),
+                            markTask.getGroupNumber());
+                    if (markTask.getStatus().equals(MarkTaskStatus.PROBLEM)) {
+                        markService.rejectMarkTask(markProblemHistory, markTask, sysUser.getId());
+                    }
+                } catch (Exception e) {
+                    log.error("问题卷打回失败", e);
+                } finally {
+                    lockService.unwatch(LockType.GROUP, markTask.getExamId(), markTask.getPaperNumber(),
+                            markTask.getGroupNumber());
+                    lockService.unwatch(LockType.EXAM_SUBJECT, markTask.getExamId(), markTask.getPaperNumber());
+                }
+            }
+        }
 
-	}
+    }
 
-	@Override
-	public void resetByMarkProblemId(Long id, MarkProblemStatus waiting, Long userId, MarkProblemStatus back, Long now) {
-		UpdateWrapper<MarkProblemHistory> updateWrapper = new UpdateWrapper<>();
-		updateWrapper.lambda().set(MarkProblemHistory::getUpdateUserId, userId).set(MarkProblemHistory::getStatus, back)
-				.set(MarkProblemHistory::getUpdateTime, now).eq(MarkProblemHistory::getId, id)
-				.eq(MarkProblemHistory::getStatus, waiting);
-		this.update(updateWrapper);
-	}
+    @Override
+    public void resetByMarkProblemId(Long id, MarkProblemStatus waiting, Long userId, MarkProblemStatus back, Long now) {
+        UpdateWrapper<MarkProblemHistory> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().set(MarkProblemHistory::getUpdateUserId, userId).set(MarkProblemHistory::getStatus, back)
+                .set(MarkProblemHistory::getUpdateTime, now).eq(MarkProblemHistory::getId, id)
+                .eq(MarkProblemHistory::getStatus, waiting);
+        this.update(updateWrapper);
+    }
 
-	@Override
-	public void deleteByStudentId(Long studentId) {
-		UpdateWrapper<MarkProblemHistory> updateWrapper = new UpdateWrapper<>();
-		updateWrapper.lambda().eq(MarkProblemHistory::getStudentId, studentId);
-		this.remove(updateWrapper);
-	}
+    @Override
+    public void deleteByStudentId(Long studentId) {
+        UpdateWrapper<MarkProblemHistory> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().eq(MarkProblemHistory::getStudentId, studentId);
+        this.remove(updateWrapper);
+    }
 
-	@Override
-	public void deleteByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber) {
-		UpdateWrapper<MarkProblemHistory> updateWrapper = new UpdateWrapper<>();
-		updateWrapper.lambda().eq(MarkProblemHistory::getExamId, examId)
-				.eq(MarkProblemHistory::getPaperNumber, paperNumber)
-				.eq(MarkProblemHistory::getGroupNumber, groupNumber);
-		this.remove(updateWrapper);
-	}
+    @Override
+    public void deleteByExamIdAndPaperNumberAndGroupNumber(Long examId, String paperNumber, Integer groupNumber) {
+        UpdateWrapper<MarkProblemHistory> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.lambda().eq(MarkProblemHistory::getExamId, examId)
+                .eq(MarkProblemHistory::getPaperNumber, paperNumber)
+                .eq(MarkProblemHistory::getGroupNumber, groupNumber);
+        this.remove(updateWrapper);
+    }
 
-	@Override
-	public MarkProblemHistory findByTaskIdAndStatus(Long taskId, MarkProblemStatus status) {
-		QueryWrapper<MarkProblemHistory> queryWrapper = new QueryWrapper<>();
-		queryWrapper.lambda().eq(MarkProblemHistory::getTaskId, taskId).eq(MarkProblemHistory::getStatus, status);
-		return this.getOne(queryWrapper);
-	}
+    @Override
+    public MarkProblemHistory findByTaskIdAndStatus(Long taskId, MarkProblemStatus status) {
+        QueryWrapper<MarkProblemHistory> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkProblemHistory::getTaskId, taskId).eq(MarkProblemHistory::getStatus, status);
+        return this.getOne(queryWrapper);
+    }
+
+    @Override
+    public Integer countByExamIdAndPaperNumberAndStatus(Long examId, String paperNumber, MarkProblemStatus status) {
+        QueryWrapper<MarkProblemHistory> queryWrapper = new QueryWrapper<>();
+        queryWrapper.lambda().eq(MarkProblemHistory::getExamId, examId)
+                .eq(MarkProblemHistory::getPaperNumber, paperNumber)
+                .eq(MarkProblemHistory::getStatus, status);
+        return this.count(queryWrapper);
+    }
 }

+ 8 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/service/impl/MarkTaskServiceImpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.teachcloud.common.bean.dto.DataPermissionRule;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.mark.MarkProblemStatus;
 import com.qmth.teachcloud.common.service.BasicRoleDataPermissionService;
 import com.qmth.teachcloud.common.util.ExcelUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
@@ -17,6 +18,7 @@ import com.qmth.teachcloud.mark.dto.mark.manage.MarkRejectHistoryDto;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkTaskDto;
 import com.qmth.teachcloud.mark.dto.mark.manage.MarkerInfoDto;
 import com.qmth.teachcloud.mark.entity.MarkGroup;
+import com.qmth.teachcloud.mark.entity.MarkProblemHistory;
 import com.qmth.teachcloud.mark.entity.MarkTask;
 import com.qmth.teachcloud.mark.enums.LockType;
 import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
@@ -48,6 +50,8 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
     @Resource
     private MarkQuestionService markQuestionService;
     @Resource
+    private MarkProblemHistoryService markProblemHistoryService;
+    @Resource
     private MarkService markService;
     @Resource
     private LockService lockService;
@@ -64,6 +68,10 @@ public class MarkTaskServiceImpl extends ServiceImpl<MarkTaskMapper, MarkTask> i
         for (MarkManageDto record : markManageDtoIPage.getRecords()) {
             record.setStatusDisplay(record.getStatus() == null ? null : record.getStatus().getName());
             record.setPercent(Calculator.divide2String(Calculator.multiply(record.getMarkedCount(), 100), Double.valueOf(record.getTotalCount()), 2));
+            // 问题卷数量
+            record.setProblemCount(markProblemHistoryService.countByExamIdAndPaperNumberAndStatus(examId, record.getPaperNumber(), MarkProblemStatus.WAITING));
+            // 正在评卷数量
+            record.setCurrentCount(markGroupService.countCurrentCountByExamIdAndPaperNumber(examId, record.getPaperNumber()));
         }
         return markManageDtoIPage;
     }