Bläddra i källkod

Merge remote-tracking branch 'origin/dev' into dev

wangliang 4 år sedan
förälder
incheckning
77c0cf1027

+ 0 - 3
themis-business/src/main/java/com/qmth/themis/business/cache/bean/ExamStudentAnswerCacheBean.java

@@ -1,8 +1,5 @@
 package com.qmth.themis.business.cache.bean;
 
-import com.alibaba.fastjson.JSONArray;
-import com.qmth.themis.business.util.JacksonUtil;
-
 import java.io.Serializable;
 
 public class ExamStudentAnswerCacheBean implements Serializable {

+ 26 - 4
themis-business/src/main/java/com/qmth/themis/business/service/impl/TEExamServiceImpl.java

@@ -89,6 +89,9 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
 
     @Resource
     private TBTaskHistoryService tbTaskHistoryService;
+    
+    @Resource
+    TEExamPaperService examPaperService;
 
     /**
      * 查询考试批次
@@ -465,6 +468,8 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
             answerCache.setAnswer(answer);
             answerCache.setVersion(version);
             answerCache.setDurationSeconds(durationSeconds);
+        	answerCache.setObjective(checkIsObjective(ExamRecordCacheUtil.getPaperId(recordId), mainNumber, subNumber, subIndex));
+            	
         } else {
             if (version.longValue() > answerCache.getVersion().longValue()) {
                 answerCache.setAnswer(answer);
@@ -477,14 +482,31 @@ public class TEExamServiceImpl extends ServiceImpl<TEExamMapper, TEExam> impleme
         // 更新考生作答
         redisUtil.set(RedisKeyHelper.examAnswerKey(recordId),
                 RedisKeyHelper.examAnswerHashKey(mainNumber, subNumber, subIndex), answerCache);
-        // 重置考试记录客观题得分
-        ExamRecordCacheUtil.setObjectiveScore(recordId, null, true);
+        // 如果是客观题,重置考试记录客观题得分
+        if(answerCache.getObjective()) {
+        	ExamRecordCacheUtil.setObjectiveScore(recordId, null, false);
+            // 发消息计算客观分
+            calculateObjectiveScore(recordId, mainNumber, subNumber, subIndex);
+        }
+        
         AnswerSubmitBean ret = new AnswerSubmitBean();
         ret.setVersion(version);
-        // 发消息计算客观分
-        calculateObjectiveScore(recordId, mainNumber, subNumber, subIndex);
+
         return ret;
     }
+    
+    private boolean checkIsObjective(Long paperId, Integer mainNumber, Integer subNumber, Integer subIndex) {
+        Map<String, ObjectiveAnswerCacheBean> map = examPaperService.getObjectiveAnswerCacheBean(paperId);
+        if (map == null || map.size() == 0) {
+            return false;
+        }
+        String key = RedisKeyHelper.examAnswerHashKey(mainNumber, subNumber, subIndex);
+        ObjectiveAnswerCacheBean cb = map.get(key);
+        if (cb == null) {
+            return false;
+        }
+        return true;
+    }
 
     private void calculateObjectiveScore(Long recordId, Integer mainNumber, Integer subNumber, Integer subIndex) {
         Map<String, Object> transMap = new HashMap<String, Object>();

+ 4 - 1
themis-business/src/main/java/com/qmth/themis/business/service/impl/TOeExamRecordServiceImpl.java

@@ -212,7 +212,10 @@ public class TOeExamRecordServiceImpl extends ServiceImpl<TOeExamRecordMapper, T
             }
         }
 
-        answer.setObjective(true);
+        if(answer.getScore()==null) {
+        	log.debug("小题分数为空,得分置为0,"+"recordId:"+recordId+" questionKey:"+key);
+        	answer.setScore(0.0);
+        }
         // 更新分数
         redisUtil.set(RedisKeyHelper.examAnswerKey(recordId),
                 RedisKeyHelper.examAnswerHashKey(mainNumber, subNumber, subIndex), answer);