|
@@ -3,6 +3,7 @@ package cn.com.qmth.stmms.ms.marking.service;
|
|
|
import cn.com.qmth.stmms.ms.commons.config.LevelConfig;
|
|
|
import cn.com.qmth.stmms.ms.commons.constant.ArbitrateCallback;
|
|
|
import cn.com.qmth.stmms.ms.commons.constant.ArbitrateResult;
|
|
|
+import cn.com.qmth.stmms.ms.commons.utils.ServletUtil;
|
|
|
import cn.com.qmth.stmms.ms.core.cache.CacheService;
|
|
|
import cn.com.qmth.stmms.ms.core.cache.ParamCache;
|
|
|
import cn.com.qmth.stmms.ms.core.domain.*;
|
|
@@ -12,7 +13,6 @@ import cn.com.qmth.stmms.ms.core.domain.user.Role;
|
|
|
import cn.com.qmth.stmms.ms.core.repository.*;
|
|
|
import cn.com.qmth.stmms.ms.core.vo.Subject;
|
|
|
import cn.com.qmth.stmms.ms.marking.config.MarkingConfig;
|
|
|
-import cn.com.qmth.stmms.ms.marking.service.arbitration.ArbitrationService;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
@@ -397,6 +397,32 @@ public class MarkingService {
|
|
|
paper.setScore(fs);
|
|
|
//改档打分完成,更新状态为false
|
|
|
paper.setShiftScore(false);
|
|
|
+
|
|
|
+ // 最终分数和档位不匹配,需要更新档位
|
|
|
+ Level level = levelRepo.findByWorkIdAndScore(markTask.getWorkId(), (int) fs);
|
|
|
+ if (level != null && !level.getCode().equals(paper.getLevel())) {
|
|
|
+ paper.setLevel(level.getCode());
|
|
|
+
|
|
|
+ List<MarkLog> markLogList = new ArrayList<>();
|
|
|
+ Work work = workRepo.findOne(markTask.getWorkId());
|
|
|
+ // 打分任务
|
|
|
+ markTasks.forEach(m -> {
|
|
|
+ MarkLog markLog = new MarkLog(m.getMarkerId(), m.getMarkerName(), Role.MARKER, markTask.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.MARKER_DIRECT_SCORE.getId(), paper.getWorkId(), paper.getId(), MarkStage.SCORE, m.getResult() + "[" + m.getLevel() + "]", m.getResult() + "[" + level.getCode() + "]", null, work.getName(), new Date());
|
|
|
+ markLogList.add(markLog);
|
|
|
+ m.setLevel(level.getCode());
|
|
|
+ });
|
|
|
+ markTaskRepo.save(markTasks);
|
|
|
+ // 分档任务
|
|
|
+ List<MarkTask> scoreMarkTasks = markTaskRepo.findByPaperIdAndStage(paper.getId(), MarkStage.LEVEL);
|
|
|
+ scoreMarkTasks.forEach(m -> {
|
|
|
+ m.setLevel(level.getCode());
|
|
|
+ m.setResult(level.getCode());
|
|
|
+ m.setLevelValue(level.getLevelValue());
|
|
|
+ });
|
|
|
+ markTaskRepo.save(scoreMarkTasks);
|
|
|
+ markLogRepo.save(markLogList);
|
|
|
+ }
|
|
|
+
|
|
|
paperRepo.save(paper);
|
|
|
}
|
|
|
return markTask;
|
|
@@ -499,4 +525,56 @@ public class MarkingService {
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
+ @Transactional
|
|
|
+ public void updateScoreByLeader(Long workId, Long paperId, MarkStage stage, Integer score) {
|
|
|
+ if (!MarkStage.SCORE.equals(stage)) {
|
|
|
+ throw new RuntimeException("打分阶段才可执行此操作");
|
|
|
+ }
|
|
|
+ if (score == null) {
|
|
|
+ throw new RuntimeException("请输入分数");
|
|
|
+ }
|
|
|
+ Level level = levelRepo.findByWorkIdAndScore(workId, score);
|
|
|
+ if (level == null) {
|
|
|
+ throw new RuntimeException("分数[" + score + "]不在任何档位区间内,请重新输入");
|
|
|
+ }
|
|
|
+ Paper paper = paperRepo.findOne(paperId);
|
|
|
+ if (paper == null) {
|
|
|
+ throw new RuntimeException("试卷不存在");
|
|
|
+ }
|
|
|
+ //原始分数和档位
|
|
|
+ String operDataBefore = paper.getScore() == null ? "未打分[" + paper.getLevel() + "]" : paper.getScore() + "[" + paper.getLevel() + "]";
|
|
|
+
|
|
|
+ // 打分任务
|
|
|
+ List<MarkTask> scoreMarkTasks = markTaskRepo.findByPaperIdAndStage(paperId, MarkStage.SCORE);
|
|
|
+ scoreMarkTasks.forEach(m -> {
|
|
|
+ m.setResult(String.valueOf(score));
|
|
|
+ m.setLevel(level.getCode());
|
|
|
+ m.setManualScore(1);
|
|
|
+ m.setUpdatedOn(new Date());
|
|
|
+ });
|
|
|
+ markTaskRepo.save(scoreMarkTasks);
|
|
|
+
|
|
|
+ // 分档任务
|
|
|
+ List<MarkTask> levelMarkTasks = markTaskRepo.findByPaperIdAndStage(paperId, MarkStage.SCORE);
|
|
|
+ levelMarkTasks.forEach(m -> {
|
|
|
+ m.setResult(level.getCode());
|
|
|
+ m.setLevel(level.getCode());
|
|
|
+ m.setLevelValue(level.getLevelValue());
|
|
|
+ m.setUpdatedOn(new Date());
|
|
|
+ });
|
|
|
+ markTaskRepo.save(levelMarkTasks);
|
|
|
+
|
|
|
+ // 试卷最终档位和分数
|
|
|
+ paper.setLevel(level.getCode());
|
|
|
+ paper.setScore(Double.valueOf(score));
|
|
|
+ paper.setSortNum(level.getWeight() * levelMarkTasks.size());
|
|
|
+ paperRepo.save(paper);
|
|
|
+
|
|
|
+ // 操作日志
|
|
|
+ MarkUser markUser = markUserRepo.findOne(ServletUtil.getUserId());
|
|
|
+ Work work = workRepo.findOne(workId);
|
|
|
+ MarkLog markLog = new MarkLog(markUser.getId(), markUser.getName(), markUser.getRole(), markUser.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.LEADER_DIRECT_SCORE.getId(), paper.getWorkId(), paper.getId(), MarkStage.SCORE, operDataBefore, paper.getScore() + "[" + paper.getLevel() + "]", null, work.getName(), new Date());
|
|
|
+ markLogRepo.save(markLog);
|
|
|
+ }
|
|
|
}
|