|
@@ -13,6 +13,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -31,19 +32,24 @@ import com.qmth.teachcloud.common.enums.mark.MarkProblemType;
|
|
|
import com.qmth.teachcloud.common.enums.mark.SubjectiveStatus;
|
|
|
import com.qmth.teachcloud.common.service.TeachcloudCommonService;
|
|
|
import com.qmth.teachcloud.mark.dto.mark.ScoreItem;
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.SpecialTagDTO;
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.manage.MarkerSpecialTagDTO;
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.manage.MarkerTrackDTO;
|
|
|
+import com.qmth.teachcloud.mark.dto.mark.manage.TrackDTO;
|
|
|
import com.qmth.teachcloud.mark.dto.mark.mark.MarkGroupDto;
|
|
|
import com.qmth.teachcloud.mark.dto.mark.mark.MarkSettingDto;
|
|
|
import com.qmth.teachcloud.mark.dto.mark.mark.MarkStatusDto;
|
|
|
import com.qmth.teachcloud.mark.dto.mark.mark.MarkStepDTO;
|
|
|
import com.qmth.teachcloud.mark.dto.mark.mark.MarkTaskDto;
|
|
|
import com.qmth.teachcloud.mark.dto.mark.mark.SubmitResult;
|
|
|
-import com.qmth.teachcloud.mark.dto.mark.mark.TrackDTO;
|
|
|
import com.qmth.teachcloud.mark.entity.MarkArbitrateHistory;
|
|
|
import com.qmth.teachcloud.mark.entity.MarkGroup;
|
|
|
import com.qmth.teachcloud.mark.entity.MarkGroupStudent;
|
|
|
+import com.qmth.teachcloud.mark.entity.MarkHeaderTag;
|
|
|
import com.qmth.teachcloud.mark.entity.MarkHeaderTrack;
|
|
|
import com.qmth.teachcloud.mark.entity.MarkPaper;
|
|
|
import com.qmth.teachcloud.mark.entity.MarkProblemHistory;
|
|
|
+import com.qmth.teachcloud.mark.entity.MarkSpecialTag;
|
|
|
import com.qmth.teachcloud.mark.entity.MarkStudent;
|
|
|
import com.qmth.teachcloud.mark.entity.MarkSubjectiveScore;
|
|
|
import com.qmth.teachcloud.mark.entity.MarkTask;
|
|
@@ -778,7 +784,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
for (MarkUserGroup markUserGroup : markUserGroups) {
|
|
|
MarkGroup markGroup = markGroupService.getByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber,
|
|
|
markUserGroup.getGroupNumber());
|
|
|
- markGroup.setQuestionList(markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber, markUserGroup.getGroupNumber(), false));
|
|
|
+ markGroup.setQuestionList(markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(examId,
|
|
|
+ paperNumber, markUserGroup.getGroupNumber(), false));
|
|
|
MarkGroupDto dto = new MarkGroupDto();
|
|
|
dto.setGroupNumber(markUserGroup.getGroupNumber());
|
|
|
dto.setTotalCount(markTaskService.countByExamIdAndPaperNumberAndGroupNumber(examId, paperNumber,
|
|
@@ -928,9 +935,9 @@ public class MarkServiceImpl implements MarkService {
|
|
|
page.addOrder(orderItem);
|
|
|
IPage<MarkTask> list = markTaskService.listPageHistory(page, userId, examId, paperNumber, groupNumber,
|
|
|
secretNumber, markerScore);
|
|
|
- List<MarkTaskDto> recordsDtos =new ArrayList<MarkTaskDto>();
|
|
|
+ List<MarkTaskDto> recordsDtos = new ArrayList<MarkTaskDto>();
|
|
|
for (MarkTask task : list.getRecords()) {
|
|
|
- MarkTaskDto dto = this.getTaskDto(task,group);
|
|
|
+ MarkTaskDto dto = this.getTaskDto(task, group);
|
|
|
recordsDtos.add(dto);
|
|
|
}
|
|
|
IPage<MarkTaskDto> result = new Page<MarkTaskDto>();
|
|
@@ -968,7 +975,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
for (MarkTask t : list) {
|
|
|
if (this.applyTask(t, userId)) {
|
|
|
- task = this.getTaskDto(t,group);
|
|
|
+ task = this.getTaskDto(t, group);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -997,12 +1004,12 @@ public class MarkServiceImpl implements MarkService {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
@Override
|
|
|
public boolean hasApplied(MarkTask t, Long userId) {
|
|
|
String key = t.getExamId() + "_" + t.getPaperNumber() + "_" + t.getGroupNumber();
|
|
|
- TaskLock taskLock = TaskLockUtil.getFormalTask(key);
|
|
|
- return taskLock.exist(t.getStudentId(), t.getTaskNumber(),userId);
|
|
|
+ TaskLock taskLock = TaskLockUtil.getFormalTask(key);
|
|
|
+ return taskLock.exist(t.getStudentId(), t.getTaskNumber(), userId);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -1024,8 +1031,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
Long now = System.currentTimeMillis();
|
|
|
if (result.isProblem()) {
|
|
|
// 状态更新
|
|
|
- if (markTaskService.updateProblemResult(task.getId(), userId, now,
|
|
|
- result.getSpent())) {
|
|
|
+ if (markTaskService.updateProblemResult(task.getId(), userId, now, result.getSpent())) {
|
|
|
saveProblemHistory(result, task, userId);
|
|
|
updateMarkedCount(markUserGroup.getExamId(), markUserGroup.getPaperNumber(),
|
|
|
markUserGroup.getGroupNumber());
|
|
@@ -1038,7 +1044,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
}
|
|
|
if (result.getMarkerScore() <= group.getTotalScore()) {
|
|
|
- if (submitTask(task,userId, group, result)) {
|
|
|
+ if (submitTask(task, userId, group, result)) {
|
|
|
updateMarkedCount(markUserGroup.getExamId(), markUserGroup.getPaperNumber(),
|
|
|
markUserGroup.getGroupNumber());
|
|
|
return SubmitResult.success(task);
|
|
@@ -1049,97 +1055,96 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
|
|
|
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(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());
|
|
|
- if(MarkProblemType.OTHER.equals(result.getProblemType())) {
|
|
|
- history.setRemark(result.getProblemRemark());
|
|
|
- }
|
|
|
- history.setStatus(MarkProblemStatus.WAITING);
|
|
|
- history.setUserId(userId);
|
|
|
- markProblemHistoryService.save(history);
|
|
|
+ MarkProblemHistory history = markProblemHistoryService.findByTaskIdAndStatus(task.getId(),
|
|
|
+ MarkProblemStatus.WAITING);
|
|
|
+ if (history == null) {
|
|
|
+ history = new MarkProblemHistory();
|
|
|
+ }
|
|
|
+ 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());
|
|
|
+ if (MarkProblemType.OTHER.equals(result.getProblemType())) {
|
|
|
+ history.setRemark(result.getProblemRemark());
|
|
|
+ }
|
|
|
+ history.setStatus(MarkProblemStatus.WAITING);
|
|
|
+ history.setUserId(userId);
|
|
|
+ markProblemHistoryService.save(history);
|
|
|
}
|
|
|
|
|
|
- private boolean submitTask(MarkTask task,Long userId, MarkGroup group, MarkResult result) {
|
|
|
- // 非本人领取的待评任务
|
|
|
- if ((task.getStatus() == MarkTaskStatus.WAITING || task.getStatus() == MarkTaskStatus.REJECTED)
|
|
|
- && !hasApplied(task, userId)) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- // 非本人的回评任务
|
|
|
- if ((task.getStatus() == MarkTaskStatus.MARKED)
|
|
|
- && !task.getUserId().equals(userId)) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- // 是否多评情况下已处理过该考生评卷任务
|
|
|
- if (markTaskService
|
|
|
- .countByStudentIdAndMarkerIdAndIdNotEqual(task.getStudentId(), userId, task.getId()) > 0) {
|
|
|
- return false;
|
|
|
- }
|
|
|
- // 未选做
|
|
|
+ private boolean submitTask(MarkTask task, Long userId, MarkGroup group, MarkResult result) {
|
|
|
+ // 非本人领取的待评任务
|
|
|
+ if ((task.getStatus() == MarkTaskStatus.WAITING || task.getStatus() == MarkTaskStatus.REJECTED)
|
|
|
+ && !hasApplied(task, userId)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // 非本人的回评任务
|
|
|
+ if ((task.getStatus() == MarkTaskStatus.MARKED) && !task.getUserId().equals(userId)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // 是否多评情况下已处理过该考生评卷任务
|
|
|
+ if (markTaskService.countByStudentIdAndMarkerIdAndIdNotEqual(task.getStudentId(), userId, task.getId()) > 0) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // 未选做
|
|
|
// if (result.isUnselective() && group.isSelective()) {
|
|
|
// result.setMarkerScore(UN_SELECTIVE_SCORE);
|
|
|
// result.setScoreList(new Double[0]);
|
|
|
// trackDao.deleteByLibraryId(library.getId());
|
|
|
// specialTagDao.deleteByLibraryId(library.getId());
|
|
|
// }
|
|
|
- // 尝试提交评卷结果
|
|
|
- Long now = System.currentTimeMillis();
|
|
|
- if (markTaskService.updateMarkerResult(task.getId(), MarkTaskStatus.MARKED, userId,
|
|
|
- result.getMarkerScore(), result.getScoreList(), now, result.getSpent(), null, null, null,
|
|
|
- MarkTaskStatus.WAITING, MarkTaskStatus.MARKED, MarkTaskStatus.REJECTED)) {
|
|
|
- // 条件不符更新失败,直接返回
|
|
|
- return false;
|
|
|
- }
|
|
|
- // 保存阅卷轨迹
|
|
|
+ // 尝试提交评卷结果
|
|
|
+ Long now = System.currentTimeMillis();
|
|
|
+ if (markTaskService.updateMarkerResult(task.getId(), MarkTaskStatus.MARKED, userId, result.getMarkerScore(),
|
|
|
+ result.getScoreList(), now, result.getSpent(), null, null, null, MarkTaskStatus.WAITING,
|
|
|
+ MarkTaskStatus.MARKED, MarkTaskStatus.REJECTED)) {
|
|
|
+ // 条件不符更新失败,直接返回
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ // 保存阅卷轨迹
|
|
|
// int unansweredCount = 0;
|
|
|
- if (result.getTrackList() != null && !result.isUnselective()) {
|
|
|
- markTrackService.deleteByTaskId(task.getId());
|
|
|
- markTrackService.saveBatch(result.getTrackList(task, userId));
|
|
|
+ if (result.getTrackList() != null && !result.isUnselective()) {
|
|
|
+ markTrackService.deleteByTaskId(task.getId());
|
|
|
+ markTrackService.saveBatch(result.getTrackList(task, userId));
|
|
|
// for (MarkTrack markTrack : tracks) {
|
|
|
// if (markTrack.isUnanswered()) {
|
|
|
// unansweredCount++;
|
|
|
// }
|
|
|
// }
|
|
|
// libraryDao.updateUnansweredCount(library.getId(), unansweredCount);
|
|
|
- }
|
|
|
- // 保存特殊标记
|
|
|
- if (result.getSpecialTagList() != null && !result.isUnselective()) {
|
|
|
- markSpecialTagService.deleteByTaskId(task.getId());
|
|
|
- markSpecialTagService.saveBatch(result.getSpecialTagList(task));
|
|
|
- }
|
|
|
- // 判断多评模式下是否需要仲裁
|
|
|
- MarkArbitrateHistory history = null;
|
|
|
- if (group.getArbitrateThreshold() != null && group.getArbitrateThreshold() > 0) {
|
|
|
- // 多评模式
|
|
|
- List<MarkTask> list = markTaskService.findByStudentIdAndGroupNumberAndStatus(task.getStudentId(),
|
|
|
- task.getGroupNumber(), MarkTaskStatus.MARKED);
|
|
|
- for (MarkTask other : list) {
|
|
|
- // 本评卷任务或组长已打分,则跳过该任务
|
|
|
- if (other.getId().equals(task.getId()) || other.getHeaderScore() != null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- // 均为未选做,跳过该任务
|
|
|
+ }
|
|
|
+ // 保存特殊标记
|
|
|
+ if (result.getSpecialTagList() != null && !result.isUnselective()) {
|
|
|
+ markSpecialTagService.deleteByTaskId(task.getId());
|
|
|
+ markSpecialTagService.saveBatch(result.getSpecialTagList(task));
|
|
|
+ }
|
|
|
+ // 判断多评模式下是否需要仲裁
|
|
|
+ MarkArbitrateHistory history = null;
|
|
|
+ if (group.getArbitrateThreshold() != null && group.getArbitrateThreshold() > 0) {
|
|
|
+ // 多评模式
|
|
|
+ List<MarkTask> list = markTaskService.findByStudentIdAndGroupNumberAndStatus(task.getStudentId(),
|
|
|
+ task.getGroupNumber(), MarkTaskStatus.MARKED);
|
|
|
+ for (MarkTask other : list) {
|
|
|
+ // 本评卷任务或组长已打分,则跳过该任务
|
|
|
+ if (other.getId().equals(task.getId()) || other.getHeaderScore() != null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ // 均为未选做,跳过该任务
|
|
|
// if (other.getMarkerScore() == UN_SELECTIVE_SCORE && result.getMarkerScore() == UN_SELECTIVE_SCORE) {
|
|
|
// continue;
|
|
|
// }
|
|
|
- // 其中一个有分另一个未选做 直接进入仲裁
|
|
|
+ // 其中一个有分另一个未选做 直接进入仲裁
|
|
|
// if ((other.getMarkerScore() != UN_SELECTIVE_SCORE && result.getMarkerScore() == UN_SELECTIVE_SCORE)
|
|
|
// || (other.getMarkerScore() == UN_SELECTIVE_SCORE && result.getMarkerScore() != UN_SELECTIVE_SCORE)) {
|
|
|
// history = buildArbitrateHistory(library, now);
|
|
|
// break;
|
|
|
// }
|
|
|
- // 分差超过阀值
|
|
|
- if (Math.abs(other.getMarkerScore() - result.getMarkerScore()) > group.getArbitrateThreshold()) {
|
|
|
- // 开启三评
|
|
|
+ // 分差超过阀值
|
|
|
+ if (Math.abs(other.getMarkerScore() - result.getMarkerScore()) > group.getArbitrateThreshold()) {
|
|
|
+ // 开启三评
|
|
|
// if (group.getThirdPolicy().equals(ThirdPolicy.LOW_DIFF_HIGH_AVG)) {
|
|
|
// if (libraryDao.countByStudentIdAndGroupNumber(library.getStudentId(), library.getGroupNumber()) == 2) {
|
|
|
// buildThirdLibrary(library, group);
|
|
@@ -1150,114 +1155,185 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// history = buildArbitrateHistory(libraries, group.getArbitrateThreshold(), now);
|
|
|
// }
|
|
|
// } else {
|
|
|
- // 未开启三评,触发仲裁
|
|
|
- history = buildArbitrateHistory(task, now);
|
|
|
- break;
|
|
|
+ // 未开启三评,触发仲裁
|
|
|
+ history = buildArbitrateHistory(task, now);
|
|
|
+ break;
|
|
|
// }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (history != null) {
|
|
|
- // 保存仲裁记录
|
|
|
- markArbitrateHistoryService.save(history);
|
|
|
- // 触发仲裁后续状态更新
|
|
|
- markTaskService.updateStatusByStudentIdAndGroupNumber(task.getStudentId(), task.getGroupNumber(),
|
|
|
- MarkTaskStatus.WAIT_ARBITRATE);
|
|
|
- // 未评完
|
|
|
- resetStudentGroup(task.getStudentId(), task.getExamId(), task.getPaperNumber(),
|
|
|
- task.getGroupNumber());
|
|
|
- } else {
|
|
|
- // 判断当前分组是否已完成评卷
|
|
|
- checkStudentGroup(task.getStudentId(), group);
|
|
|
- }
|
|
|
- return true;
|
|
|
- }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (history != null) {
|
|
|
+ // 保存仲裁记录
|
|
|
+ markArbitrateHistoryService.save(history);
|
|
|
+ // 触发仲裁后续状态更新
|
|
|
+ markTaskService.updateStatusByStudentIdAndGroupNumber(task.getStudentId(), task.getGroupNumber(),
|
|
|
+ MarkTaskStatus.WAIT_ARBITRATE);
|
|
|
+ // 未评完
|
|
|
+ resetStudentGroup(task.getStudentId(), task.getExamId(), task.getPaperNumber(), task.getGroupNumber());
|
|
|
+ } else {
|
|
|
+ // 判断当前分组是否已完成评卷
|
|
|
+ checkStudentGroup(task.getStudentId(), group);
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
|
|
|
private MarkArbitrateHistory buildArbitrateHistory(MarkTask task, Long now) {
|
|
|
MarkArbitrateHistory history = new MarkArbitrateHistory();
|
|
|
- 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;
|
|
|
- }
|
|
|
-
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
- public MarkTaskDto getTaskDto(MarkTask t,MarkGroup group) {
|
|
|
+ public MarkTaskDto getTaskDto(MarkTask t, MarkGroup group) {
|
|
|
MarkTaskDto task = new MarkTaskDto(t);
|
|
|
task.setQuestionList(buildMarkStep(t));
|
|
|
- task.setSheetUrls(null);
|
|
|
+ MarkStudent student = markStudentService.getById(t.getStudentId());
|
|
|
+ task.setSheetUrls(teachcloudCommonService.filePreview(student.getSheetPathList()));
|
|
|
task.setSliceConfig(group.getPictureConfigList());
|
|
|
- return task;
|
|
|
+ return task;
|
|
|
}
|
|
|
|
|
|
private List<MarkStepDTO> buildMarkStep(MarkTask task) {
|
|
|
- List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
|
|
|
- List<MarkQuestion> sList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(task.getExamId(), task.getPaperNumber(), task.getGroupNumber(), false);
|
|
|
- List<MarkTrack> tracks = new ArrayList<MarkTrack>();
|
|
|
- List<ScoreItem> sItems = new ArrayList<ScoreItem>();
|
|
|
- List<ScoreItem> rItems = null;
|
|
|
- if (task != null) {
|
|
|
- tracks = markTrackService.listByTaskId(task.getId());
|
|
|
- sItems = task.getMarkerScoreItem();
|
|
|
- }
|
|
|
- for (int i = 0; i < sList.size(); i++) {
|
|
|
- MarkQuestion question = sList.get(i);
|
|
|
- MarkStepDTO step = buildStep(question);
|
|
|
- if (task != null) {
|
|
|
- if (!sItems.isEmpty() && sItems.size() == sList.size()) {
|
|
|
- step.setScore(sItems.get(i).getScore());
|
|
|
- }
|
|
|
- if (rItems == null) {
|
|
|
- // 无打回记录
|
|
|
- step.setRejected(false);
|
|
|
- } else if (rItems != null && rItems.isEmpty()) {
|
|
|
- // 全打回
|
|
|
- step.setRejected(true);
|
|
|
- } else if (rItems != null && !rItems.isEmpty() && rItems.size() == sList.size()) {
|
|
|
- // 部分打回
|
|
|
- step.setRejected(rItems.get(i).getScore() == null);
|
|
|
- }
|
|
|
- // 未选做
|
|
|
+ List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
|
|
|
+ List<MarkQuestion> sList = markQuestionService.listQuestionByExamIdAndPaperNumberAndGroupNumber(
|
|
|
+ task.getExamId(), task.getPaperNumber(), task.getGroupNumber(), false);
|
|
|
+ List<MarkTrack> tracks = new ArrayList<MarkTrack>();
|
|
|
+ List<ScoreItem> sItems = new ArrayList<ScoreItem>();
|
|
|
+ List<ScoreItem> rItems = null;
|
|
|
+ if (task != null) {
|
|
|
+ tracks = markTrackService.listByTaskId(task.getId());
|
|
|
+ sItems = task.getMarkerScoreItem();
|
|
|
+ }
|
|
|
+ for (int i = 0; i < sList.size(); i++) {
|
|
|
+ MarkQuestion question = sList.get(i);
|
|
|
+ MarkStepDTO step = buildStep(question);
|
|
|
+ if (task != null) {
|
|
|
+ if (!sItems.isEmpty() && sItems.size() == sList.size()) {
|
|
|
+ step.setScore(sItems.get(i).getScore());
|
|
|
+ }
|
|
|
+ if (rItems == null) {
|
|
|
+ // 无打回记录
|
|
|
+ step.setRejected(false);
|
|
|
+ } else if (rItems != null && rItems.isEmpty()) {
|
|
|
+ // 全打回
|
|
|
+ step.setRejected(true);
|
|
|
+ } else if (rItems != null && !rItems.isEmpty() && rItems.size() == sList.size()) {
|
|
|
+ // 部分打回
|
|
|
+ step.setRejected(rItems.get(i).getScore() == null);
|
|
|
+ }
|
|
|
+ // 未选做
|
|
|
// if (task.getMarkerScore() != null && task.getMarkerScore() == UN_SELECTIVE_SCORE) {
|
|
|
// step.setScore(UN_SELECTIVE_SCORE);
|
|
|
// }
|
|
|
- // 增加阅卷轨迹列表获取
|
|
|
- String questionNumber = question.getQuestionNumber();
|
|
|
- for (MarkTrack track : tracks) {
|
|
|
- if (track.getQuestionNumber().equals(questionNumber)) {
|
|
|
- step.addTrack(new TrackDTO(track));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- list.add(step);
|
|
|
- }
|
|
|
- return list;
|
|
|
- }
|
|
|
+ // 增加阅卷轨迹列表获取
|
|
|
+ String questionNumber = question.getQuestionNumber();
|
|
|
+ for (MarkTrack track : tracks) {
|
|
|
+ if (track.getQuestionNumber().equals(questionNumber)) {
|
|
|
+ step.addTrack(new TrackDTO(track));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ list.add(step);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
|
|
|
private MarkStepDTO buildStep(MarkQuestion question) {
|
|
|
- MarkStepDTO step = new MarkStepDTO();
|
|
|
- step.setMainNumber(question.getMainNumber());
|
|
|
- step.setSubNumber(question.getSubNumber());
|
|
|
- step.setGroupNumber(question.getGroupNumber());
|
|
|
- step.setTitle(question.getMainTitle());
|
|
|
- step.setDefaultScore(0d);
|
|
|
- step.setMaxScore(question.getTotalScore());
|
|
|
- step.setMinScore(0d);
|
|
|
- step.setIntervalScore(question.getIntervalScore());
|
|
|
- step.setUncalculate(false);
|
|
|
+ MarkStepDTO step = new MarkStepDTO();
|
|
|
+ step.setMainNumber(question.getMainNumber());
|
|
|
+ step.setSubNumber(question.getSubNumber());
|
|
|
+ step.setGroupNumber(question.getGroupNumber());
|
|
|
+ step.setTitle(question.getMainTitle());
|
|
|
+ step.setDefaultScore(0d);
|
|
|
+ step.setMaxScore(question.getTotalScore());
|
|
|
+ step.setMinScore(0d);
|
|
|
+ step.setIntervalScore(question.getIntervalScore());
|
|
|
+ step.setUncalculate(false);
|
|
|
// step.setSelectiveIndex(question.getSelectiveIndex());
|
|
|
- return step;
|
|
|
- }
|
|
|
+ return step;
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public MarkTaskDto getTaskDto(MarkStudent student) {
|
|
|
MarkTaskDto task = new MarkTaskDto();
|
|
|
-
|
|
|
- return task;
|
|
|
+ task.setSheetUrls(teachcloudCommonService.filePreview(student.getSheetPathList()));
|
|
|
+ task.setStudentId(student.getId());
|
|
|
+ task.setSecretNumber(student.getSecretNumber());
|
|
|
+ task.setStudentCode(student.getStudentCode());
|
|
|
+ if (!student.getSubjectiveStatus().equals(SubjectiveStatus.UNMARK)) {
|
|
|
+ task.setQuestionList(buildMarkStep(student));
|
|
|
+ task.setSpecialTagList(getMarkSpecialTagList(student));
|
|
|
+ task.setHeaderTagList(getHeaderTagList(student));
|
|
|
+ }
|
|
|
+ if (StringUtils.isNotBlank(student.getObjectiveScoreList())) {
|
|
|
+ task.setObjectiveScore(student.getObjectiveScore());
|
|
|
+ }
|
|
|
+ task.setMarkerScore(student.getTotalScore());
|
|
|
+ return task;
|
|
|
+ }
|
|
|
+
|
|
|
+ private SpecialTagDTO[] getHeaderTagList(MarkStudent student) {
|
|
|
+ List<MarkHeaderTag> list = markHeaderTagService.findByStudentId(student.getId());
|
|
|
+ SpecialTagDTO[] specialTags = new SpecialTagDTO[list.size()];
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ specialTags[i] = new MarkerSpecialTagDTO(list.get(i).getUserId(), list.get(i).getGroupNumber(),
|
|
|
+ list.get(i));
|
|
|
+ }
|
|
|
+ return specialTags;
|
|
|
+ }
|
|
|
+
|
|
|
+ private SpecialTagDTO[] getMarkSpecialTagList(MarkStudent student) {
|
|
|
+ List<SpecialTagDTO> list = new LinkedList<>();
|
|
|
+ List<MarkGroup> groups = markGroupService.listGroupByExamIdAndPaperNumber(student.getExamId(),
|
|
|
+ student.getPaperNumber());
|
|
|
+ for (MarkGroup group : groups) {
|
|
|
+ List<MarkTask> libraryList = markTaskService.listByStudentIdAndGroupNumber(student.getId(),
|
|
|
+ group.getNumber());
|
|
|
+ // 不管单评还是多评显示所有评卷员特殊标记
|
|
|
+ for (MarkTask library : libraryList) {
|
|
|
+ List<MarkSpecialTag> tagList = markSpecialTagService.findByTaskId(library.getId());
|
|
|
+ for (MarkSpecialTag specialTag : tagList) {
|
|
|
+ list.add(new MarkerSpecialTagDTO(library.getUserId(), library.getGroupNumber(), specialTag));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list.toArray(new SpecialTagDTO[0]);
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<MarkStepDTO> buildMarkStep(MarkStudent student) {
|
|
|
+ List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
|
|
|
+ List<MarkQuestion> sList = markQuestionService.listQuestionByExamIdAndPaperNumber(student.getExamId(),
|
|
|
+ student.getPaperNumber(), false);
|
|
|
+ List<MarkSubjectiveScore> scoreList = markSubjectiveScoreService.listByStudentId(student.getId());
|
|
|
+ // List<ScoreItem> sItems = student.getScoreList(false);
|
|
|
+ for (int i = 0; i < scoreList.size(); i++) {
|
|
|
+ MarkQuestion question = sList.get(i);
|
|
|
+ String questionNumber = question.getQuestionNumber();
|
|
|
+ MarkStepDTO step = buildStep(question);
|
|
|
+ if (!scoreList.isEmpty() && scoreList.size() == sList.size()) {
|
|
|
+ step.setScore(scoreList.get(i).getScore());
|
|
|
+// step.setRejected(scoreList.get(i).getRejected());
|
|
|
+ }
|
|
|
+ // 不管单评还是多评显示所有评卷员给分轨迹
|
|
|
+ List<MarkTrack> tracks = markTrackService.findByStudentIdAndQuestionNumber(student.getId(), questionNumber);
|
|
|
+ for (MarkTrack track : tracks) {
|
|
|
+ step.addTrack(new MarkerTrackDTO(track));
|
|
|
+ }
|
|
|
+ // 仲裁轨迹
|
|
|
+ List<MarkHeaderTrack> headerTracks = markHeaderTrackService
|
|
|
+ .listByStudentIdAndQuestionNumber(student.getId(), questionNumber);
|
|
|
+ for (MarkHeaderTrack headerTrack : headerTracks) {
|
|
|
+ step.addHeaderTrack(new TrackDTO(headerTrack));
|
|
|
+ }
|
|
|
+ list.add(step);
|
|
|
+ }
|
|
|
+ return list;
|
|
|
}
|
|
|
}
|