|
@@ -26,7 +26,7 @@ import com.qmth.teachcloud.mark.enums.LockType;
|
|
|
import com.qmth.teachcloud.mark.enums.MarkTaskStatus;
|
|
|
import com.qmth.teachcloud.mark.enums.QuestionModel;
|
|
|
import com.qmth.teachcloud.mark.lock.LockService;
|
|
|
-import com.qmth.teachcloud.mark.params.MarkHeaderGroupResult;
|
|
|
+import com.qmth.teachcloud.mark.params.MarkArbitrateResult;
|
|
|
import com.qmth.teachcloud.mark.params.MarkResult;
|
|
|
import com.qmth.teachcloud.mark.params.MarkResultQuestion;
|
|
|
import com.qmth.teachcloud.mark.service.*;
|
|
@@ -99,16 +99,18 @@ public class MarkServiceImpl implements MarkService {
|
|
|
private BasicOperationLogService basicOperationLogService;
|
|
|
|
|
|
/**
|
|
|
- * 释放某个评卷员已完成的评卷任务
|
|
|
+ * 释放某个评卷员的考生
|
|
|
*
|
|
|
- * @param submitResult 评卷结果
|
|
|
- * @param userId 评卷员
|
|
|
+ * @param exmId 考试ID
|
|
|
+ * @param paperNumber 试卷编号
|
|
|
+ * @param studentId 考生ID
|
|
|
+ * @param userId 用户ID
|
|
|
*/
|
|
|
@Override
|
|
|
- public void releaseTask(SubmitResult submitResult, Long userId) {
|
|
|
- if (submitResult.getStudentId() != null) {
|
|
|
- TaskLock taskLock = TaskLockUtil.getFormalTask(getKey(submitResult.getExamId(), submitResult.getPaperNumber()));
|
|
|
- taskLock.remove(submitResult.getStudentId(), 1, userId);
|
|
|
+ public void releaseStudent(Long exmId, String paperNumber, Long studentId, Long userId) {
|
|
|
+ if (studentId != null) {
|
|
|
+ TaskLock taskLock = TaskLockUtil.getFormalTask(getKey(exmId, paperNumber));
|
|
|
+ taskLock.remove(studentId, userId);
|
|
|
taskLock.refresh(userId);
|
|
|
}
|
|
|
}
|
|
@@ -309,10 +311,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
*/
|
|
|
@Transactional
|
|
|
@Override
|
|
|
- public void processArbitrate(MarkHeaderGroupResult markResult, Long userId) {
|
|
|
- MarkArbitrateHistory markArbitrateHistory = markArbitrateHistoryService.getById(markResult.getTaskId());
|
|
|
+ public void processArbitrate(MarkArbitrateResult markResult, Long userId) {
|
|
|
+ MarkArbitrateHistory markArbitrateHistory = markArbitrateHistoryService.getById(markResult.getArbitrateId());
|
|
|
markArbitrateHistory.setUpdateUserId(userId);
|
|
|
- markArbitrateHistory.setTotalScore(markResult.getScore());
|
|
|
+ markArbitrateHistory.setTotalScore(markResult.getMarkScore());
|
|
|
// markArbitrateHistory.setScoreList(markResult.isUnselective() ? null : markResult.getScoreList());
|
|
|
markArbitrateHistory.setStatus(MarkArbitrateStatus.MARKED);
|
|
|
markArbitrateHistory.setUpdateTime(System.currentTimeMillis());
|
|
@@ -333,10 +335,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
markArbitrateHistoryService.saveOrUpdate(markArbitrateHistory);
|
|
|
markTaskService.updateHeaderResult(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(),
|
|
|
markArbitrateHistory.getQuestionId(), markArbitrateHistory.getStudentId(),
|
|
|
- markArbitrateHistory.getUpdateUserId(), markResult.getScore(), markResult.getTrackList(), markResult.getSpecialTagList(), markArbitrateHistory.getUpdateTime(), MarkTaskStatus.ARBITRATED);
|
|
|
+ markArbitrateHistory.getUpdateUserId(), markResult.getMarkScore(), markResult.getMarkerTrackList(), markResult.getMarkerTagList(), markArbitrateHistory.getUpdateTime(), MarkTaskStatus.ARBITRATED);
|
|
|
updateMarkedCount(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(),
|
|
|
markArbitrateHistory.getQuestionId());
|
|
|
- checkStudentQuestion(markArbitrateHistory.getStudentId(), markQuestionService.getById(markArbitrateHistory.getQuestionId()), null);
|
|
|
+ checkStudentQuestion(markArbitrateHistory.getStudentId(), markQuestionService.getById(markArbitrateHistory.getQuestionId()), markResult.getMarkScore());
|
|
|
// 评卷质量重新统计
|
|
|
List<MarkUserQuestion> markUserGroups = markUserQuestionService.listByExamIdAndPaperNumberAndQuestionId(markArbitrateHistory.getExamId(), markArbitrateHistory.getPaperNumber(), markArbitrateHistory.getQuestionId());
|
|
|
markUserGroups.forEach(m -> this.updateQuality(m));
|
|
@@ -347,12 +349,12 @@ public class MarkServiceImpl implements MarkService {
|
|
|
*
|
|
|
* @param studentId
|
|
|
* @param markQuestion
|
|
|
- * @param result
|
|
|
+ * @param markScore
|
|
|
*/
|
|
|
- private void checkStudentQuestion(Long studentId, MarkQuestion markQuestion, MarkResultQuestion result) {
|
|
|
+ private void checkStudentQuestion(Long studentId, MarkQuestion markQuestion, Double markScore) {
|
|
|
if (calculateQuestionId(markQuestion, studentId)) {
|
|
|
//更新考生分组分数
|
|
|
- updateStudentQuestionScore(studentId, markQuestion, result);
|
|
|
+ updateStudentQuestionScore(studentId, markQuestion, markScore);
|
|
|
// checkStudentSubjective(studentId, markQuestion.getExamId(), markQuestion.getPaperNumber(), version);
|
|
|
} else {
|
|
|
markStudentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.UNMARK, null, null);
|
|
@@ -367,12 +369,14 @@ public class MarkServiceImpl implements MarkService {
|
|
|
long questionCount = markQuestionService.countByExamIdAndPaperNumberAndObjective(examId, paperNumber, false);
|
|
|
long subjectiveScoreCount = markSubjectiveScoreService.countByStudentId(studentId);
|
|
|
// 主观题数大于0,主观题全部绑定了评卷员,考生小题分数数量等于主观题数量
|
|
|
- if (questionCount > 0 && unBindMarkerQuestionCount == 0 && questionCount == subjectiveScoreCount) {
|
|
|
+ // todo 校验mark_subjective_score中的question_id是否一样
|
|
|
+ if (questionCount > 0) {
|
|
|
scoreCalculate(studentId, version);
|
|
|
- } else {//否则更新该学生主观题状态为未阅卷
|
|
|
-// markStudentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.UNMARK, null, null);
|
|
|
- markStudentService.updateSubjectiveScoreByVersion(studentId, SubjectiveStatus.UNMARK, null, null, version);
|
|
|
}
|
|
|
+// else {//否则更新该学生主观题状态为未阅卷
|
|
|
+//// markStudentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.UNMARK, null, null);
|
|
|
+// markStudentService.updateSubjectiveScoreByVersion(studentId, SubjectiveStatus.UNMARK, null, null, version);
|
|
|
+// }
|
|
|
} catch (Exception e) {
|
|
|
log.error(SystemConstant.LOG_ERROR, e);
|
|
|
throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
@@ -422,7 +426,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
return;
|
|
|
}
|
|
|
int count = 0;
|
|
|
- List<MarkStudent> studentList = markStudentService.listUnMarkTaskStudent(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId(), pageSize);while (CollectionUtils.isNotEmpty(studentList)) {
|
|
|
+ List<MarkStudent> studentList = markStudentService.listUnMarkTaskStudent(markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId(), pageSize);
|
|
|
+ while (CollectionUtils.isNotEmpty(studentList)) {
|
|
|
// 已生成的双评任务总数的第一组任务数
|
|
|
int doubleMarkTaskCount1 = markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndTaskNumber(
|
|
|
markQuestion.getExamId(), markQuestion.getPaperNumber(), markQuestion.getId(), 1);
|
|
@@ -558,7 +563,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- private void updateStudentQuestionScore(Long studentId, MarkQuestion markQuestion, MarkResultQuestion result) {
|
|
|
+ private void updateStudentQuestionScore(Long studentId, MarkQuestion markQuestion, Double markScore) {
|
|
|
MarkSubjectiveScore ss = markSubjectiveScoreService.getByStudentIdAndQuestionId(studentId, markQuestion.getId());
|
|
|
if (ss == null) {
|
|
|
ss = new MarkSubjectiveScore();
|
|
@@ -569,7 +574,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
ss.setQuestionId(markQuestion.getId());
|
|
|
ss.setMainNumber(markQuestion.getMainNumber());
|
|
|
ss.setSubNumber(markQuestion.getSubNumber());
|
|
|
- ss.setScore(result.getMarkerScore());
|
|
|
+ ss.setScore(markScore);
|
|
|
ss.setMainScore(0.0);
|
|
|
markSubjectiveScoreService.saveOrUpdateByMultiId(ss);
|
|
|
}
|
|
@@ -655,16 +660,9 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public MarkStatusDto getStatus(Long userId, Long examId, String paperNumber) {
|
|
|
- MarkStatusDto dto = new MarkStatusDto();
|
|
|
+ public List<MarkStatusDto> getStatus(Long userId, Long examId, String paperNumber, QuestionModel questionModel) {
|
|
|
MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
|
|
|
|
|
|
- // 评卷方式
|
|
|
- MarkUserPaper markUserPaper = markUserPaperService.getByExamIdAndPaperNumberAndUserId(examId, paperNumber, userId);
|
|
|
- Long questionId = null;
|
|
|
- if (markUserPaper != null && markUserPaper.getQuestionModel().equals(QuestionModel.SINGLE)) {
|
|
|
- questionId = markTaskService.minQuestionIdByExamIdAndPaperNumber(examId, paperNumber, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED);
|
|
|
- }
|
|
|
List<String> classNames = null;
|
|
|
//校验是否有分班阅
|
|
|
if (markPaper != null && markPaper.getClassMark() != null && markPaper.getClassMark().booleanValue()) {
|
|
@@ -673,21 +671,48 @@ public class MarkServiceImpl implements MarkService {
|
|
|
classNames = markUserClassList.stream().map(MarkUserClass::getClassName).collect(Collectors.toList());
|
|
|
}
|
|
|
}
|
|
|
- //待仲裁卷数量
|
|
|
- dto.setArbitrateCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndUserIdAndAndClassNameStatusIn(examId,
|
|
|
- paperNumber, null, null, classNames, MarkTaskStatus.WAIT_ARBITRATE));
|
|
|
- //总数量
|
|
|
- dto.setTotalCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndUserIdAndAndClassNameStatusIn(examId, paperNumber, questionId, null, classNames));
|
|
|
- //总评卷数量(已评)
|
|
|
- dto.setMarkedCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndUserIdAndAndClassNameStatusIn(examId, paperNumber, questionId, null, classNames, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED));
|
|
|
- //个人评卷数量
|
|
|
- dto.setPersonCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndUserIdAndAndClassNameStatusIn(examId,
|
|
|
- paperNumber, questionId, userId, classNames, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED,
|
|
|
- MarkTaskStatus.WAIT_ARBITRATE));
|
|
|
- //问题卷数量
|
|
|
- dto.setProblemCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndUserIdAndAndClassNameStatusIn(examId,
|
|
|
- paperNumber, questionId, null, classNames, MarkTaskStatus.PROBLEM));
|
|
|
- return dto;
|
|
|
+
|
|
|
+ List<MarkStatusDto> dtoList = new ArrayList<>();
|
|
|
+ // 评卷方式
|
|
|
+ if (QuestionModel.SINGLE.equals(questionModel)) {
|
|
|
+ List<MarkUserQuestion> markUserQuestionList = markUserQuestionService.listByExamIdAndPaperNumberAndUserIdAndEnableTure(examId, paperNumber, userId);
|
|
|
+ MarkStatusDto dto;
|
|
|
+ for (MarkUserQuestion question : markUserQuestionList) {
|
|
|
+ dto = new MarkStatusDto(markQuestionService.getById(question.getId()));
|
|
|
+ //总数量(考生数)
|
|
|
+ dto.setTotalCount(markTaskService.countTotalCountByExamIdAndPaperNumberAndUserIdAndAndClassName(examId, paperNumber, userId, classNames));
|
|
|
+ //总评卷数量(考生数)
|
|
|
+// dto.setMarkedCount(markTaskService.countMarkedCountByExamIdAndPaperNumberAndUserIdAndAndClassName(examId, paperNumber, userId, classNames, questionId, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED));
|
|
|
+ //个人评卷数量(考生数)
|
|
|
+// dto.setPersonCount(markTaskService.countMarkedCountByExamIdAndPaperNumberAndUserIdAndAndClassName(examId, paperNumber, userId, classNames, questionId, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED,MarkTaskStatus.WAIT_ARBITRATE));
|
|
|
+ //问题卷数量(任务数)
|
|
|
+ dto.setProblemCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndUserIdAndAndClassNameStatusIn(examId,
|
|
|
+ paperNumber, question.getQuestionId(), null, classNames, MarkTaskStatus.PROBLEM));
|
|
|
+ //待仲裁卷数量(任务数)
|
|
|
+ dto.setArbitrateCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndUserIdAndAndClassNameStatusIn(examId,
|
|
|
+ paperNumber, question.getQuestionId(), null, classNames, MarkTaskStatus.WAIT_ARBITRATE));
|
|
|
+ dtoList.add(dto);
|
|
|
+ }
|
|
|
+ } else if (QuestionModel.MULTI.equals(questionModel)) {
|
|
|
+ MarkStatusDto dto = new MarkStatusDto();
|
|
|
+
|
|
|
+ //待仲裁卷数量
|
|
|
+ dto.setArbitrateCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndUserIdAndAndClassNameStatusIn(examId,
|
|
|
+ paperNumber, null, null, classNames, MarkTaskStatus.WAIT_ARBITRATE));
|
|
|
+ //总数量
|
|
|
+ dto.setTotalCount(markTaskService.countTotalCountByExamIdAndPaperNumberAndUserIdAndAndClassName(examId, paperNumber, userId, classNames));
|
|
|
+ //总评卷数量(已评)
|
|
|
+// dto.setMarkedCount(markTaskService.countMarkedCountByExamIdAndPaperNumberAndUserIdAndAndClassName(examId, paperNumber, userId, classNames, questionId, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED));
|
|
|
+ //个人评卷数量
|
|
|
+// dto.setPersonCount(markTaskService.countMarkedCountByExamIdAndPaperNumberAndUserIdAndAndClassName(examId, paperNumber, userId, classNames, questionId, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED, MarkTaskStatus.WAIT_ARBITRATE));
|
|
|
+ //问题卷数量
|
|
|
+// dto.setProblemCount(markTaskService.countByExamIdAndPaperNumberAndQuestionIdAndUserIdAndAndClassNameStatusIn(examId,
|
|
|
+// paperNumber, questionId, null, classNames, MarkTaskStatus.PROBLEM));
|
|
|
+ dtoList.add(dto);
|
|
|
+ } else {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("参数有误");
|
|
|
+ }
|
|
|
+ return dtoList;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -699,13 +724,13 @@ public class MarkServiceImpl implements MarkService {
|
|
|
@Override
|
|
|
public void releaseByStudent(MarkStudent student) {
|
|
|
TaskLock taskLock = TaskLockUtil.getInspectedStudentTask(getKey(student.getExamId(), student.getPaperNumber()));
|
|
|
- taskLock.remove(student.getId(), 1);
|
|
|
+ taskLock.remove(student.getId());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public boolean applyStudent(MarkStudent student, Long userId) {
|
|
|
TaskLock taskLock = TaskLockUtil.getInspectedStudentTask(getKey(student.getExamId(), student.getPaperNumber()));
|
|
|
- boolean lock = taskLock.add(student.getId(), 1, userId, new HashSet<>());
|
|
|
+ boolean lock = taskLock.add(student.getId(), userId, new HashSet<>());
|
|
|
// 上锁失败直接返回
|
|
|
if (!lock) {
|
|
|
return false;
|
|
@@ -714,7 +739,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (student.getSubjectiveStatus().equals(SubjectiveStatus.MARKED)) {
|
|
|
return true;
|
|
|
} else {
|
|
|
- taskLock.remove(student.getId(), 1, userId);
|
|
|
+ taskLock.remove(student.getId(), userId);
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
@@ -731,7 +756,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
result.getQuestionId(), markStudent.getId(), userId, result.getMarkerScore(), result.getMarkerTrackList(), result.getMarkerTagList(), currentTime, MarkTaskStatus.MARKED);
|
|
|
updateMarkedCount(markStudent.getExamId(), markStudent.getPaperNumber(), result.getQuestionId());
|
|
|
markStudentService.updateCheckInfo(markStudent.getId(), userId);
|
|
|
- checkStudentQuestion(markStudent.getId(), markQuestionService.getById(result.getQuestionId()), result);
|
|
|
+ checkStudentQuestion(markStudent.getId(), markQuestionService.getById(result.getQuestionId()), result.getMarkerScore());
|
|
|
} catch (ApiException e) {
|
|
|
throw ExceptionResultEnum.ERROR.exception(e.getMessage());
|
|
|
} finally {
|
|
@@ -808,7 +833,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public Task getTask(Long userId, Long examId, String paperNumber, QuestionModel questionModel) {
|
|
|
+ public Task getTask(Long userId, Long examId, String paperNumber, QuestionModel questionModel, Long questionId) {
|
|
|
MarkPaper markPaper = markPaperService.getByExamIdAndPaperNumber(examId, paperNumber);
|
|
|
if (markPaper == null) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("评卷试卷不存在");
|
|
@@ -817,33 +842,62 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (count == 0) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("评卷任务被重置,请点击右上角返回按钮,重新在评卷入口菜单点击评卷");
|
|
|
}
|
|
|
+ List<MarkUserQuestion> markUserQuestions = markUserQuestionService.listByExamIdAndPaperNumberAndUserIdAndEnableTure(examId, paperNumber, userId);
|
|
|
+ if (markUserQuestions.isEmpty()) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("评卷员未设置评卷题目");
|
|
|
+ }
|
|
|
+ Set<Long> questions = markUserQuestions.stream().map(MarkUserQuestion::getQuestionId).collect(Collectors.toSet());
|
|
|
Task task = null;
|
|
|
List<Long> studentIds;
|
|
|
int pageNumber = 1;
|
|
|
while (task == null) {
|
|
|
-// if (markPaper.getClassMark()) {
|
|
|
-// studentIds = markTaskService.findUnMarkedFilterClass(new Page<>(pageNumber, 20), examId, paperNumber, userId, questionModel);
|
|
|
-// } else {
|
|
|
-// studentIds = markTaskService.findUnMarked(new Page<>(pageNumber, 20), examId, paperNumber, userId, questionModel);
|
|
|
-// }
|
|
|
- studentIds = markStudentService.findUnMarked(new Page<>(pageNumber, 20), examId, paperNumber, userId, markPaper.getClassMark());
|
|
|
- if (studentIds.isEmpty()) {
|
|
|
- break;
|
|
|
- }
|
|
|
- for (Long studentId : studentIds) {
|
|
|
- List<MarkTask> markTaskList = markTaskService.listByStudentIdAndUserId(studentId, userId);
|
|
|
- if (markTaskList.isEmpty()) {
|
|
|
- continue;
|
|
|
+ if (questionModel.equals(QuestionModel.SINGLE)) {
|
|
|
+ List<MarkTask> list = markTaskService.findUnMarkedFilterClass(new Page<>(pageNumber, 20), examId, paperNumber, userId, markPaper.getClassMark());
|
|
|
+ if (list.isEmpty()) {
|
|
|
+ break;
|
|
|
}
|
|
|
- if (questionModel.equals(QuestionModel.SINGLE)) {
|
|
|
- markTaskList = markTaskList.stream().limit(1).collect(Collectors.toList());
|
|
|
+ for (MarkTask t : list) {
|
|
|
+ if (this.applyTask(examId, paperNumber, t.getStudentId(), userId, questions, Arrays.asList(t.getId()))) {
|
|
|
+ task = taskService.build(userId, Arrays.asList(t));
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
- // 评阅题目ID集合
|
|
|
- Set<Long> questions = markTaskList.stream().map(MarkTask::getQuestionId).collect(Collectors.toSet());
|
|
|
- if (this.applyTask(examId, paperNumber, studentId, 1, userId, questions)) {
|
|
|
- task = taskService.build(userId, markTaskList);
|
|
|
+ } else if (questionModel.equals(QuestionModel.MULTI)) {
|
|
|
+ studentIds = markStudentService.findUnMarked(new Page<>(pageNumber, 20), examId, paperNumber, userId, markPaper.getClassMark());
|
|
|
+ if (studentIds.isEmpty()) {
|
|
|
break;
|
|
|
}
|
|
|
+ for (Long studentId : studentIds) {
|
|
|
+ if (this.applyTask(examId, paperNumber, studentId, userId, questions)) {
|
|
|
+ List<MarkTask> markTaskList = markTaskService.listByStudentId(studentId);
|
|
|
+ if (markTaskList.isEmpty()) {
|
|
|
+ releaseStudent(examId, paperNumber, studentId, userId);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Map<Long, List<MarkTask>> map = markTaskList.stream().collect(Collectors.groupingBy(MarkTask::getQuestionId));
|
|
|
+ List<MarkTask> markTasks = new ArrayList<>();
|
|
|
+ for (MarkUserQuestion markUserQuestion : markUserQuestions) {
|
|
|
+ List<MarkTask> markTasks1 = map.get(markUserQuestion.getQuestionId());
|
|
|
+ if (markTasks1.size() == 1) {
|
|
|
+ markTasks.add(markTasks1.get(0));
|
|
|
+ } else {
|
|
|
+ MarkTask markTask = markTasks1.stream().filter(m -> userId.equals(m.getUserId())).findFirst().orElse(null);
|
|
|
+ if (markTask == null) {
|
|
|
+ markTask = markTasks1.stream().filter(m -> m.getUserId() == null).findFirst().orElse(null);
|
|
|
+ if (markTask == null) {
|
|
|
+ markTask = markTasks1.get(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ markTasks.add(markTask);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ markTasks.sort(Comparator.comparing(MarkTask::getMainNumber).thenComparing(MarkTask::getSubNumber));
|
|
|
+ task = taskService.build(userId, markTasks);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
if (task == null) {
|
|
@@ -854,27 +908,40 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean applyTask(Long examId, String paperNumber, Long studentId, Integer taskNumber, Long userId, Set<Long> questions) {
|
|
|
+ public boolean applyTask(Long examId, String paperNumber, Long studentId, Long userId, Set<Long> questions, List<Long> taskIds) {
|
|
|
// 查询待领取任务时,已经做了多评同一studentId互斥处理
|
|
|
TaskLock taskLock = TaskLockUtil.getFormalTask(getKey(examId, paperNumber));
|
|
|
- boolean lock = taskLock.add(studentId, taskNumber, userId, questions);
|
|
|
+ boolean lock = taskLock.add(studentId, userId, questions);
|
|
|
// 上锁失败直接返回
|
|
|
if (!lock) {
|
|
|
return false;
|
|
|
}
|
|
|
- // 重复校验任务状态
|
|
|
- if (markTaskService.countByStudentIdAndStatus(studentId, MarkTaskStatus.WAITING, MarkTaskStatus.REJECTED) > 0) {
|
|
|
+ // 检验是否有待评任务
|
|
|
+ if (markTaskService.countByStatusAndIdIn(taskIds, MarkTaskStatus.WAITING, MarkTaskStatus.REJECTED) > 0) {
|
|
|
return true;
|
|
|
} else {
|
|
|
- taskLock.remove(studentId, taskNumber, userId);
|
|
|
+ taskLock.remove(studentId, userId);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean applyTask(Long examId, String paperNumber, Long studentId, Long userId, Set<Long> questions) {
|
|
|
+ // 查询待领取任务时,已经做了多评同一studentId互斥处理
|
|
|
+ TaskLock taskLock = TaskLockUtil.getFormalTask(getKey(examId, paperNumber));
|
|
|
+ boolean lock = taskLock.add(studentId, userId, questions);
|
|
|
+ // 上锁失败直接返回
|
|
|
+ if (!lock) {
|
|
|
return false;
|
|
|
}
|
|
|
+ taskLock.remove(studentId, userId);
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public boolean hasApplied(MarkTask t, Long userId) {
|
|
|
TaskLock taskLock = TaskLockUtil.getFormalTask(getKey(t.getExamId(), t.getPaperNumber()));
|
|
|
- return taskLock.exist(t.getStudentId(), t.getTaskNumber(), userId);
|
|
|
+ return taskLock.exist(t.getStudentId(), userId);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -934,7 +1001,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
lockService.waitlock(LockType.STUDENT, result.getStudentId());
|
|
|
sr = submitResult(examId, paperNumber, userId, result);
|
|
|
if (sr.isSuccess()) {
|
|
|
- releaseTask(sr, userId);
|
|
|
+ releaseStudent(examId, paperNumber, sr.getStudentId(), userId);
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
log.error("save task error", e);
|
|
@@ -990,7 +1057,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
}
|
|
|
if (CollectionUtils.size(result.getQuestionList()) == count) {
|
|
|
- return SubmitResult.success(examId, paperNumber, result.getStudentId());
|
|
|
+ return SubmitResult.success(result.getStudentId());
|
|
|
} else {
|
|
|
return SubmitResult.faile();
|
|
|
}
|
|
@@ -1070,7 +1137,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
resetStudentGroup(task.getStudentId());
|
|
|
} else {
|
|
|
// 判断当前分组是否已完成评卷
|
|
|
- checkStudentQuestion(task.getStudentId(), markQuestion, result);
|
|
|
+ checkStudentQuestion(task.getStudentId(), markQuestion, result.getMarkerScore());
|
|
|
}
|
|
|
return true;
|
|
|
}
|