|
@@ -223,8 +223,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
@Override
|
|
|
public String getGroupKey(MarkQuestion markQuestion) {
|
|
|
-// return markQuestion.getExamId() + "_" + markQuestion.getPaperNumber() + "_" + markQuestion.getId();
|
|
|
- return String.valueOf(markQuestion.getId());
|
|
|
+ return getKey(markQuestion.getExamId(), markQuestion.getPaperNumber());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -344,10 +343,6 @@ public class MarkServiceImpl implements MarkService {
|
|
|
markUserGroups.forEach(m -> this.updateQuality(m));
|
|
|
}
|
|
|
|
|
|
- private String getGroupKey(MarkUserQuestion markUserGroup) {
|
|
|
- return markUserGroup.getExamId() + "_" + markUserGroup.getPaperNumber();
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 考生分组判断是否评卷完成,以及后续的统一处理动作
|
|
|
*
|
|
@@ -699,8 +694,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
@Override
|
|
|
public void clear(Long userId, Long examId, String paperNumber) {
|
|
|
- String key = examId + "_" + paperNumber;
|
|
|
- TaskLock taskLock = TaskLockUtil.getFormalTask(key);
|
|
|
+ TaskLock taskLock = TaskLockUtil.getFormalTask(getKey(examId, paperNumber));
|
|
|
taskLock.clear(userId);
|
|
|
}
|
|
|
|
|
@@ -713,7 +707,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
@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);
|
|
|
+ boolean lock = taskLock.add(student.getId(), 1, userId, new HashSet<>());
|
|
|
// 上锁失败直接返回
|
|
|
if (!lock) {
|
|
|
return false;
|
|
@@ -839,12 +833,16 @@ public class MarkServiceImpl implements MarkService {
|
|
|
break;
|
|
|
}
|
|
|
for (Long studentId : studentIds) {
|
|
|
- if (this.applyTask(examId, paperNumber, studentId, 1, userId)) {
|
|
|
- Long questionId = null;
|
|
|
- if (questionModel.equals(QuestionModel.SINGLE)) {
|
|
|
- questionId = markTaskService.minQuestionIdByExamIdAndPaperNumber(examId, paperNumber, MarkTaskStatus.MARKED, MarkTaskStatus.ARBITRATED);
|
|
|
- }
|
|
|
- List<MarkTask> markTaskList = markTaskService.listByStudentIdAndUserId(studentId, userId, questionId);
|
|
|
+ List<MarkTask> markTaskList = markTaskService.listByStudentIdAndUserId(studentId, userId);
|
|
|
+ if (markTaskList.isEmpty()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (questionModel.equals(QuestionModel.SINGLE)) {
|
|
|
+ markTaskList = markTaskList.stream().limit(1).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ // 评阅题目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);
|
|
|
}
|
|
|
}
|
|
@@ -857,30 +855,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean applyTask(MarkTask t, Long userId) {
|
|
|
- // 查询待领取任务时,已经做了多评同一studentId互斥处理
|
|
|
- String key = String.valueOf(t.getStudentId());
|
|
|
- TaskLock taskLock = TaskLockUtil.getFormalTask(key);
|
|
|
- boolean lock = taskLock.add(t.getStudentId(), t.getTaskNumber(), userId);
|
|
|
- // 上锁失败直接返回
|
|
|
- if (!lock) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- // 重复校验任务状态
|
|
|
- if (markTaskService.countByIdAndStatus(t.getId(), t.getStatus()) == 1) {
|
|
|
- return true;
|
|
|
- } else {
|
|
|
- taskLock.remove(t.getStudentId(), t.getTaskNumber(), userId);
|
|
|
- return false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean applyTask(Long examId, String paperNumber, Long studentId, Integer taskNumber, Long userId) {
|
|
|
+ public boolean applyTask(Long examId, String paperNumber, Long studentId, Integer taskNumber, Long userId, Set<Long> questions) {
|
|
|
// 查询待领取任务时,已经做了多评同一studentId互斥处理
|
|
|
- String key = examId + "_" + paperNumber;
|
|
|
- TaskLock taskLock = TaskLockUtil.getFormalTask(key);
|
|
|
- boolean lock = taskLock.add(studentId, taskNumber, userId);
|
|
|
+ TaskLock taskLock = TaskLockUtil.getFormalTask(getKey(examId, paperNumber));
|
|
|
+ boolean lock = taskLock.add(studentId, taskNumber, userId, questions);
|
|
|
// 上锁失败直接返回
|
|
|
if (!lock) {
|
|
|
return false;
|
|
@@ -896,8 +874,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
@Override
|
|
|
public boolean hasApplied(MarkTask t, Long userId) {
|
|
|
- String key = t.getExamId() + "_" + t.getPaperNumber();
|
|
|
- TaskLock taskLock = TaskLockUtil.getFormalTask(key);
|
|
|
+ TaskLock taskLock = TaskLockUtil.getFormalTask(getKey(t.getExamId(), t.getPaperNumber()));
|
|
|
return taskLock.exist(t.getStudentId(), t.getTaskNumber(), userId);
|
|
|
}
|
|
|
|