From 87c1bdac0c88d208cd2786913742d818e4d2debb Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期二, 14 五月 2024 16:52:35 +0800 Subject: [PATCH] 在线练习多选题处理 --- src/main/java/com/mindskip/xzs/repository/QuestionMapper.java | 2 src/main/resources/mapper/QuestionMapper.xml | 8 ++- src/main/java/com/mindskip/xzs/controller/student/QuestionController.java | 14 ++++++ src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java | 11 +++++ src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java | 23 ++++++++--- src/main/java/com/mindskip/xzs/domain/enums/QuestionTypeEnum.java | 2 src/main/java/com/mindskip/xzs/domain/vo/QuestionContentVO.java | 2 + src/main/java/com/mindskip/xzs/domain/vo/QuestionVO.java | 3 + src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java | 39 +++++++++++++++---- src/main/resources/mapper/QuestionSubjectMapper.xml | 3 + src/main/java/com/mindskip/xzs/service/SelfPracticeService.java | 8 ++++ 11 files changed, 94 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/mindskip/xzs/controller/student/QuestionController.java b/src/main/java/com/mindskip/xzs/controller/student/QuestionController.java index 97171b3..b6d6095 100644 --- a/src/main/java/com/mindskip/xzs/controller/student/QuestionController.java +++ b/src/main/java/com/mindskip/xzs/controller/student/QuestionController.java @@ -38,11 +38,23 @@ return RestResponse.ok(vm); } + /** + * 鏌ヨ棰樼洰鍐呭 + * + * @param id + * @return + */ @GetMapping("/{id}") - public RestResponse getById(@PathVariable("id") Integer id) { + public RestResponse getContentById(@PathVariable("id") Integer id) { return questionService.selectContentById(id); } + /** + * 鑾峰彇棰樼洰绛旀 + * + * @param id + * @return + */ @GetMapping("/answer/{id}") public RestResponse getAnswer(@PathVariable("id") Integer id) { return questionService.getAnswer(id); diff --git a/src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java b/src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java index 7e6391d..3116847 100644 --- a/src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java +++ b/src/main/java/com/mindskip/xzs/controller/student/SelfPracticeController.java @@ -58,4 +58,15 @@ return selfPracticeService.startPractice(id); } + /** + * 闅忔満涓�閬撻 + * + * @param id + * @return + */ + @GetMapping("/random/{id}") + public RestResponse randomOneQuestion(@PathVariable("id") Integer id) { + return selfPracticeService.randomOneQuestion(id); + } + } diff --git a/src/main/java/com/mindskip/xzs/domain/enums/QuestionTypeEnum.java b/src/main/java/com/mindskip/xzs/domain/enums/QuestionTypeEnum.java index 2b21e84..8b166c1 100644 --- a/src/main/java/com/mindskip/xzs/domain/enums/QuestionTypeEnum.java +++ b/src/main/java/com/mindskip/xzs/domain/enums/QuestionTypeEnum.java @@ -57,7 +57,7 @@ } } - public int getCode() { + public Integer getCode() { return code; } diff --git a/src/main/java/com/mindskip/xzs/domain/vo/QuestionContentVO.java b/src/main/java/com/mindskip/xzs/domain/vo/QuestionContentVO.java index 8628093..1fcf571 100644 --- a/src/main/java/com/mindskip/xzs/domain/vo/QuestionContentVO.java +++ b/src/main/java/com/mindskip/xzs/domain/vo/QuestionContentVO.java @@ -40,4 +40,6 @@ } + + } diff --git a/src/main/java/com/mindskip/xzs/domain/vo/QuestionVO.java b/src/main/java/com/mindskip/xzs/domain/vo/QuestionVO.java index da60a68..947cddd 100644 --- a/src/main/java/com/mindskip/xzs/domain/vo/QuestionVO.java +++ b/src/main/java/com/mindskip/xzs/domain/vo/QuestionVO.java @@ -31,4 +31,7 @@ /** 澶氶�夐绛旀 */ private List<String> correctList; + /** 澶氶�夐绛旀鏁� */ + private Integer answerNum = 0; + } diff --git a/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java b/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java index bd70910..e8a2a9c 100644 --- a/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java +++ b/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java @@ -34,5 +34,5 @@ QuestionVO selectContentById(Integer id); - String getAnswer(Integer id); + QuestionVO getAnswer(Integer id); } diff --git a/src/main/java/com/mindskip/xzs/service/SelfPracticeService.java b/src/main/java/com/mindskip/xzs/service/SelfPracticeService.java index fea3b33..37a8746 100644 --- a/src/main/java/com/mindskip/xzs/service/SelfPracticeService.java +++ b/src/main/java/com/mindskip/xzs/service/SelfPracticeService.java @@ -53,4 +53,12 @@ * @return */ RestResponse subjectQuestionNum(List<Integer> subjectIds); + + /** + * 闅忔満涓�閬撻 + * + * @param id + * @return + */ + RestResponse randomOneQuestion(Integer id); } diff --git a/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java index 8ff5b7e..b3bee77 100644 --- a/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java +++ b/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java @@ -274,18 +274,29 @@ @Override public RestResponse selectContentById(Integer id) { - QuestionVO vo = questionMapper.selectContentById(id); - jsonQuestion(vo); - return RestResponse.ok(vo); + QuestionVO questionVO = questionMapper.selectContentById(id); + jsonQuestion(questionVO); + if (QuestionTypeEnum.MultipleChoice.getCode().equals(questionVO.getQuestionType())) { + // 澶氶�夐闇�瑕佽繑鍥炵瓟妗堟暟閲忥紝瀛﹀憳閫変腑瀵瑰簲鏁伴噺鎵嶆煡璇㈢瓟妗� + if (StringUtils.hasText(questionVO.getCorrect())) { + questionVO.setAnswerNum(questionVO.getCorrect().split(",").length); + } + } + questionVO.setContentJson(""); + questionVO.setCorrect(""); + questionVO.getContent().setCorrect(""); + questionVO.getContent().setAnalyze(""); + return RestResponse.ok(questionVO); } @Override public RestResponse getAnswer(Integer id) { - String content = questionMapper.getAnswer(id); - if (StringUtils.hasText(content)) { - QuestionContentVO vo = JSON.parseObject(content, QuestionContentVO.class); + QuestionVO questionVO = questionMapper.getAnswer(id); + if (Objects.nonNull(questionVO) && StringUtils.hasText(questionVO.getCorrect())) { + QuestionContentVO vo = JSON.parseObject(questionVO.getContentJson(), QuestionContentVO.class); vo.setQuestionItemObjects(null); vo.setTitleContent(null); + vo.setCorrect(questionVO.getCorrect()); return RestResponse.ok(vo); } return RestResponse.ok(null); diff --git a/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java index 09cac23..68ad3dd 100644 --- a/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java +++ b/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java @@ -129,18 +129,41 @@ return RestResponse.ok(num); } + @Override + public RestResponse randomOneQuestion(Integer id) { + SelfPractice en = selfPracticeMapper.selectById(id); + if (Objects.isNull(en)) { + throw new RuntimeException("缁冧範涓嶅瓨鍦�"); + } + List<Integer> subjectIds = JSON.parseArray(en.getSubjects(), Integer.class); + List<QuestionVO> one = questionSubjectMapper.getRandomQuestionId(subjectIds, 1); + if (one.size() < 1) { + throw new RuntimeException("娌℃湁鎵惧埌棰樼洰锛屽彲鑳芥墍閫夎鐩寘鍚鐩笉瓒�"); + } + QuestionVO questionVO = one.get(0); + jsonQuestion(questionVO); + if (QuestionTypeEnum.MultipleChoice.getCode().equals(questionVO.getQuestionType())) { + // 澶氶�夐闇�瑕佽繑鍥炵瓟妗堟暟閲忥紝瀛﹀憳閫変腑瀵瑰簲鏁伴噺鎵嶆煡璇㈢瓟妗� + if (StringUtils.hasText(questionVO.getCorrect())) { + questionVO.setAnswerNum(questionVO.getCorrect().split(",").length); + } + } + questionVO.setContentJson(""); + questionVO.setCorrect(""); + questionVO.getContent().setCorrect(""); + questionVO.getContent().setAnalyze(""); + return RestResponse.ok(questionVO); + } /** * 澶勭悊棰樼洰鍐呭JSON * - * @param vos + * @param vo */ - public void jsonQuestion(List<QuestionVO> vos) { - vos.stream().forEach(vo -> { - if (StringUtils.hasText(vo.getContentJson())) { - QuestionContentVO questionContent = JSON.parseObject(vo.getContentJson(), QuestionContentVO.class); - vo.setContent(questionContent); - } - }); + public void jsonQuestion(QuestionVO vo) { + if (StringUtils.hasText(vo.getContentJson())) { + QuestionContentVO questionContent = JSON.parseObject(vo.getContentJson(), QuestionContentVO.class); + vo.setContent(questionContent); + } } } diff --git a/src/main/resources/mapper/QuestionMapper.xml b/src/main/resources/mapper/QuestionMapper.xml index 7cdd3b5..7acf77b 100644 --- a/src/main/resources/mapper/QuestionMapper.xml +++ b/src/main/resources/mapper/QuestionMapper.xml @@ -317,15 +317,17 @@ tq.id, tq.question_type as questionType, tq.difficult, - ttc.content as contentJson + ttc.content as contentJson, + tq.correct FROM t_question tq INNER JOIN t_text_content ttc ON tq.info_text_content_id = ttc.id AND tq.id = #{id} </select> - <select id="getAnswer" resultType="string"> + <select id="getAnswer" resultType="com.mindskip.xzs.domain.vo.QuestionVO"> SELECT - ttc.content + tq.correct, + ttc.content as contentJson FROM t_question tq INNER JOIN t_text_content ttc ON tq.info_text_content_id = ttc.id AND tq.id = #{id} AND tq.deleted = 0 diff --git a/src/main/resources/mapper/QuestionSubjectMapper.xml b/src/main/resources/mapper/QuestionSubjectMapper.xml index 1b05d52..7f134aa 100644 --- a/src/main/resources/mapper/QuestionSubjectMapper.xml +++ b/src/main/resources/mapper/QuestionSubjectMapper.xml @@ -70,7 +70,8 @@ tq.id, tq.question_type as questionType, tq.difficult, - ttc.content as contentJson + ttc.content as contentJson, + tq.correct FROM t_question_subject tqs INNER JOIN t_question tq ON tqs.question_id = tq.id AND tq.deleted = 0 AND tqs.subject_id IN <foreach collection="subjectIds" open="(" separator="," close=")" item="subjectId">#{subjectId}</foreach> -- Gitblit v1.8.0