|
@@ -2,9 +2,10 @@ package cn.com.qmth.stmms.ms.marking.service;
|
|
|
|
|
|
import cn.com.qmth.stmms.ms.commons.constant.ArbitrateCallback;
|
|
|
import cn.com.qmth.stmms.ms.commons.constant.ArbitrateResult;
|
|
|
+import cn.com.qmth.stmms.ms.core.cache.ParamCache;
|
|
|
import cn.com.qmth.stmms.ms.core.domain.*;
|
|
|
import cn.com.qmth.stmms.ms.core.domain.task.MarkTaskLevel;
|
|
|
-import cn.com.qmth.stmms.ms.core.domain.user.MarkUser;
|
|
|
+import cn.com.qmth.stmms.ms.core.domain.task.MarkTaskRoughLevel;
|
|
|
import cn.com.qmth.stmms.ms.core.domain.user.Role;
|
|
|
import cn.com.qmth.stmms.ms.core.repository.*;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
@@ -32,10 +33,10 @@ public class MarkingLevelService {
|
|
|
private DetermineLevelService determineLevelService;
|
|
|
|
|
|
@Resource
|
|
|
- private MarkTaskLevelRepo markTaskLevelRepo;
|
|
|
+ private MarkTaskRoughLevelRepo markTaskRoughLevelRepo;
|
|
|
|
|
|
- @Autowired
|
|
|
- private MarkUserRepo markUserRepo;
|
|
|
+ @Resource
|
|
|
+ private MarkTaskLevelRepo markTaskLevelRepo;
|
|
|
|
|
|
@Autowired
|
|
|
private PaperRepo paperRepo;
|
|
@@ -76,6 +77,9 @@ public class MarkingLevelService {
|
|
|
@Resource
|
|
|
MarkingLevelService markingLevelService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ MarkLogService markLogService;
|
|
|
+
|
|
|
/**
|
|
|
* 提交分档。如果每个评卷都提交了,则进行仲裁判定,如果没有触发仲裁就定档
|
|
|
*
|
|
@@ -94,19 +98,20 @@ public class MarkingLevelService {
|
|
|
return markTask;
|
|
|
}
|
|
|
|
|
|
- MarkUser maker = markUserRepo.findOne(markTask.getMarkerId());
|
|
|
-
|
|
|
List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
|
|
|
Level level = levels.stream().filter(m -> levelCode.equals(m.getCode())).findFirst().get();
|
|
|
|
|
|
+ MarkLog markLog = markLogService.markingLevelLog(markTask, levelCode);
|
|
|
+
|
|
|
markTask.setResult(levelCode);
|
|
|
+ markTask.setOriginLevel(null);
|
|
|
markTask.setLevelValue(level.getLevelValue());
|
|
|
markTask.setRejected(false);
|
|
|
markTask.setDeviationDirection(null);
|
|
|
markTask.setUpdatedOn(new Date());
|
|
|
- markTask.setMarkerName(maker.getName());
|
|
|
|
|
|
markTaskLevelRepo.save(markTask);
|
|
|
+ markLogRepo.save(markLog);
|
|
|
|
|
|
//判断该任务的试卷是否所有评卷员都评完,要进行仲裁判定或定档
|
|
|
List<MarkTaskLevel> markTasks = markTaskLevelRepo.findByPaperId(paper.getId());
|
|
@@ -119,7 +124,7 @@ public class MarkingLevelService {
|
|
|
paper.determineLevel(determine.getResult());
|
|
|
paper.setMarkedLogic(false);
|
|
|
//档位落差值日志
|
|
|
- levelsLog(markTasks, paper);
|
|
|
+// levelsLog(markTasks, paper);
|
|
|
}
|
|
|
//仲裁
|
|
|
else if (determine.getDeterType() == DetermineLevelService.DeterType.ARBITRATE) {
|
|
@@ -131,8 +136,28 @@ public class MarkingLevelService {
|
|
|
paper.setRejectedByLeader(true);
|
|
|
//需要打回的评卷员
|
|
|
String ranges = String.join(",", determine.getRejectTasks());
|
|
|
- markingLevelService.reject(paper, null, ranges, true);
|
|
|
+ markingLevelService.reject(paper, null, ranges, true, true);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 若开启了粗分档,细分档改档时,对应更新粗分档档位值,与细分档的匹配
|
|
|
+ boolean roughLevelEnable = ParamCache.levelConfigMap.get(String.valueOf(markTask.getWorkId())).getRoughLevelEnable() == 1;
|
|
|
+ if(roughLevelEnable){
|
|
|
+ Optional<Level> levelOptional = levels.stream().filter(m -> paper.getLevel().equals(m.getCode())).findFirst();
|
|
|
+ if(!levelOptional.isPresent()){
|
|
|
+ throw new RuntimeException("分档档位值有误,未查询到档位【"+paper.getLevel()+"】");
|
|
|
+ }
|
|
|
+
|
|
|
+ String roughLevel = levelOptional.get().getRoughCode();
|
|
|
+ List<MarkTaskRoughLevel> markTaskRoughLevelList = markTaskRoughLevelRepo.findByPaperId(paper.getId());
|
|
|
+ for (MarkTaskRoughLevel markTaskRoughLevel : markTaskRoughLevelList) {
|
|
|
+ markTaskRoughLevel.setResult(roughLevel);
|
|
|
+ markTaskRoughLevel.setLevel(roughLevel);
|
|
|
+ }
|
|
|
+ markTaskRoughLevelRepo.save(markTaskRoughLevelList);
|
|
|
+
|
|
|
+ paper.setRoughLevel(roughLevel);
|
|
|
}
|
|
|
+
|
|
|
//改档后重新分档,状态改为false
|
|
|
paper.setShift(false);
|
|
|
// paper.setShiftScore(false);
|
|
@@ -193,7 +218,7 @@ public class MarkingLevelService {
|
|
|
if (Objects.isNull(markLogPrev)) {//新建日志
|
|
|
//加入档位落差值日志
|
|
|
Work work = workRepo.findOne(paper.getWorkId());
|
|
|
- MarkLog markLog = new MarkLog(m.getMarkerId(), m.getMarkerName(), Role.MARKER, m.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.LEVEl_DIFFERENCE.getId(), paper.getWorkId(), paper.getId(), MarkStage.LEVEL, operResult, String.valueOf(d.getDistance()), jsonObject.toJSONString(), work.getName(), date);
|
|
|
+ MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), m.getSubject(), MarkStage.LEVEL, paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.LEVEl_DIFFERENCE.getId(), operResult, String.valueOf(d.getDistance()), jsonObject.toJSONString(), date);
|
|
|
markLogRepo.save(markLog);
|
|
|
} else {//更新日志
|
|
|
operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
|
|
@@ -207,7 +232,7 @@ public class MarkingLevelService {
|
|
|
if (Objects.isNull(markLogDevi)) {//新建日志
|
|
|
//加入档位偏差值日志
|
|
|
Work work = workRepo.findOne(paper.getWorkId());
|
|
|
- MarkLog markLog = new MarkLog(m.getMarkerId(), m.getMarkerName(), Role.MARKER, m.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.LEVEl_DEVIATION.getId(), paper.getWorkId(), paper.getId(), MarkStage.LEVEL, operResult, String.valueOf(d.getDeviation()), jsonObject.toJSONString(), work.getName(), date);
|
|
|
+ MarkLog markLog = new MarkLog(paper.getWorkId(), work.getName(), paper.getId(), m.getSubject(), MarkStage.LEVEL, paper.getExamNumber(), paper.getStudentName(), m.getMarkerId(), m.getMarkerName(), Role.MARKER, MarkLogOperType.LEVEl_DEVIATION.getId(), operResult, String.valueOf(d.getDeviation()), jsonObject.toJSONString(), date);
|
|
|
markLogRepo.save(markLog);
|
|
|
} else {//更新日志
|
|
|
operResult = Optional.ofNullable(markLogDevi.getOperDataAfter()).orElse("-");
|
|
@@ -235,6 +260,8 @@ public class MarkingLevelService {
|
|
|
public Paper levelMarkPaper(Paper paper, String level, boolean isSample) {
|
|
|
List<Level> levels = levelRepo.findByWorkId(paper.getWorkId());
|
|
|
|
|
|
+ MarkLog markLog = markLogService.markingPaper(MarkStage.ROUGH_LEVEL, paper, level, isSample);
|
|
|
+
|
|
|
paper.determineLevel(level);
|
|
|
paper.setMarkByLeader(true);
|
|
|
paper.setSample(isSample);
|
|
@@ -250,7 +277,8 @@ public class MarkingLevelService {
|
|
|
|
|
|
paper.setSortNum(calcSortNum(paper, markTasks, levels));
|
|
|
paperRepo.save(paper);
|
|
|
- levelsLog(markTasks, paper);
|
|
|
+// levelsLog(markTasks, paper);
|
|
|
+ markLogRepo.save(markLog);
|
|
|
return paper;
|
|
|
}
|
|
|
|
|
@@ -260,12 +288,14 @@ public class MarkingLevelService {
|
|
|
* 更新评卷任务状态为打回
|
|
|
* 如果评卷任务的档位和建议档位一致,不打回该任务
|
|
|
*
|
|
|
- * @param paper
|
|
|
- * @param redoLevel 建议重评档位
|
|
|
- * @param ranges
|
|
|
+ * @param paper 试卷
|
|
|
+ * @param redoLevel 建议重评档位
|
|
|
+ * @param ranges 打回评卷员id集合
|
|
|
+ * @param leaderConfirm 科组长是否需要确认
|
|
|
+ * @param autoReject 是否自动打回
|
|
|
*/
|
|
|
@Transactional
|
|
|
- public Paper reject(Paper paper, String redoLevel, String ranges, boolean leaderConfirm) {
|
|
|
+ public Paper reject(Paper paper, String redoLevel, String ranges, boolean leaderConfirm, boolean autoReject) {
|
|
|
paper.reject(redoLevel);
|
|
|
//科组长打回标记
|
|
|
paper.setRejectedByLeader(true);
|
|
@@ -280,26 +310,21 @@ public class MarkingLevelService {
|
|
|
Map<String, Integer> levelMap = levels.stream().collect(Collectors.toMap(Level::getCode, Level::getLevelValue));
|
|
|
|
|
|
List<MarkLog> markLogList = new ArrayList<>();
|
|
|
- Date date = new Date();
|
|
|
for (MarkTaskLevel markTask : markTasks) {
|
|
|
String[] range = ranges.split(",");
|
|
|
if (range.length > 0) {
|
|
|
//加入手动打回日志
|
|
|
- String operResult = "-";
|
|
|
for (String r : range) {
|
|
|
// 建议的档位与其中评委所评档位相同时就不打回给此评委
|
|
|
if (Objects.equals(String.valueOf(markTask.getMarkerId()), r) && (StringUtils.isBlank(redoLevel) || leaderConfirm || !redoLevel.equals(markTask.getResult()))) {
|
|
|
markTask.setRejected(true);
|
|
|
- markTask.setOriginLevel(markTask.getResult());
|
|
|
+ if (markTask.getResult() != null) {
|
|
|
+ markTask.setOriginLevel(markTask.getResult());
|
|
|
+ }
|
|
|
markTask.setResult(null);
|
|
|
markTask.setLevel(null);
|
|
|
markTask.setDeviationDirection(calcDeviationDirection(levelMap, markTask.getOriginLevel(), redoLevel));
|
|
|
- MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(markTask.getMarkerId(), MarkLogOperType.HANDLE_LEVEl.getId(), markTask.getSubject().toString(), paper.getExamNumber());
|
|
|
- if (Objects.nonNull(markLogPrev)) {
|
|
|
- operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
|
|
|
- }
|
|
|
- Work work = workRepo.findOne(paper.getWorkId());
|
|
|
- MarkLog markLog = new MarkLog(markTask.getMarkerId(), markTask.getMarkerName(), Role.MARKER, markTask.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.HANDLE_LEVEl.getId(), paper.getWorkId(), paper.getId(), MarkStage.LEVEL, operResult, markTask.getOriginLevel(), MarkLogOperType.HANDLE_LEVEl.getName(), work.getName(), date);
|
|
|
+ MarkLog markLog = markLogService.markingPaperReject(MarkStage.LEVEL, paper, autoReject, markTask.getMarkerId(), markTask.getMarkerName(), markTask.getOriginLevel());
|
|
|
markLogList.add(markLog);
|
|
|
}
|
|
|
}
|