src/main/java/com/ycl/jxkg/controller/student/WrongController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ycl/jxkg/domain/vo/student/wrong/WrongResponseVO.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ycl/jxkg/mapper/QuestionAnswerRecordMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ycl/jxkg/service/WrongService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/ycl/jxkg/service/impl/WrongServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/QuestionAnswerRecordMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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)); } 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; } 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:xp @@ -10,6 +16,6 @@ @Mapper public interface QuestionAnswerRecordMapper extends BaseMapper<QuestionAnswerRecord> { List<WrongResponseVO> selectWrongQuestion(@Param("wrongRequestVo") WrongRequestVo wrongRequestVo); } 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); } 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("、"))); 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{ // 解析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; } } 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>