|
@@ -751,10 +751,9 @@ public class MarkServiceImpl implements MarkService {
|
|
|
|
|
|
@Override
|
|
|
public void clear(Long userId, Long examId, String paperNumber, Integer groupNumber) {
|
|
|
- MarkUserGroup markUserGroup = markUserGroupService.getByExamIdAndPaperNumberAndGroupNumberAndUserId(userId,
|
|
|
- null, null, userId);
|
|
|
- TaskLock taskLock = TaskLockUtil.getFormalTask(getGroupKey(markUserGroup));
|
|
|
- taskLock.clear(markUserGroup.getId());
|
|
|
+ String key = examId + "_" + paperNumber + "_" + groupNumber;
|
|
|
+ TaskLock taskLock = TaskLockUtil.getFormalTask(key);
|
|
|
+ taskLock.clear(userId);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -877,15 +876,24 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (!"markerTime".equals(order) && !"markerScore".equals(order)) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("排序错误");
|
|
|
}
|
|
|
- Page<MarkTaskDto> page = new Page<>(pageNumber, pageSize);
|
|
|
+ Page<MarkTask> page = new Page<>(pageNumber, pageSize);
|
|
|
OrderItem orderItem = new OrderItem(order, sort.equals(Sort.asc));
|
|
|
page.addOrder(orderItem);
|
|
|
- IPage<MarkTaskDto> list = markTaskService.listPageHistory(page, userId, examId, paperNumber, groupNumber,
|
|
|
+ IPage<MarkTask> list = markTaskService.listPageHistory(page, userId, examId, paperNumber, groupNumber,
|
|
|
secretNumber, markerScore);
|
|
|
- for (MarkTaskDto dto : list.getRecords()) {
|
|
|
+ List<MarkTaskDto> recordsDtos =new ArrayList<MarkTaskDto>();
|
|
|
+ for (MarkTask task : list.getRecords()) {
|
|
|
+ MarkTaskDto dto = toTaskDto(task);
|
|
|
dto.setPrevious(true);
|
|
|
+ recordsDtos.add(dto);
|
|
|
}
|
|
|
- return list;
|
|
|
+ IPage<MarkTaskDto> result = new Page<MarkTaskDto>();
|
|
|
+ result.setCurrent(list.getCurrent());
|
|
|
+ result.setPages(list.getPages());
|
|
|
+ result.setRecords(recordsDtos);
|
|
|
+ result.setSize(list.getSize());
|
|
|
+ result.setTotal(list.getTotal());
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -913,7 +921,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
break;
|
|
|
}
|
|
|
for (MarkTask t : list) {
|
|
|
- if (this.applyLibrary(t, userId)) {
|
|
|
+ if (this.applyTask(t, userId)) {
|
|
|
task = toTaskDto(t);
|
|
|
break;
|
|
|
}
|
|
@@ -932,7 +940,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public boolean applyLibrary(MarkTask t, Long userId) {
|
|
|
+ public boolean applyTask(MarkTask t, Long userId) {
|
|
|
// 查询待领取任务时,已经做了多评同一studentId互斥处理
|
|
|
String key = t.getExamId() + "_" + t.getPaperNumber() + "_" + t.getGroupNumber();
|
|
|
TaskLock taskLock = TaskLockUtil.getFormalTask(key);
|
|
@@ -968,69 +976,69 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (group == null) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("评卷分组不存在");
|
|
|
}
|
|
|
- MarkTask library = markTaskService.getById(result.getTaskId());
|
|
|
- if (library != null && library.getExamId().equals(group.getExamId())
|
|
|
- && library.getPaperNumber().equals(group.getPaperNumber())
|
|
|
- && library.getGroupNumber().equals(group.getNumber())) {
|
|
|
+ MarkTask task = markTaskService.getById(result.getTaskId());
|
|
|
+ if (task != null && task.getExamId().equals(group.getExamId())
|
|
|
+ && task.getPaperNumber().equals(group.getPaperNumber())
|
|
|
+ && task.getGroupNumber().equals(group.getNumber())) {
|
|
|
// 问题卷
|
|
|
Long now = System.currentTimeMillis();
|
|
|
if (result.isProblem()) {
|
|
|
// 状态更新
|
|
|
- if (markTaskService.updateProblemResult(library.getId(), userId, now,
|
|
|
+ if (markTaskService.updateProblemResult(task.getId(), userId, now,
|
|
|
result.getSpent())) {
|
|
|
- saveProblemHistory(result, library, userId);
|
|
|
+ saveProblemHistory(result, task, userId);
|
|
|
updateMarkedCount(markUserGroup.getExamId(), markUserGroup.getPaperNumber(),
|
|
|
markUserGroup.getGroupNumber());
|
|
|
// 未评完
|
|
|
- resetStudentGroup(library.getStudentId(), library.getExamId(), library.getPaperNumber(),
|
|
|
- library.getGroupNumber());
|
|
|
- markTrackService.deleteByTaskId(library.getId());
|
|
|
- markSpecialTagService.deleteByTaskId(library.getId());
|
|
|
- return SubmitResult.success(library);
|
|
|
+ resetStudentGroup(task.getStudentId(), task.getExamId(), task.getPaperNumber(),
|
|
|
+ task.getGroupNumber());
|
|
|
+ markTrackService.deleteByTaskId(task.getId());
|
|
|
+ markSpecialTagService.deleteByTaskId(task.getId());
|
|
|
+ return SubmitResult.success(task);
|
|
|
}
|
|
|
}
|
|
|
if (result.getMarkerScore() <= group.getTotalScore()) {
|
|
|
- if (submitLibrary(library,userId, group, result)) {
|
|
|
+ if (submitTask(task,userId, group, result)) {
|
|
|
updateMarkedCount(markUserGroup.getExamId(), markUserGroup.getPaperNumber(),
|
|
|
markUserGroup.getGroupNumber());
|
|
|
- return SubmitResult.success(library);
|
|
|
+ return SubmitResult.success(task);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return SubmitResult.faile();
|
|
|
}
|
|
|
|
|
|
- private void saveProblemHistory(MarkResult result, MarkTask library, Long userId) {
|
|
|
- MarkProblemHistory history = markProblemHistoryService.findByTaskIdAndStatus(library.getId(), MarkProblemStatus.WAITING);
|
|
|
+ private void saveProblemHistory(MarkResult result, MarkTask task, Long userId) {
|
|
|
+ MarkProblemHistory history = markProblemHistoryService.findByTaskIdAndStatus(task.getId(), MarkProblemStatus.WAITING);
|
|
|
if (history == null) {
|
|
|
history = new MarkProblemHistory();
|
|
|
}
|
|
|
- history.setExamId(library.getExamId());
|
|
|
- history.setSecretNumber(library.getSecretNumber());
|
|
|
- history.setStudentId(library.getStudentId());
|
|
|
- history.setTaskId(library.getId());
|
|
|
- history.setPaperNumber(library.getPaperNumber());
|
|
|
- history.setGroupNumber(library.getGroupNumber());
|
|
|
+ history.setExamId(task.getExamId());
|
|
|
+ history.setSecretNumber(task.getSecretNumber());
|
|
|
+ history.setStudentId(task.getStudentId());
|
|
|
+ history.setTaskId(task.getId());
|
|
|
+ history.setPaperNumber(task.getPaperNumber());
|
|
|
+ history.setGroupNumber(task.getGroupNumber());
|
|
|
history.setType(result.getProblemType());
|
|
|
history.setStatus(MarkProblemStatus.WAITING);
|
|
|
history.setUserId(userId);
|
|
|
markProblemHistoryService.save(history);
|
|
|
}
|
|
|
|
|
|
- private boolean submitLibrary(MarkTask library,Long userId, MarkGroup group, MarkResult result) {
|
|
|
+ private boolean submitTask(MarkTask task,Long userId, MarkGroup group, MarkResult result) {
|
|
|
// 非本人领取的待评任务
|
|
|
- if ((library.getStatus() == MarkTaskStatus.WAITING || library.getStatus() == MarkTaskStatus.REJECTED)
|
|
|
- && !hasApplied(library, userId)) {
|
|
|
+ if ((task.getStatus() == MarkTaskStatus.WAITING || task.getStatus() == MarkTaskStatus.REJECTED)
|
|
|
+ && !hasApplied(task, userId)) {
|
|
|
return false;
|
|
|
}
|
|
|
// 非本人的回评任务
|
|
|
- if ((library.getStatus() == MarkTaskStatus.MARKED)
|
|
|
- && !library.getUserId().equals(userId)) {
|
|
|
+ if ((task.getStatus() == MarkTaskStatus.MARKED)
|
|
|
+ && !task.getUserId().equals(userId)) {
|
|
|
return false;
|
|
|
}
|
|
|
// 是否多评情况下已处理过该考生评卷任务
|
|
|
if (markTaskService
|
|
|
- .countByStudentIdAndMarkerIdAndIdNotEqual(library.getStudentId(), userId, library.getId()) > 0) {
|
|
|
+ .countByStudentIdAndMarkerIdAndIdNotEqual(task.getStudentId(), userId, task.getId()) > 0) {
|
|
|
return false;
|
|
|
}
|
|
|
// 未选做
|
|
@@ -1042,7 +1050,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// }
|
|
|
// 尝试提交评卷结果
|
|
|
Long now = System.currentTimeMillis();
|
|
|
- if (markTaskService.updateMarkerResult(library.getId(), MarkTaskStatus.MARKED, userId,
|
|
|
+ if (markTaskService.updateMarkerResult(task.getId(), MarkTaskStatus.MARKED, userId,
|
|
|
result.getMarkerScore(), result.getScoreList(), now, result.getSpent(), null, null, null,
|
|
|
MarkTaskStatus.WAITING, MarkTaskStatus.MARKED, MarkTaskStatus.REJECTED)) {
|
|
|
// 条件不符更新失败,直接返回
|
|
@@ -1051,8 +1059,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// 保存阅卷轨迹
|
|
|
// int unansweredCount = 0;
|
|
|
if (result.getTrackList() != null && !result.isUnselective()) {
|
|
|
- markTrackService.deleteByTaskId(library.getId());
|
|
|
- markTrackService.saveBatch(result.getTrackList(library, userId));
|
|
|
+ markTrackService.deleteByTaskId(task.getId());
|
|
|
+ markTrackService.saveBatch(result.getTrackList(task, userId));
|
|
|
// for (MarkTrack markTrack : tracks) {
|
|
|
// if (markTrack.isUnanswered()) {
|
|
|
// unansweredCount++;
|
|
@@ -1062,18 +1070,18 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
// 保存特殊标记
|
|
|
if (result.getSpecialTagList() != null && !result.isUnselective()) {
|
|
|
- markSpecialTagService.deleteByTaskId(library.getId());
|
|
|
- markSpecialTagService.saveBatch(result.getSpecialTagList(library));
|
|
|
+ markSpecialTagService.deleteByTaskId(task.getId());
|
|
|
+ markSpecialTagService.saveBatch(result.getSpecialTagList(task));
|
|
|
}
|
|
|
// 判断多评模式下是否需要仲裁
|
|
|
MarkArbitrateHistory history = null;
|
|
|
if (group.getArbitrateThreshold() != null && group.getArbitrateThreshold() > 0) {
|
|
|
// 多评模式
|
|
|
- List<MarkTask> list = markTaskService.findByStudentIdAndGroupNumberAndStatus(library.getStudentId(),
|
|
|
- library.getGroupNumber(), MarkTaskStatus.MARKED);
|
|
|
+ List<MarkTask> list = markTaskService.findByStudentIdAndGroupNumberAndStatus(task.getStudentId(),
|
|
|
+ task.getGroupNumber(), MarkTaskStatus.MARKED);
|
|
|
for (MarkTask other : list) {
|
|
|
// 本评卷任务或组长已打分,则跳过该任务
|
|
|
- if (other.getId().equals(library.getId()) || other.getHeaderScore() != null) {
|
|
|
+ if (other.getId().equals(task.getId()) || other.getHeaderScore() != null) {
|
|
|
continue;
|
|
|
}
|
|
|
// 均为未选做,跳过该任务
|
|
@@ -1100,7 +1108,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// }
|
|
|
// } else {
|
|
|
// 未开启三评,触发仲裁
|
|
|
- history = buildArbitrateHistory(library, now);
|
|
|
+ history = buildArbitrateHistory(task, now);
|
|
|
break;
|
|
|
// }
|
|
|
}
|
|
@@ -1110,26 +1118,26 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// 保存仲裁记录
|
|
|
markArbitrateHistoryService.save(history);
|
|
|
// 触发仲裁后续状态更新
|
|
|
- markTaskService.updateStatusByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber(),
|
|
|
+ markTaskService.updateStatusByStudentIdAndGroupNumber(task.getStudentId(), task.getGroupNumber(),
|
|
|
MarkTaskStatus.WAIT_ARBITRATE);
|
|
|
// 未评完
|
|
|
- resetStudentGroup(library.getStudentId(), library.getExamId(), library.getPaperNumber(),
|
|
|
- library.getGroupNumber());
|
|
|
+ resetStudentGroup(task.getStudentId(), task.getExamId(), task.getPaperNumber(),
|
|
|
+ task.getGroupNumber());
|
|
|
} else {
|
|
|
// 判断当前分组是否已完成评卷
|
|
|
- checkStudentGroup(library.getStudentId(), group);
|
|
|
+ checkStudentGroup(task.getStudentId(), group);
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- private MarkArbitrateHistory buildArbitrateHistory(MarkTask library, Long now) {
|
|
|
+ private MarkArbitrateHistory buildArbitrateHistory(MarkTask task, Long now) {
|
|
|
MarkArbitrateHistory history = new MarkArbitrateHistory();
|
|
|
- history.setExamId(library.getExamId());
|
|
|
- history.setPaperNumber(library.getPaperNumber());
|
|
|
- history.setGroupNumber(library.getGroupNumber());
|
|
|
- history.setStudentId(library.getStudentId());
|
|
|
- history.setStudentCode(library.getStudentCode());
|
|
|
- history.setSecretNumber(library.getSecretNumber());
|
|
|
+ history.setExamId(task.getExamId());
|
|
|
+ history.setPaperNumber(task.getPaperNumber());
|
|
|
+ history.setGroupNumber(task.getGroupNumber());
|
|
|
+ history.setStudentId(task.getStudentId());
|
|
|
+ history.setStudentCode(task.getStudentCode());
|
|
|
+ history.setSecretNumber(task.getSecretNumber());
|
|
|
history.setStatus(MarkArbitrateStatus.WAITING);
|
|
|
history.setCreateTime(now);
|
|
|
return history;
|