|
@@ -559,7 +559,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
markTask.setSecretNumber(student.getSecretNumber());
|
|
|
markTask.setTaskNumber(1);
|
|
|
markTask.setAiMarked(getAiMarked(markQuestion, markTask.getTaskNumber()));
|
|
|
- markTask.setRetryCount(markTask.getAiMarked() ? 5 : null);
|
|
|
+ markTask.setRetryCount(markTask.getAiMarked() ? SystemConstant.AI_MARK_RETRY_COUNT : 0);
|
|
|
+ markTask.setNextRetryTime(markTask.getAiMarked() ? System.currentTimeMillis() : null);
|
|
|
markTask.setStatus(MarkTaskStatus.WAITING);
|
|
|
taskList.add(markTask);
|
|
|
// 开启双评时需要判断是否生成第二份评卷任务
|
|
@@ -592,7 +593,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
markTask.setSecretNumber(student.getSecretNumber());
|
|
|
markTask.setTaskNumber(2);
|
|
|
markTask.setAiMarked(getAiMarked(markQuestion, markTask.getTaskNumber()));
|
|
|
- markTask.setRetryCount(markTask.getAiMarked() ? 5 : null);
|
|
|
+ markTask.setRetryCount(markTask.getAiMarked() ? SystemConstant.AI_MARK_RETRY_COUNT : 0);
|
|
|
+ markTask.setNextRetryTime(markTask.getAiMarked() ? System.currentTimeMillis() : null);
|
|
|
markTask.setStatus(MarkTaskStatus.WAITING);
|
|
|
taskList.add(markTask);
|
|
|
doubleCount++;
|
|
@@ -693,7 +695,8 @@ public class MarkServiceImpl implements MarkService {
|
|
|
markTask.setSecretNumber(student.getSecretNumber());
|
|
|
markTask.setTaskNumber(2);
|
|
|
markTask.setAiMarked(getAiMarked(markQuestion, markTask.getTaskNumber()));
|
|
|
- markTask.setRetryCount(markTask.getAiMarked() ? 5 : null);
|
|
|
+ markTask.setRetryCount(markTask.getAiMarked() ? SystemConstant.AI_MARK_RETRY_COUNT : 0);
|
|
|
+ markTask.setNextRetryTime(markTask.getAiMarked() ? System.currentTimeMillis() : null);
|
|
|
markTask.setStatus(MarkTaskStatus.WAITING);
|
|
|
taskList.add(markTask);
|
|
|
doubleCount++;
|
|
@@ -845,6 +848,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
Map<Integer, List<MarkSubjectiveScore>> mainScoreMap = new HashMap<>();
|
|
|
Map<Integer, Double> scoreMap = new HashMap<>();
|
|
|
|
|
|
+ boolean aiMarkAbnormal = false;
|
|
|
// 循环所有主观得分明细
|
|
|
List<MarkSubjectiveScore> list = markSubjectiveScoreService.listByStudentId(studentId);
|
|
|
// list.sort(null);
|
|
@@ -855,13 +859,21 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
mainScoreList.add(ss);
|
|
|
mainScoreMap.put(ss.getMainNumber(), mainScoreList);
|
|
|
- scoreList.add(new ScoreItem(ss));
|
|
|
+ if (ss.getScore() != SystemConstant.AI_MARK_ERROR_SCORE) {
|
|
|
+ scoreList.add(new ScoreItem(ss));
|
|
|
+ } else {
|
|
|
+ aiMarkAbnormal = true;
|
|
|
+ }
|
|
|
}
|
|
|
// 计算大题分
|
|
|
for (Integer mainNumber : mainScoreMap.keySet()) {
|
|
|
List<MarkSubjectiveScore> mainScoreList = mainScoreMap.get(mainNumber);
|
|
|
BigDecimal mainScore = BigDecimal.ZERO;
|
|
|
for (MarkSubjectiveScore subjectiveScore : mainScoreList) {
|
|
|
+ // -1分不参与计算
|
|
|
+ if (subjectiveScore.getScore() == SystemConstant.AI_MARK_ERROR_SCORE) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
mainScore = mainScore.add(BigDecimal.valueOf(subjectiveScore.getScore()));
|
|
|
}
|
|
|
for (MarkSubjectiveScore subjectiveScore : mainScoreList) {
|
|
@@ -879,7 +891,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// 全部评完,更新考生主观题得分
|
|
|
// markStudentService.updateSubjectiveStatusAndScore(studentId, SubjectiveStatus.MARKED, totalScore.doubleValue(),
|
|
|
// MarkStudent.buildScoreList(scoreList));
|
|
|
- markStudentService.updateSubjectiveScoreByVersion(studentId, SubjectiveStatus.MARKED, totalScore.doubleValue(), MarkStudent.buildScoreList(scoreList), version, autoCalc);
|
|
|
+ markStudentService.updateSubjectiveScoreByVersion(studentId, SubjectiveStatus.MARKED, totalScore.doubleValue(), MarkStudent.buildScoreList(scoreList), version, autoCalc, aiMarkAbnormal);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -1428,7 +1440,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
continue;
|
|
|
}
|
|
|
// 分差超过阀值
|
|
|
- if (Math.abs(other.getMarkerScore() - result.getMarkerScore()) > markQuestion.getArbitrateThreshold()) {
|
|
|
+ if (Math.abs(other.getMarkerScore() - result.getMarkerScore()) > markQuestion.getArbitrateThreshold() || (other.getMarkerScore() == SystemConstant.AI_MARK_ERROR_SCORE)) {
|
|
|
history = buildArbitrateHistory(task, now);
|
|
|
break;
|
|
|
}
|
|
@@ -1581,12 +1593,12 @@ public class MarkServiceImpl implements MarkService {
|
|
|
// 考生作答
|
|
|
try {
|
|
|
this.ocrStudentQuestionResult(basicSchool, t.getStudentId(), t.getQuestionId());
|
|
|
- t.setRetryCount(5);
|
|
|
+ t.setRetryCount(SystemConstant.AI_MARK_RETRY_COUNT);
|
|
|
} catch (Exception e) {
|
|
|
- t.setRetryCount(t.getRetryCount() == null ? 5 : t.getRetryCount() == 0 ? 0 : t.getRetryCount() - 1);
|
|
|
+ t.setRetryCount(t.getRetryCount() == null ? SystemConstant.AI_MARK_RETRY_COUNT : t.getRetryCount() == 0 ? 0 : t.getRetryCount() - 1);
|
|
|
t.setAiMarkErrorType(MarkTaskAiErrorTypeStatus.OCR_ERROR);
|
|
|
t.setAiMarkErrorMsg(e.getMessage());
|
|
|
- t.setNextRetryTime(DateDisposeUtils.addMinute(System.currentTimeMillis(), 10));
|
|
|
+ t.setNextRetryTime(DateDisposeUtils.addMinute(System.currentTimeMillis(), SystemConstant.AI_MARK_RETRY_MINUTES));
|
|
|
log.error("OCR识别错误:{}", e.getMessage());
|
|
|
} finally {
|
|
|
markTaskService.updateAiMarkErrorMsg(t);
|
|
@@ -1635,6 +1647,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
if (markTasks.isEmpty() || !markQuestion.getEnableAi()) {
|
|
|
break;
|
|
|
}
|
|
|
+ AutoScoreResult autoScoreResult = null;
|
|
|
for (MarkTask t : markTasks) {
|
|
|
// 考生作答
|
|
|
try {
|
|
@@ -1662,13 +1675,10 @@ public class MarkServiceImpl implements MarkService {
|
|
|
}
|
|
|
}
|
|
|
// AI评卷
|
|
|
- AutoScoreResult autoScoreResult = aiService.autoScore(aiUrl, AiUtil.signature(basicSchool), request);
|
|
|
+ autoScoreResult = aiService.autoScore(aiUrl, AiUtil.signature(basicSchool), request);
|
|
|
long endTime = System.currentTimeMillis();
|
|
|
if (autoScoreResult == null) {
|
|
|
- // 此错误不重试
|
|
|
- t.setRetryCount(0);
|
|
|
- t.setAiMarkErrorType(MarkTaskAiErrorTypeStatus.NULL);
|
|
|
- t.setAiMarkErrorMsg(MarkTaskAiErrorTypeStatus.NULL.getName());
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("无法评卷");
|
|
|
} else {
|
|
|
submitAiTask(t, aiUser.getId(), markQuestion, autoScoreResult, buildTrack(markAiQuestionParam.getMode(), autoScoreResult, markQuestion, markOcrStudentQuestions), endTime - startTime);
|
|
|
t.setRetryCount(0);
|
|
@@ -1676,10 +1686,16 @@ public class MarkServiceImpl implements MarkService {
|
|
|
t.setAiMarkErrorMsg(null);
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
- t.setRetryCount(t.getRetryCount() == null ? 5 : t.getRetryCount() == 0 ? 0 : t.getRetryCount() - 1);
|
|
|
- t.setAiMarkErrorType(MarkTaskAiErrorTypeStatus.OTHER);
|
|
|
+ t.setRetryCount(t.getRetryCount() == null ? SystemConstant.AI_MARK_RETRY_COUNT : t.getRetryCount() == 0 ? 0 : t.getRetryCount() - 1);
|
|
|
+ // 重试结束后,直接给-1
|
|
|
+ if (t.getRetryCount() == 0) {
|
|
|
+ autoScoreResult = new AutoScoreResult();
|
|
|
+ autoScoreResult.setTotalScore(SystemConstant.AI_MARK_ERROR_SCORE);
|
|
|
+ submitAiTask(t, aiUser.getId(), markQuestion, autoScoreResult, null, 0);
|
|
|
+ }
|
|
|
+ t.setAiMarkErrorType(MarkTaskAiErrorTypeStatus.MARK_ERROR);
|
|
|
t.setAiMarkErrorMsg(e.getMessage());
|
|
|
- t.setNextRetryTime(DateDisposeUtils.addMinute(System.currentTimeMillis(), 10));
|
|
|
+ t.setNextRetryTime(DateDisposeUtils.addMinute(System.currentTimeMillis(), SystemConstant.AI_MARK_RETRY_MINUTES));
|
|
|
} finally {
|
|
|
this.releaseStudent(examId, paperNumber, t.getStudentId(), aiUser.getId());
|
|
|
this.updateMarkedCount(examId, paperNumber, t.getQuestionId());
|
|
@@ -1958,7 +1974,7 @@ public class MarkServiceImpl implements MarkService {
|
|
|
continue;
|
|
|
}
|
|
|
// 分差超过阀值
|
|
|
- if (Math.abs(other.getMarkerScore() - result.getTotalScore()) > markQuestion.getArbitrateThreshold()) {
|
|
|
+ if (Math.abs(other.getMarkerScore() - result.getTotalScore()) > markQuestion.getArbitrateThreshold() || (other.getMarkerScore() == SystemConstant.AI_MARK_ERROR_SCORE)) {
|
|
|
history = buildArbitrateHistory(task, now);
|
|
|
break;
|
|
|
}
|