瀏覽代碼

添加获取试题答案接口

deason 5 年之前
父節點
當前提交
1fc906cf3c

+ 8 - 1
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/QuesService.java

@@ -4,6 +4,7 @@ import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.core.questions.base.question.enums.QuesStructType;
 import cn.com.qmth.examcloud.core.questions.dao.entity.Question;
 import cn.com.qmth.examcloud.core.questions.dao.entity.QuestionSearchCondition;
+import cn.com.qmth.examcloud.core.questions.service.bean.QuestionAnswerBean;
 import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
@@ -121,4 +122,10 @@ public interface QuesService {
      * @param publicity
      */
     public void updateProByCourse(String courseCode, Double difficultyDegree, Boolean publicity, String orgId);
-}
+
+    /**
+     * 获取试题答案
+     */
+    QuestionAnswerBean findQuestionAnswer(String questionId);
+
+}

+ 34 - 0
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/bean/QuestionAnswerBean.java

@@ -0,0 +1,34 @@
+package cn.com.qmth.examcloud.core.questions.service.bean;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class QuestionAnswerBean implements Serializable {
+
+    /**
+     * 试题ID
+     */
+    private String questionId;
+
+    /**
+     * 正确答案
+     */
+    private List<String> rightAnswer;
+
+    public String getQuestionId() {
+        return questionId;
+    }
+
+    public void setQuestionId(String questionId) {
+        this.questionId = questionId;
+    }
+
+    public List<String> getRightAnswer() {
+        return rightAnswer;
+    }
+
+    public void setRightAnswer(List<String> rightAnswer) {
+        this.rightAnswer = rightAnswer;
+    }
+
+}

+ 44 - 0
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/cache/QuestionAnswerCache.java

@@ -0,0 +1,44 @@
+package cn.com.qmth.examcloud.core.questions.service.cache;
+
+import cn.com.qmth.examcloud.commons.exception.StatusException;
+import cn.com.qmth.examcloud.core.questions.service.QuesService;
+import cn.com.qmth.examcloud.core.questions.service.bean.QuestionAnswerBean;
+import cn.com.qmth.examcloud.support.cache.bean.QuestionAnswerCacheBean;
+import cn.com.qmth.examcloud.web.cache.RandomObjectRedisCache;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class QuestionAnswerCache extends RandomObjectRedisCache<QuestionAnswerCacheBean> {
+    @Autowired
+    private QuesService quesService;
+
+    @Override
+    public QuestionAnswerCacheBean loadFromResource(Object... keys) {
+        String questionId = String.valueOf(keys[0]);
+
+        if (StringUtils.isBlank(questionId)) {
+            throw new StatusException("400", "questionId is empty");
+        }
+
+        QuestionAnswerBean bean = quesService.findQuestionAnswer(questionId);
+
+        QuestionAnswerCacheBean cacheBean = new QuestionAnswerCacheBean();
+        cacheBean.setQuestionId(bean.getQuestionId());
+        cacheBean.setRightAnswer(bean.getRightAnswer());
+
+        return cacheBean;
+    }
+
+    @Override
+    protected String getKeyPrefix() {
+        return "Q_QUESTION:ANSWER_";
+    }
+
+    @Override
+    protected int getTimeout() {
+        return 2 * 60 * 60;// N小时
+    }
+
+}

+ 29 - 5
examcloud-core-questions-service/src/main/java/cn/com/qmth/examcloud/core/questions/service/impl/QuesServiceImpl.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.examcloud.core.questions.service.impl;
 
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
+import cn.com.qmth.examcloud.commons.exception.StatusException;
 import cn.com.qmth.examcloud.core.questions.base.CommonUtils;
 import cn.com.qmth.examcloud.core.questions.base.Model;
 import cn.com.qmth.examcloud.core.questions.base.enums.PaperType;
@@ -11,6 +12,7 @@ import cn.com.qmth.examcloud.core.questions.dao.entity.*;
 import cn.com.qmth.examcloud.core.questions.service.PaperService;
 import cn.com.qmth.examcloud.core.questions.service.QuesService;
 import cn.com.qmth.examcloud.core.questions.service.QuestionAudioService;
