From b661bcf7e065092c876e052bad0bfaecb9dc0c17 Mon Sep 17 00:00:00 2001 From: luohairen <3399054449@qq.com> Date: 星期二, 12 十一月 2024 21:21:06 +0800 Subject: [PATCH] 优化错题查询 --- src/main/java/com/ycl/jxkg/service/WrongService.java | 3 src/main/resources/mapper/QuestionAnswerRecordMapper.xml | 45 +++++++++++++++ src/main/java/com/ycl/jxkg/domain/vo/student/wrong/WrongResponseVO.java | 14 +++- src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java | 11 ++- src/main/java/com/ycl/jxkg/controller/student/WrongController.java | 3 src/main/java/com/ycl/jxkg/mapper/QuestionAnswerRecordMapper.java | 8 ++ src/main/java/com/ycl/jxkg/service/impl/WrongServiceImpl.java | 70 +++-------------------- 7 files changed, 84 insertions(+), 70 deletions(-) diff --git a/src/main/java/com/ycl/jxkg/controller/student/WrongController.java b/src/main/java/com/ycl/jxkg/controller/student/WrongController.java index 3947e50..2ee691d 100644 --- a/src/main/java/com/ycl/jxkg/controller/student/WrongController.java +++ b/src/main/java/com/ycl/jxkg/controller/student/WrongController.java @@ -1,5 +1,6 @@ package com.ycl.jxkg.controller.student; +import com.github.pagehelper.PageInfo; import com.ycl.jxkg.base.BaseApiController; import com.ycl.jxkg.base.Result; import com.ycl.jxkg.domain.vo.DoQuestionVO; @@ -20,7 +21,7 @@ private final WrongService wrongService; @PostMapping("/list") - public Result<WrongResponseVO> list(@RequestBody WrongRequestVo model) { + public Result<PageInfo<WrongResponseVO>> list(@RequestBody WrongRequestVo model) { model.setUserId(getCurrentUser().getId()); return Result.ok(wrongService.list(model)); } diff --git a/src/main/java/com/ycl/jxkg/domain/vo/student/wrong/WrongResponseVO.java b/src/main/java/com/ycl/jxkg/domain/vo/student/wrong/WrongResponseVO.java index dfb1017..e145d06 100644 --- a/src/main/java/com/ycl/jxkg/domain/vo/student/wrong/WrongResponseVO.java +++ b/src/main/java/com/ycl/jxkg/domain/vo/student/wrong/WrongResponseVO.java @@ -1,18 +1,24 @@ package com.ycl.jxkg.domain.vo.student.wrong; +import com.ycl.jxkg.domain.entity.ExamPaper; +import com.ycl.jxkg.domain.entity.Question; +import com.ycl.jxkg.domain.entity.QuestionAnswerRecord; import com.ycl.jxkg.domain.vo.DoQuestionVO; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.math.BigDecimal; import java.util.List; @Data @AllArgsConstructor @NoArgsConstructor public class WrongResponseVO { - private List<DoQuestionVO> list; - private Integer pageIndex; - private Integer pageSize; - private Integer total; + private Integer paperId; + private String title; + private Integer questionType; + private BigDecimal score; + private Integer difficult; + private String examName; } diff --git a/src/main/java/com/ycl/jxkg/mapper/QuestionAnswerRecordMapper.java b/src/main/java/com/ycl/jxkg/mapper/QuestionAnswerRecordMapper.java index 4597b1c..9d7c3c0 100644 --- a/src/main/java/com/ycl/jxkg/mapper/QuestionAnswerRecordMapper.java +++ b/src/main/java/com/ycl/jxkg/mapper/QuestionAnswerRecordMapper.java @@ -1,7 +1,13 @@ package com.ycl.jxkg.mapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ycl.jxkg.domain.entity.QuestionAnswerRecord; +import com.ycl.jxkg.domain.vo.student.wrong.WrongRequestVo; +import com.ycl.jxkg.domain.vo.student.wrong.WrongResponseVO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * @author锛歺p @@ -10,6 +16,6 @@ @Mapper public interface QuestionAnswerRecordMapper extends BaseMapper<QuestionAnswerRecord> { - + List<WrongResponseVO> selectWrongQuestion(@Param("wrongRequestVo") WrongRequestVo wrongRequestVo); } diff --git a/src/main/java/com/ycl/jxkg/service/WrongService.java b/src/main/java/com/ycl/jxkg/service/WrongService.java index 066bff0..c153c10 100644 --- a/src/main/java/com/ycl/jxkg/service/WrongService.java +++ b/src/main/java/com/ycl/jxkg/service/WrongService.java @@ -1,5 +1,6 @@ package com.ycl.jxkg.service; +import com.github.pagehelper.PageInfo; import com.ycl.jxkg.domain.vo.student.wrong.WrongRequestVo; import com.ycl.jxkg.domain.vo.student.wrong.WrongResponseVO; @@ -8,6 +9,6 @@ /** * 鏉′欢鏌ヨ閿欓 * */ - WrongResponseVO list(WrongRequestVo wrongRequestVo); + PageInfo<WrongResponseVO> list(WrongRequestVo wrongRequestVo); } diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java index 1a77e99..fe69d1a 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java @@ -1008,7 +1008,7 @@ if (!org.springframework.util.CollectionUtils.isEmpty(examPaperMark.getTitleItems())) { examPaperScore.setPaperContent(JSON.toJSONString(examPaperMark.getTitleItems())); // 淇濆瓨绛旈璁板綍 - this.saveQuestionAnswerRecord(examPaperMark.getUserId(), examPaperMark.getTitleItems()); + this.saveQuestionAnswerRecord(examPaperMark.getUserId(), examPaperMark.getTitleItems(), examPaperMark.getExamId(), examPaperMark.getPaperId()); } if (!org.springframework.util.CollectionUtils.isEmpty(examPaperMark.getNavbar())) { examPaperScore.setNavbar(JSON.toJSONString(examPaperMark.getNavbar())); @@ -1053,14 +1053,19 @@ * * @param titleItems */ - private void saveQuestionAnswerRecord(Integer studentUserId, List<PaperFixQuestionVO> titleItems) { + private void saveQuestionAnswerRecord(Integer studentUserId, List<PaperFixQuestionVO> titleItems, Integer examId, Integer paperId) { + // 鍒犻櫎鍘熸潵鐨勭瓟棰樿褰� + new LambdaUpdateChainWrapper<>(questionAnswerRecordMapper) + .eq(QuestionAnswerRecord::getExamId, examId) + .eq(QuestionAnswerRecord::getUserId, studentUserId).remove(); for (PaperFixQuestionVO titleItem : titleItems) { for (DoQuestionVO question : titleItem.getQuestionList()) { QuestionAnswerRecord record = new QuestionAnswerRecord(); record.setQuestionType(titleItem.getQuestionType()); record.setUserId(studentUserId); record.setDoRight(question.getRight()); - record.setExamId(question.getExamId()); + record.setExamId(examId); + record.setPaperId(paperId); record.setQuestionId(question.getId()); record.setScore(question.getScore()); record.setUserAnswer(StringUtils.hasText(question.getAnswer()) ? question.getAnswer() : question.getAnswerList().stream().collect(Collectors.joining("銆�"))); diff --git a/src/main/java/com/ycl/jxkg/service/impl/WrongServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/WrongServiceImpl.java index 70aa8fe..03736e3 100644 --- a/src/main/java/com/ycl/jxkg/service/impl/WrongServiceImpl.java +++ b/src/main/java/com/ycl/jxkg/service/impl/WrongServiceImpl.java @@ -1,19 +1,24 @@ package com.ycl.jxkg.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; import com.ycl.jxkg.domain.entity.ExamPaperScore; import com.ycl.jxkg.domain.entity.Question; +import com.ycl.jxkg.domain.entity.QuestionAnswerRecord; import com.ycl.jxkg.domain.vo.DoQuestionVO; import com.ycl.jxkg.domain.vo.PaperFixQuestionVO; import com.ycl.jxkg.domain.vo.student.wrong.WrongPageVo; import com.ycl.jxkg.domain.vo.student.wrong.WrongRequestVo; import com.ycl.jxkg.domain.vo.student.wrong.WrongResponseVO; import com.ycl.jxkg.mapper.ExamPaperScoreMapper; +import com.ycl.jxkg.mapper.QuestionAnswerRecordMapper; import com.ycl.jxkg.mapper.QuestionMapper; import com.ycl.jxkg.service.WrongService; import com.ycl.jxkg.utils.JsonUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -30,6 +35,8 @@ private ExamPaperScoreMapper examPaperScoreMapper; @Autowired private QuestionMapper questionMapper; + @Autowired + private QuestionAnswerRecordMapper questionAnswerRecordMapper; @@ -37,66 +44,9 @@ * 鏉′欢鏌ヨ閿欓 * */ @Override - public WrongResponseVO list(WrongRequestVo wrongRequestVo) { - WrongResponseVO wrongResponseVO = new WrongResponseVO(); - // 鏌ヨ璇ョ敤鎴风殑鎵�鏈夎�冭瘯 - List<ExamPaperScore> examPaperScores = examPaperScoreMapper.selectByUserId(wrongRequestVo.getUserId()); - List<DoQuestionVO> questions = new ArrayList<>(); - // 閬嶅巻鎵�鏈夎�冭瘯鑾峰緱鑰冭瘯璇︽儏 - examPaperScores.stream().forEach(examPaperScore -> { - try{ - // 瑙f瀽json瀛楃涓� - List<PaperFixQuestionVO> paperFixQuestionVOS = JsonUtil.toJsonListObject(examPaperScore.getPaperContent(), PaperFixQuestionVO.class); - paperFixQuestionVOS.stream().forEach(paperFixQuestionVO -> { - List<DoQuestionVO> doQuestionVOS = paperFixQuestionVO.getQuestionList().stream() - .filter(doQuestionVO -> !doQuestionVO.getRight()) - .map(doQuestionVO -> { - // 鏍规嵁id鏌ヨ棰樺共 - Question question = questionMapper.selectOne(new LambdaQueryWrapper<>(Question.class).eq(Question::getId, doQuestionVO.getId())); -// Question question = questionMapper.selectById(doQuestionVO.getId()); - doQuestionVO.setExamId(examPaperScore.getExamId()); - doQuestionVO.setExamName(examPaperScore.getExamName()); - doQuestionVO.setTitle(question.getTitle()); - // 鑰冭瘯缁撴灉璁板綍id - doQuestionVO.setId(examPaperScore.getId()); - return doQuestionVO; - }) - .collect(Collectors.toList()); - questions.addAll(doQuestionVOS); - }); - }catch (Exception e){ - e.printStackTrace(); - } + public PageInfo<WrongResponseVO> list(WrongRequestVo wrongRequestVo) { + return PageHelper.startPage(wrongRequestVo.getPageIndex(), wrongRequestVo.getPageSize()).doSelectPageInfo(() -> { + questionAnswerRecordMapper.selectWrongQuestion(wrongRequestVo); }); - // 鏉′欢鏌ヨ - // 瀵归泦鍚堜腑鐨勯鐩繘琛屾ā绯婃煡璇㈣繃婊� - List<DoQuestionVO> doQuestionVOS = questions.stream() - // 鏍囬涓嶄负绌烘垨绌哄瓧绗︿覆锛屾ā绯婃煡璇� - .filter(question -> { - if (wrongRequestVo.getTitle() == null || wrongRequestVo.getTitle().trim().isEmpty()) { - return true; - } - return Optional.ofNullable(question.getTitle()).orElse("").toLowerCase().contains(wrongRequestVo.getTitle().toLowerCase()); - }) - .filter(question -> { - if (wrongRequestVo.getQuestionType() == null) { - return true; - } - return question.getQuestionType().equals(wrongRequestVo.getQuestionType()); - }) - .filter(question -> { - if (wrongRequestVo.getExamName() == null || wrongRequestVo.getExamName().trim().isEmpty()) { - return true; - } - return Optional.ofNullable(question.getExamName()).orElse("").toLowerCase().contains(wrongRequestVo.getExamName().toLowerCase()); - }) - .collect(Collectors.toList()); - // 鍒嗛〉 - List<DoQuestionVO> list = doQuestionVOS.stream().skip((wrongRequestVo.getPageIndex() - 1) * wrongRequestVo.getPageSize()).collect(Collectors.toList()).stream().limit(wrongRequestVo.getPageSize()).collect(Collectors.toList()); - wrongResponseVO.setList(list); - wrongResponseVO.setTotal(doQuestionVOS.size()); - wrongResponseVO.setPageSize(wrongRequestVo.getPageSize()); - wrongResponseVO.setPageIndex(wrongRequestVo.getPageIndex()); - return wrongResponseVO; } } diff --git a/src/main/resources/mapper/QuestionAnswerRecordMapper.xml b/src/main/resources/mapper/QuestionAnswerRecordMapper.xml index 048ba38..578eba4 100644 --- a/src/main/resources/mapper/QuestionAnswerRecordMapper.xml +++ b/src/main/resources/mapper/QuestionAnswerRecordMapper.xml @@ -1,6 +1,51 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ycl.jxkg.mapper.QuestionAnswerRecordMapper"> + <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.entity.QuestionAnswerRecord"> + <id property="id" column="id" /> + <result property="userId" column="user_id" /> + <result property="examId" column="exam_id" /> + <result property="paperId" column="paper_id" /> + <result property="questionId" column="question_id" /> + <result property="doRight" column="do_right" /> + <result property="userAnswer" column="user_answer" /> + <result property="score" column="score" /> + <result property="questionType" column="question_type" /> + </resultMap> + + <resultMap id="WrongResultMap" type="com.ycl.jxkg.domain.vo.student.wrong.WrongResponseVO"> + <result property="paperId" column="paper_id" /> + <result property="title" column="title" /> + <result property="questionType" column="question_type" /> + <result property="difficult" column="difficult" /> + <result property="score" column="score" /> + <result property="examName" column="exam_name" /> + </resultMap> + <select id="selectWrongQuestion" resultMap="WrongResultMap"> + SELECT + qar.paper_id, + q.title, + q.question_type, + q.difficult, + qar.score, + e.exam_name + FROM t_question_answer_record qar + LEFT JOIN t_question q ON q.id = qar.question_id + LEFT JOIN t_exam e ON e.id = qar.exam_id + <where> + qar.user_id = #{wrongRequestVo.userId} + and do_right = 0 + <if test="wrongRequestVo.title != null and wrongRequestVo.title != ''"> + and q.title like concat('%',#{wrongRequestVo.title},'%') + </if> + <if test="wrongRequestVo.questionType != null"> + and q.question_type = #{wrongRequestVo.questionType} + </if> + <if test="wrongRequestVo.examName != null and wrongRequestVo.examName != ''"> + and e.exam_name like concat('%',#{wrongRequestVo.examName},'%') + </if> + </where> + </select> </mapper> -- Gitblit v1.8.0