From d5f80c24adbef34f8e66cedb46a72a6395134445 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期二, 14 五月 2024 15:09:28 +0800 Subject: [PATCH] 题目练习 --- src/main/java/com/mindskip/xzs/service/QuestionService.java | 8 + src/main/java/com/mindskip/xzs/repository/QuestionMapper.java | 4 src/main/resources/mapper/QuestionMapper.xml | 19 +++ src/main/java/com/mindskip/xzs/controller/student/QuestionController.java | 10 ++ src/main/java/com/mindskip/xzs/domain/SelfPractice.java | 7 - src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java | 31 ++++++ src/main/java/com/mindskip/xzs/domain/enums/PracticeQuestionTypeEnum.java | 44 ++++++++ src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java | 10 - src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java | 37 +++++++ src/main/resources/mapper/SubjectMapper.xml | 4 src/main/java/com/mindskip/xzs/domain/vo/QuestionContentVO.java | 3 src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java | 50 ++++++--- src/main/java/com/mindskip/xzs/repository/SubjectMapper.java | 2 src/main/resources/mapper/SelfPracticeMapper.xml | 10 - src/main/resources/mapper/QuestionSubjectMapper.xml | 32 ++++++ src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java | 9 + 16 files changed, 245 insertions(+), 35 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 250c05a..97171b3 100644 --- a/src/main/java/com/mindskip/xzs/controller/student/QuestionController.java +++ b/src/main/java/com/mindskip/xzs/controller/student/QuestionController.java @@ -38,4 +38,14 @@ return RestResponse.ok(vm); } + @GetMapping("/{id}") + public RestResponse getById(@PathVariable("id") Integer id) { + return questionService.selectContentById(id); + } + + @GetMapping("/answer/{id}") + public RestResponse getAnswer(@PathVariable("id") Integer id) { + return questionService.getAnswer(id); + } + } diff --git a/src/main/java/com/mindskip/xzs/domain/SelfPractice.java b/src/main/java/com/mindskip/xzs/domain/SelfPractice.java index a7fda38..8c991f8 100644 --- a/src/main/java/com/mindskip/xzs/domain/SelfPractice.java +++ b/src/main/java/com/mindskip/xzs/domain/SelfPractice.java @@ -21,9 +21,6 @@ /** 澶囨敞 */ private String remark; - /** 棰樼洰鏁伴噺 */ - private Integer questionNum; - /** 缁冧範绫诲瀷 */ private String practiceType; @@ -42,7 +39,7 @@ /** 宸插仛棰樻暟 */ private Integer doNum; - /** 棰樼洰ID JSON */ - private String questionIds; + /** 棰樼洰绫诲瀷 */ + private String questionType; } diff --git a/src/main/java/com/mindskip/xzs/domain/enums/PracticeQuestionTypeEnum.java b/src/main/java/com/mindskip/xzs/domain/enums/PracticeQuestionTypeEnum.java new file mode 100644 index 0000000..c18d5fb --- /dev/null +++ b/src/main/java/com/mindskip/xzs/domain/enums/PracticeQuestionTypeEnum.java @@ -0,0 +1,44 @@ +package com.mindskip.xzs.domain.enums; + +import lombok.Getter; + +/** + * @author锛歺p + * @date锛�2024/5/14 9:16 + */ +@Getter +public enum PracticeQuestionTypeEnum { + + ALL("all", -99,"涓嶉檺绫诲瀷"), + SINGLE("single", 1,"鍗曢��"), + MULTIPLE("multiple", 2,"澶氶��"), + JUDGE("judge", 3,"鍒ゆ柇"), + ; + + + private final String value; + /** 棰樼洰琛ㄤ腑鐨勫�� */ + private final Integer dataBaseValue; + private final String desc; + + PracticeQuestionTypeEnum(String value, Integer dataBaseValue, String desc) { + this.value = value; + this.dataBaseValue = dataBaseValue; + this.desc = desc; + } + + /** + * 鏍规嵁鍊艰幏鍙栨暟鎹簱鍊� + * + * @param value + * @return + */ + public static Integer getDataBaseValueByValue(String value) { + for (PracticeQuestionTypeEnum practiceQuestionTypeEnum : PracticeQuestionTypeEnum.values()) { + if (practiceQuestionTypeEnum.getValue().equals(value)) { + return practiceQuestionTypeEnum.dataBaseValue; + } + } + return -1; + } +} 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 c77409c..8628093 100644 --- a/src/main/java/com/mindskip/xzs/domain/vo/QuestionContentVO.java +++ b/src/main/java/com/mindskip/xzs/domain/vo/QuestionContentVO.java @@ -17,6 +17,9 @@ /** 瑙f瀽 */ private String analyze; + /** 绛旀 */ + private String correct; + /** 閫夐」 */ private List<OptionItem> questionItemObjects; diff --git a/src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java b/src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java index ea47da3..79ca623 100644 --- a/src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java +++ b/src/main/java/com/mindskip/xzs/domain/vo/SelfPracticeVO.java @@ -37,6 +37,10 @@ @NotBlank(message = "璇烽�夋嫨缁冧範绫诲瀷") private String practiceType; + /** 棰樺瀷 */ + @NotBlank(message = "璇烽�夋嫨缁冧範棰樺瀷") + private String questionType; + /** 鍒涘缓鏃堕棿 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createTime; @@ -50,12 +54,6 @@ /** 鍋氶鎬绘暟 */ private Integer totalQuestionNum; - - /** 棰樼洰鎬绘暟 */ - @NotBlank(message = "棰樼洰鏁伴噺涓嶈兘涓虹┖") - private Integer questionNum; - - private String questionIds; private Integer pageSize = 10; diff --git a/src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java b/src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java new file mode 100644 index 0000000..a7b7936 --- /dev/null +++ b/src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java @@ -0,0 +1,31 @@ +package com.mindskip.xzs.domain.vo; + +import lombok.Data; + +import java.util.List; + +/** + * @author锛歺p + * @date锛�2024/5/14 9:50 + */ +@Data +public class SubjectQuestionVO { + + private Integer subjectId; + + private String subjectName; + + private List<Integer> questionIds; + + + @Data + public static class QuestionPractice { + + private Integer questionId; + + /** 鏄惁鍋氳繃锛�0娌℃湁 1鍋氫簡 */ + private Integer doIt; + + } + +} diff --git a/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java b/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java index ff26145..bd70910 100644 --- a/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java +++ b/src/main/java/com/mindskip/xzs/repository/QuestionMapper.java @@ -31,4 +31,8 @@ List<QuestionImportVO> export(@Param("query") QuestionExportVO query); List<QuestionPageStudentResponseVM> selectQuestion(QuestionPageStudentRequestVM model); + + QuestionVO selectContentById(Integer id); + + String getAnswer(Integer id); } diff --git a/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java b/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java index bdb4835..771188c 100644 --- a/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java +++ b/src/main/java/com/mindskip/xzs/repository/QuestionSubjectMapper.java @@ -36,4 +36,13 @@ /** 闅忔満棰樼洰 */ List<QuestionVO> getRandomQuestionId(@Param("subjectIds") List<Integer> subjectIds, @Param("questionNum") Integer questionNum); + + /** 鏌ヨ棰樼洰ID锛屾牴鎹鐩甶ds */ + List<Integer> questionsBySubjectIds(@Param("subjectIds") List<Integer> subjectIds); + + /** 鏌ヨ棰樼洰ID鏍规嵁璇剧洰id */ + List<Integer> questionsBySubjectId(Integer subjectId); + + /** 鏍规嵁璇剧洰鍜岄鍨嬫煡璇㈤鐩甀D */ + List<Integer> questionsBySubjectIdAndQuestionType(@Param("subjectId") Integer subjectId, @Param("questionType") Integer questionType); } diff --git a/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java b/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java index 7ea63e0..d72b316 100644 --- a/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java +++ b/src/main/java/com/mindskip/xzs/repository/SubjectMapper.java @@ -23,4 +23,6 @@ List<Subject> selectByIds(@Param("ids") Integer[] ids); List<String> selectSubjectName(@Param("ids") List<Integer> ids); + + String selectSubjectNameById(Integer id); } diff --git a/src/main/java/com/mindskip/xzs/service/QuestionService.java b/src/main/java/com/mindskip/xzs/service/QuestionService.java index 63465ca..b1318c4 100644 --- a/src/main/java/com/mindskip/xzs/service/QuestionService.java +++ b/src/main/java/com/mindskip/xzs/service/QuestionService.java @@ -1,10 +1,12 @@ package com.mindskip.xzs.service; import com.github.pagehelper.PageInfo; +import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.domain.Question; import com.mindskip.xzs.viewmodel.admin.question.ExamQuestionVO; import com.mindskip.xzs.viewmodel.admin.question.QuestionEditRequestVM; import com.mindskip.xzs.viewmodel.admin.question.QuestionPageRequestVM; +import com.mindskip.xzs.viewmodel.student.question.answer.QuestionAnswerVO; import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentRequestVM; import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentResponseVM; import com.mindskip.xzs.vo.QuestionExportVO; @@ -43,4 +45,10 @@ List<QuestionImportVO> export(QuestionExportVO query); PageInfo<QuestionPageStudentResponseVM> selectQuestion(QuestionPageStudentRequestVM model); + + /** 鏌ュ嚭棰樼洰涓讳綋鍐呭 */ + RestResponse selectContentById(Integer id); + + /** 鑾峰彇棰樼洰绛旀銆佽В鏋� */ + RestResponse getAnswer(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 ff336aa..8ff5b7e 100644 --- a/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java +++ b/src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java @@ -1,5 +1,7 @@ package com.mindskip.xzs.service.impl; +import com.alibaba.fastjson.JSON; +import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.domain.QuestionSubject; import com.mindskip.xzs.domain.other.KeyValue; import com.mindskip.xzs.domain.Question; @@ -8,6 +10,8 @@ import com.mindskip.xzs.domain.enums.QuestionTypeEnum; import com.mindskip.xzs.domain.question.QuestionItemObject; import com.mindskip.xzs.domain.question.QuestionObject; +import com.mindskip.xzs.domain.vo.QuestionContentVO; +import com.mindskip.xzs.domain.vo.QuestionVO; import com.mindskip.xzs.repository.QuestionMapper; import com.mindskip.xzs.repository.SubjectMapper; import com.mindskip.xzs.service.QuestionService; @@ -30,10 +34,12 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; import java.util.Arrays; import java.util.Date; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; @Service @@ -265,4 +271,35 @@ ).collect(Collectors.toList()) ); } + + @Override + public RestResponse selectContentById(Integer id) { + QuestionVO vo = questionMapper.selectContentById(id); + jsonQuestion(vo); + return RestResponse.ok(vo); + } + + @Override + public RestResponse getAnswer(Integer id) { + String content = questionMapper.getAnswer(id); + if (StringUtils.hasText(content)) { + QuestionContentVO vo = JSON.parseObject(content, QuestionContentVO.class); + vo.setQuestionItemObjects(null); + vo.setTitleContent(null); + return RestResponse.ok(vo); + } + return RestResponse.ok(null); + } + + /** + * 澶勭悊棰樼洰鍐呭JSON + * + * @param vo + */ + 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/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java index e7305d3..09cac23 100644 --- a/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java +++ b/src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java @@ -9,9 +9,13 @@ import com.mindskip.xzs.domain.ExamPaperAnswer; import com.mindskip.xzs.domain.Question; import com.mindskip.xzs.domain.SelfPractice; +import com.mindskip.xzs.domain.enums.PracticeQuestionTypeEnum; +import com.mindskip.xzs.domain.enums.PracticeTypeEnum; +import com.mindskip.xzs.domain.enums.QuestionTypeEnum; import com.mindskip.xzs.domain.vo.QuestionContentVO; import com.mindskip.xzs.domain.vo.QuestionVO; import com.mindskip.xzs.domain.vo.SelfPracticeVO; +import com.mindskip.xzs.domain.vo.SubjectQuestionVO; import com.mindskip.xzs.repository.QuestionMapper; import com.mindskip.xzs.repository.QuestionSubjectMapper; import com.mindskip.xzs.repository.SelfPracticeMapper; @@ -23,6 +27,7 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; @@ -87,26 +92,35 @@ if (Objects.isNull(en)) { throw new RuntimeException("缁冧範涓嶅瓨鍦�"); } - if (StringUtils.hasText(en.getQuestionIds())) { - // 鐢熸垚浜嗛鐩氨鐩存帴鏌� - List<Integer> questionIdList = JSON.parseArray(en.getQuestionIds(), Integer.class); - List<QuestionVO> vos = questionMapper.getVoByIds(questionIdList); - jsonQuestion(vos); - return RestResponse.ok(vos); - } else { - // 娌$敓鎴愯繃灏遍殢鏈虹敓鎴愰鐩� - List<Integer> subjectIds = JSON.parseArray(en.getSubjects(), Integer.class); - Integer totalQuestionNum = questionSubjectMapper.countQuestionNum(subjectIds); - if (totalQuestionNum < en.getQuestionNum()) { - throw new RuntimeException("浣犳墍閫夌殑璇剧洰棰樼洰鏁伴噺涓嶈冻"); + List<Integer> subjectIds = JSON.parseArray(en.getSubjects(), Integer.class); + if (PracticeTypeEnum.ORDERED.getValue().equals(en.getPracticeType())) { + List<SubjectQuestionVO> list = new ArrayList<>(2); + // 椤哄簭鍋氶锛屾妸閫夋嫨鐨勯搴撶殑棰�(id)鍏ㄩ儴鏌ュ嚭鏉ワ紝鍓嶇鏈変釜搴忓彿闈㈡澘锛岀偣鍑诲摢閬撻鍋氬摢閬� + for (Integer subjectId : subjectIds) { + String subjectName = subjectMapper.selectSubjectNameById(subjectId); + // todo鏍规嵁鍋氶璁板綍鏌ヨ鍋氭病鍋氳繃 + List<Integer> questionIds = new ArrayList<>(); + if (PracticeQuestionTypeEnum.ALL.getValue().equals(en.getQuestionType())) { + questionIds = questionSubjectMapper.questionsBySubjectId(subjectId); + } else { + questionIds = questionSubjectMapper.questionsBySubjectIdAndQuestionType(subjectId, PracticeQuestionTypeEnum.getDataBaseValueByValue(en.getQuestionType())); + } + SubjectQuestionVO subjectQuestionVO = new SubjectQuestionVO(); + subjectQuestionVO.setSubjectId(subjectId); + subjectQuestionVO.setSubjectName(subjectName); + subjectQuestionVO.setQuestionIds(questionIds); + list.add(subjectQuestionVO); } - // 鏌ヨ鍑鸿鐩笅闅忔満鐨勮瀹氭暟閲忛鐩� - List<QuestionVO> questionVOList = questionSubjectMapper.getRandomQuestionId(subjectIds, en.getQuestionNum()); - List<Integer> ids = questionVOList.stream().map(QuestionVO::getId).collect(Collectors.toList()); - selfPracticeMapper.setQuestionIds(en.getId(), JSON.toJSONString(ids)); - jsonQuestion(questionVOList); - return RestResponse.ok(questionVOList); + return RestResponse.ok(list); + } else if (PracticeTypeEnum.RANDOM.getValue().equals(en.getPracticeType())) { + // 闅忔満缁冧範锛屾槸涓�閬撻涓�閬撻缁冧範 + List<QuestionVO> one = questionSubjectMapper.getRandomQuestionId(subjectIds, 1); + if (one.size() < 1) { + throw new RuntimeException("娌℃湁鎵惧埌棰樼洰锛屽彲鑳芥墍閫夎鐩寘鍚鐩笉瓒�"); + } + return RestResponse.ok(one.get(0)); } + return RestResponse.ok(); } @Override diff --git a/src/main/resources/mapper/QuestionMapper.xml b/src/main/resources/mapper/QuestionMapper.xml index b5d066c..7cdd3b5 100644 --- a/src/main/resources/mapper/QuestionMapper.xml +++ b/src/main/resources/mapper/QuestionMapper.xml @@ -312,4 +312,23 @@ order by a.create_time </select> + <select id="selectContentById" resultType="com.mindskip.xzs.domain.vo.QuestionVO"> + SELECT + tq.id, + tq.question_type as questionType, + tq.difficult, + 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} + </select> + + <select id="getAnswer" resultType="string"> + SELECT + ttc.content + 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 + </select> + </mapper> diff --git a/src/main/resources/mapper/QuestionSubjectMapper.xml b/src/main/resources/mapper/QuestionSubjectMapper.xml index 90ac102..1b05d52 100644 --- a/src/main/resources/mapper/QuestionSubjectMapper.xml +++ b/src/main/resources/mapper/QuestionSubjectMapper.xml @@ -79,4 +79,36 @@ RAND() LIMIT #{questionNum} </select> + <select id="questionsBySubjectIds" resultType="integer"> + SELECT + question_id + FROM + t_question_subject + <where> + subject_id IN <foreach collection="subjectIds" open="(" separator="," close=")" item="subjectId">#{subjectId}</foreach> + </where> + ORDER BY + id DESC + </select> + + <select id="questionsBySubjectId" resultType="integer"> + SELECT + tqs.question_id + FROM + t_question_subject tqs + INNER JOIN t_question tq ON tqs.question_id = tq.id AND tqs.subject_id = #{subjectId} + ORDER BY + tqs.id DESC + </select> + + <select id="questionsBySubjectIdAndQuestionType" resultType="integer"> + SELECT + tqs.question_id + FROM + t_question_subject tqs + INNER JOIN t_question tq ON tqs.question_id = tq.id AND tqs.subject_id = #{subjectId} AND tq.question_type = #{questionType} + ORDER BY + tqs.id DESC + </select> + </mapper> diff --git a/src/main/resources/mapper/SelfPracticeMapper.xml b/src/main/resources/mapper/SelfPracticeMapper.xml index a713dd3..1b02250 100644 --- a/src/main/resources/mapper/SelfPracticeMapper.xml +++ b/src/main/resources/mapper/SelfPracticeMapper.xml @@ -5,9 +5,9 @@ <insert id="add" keyColumn="id" useGeneratedKeys="true" parameterType="com.mindskip.xzs.domain.SelfPractice"> INSERT INTO - t_self_practice(user_id, remark, subjects, practice_type, create_time, update_time, question_num, deleted) + t_self_practice(user_id, remark, subjects, practice_type, create_time, update_time, question_type, deleted) VALUE - (#{userId}, #{remark}, #{subjects}, #{practiceType}, #{createTime}, #{updateTime}, #{questionNum}, #{deleted}) + (#{userId}, #{remark}, #{subjects}, #{practiceType}, #{createTime}, #{updateTime}, #{questionType}, #{deleted}) </insert> <select id="page" resultType="com.mindskip.xzs.domain.vo.SelfPracticeVO"> @@ -19,8 +19,7 @@ practice_type as practiceType, create_time createTime, update_time as updateTime, - question_num as questionNum, - question_ids as questionIds + question_type as questionType FROM t_self_practice <where> @@ -48,8 +47,7 @@ practice_type as practiceType, create_time createTime, update_time as updateTime, - question_num as questionNum, - question_ids as questionIds + question_type as questionType FROM t_self_practice WHERE diff --git a/src/main/resources/mapper/SubjectMapper.xml b/src/main/resources/mapper/SubjectMapper.xml index 965f9c1..e7a6bcd 100644 --- a/src/main/resources/mapper/SubjectMapper.xml +++ b/src/main/resources/mapper/SubjectMapper.xml @@ -178,5 +178,9 @@ id IN <foreach collection="ids" open="(" separator="," close=")" item="id">#{id}</foreach> </select> + <select id="selectSubjectNameById" resultType="string"> + SELECT name FROM t_subject WHERE id = #{id} AND deleted = 0 + </select> + </mapper> -- Gitblit v1.8.0