+import cn.com.qmth.examcloud.core.questions.service.bean.QuestionAnswerBean;
 import org.apache.commons.lang3.StringUtils;
 import org.bson.types.ObjectId;
 import org.docx4j.XmlUtils;
@@ -39,10 +41,7 @@ import org.springframework.data.mongodb.core.query.Update;
 import org.springframework.stereotype.Service;
 
 import javax.xml.bind.JAXBElement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 import java.util.regex.Pattern;
 
 /**
@@ -730,5 +729,30 @@ public class QuesServiceImpl implements QuesService {
         }
         quesRepo.saveAll(questionList);
     }
-}
 
+    @Override
+    public QuestionAnswerBean findQuestionAnswer(String questionId) {
+        Optional<Question> optional = quesRepo.findById(questionId);
+        if (!optional.isPresent()) {
+            throw new StatusException("500", "当前试题已不存在!");
+        }
+
+        Question question = optional.get();
+
+        QuestionAnswerBean bean = new QuestionAnswerBean();
+        List<String> answers = new ArrayList<>();
+        if (QuesStructType.NESTED_ANSWER_QUESTION == question.getQuestionType()) {
+            List<Question> subQuestions = question.getSubQuestions();
+            for (Question subQuestion : subQuestions) {
+                answers.add(subQuestion.getQuesAnswer() != null ? subQuestion.getQuesAnswer() : "");
+            }
+        } else {
+            answers.add(question.getQuesAnswer() != null ? question.getQuesAnswer() : "");
+        }
+
+        bean.setRightAnswer(answers);
+        bean.setQuestionId(question.getId());
+        return bean;
+    }
+
+}

+ 7 - 4
examcloud-core-questions-starter/src/main/java/cn/com/qmth/examcloud/core/questions/starter/DemoController.java

@@ -1,13 +1,11 @@
 package cn.com.qmth.examcloud.core.questions.starter;
 
+import cn.com.qmth.examcloud.core.questions.base.converter.utils.JsonMapper;
 import cn.com.qmth.examcloud.core.questions.service.ExtractConfigProviderService;
 import cn.com.qmth.examcloud.core.questions.service.bean.extract.ExtractConfigPaper;
 import cn.com.qmth.examcloud.core.questions.service.cache.*;
 import cn.com.qmth.examcloud.support.cache.CacheHelper;
-import cn.com.qmth.examcloud.support.cache.bean.BasePaperCacheBean;
-import cn.com.qmth.examcloud.support.cache.bean.ExtractConfigCacheBean;
-import cn.com.qmth.examcloud.support.cache.bean.ExtractConfigPaperCacheBean;
-import cn.com.qmth.examcloud.support.cache.bean.QuestionCacheBean;
+import cn.com.qmth.examcloud.support.cache.bean.*;
 import cn.com.qmth.examcloud.web.redis.RedisClient;
 import cn.com.qmth.examcloud.web.support.Naked;
 import org.apache.commons.lang3.StringUtils;
@@ -41,6 +39,8 @@ public class DemoController {
     @Autowired
     private QuestionCache questionCache;
     @Autowired
+    private QuestionAnswerCache questionAnswerCache;
+    @Autowired
     private ExtractConfigProviderService extractConfigProviderService;
 
     @Naked
@@ -72,6 +72,9 @@ public class DemoController {
         log.info("--->试题缓存: " + questionCacheBean.getDefaultQuestion().getId());
         //questionCache.remove(examId, courseCode, groupCode, questionId);
 
+        QuestionAnswerCacheBean questionAnswer = CacheHelper.getQuestionAnswer("5d5e109aef8fce4eeda1ee22");
+        log.info("--->试题答案缓存: " + new JsonMapper().toJson(questionAnswer));
+        //questionAnswerCache.remove(questionId);
 
         final String pKeys = Constants.CACHE_KEY_PAPER + "*" + paperId;
         Set<String> paperKeys = redisTemplate.keys(pKeys);