|
@@ -158,23 +158,43 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
Integer subNumber = (Integer) param.get("subNumber");
|
|
Integer subNumber = (Integer) param.get("subNumber");
|
|
Integer subIndex = (Integer) param.get("subIndex");
|
|
Integer subIndex = (Integer) param.get("subIndex");
|
|
Long paperId = ExamRecordCacheUtil.getPaperId(recordId);
|
|
Long paperId = ExamRecordCacheUtil.getPaperId(recordId);
|
|
|
|
+ String key = RedisKeyHelper.examAnswerHashKey(mainNumber, subNumber, subIndex);
|
|
|
|
+
|
|
|
|
+ //考生作答缓存
|
|
|
|
+ ExamStudentAnswerCacheBean answer = (ExamStudentAnswerCacheBean) redisUtil.get(
|
|
|
|
+ RedisKeyHelper.examAnswerKey(recordId),key);
|
|
|
|
+ if (answer == null) {
|
|
|
|
+ log.error("no ExamStudentAnswerCacheBean for calculateObjectiveScore key:"+key);
|
|
|
|
+
|
|
|
|
+ // 计算客观分总分
|
|
|
|
+ calculateTotalObjectiveScore(recordId);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ //整卷客观题标答缓存集合
|
|
Map<String, ObjectiveAnswerCacheBean> map = examPaperService.getObjectiveAnswerCacheBean(paperId);
|
|
Map<String, ObjectiveAnswerCacheBean> map = examPaperService.getObjectiveAnswerCacheBean(paperId);
|
|
if (map == null || map.size() == 0) {
|
|
if (map == null || map.size() == 0) {
|
|
- log.error("no ObjectiveAnswerCacheBean for calculateObjectiveScore");
|
|
|
|
|
|
+ log.debug("no ObjectiveAnswerCacheBean map for calculateObjectiveScore paperId:"+paperId);
|
|
|
|
+ // 更新分数
|
|
|
|
+ answer.setScore(0.0);
|
|
|
|
+ redisUtil.set(RedisKeyHelper.examAnswerKey(recordId), key, answer);
|
|
|
|
+
|
|
|
|
+ // 计算客观分总分
|
|
|
|
+ calculateTotalObjectiveScore(recordId);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- String key = RedisKeyHelper.examAnswerHashKey(mainNumber, subNumber, subIndex);
|
|
|
|
|
|
+ //客观题标答缓存
|
|
ObjectiveAnswerCacheBean cb = map.get(key);
|
|
ObjectiveAnswerCacheBean cb = map.get(key);
|
|
if (cb == null) {
|
|
if (cb == null) {
|
|
|
|
+ log.debug("no ObjectiveAnswerCacheBean for calculateObjectiveScore key:"+key);
|
|
|
|
+ // 更新分数
|
|
|
|
+ answer.setScore(0.0);
|
|
|
|
+ redisUtil.set(RedisKeyHelper.examAnswerKey(recordId), key, answer);
|
|
|
|
+
|
|
|
|
+ // 计算客观分总分
|
|
|
|
+ calculateTotalObjectiveScore(recordId);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- ExamStudentAnswerCacheBean answer = (ExamStudentAnswerCacheBean) redisUtil.get(
|
|
|
|
- RedisKeyHelper.examAnswerKey(recordId),
|
|
|
|
- RedisKeyHelper.examAnswerHashKey(mainNumber, subNumber, subIndex));
|
|
|
|
- if (answer == null) {
|
|
|
|
- log.error("no ExamStudentAnswerCacheBean for calculateObjectiveScore");
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
|
|
|
|
if (cb.getStructType().intValue() == 1) {
|
|
if (cb.getStructType().intValue() == 1) {
|
|
if (checkSingleChoice(answer.getAnswer(), cb.getChoiceAnswer())) {
|
|
if (checkSingleChoice(answer.getAnswer(), cb.getChoiceAnswer())) {
|
|
@@ -217,15 +237,14 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
|
|
answer.setScore(0.0);
|
|
answer.setScore(0.0);
|
|
}
|
|
}
|
|
// 更新分数
|
|
// 更新分数
|
|
- redisUtil.set(RedisKeyHelper.examAnswerKey(recordId),
|
|
|
|
- RedisKeyHelper.examAnswerHashKey(mainNumber, subNumber, subIndex), answer);
|
|
|
|
|
|
+ redisUtil.set(RedisKeyHelper.examAnswerKey(recordId), key, answer);
|
|
|
|
|
|
// 计算客观分总分
|
|
// 计算客观分总分
|
|
- calculateTotalObjectiveScore(recordId, map);
|
|
|
|
|
|
+ calculateTotalObjectiveScore(recordId);
|
|
}
|
|
}
|
|
|
|
|
|
@SuppressWarnings("unchecked")
|
|
@SuppressWarnings("unchecked")
|
|
- private void calculateTotalObjectiveScore(Long recordId, Map<String, ObjectiveAnswerCacheBean> map) {
|
|
|
|
|
|
+ private void calculateTotalObjectiveScore(Long recordId) {
|
|
String lockKey = SystemConstant.REDIS_LOCK_TOTAL_OBJECTIVE_SCORE_PREFIX + recordId;
|
|
String lockKey = SystemConstant.REDIS_LOCK_TOTAL_OBJECTIVE_SCORE_PREFIX + recordId;
|
|
try {
|
|
try {
|
|
Boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_CACHE_TIME_OUT);
|
|
Boolean lock = redisUtil.lock(lockKey, SystemConstant.REDIS_CACHE_TIME_OUT);
|