|
@@ -177,9 +177,13 @@ public class MarkServiceImpl implements MarkService {
|
|
|
List<MarkTask> markTaskList = markTaskService.listByExamIdAndPaperNumberAndQuestionIdAndUserIdAndStatusNotIn(examId, paperNumber, questionId, userId, statusList);
|
|
|
for (MarkTask markTask : markTaskList) {
|
|
|
Long studentId = markTask.getStudentId();
|
|
|
+ if (MarkTaskStatus.ARBITRATED.equals(markTask.getStatus()) || MarkTaskStatus.WAIT_ARBITRATE.equals(markTask.getStatus())) {
|
|
|
+ markTaskService.resetArbitrateStatusByStudentIdAndQuestionIdAndTaskNumber(studentId, questionId, markTask.getTaskNumber());
|
|
|
+ }
|
|
|
markTaskService.resetById(markTask.getId(), null, null, null, null, MarkTaskStatus.WAITING);
|
|
|
markSubjectiveScoreService.deleteByStudentIdAndQuestionId(studentId, questionId);
|
|
|
markProblemHistoryService.deleteByExamIdAndPaperNumberAndTaskId(examId, paperNumber, markTask.getId());
|
|
|
+ markRejectHistoryService.deleteByTaskId(markTask.getId());
|
|
|
markArbitrateHistoryService.deleteByExamIdAndPaperNumberAndStudentIdAndQuestionId(examId, paperNumber, studentId, questionId);
|
|
|
lockService.waitlock(LockType.STUDENT, markTask.getStudentId());
|
|
|
markStudentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.UNMARK);
|
|
@@ -317,7 +321,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
public void processArbitrate(MarkArbitrateResult markResult, Long userId) {
|
|
|
MarkArbitrateHistory markArbitrateHistory = markArbitrateHistoryService.getById(markResult.getArbitrateId());
|
|
|
markArbitrateHistory.setUpdateUserId(userId);
|
|
|
- markArbitrateHistory.setTotalScore(markResult.getMarkScore());
|
|
|
+ markArbitrateHistory.setTotalScore(markResult.getMarkerScore());
|
|
|
// markArbitrateHistory.setScoreList(markResult.isUnselective() ? null : markResult.getScoreList());
|
|
|
markArbitrateHistory.setStatus(MarkArbitrateStatus.MARKED);
|
|
|
markArbitrateHistory.setUpdateTime(System.currentTimeMillis());
|
|
@@ -338,10 +342,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
markArbitrateHistoryService.saveOrUpdate(markArbitrateHistory);
|
|
|
markTaskService.updateHeaderResult(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(),
|
|
|
markArbitrateHistory.getQuestionId(), markArbitrateHistory.getStudentId(),
|
|
|
- markArbitrateHistory.getUpdateUserId(), markResult.getMarkScore(), markResult.getMarkerTrackList(), markResult.getMarkerTagList(), markArbitrateHistory.getUpdateTime(), MarkTaskStatus.ARBITRATED);
|
|
|
+ markArbitrateHistory.getUpdateUserId(), markResult.getMarkerScore(), markResult.getMarkerTrackList(), markResult.getMarkerTagList(), markArbitrateHistory.getUpdateTime(), MarkTaskStatus.ARBITRATED);
|
|
|
updateMarkedCount(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(),
|
|
|
markArbitrateHistory.getQuestionId());
|
|
|
- checkStudentQuestion(markArbitrateHistory.getStudentId(), markQuestionService.getById(markArbitrateHistory.getQuestionId()), markResult.getMarkScore());
|
|
|
+ checkStudentQuestion(markArbitrateHistory.getStudentId(), markQuestionService.getById(markArbitrateHistory.getQuestionId()), markResult.getMarkerScore());
|
|
|
// 评卷质量重新统计
|
|
|
List<MarkUserQuestion> markUserGroups = markUserQuestionService.listByExamIdAndPaperNumberAndQuestionId(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(), markArbitrateHistory.getQuestionId());
|
|
|
markUserGroups.forEach(m -> this.updateQuality(m));
|
|
@@ -798,7 +802,9 @@ public class MarkServiceImpl implements MarkService {
|
|
|
for (MarkUserQuestion question : markUserQuestionList) {
|
|
|
dto = new MarkStatusDto(markQuestionService.getById(question.getQuestionId()), markUserPaper.getMarkedQuestionId());
|
|
|
List<Long> questionIds = Arrays.asList(question.getQuestionId());
|
|
|
- dtoList.add(getDto(dto, examId, paperNumber, userId, classNames, questionIds));
|
|
|
+ MarkStatusDto statusDto = getDto(dto, examId, paperNumber, userId, classNames, questionIds);
|
|
|
+ statusDto.setLeftCount(countLeftCountForSingle(statusDto.getLeftCount(), question.getQuestionId(), userId, classNames));
|
|
|
+ dtoList.add(statusDto);
|
|
|
}
|
|
|
} else if (QuestionModel.MULTI.equals(questionModel)) {
|
|
|
MarkStatusDto dto = new MarkStatusDto();
|
|
@@ -807,9 +813,27 @@ public class MarkServiceImpl implements MarkService {
|
|
|
} else {
|
|
|
throw ExceptionResultEnum.ERROR.exception("参数有误");
|
|
|
}
|
|
|
+ dtoList.sort(Comparator.comparing(MarkStatusDto::getMainNumber).thenComparing(MarkStatusDto::getSubNumber));
|
|
|
return dtoList;
|
|
|
}
|
|
|
|
|
|
+ private int countLeftCountForSingle(int leftCount, Long questionId, Long userId, List<String> classNames) {
|
|
|
+ MarkQuestion markQuestion = markQuestionService.getById(questionId);
|
|
|
+ if (CollectionUtils.isEmpty(classNames)) {
|
|
|
+ int currentCount = this.applyCurrentCount(markQuestion);
|
|
|
+ int userCurrentCount = this.applyCurrentCount(markQuestion, userId);
|
|
|
+ return leftCount - currentCount + userCurrentCount;
|
|
|
+ } else {
|
|
|
+ List<MarkUserClass> markUserClassList = markUserClassService.listByExamIdAndPaperNumber(markQuestion.getExamId(), markQuestion.getPaperNumber());
|
|
|
+ Set<MarkUserClass> markUserClasses = markUserClassList.stream().filter(m -> classNames.contains(m.getClassName()) && !m.getUserId().equals(userId)).collect(Collectors.toSet());
|
|
|
+ int count = 0;
|
|
|
+ for (MarkUserClass markUserClass : markUserClasses) {
|
|
|
+ count += this.applyCurrentCount(markQuestion, markUserClass.getUserId());
|
|
|
+ }
|
|
|
+ return leftCount - count;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private MarkStatusDto getDto(MarkStatusDto dto, Long examId, String paperNumber, Long userId, List<String> classNames, List<Long> questionIds) {
|
|
|
//待仲裁卷数量
|
|
|
dto.setArbitrateCount(markArbitrateHistoryService.waitArbitrateCount(examId, paperNumber, null, classNames));
|
|
@@ -927,7 +951,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
Page<Long> page = new Page<>(pageNumber, pageSize);
|
|
|
OrderItem orderItem = new OrderItem(order, sort.equals(Sort.asc));
|
|
|
page.addOrder(orderItem);
|
|
|
- IPage<MarkTask> list = markTaskService.listPageHistory(page, userId, examId, paperNumber, secretNumber, markerScore);
|
|
|
+ IPage<MarkTask> list = markTaskService.listPageHistory(page, userId, examId, paperNumber, secretNumber, markerScore, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED, MarkTaskStatus.WAIT_ARBITRATE, MarkTaskStatus.PROBLEM);
|
|
|
List<Task> recordsDtos = new ArrayList<>();
|
|
|
List<MarkTaskStatus> markTaskStatuses = Arrays.asList(MarkTaskStatus.MARKED, MarkTaskStatus.WAIT_ARBITRATE, MarkTaskStatus.PROBLEM);
|
|
|
for (MarkTask markTask : list.getRecords()) {
|
|
@@ -1170,6 +1194,9 @@ public class MarkServiceImpl implements MarkService {
|
|
|
resetStudentStatus(task.getStudentId());
|
|
|
count++;
|
|
|
}
|
|
|
+ } else if (MarkTaskStatus.ARBITRATED.equals(task.getStatus()) || MarkTaskStatus.WAIT_ARBITRATE.equals(task.getStatus())) {
|
|
|
+ // 待仲裁、已仲裁,直接跳过
|
|
|
+ count++;
|
|
|
} else if (markResultQuestion.getMarkerScore() <= markQuestion.getTotalScore()) {//阅卷分是否小于等于该组总分
|
|
|
if (submitTask(task, userId, markQuestion, markResultQuestion)) {
|
|
|
updateMarkedCount(markUserQuestion.getExamId(), markUserQuestion.getPaperNumber(), markUserQuestion.getQuestionId());
|