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