|
@@ -119,51 +119,61 @@ public class MarkingService {
|
|
|
MarkTask[] sources = new MarkTask[markTasks.size()];
|
|
|
//定档
|
|
|
DeterResult determine = determineLevelService.determine(markingConfig.isMajority(), markTasks.toArray(sources));
|
|
|
- if (Objects.nonNull(determine) && Objects.nonNull(determine.getResult())) {
|
|
|
+ //1.过半定档
|
|
|
+ if (Objects.nonNull(determine) && Objects.nonNull(determine.getResult()) && determine.getDeterType() == DetermineLevelService.DeterType.MAJORITY) {
|
|
|
paper.determineLevel(determine.getResult());
|
|
|
- if (determine.getDeterType() == DetermineLevelService.DeterType.WEIGHT) {
|
|
|
- paper.setMarkedLogic(true);
|
|
|
- } else {
|
|
|
- paper.setMarkedLogic(false);
|
|
|
- }
|
|
|
- //20191108wangliang加入档位落差值计算
|
|
|
- Map<Long, String> levelsMap = markTasks.stream().collect(Collectors.toMap(MarkTask::getMarkerId, o -> o.getResult().toUpperCase()));
|
|
|
- List<ArbitrateCallback.Distance> list = ArbitrateCallback.judge(levelsMap, paper.getLevel());
|
|
|
- String operResult = "-";
|
|
|
- for (ArbitrateCallback.Distance d : list) {
|
|
|
- for (MarkTask m : markTasks) {
|
|
|
- if (Objects.equals(String.valueOf(d.getC()), m.getResult()) && d.getMarkId().longValue() == m.getMarkerId().longValue()) {
|
|
|
- MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(m.getMarkerId(), MarkLogOperType.LEVEl_DIFFERENCE.getId(), m.getSubject().toString(), paper.getExamNumber());
|
|
|
- JSONObject jsonObject = new JSONObject();
|
|
|
- jsonObject.put("task", m.getResult());
|
|
|
- jsonObject.put("paper", paper.getLevel());
|
|
|
- if (Objects.isNull(markLogPrev)) {
|
|
|
- //加入档位落差值日志
|
|
|
- MarkLog markLog = new MarkLog(m.getMarkerId(), m.getMarkerName(), Role.MARKER, m.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.LEVEl_DIFFERENCE.getId(), paper.getWorkId(), paper.getId(), m.getStage(), operResult, String.valueOf(d.getDistance()), jsonObject.toJSONString());
|
|
|
- markLogRepo.save(markLog);
|
|
|
- } else {
|
|
|
- operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
|
|
|
- markLogPrev.setOperDataBefore(operResult);
|
|
|
- markLogPrev.setOperDataAfter(String.valueOf(d.getDistance()));
|
|
|
- markLogPrev.setRemark(jsonObject.toJSONString());
|
|
|
- markLogRepo.save(markLogPrev);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ paper.setMarkedLogic(false);
|
|
|
+ //档位落差值日志
|
|
|
+ levelsLog(markTasks, paper);
|
|
|
} else {
|
|
|
int[] values = markTasks.stream().mapToInt(MarkTask::getLevelValue).toArray();
|
|
|
boolean result = ArbitrationService.arbitrate(markingConfig.getDeviation(), values);
|
|
|
+ //2.最大落差超过仲裁档位,则仲裁打回
|
|
|
if (result) {
|
|
|
//仲裁
|
|
|
paper.arbitrate();
|
|
|
}
|
|
|
+ //3.最大落差未超过仲裁档位,则权重计算定档
|
|
|
+ else if (Objects.nonNull(determine) && Objects.nonNull(determine.getResult()) && determine.getDeterType() == DetermineLevelService.DeterType.WEIGHT) {
|
|
|
+ paper.determineLevel(determine.getResult());
|
|
|
+ paper.setMarkedLogic(true);
|
|
|
+ //档位落差值日志
|
|
|
+ levelsLog(markTasks, paper);
|
|
|
+ }
|
|
|
}
|
|
|
paperRepo.save(paper);
|
|
|
}
|
|
|
return markTask;
|
|
|
}
|
|
|
|
|
|
+ private void levelsLog(List<MarkTask> markTasks, Paper paper) {
|
|
|
+ //20191108wangliang加入档位落差值计算
|
|
|
+ Map<Long, String> levelsMap = markTasks.stream().collect(Collectors.toMap(MarkTask::getMarkerId, o -> o.getResult().toUpperCase()));
|
|
|
+ List<ArbitrateCallback.Distance> list = ArbitrateCallback.judge(levelsMap, paper.getLevel());
|
|
|
+ String operResult = "-";
|
|
|
+ for (ArbitrateCallback.Distance d : list) {
|
|
|
+ for (MarkTask m : markTasks) {
|
|
|
+ if (Objects.equals(String.valueOf(d.getC()), m.getResult()) && d.getMarkId().longValue() == m.getMarkerId().longValue()) {
|
|
|
+ MarkLog markLogPrev = markLogRepo.findTopByCreateUserIdAndOperTypeAndSubjectAndExamNumberOrderByCreateTimeDesc(m.getMarkerId(), MarkLogOperType.LEVEl_DIFFERENCE.getId(), m.getSubject().toString(), paper.getExamNumber());
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
+ jsonObject.put("task", m.getResult());
|
|
|
+ jsonObject.put("paper", paper.getLevel());
|
|
|
+ if (Objects.isNull(markLogPrev)) {
|
|
|
+ //加入档位落差值日志
|
|
|
+ MarkLog markLog = new MarkLog(m.getMarkerId(), m.getMarkerName(), Role.MARKER, m.getSubject(), paper.getExamNumber(), paper.getStudentName(), MarkLogOperType.LEVEl_DIFFERENCE.getId(), paper.getWorkId(), paper.getId(), m.getStage(), operResult, String.valueOf(d.getDistance()), jsonObject.toJSONString());
|
|
|
+ markLogRepo.save(markLog);
|
|
|
+ } else {
|
|
|
+ operResult = Optional.ofNullable(markLogPrev.getOperDataAfter()).orElse("-");
|
|
|
+ markLogPrev.setOperDataBefore(operResult);
|
|
|
+ markLogPrev.setOperDataAfter(String.valueOf(d.getDistance()));
|
|
|
+ markLogPrev.setRemark(jsonObject.toJSONString());
|
|
|
+ markLogRepo.save(markLogPrev);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 直接给试卷分档
|
|
|
*
|