package com.ycl.jxkg.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ycl.jxkg.domain.entity.ExamPaperScore; import com.ycl.jxkg.domain.entity.Question; 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.QuestionMapper; import com.ycl.jxkg.service.WrongService; import com.ycl.jxkg.utils.JsonUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @Service @RequiredArgsConstructor @Slf4j public class WrongServiceImpl implements WrongService { @Autowired private ExamPaperScoreMapper examPaperScoreMapper; @Autowired private QuestionMapper questionMapper; /** * 条件查询错题 * */ @Override public WrongResponseVO page(WrongRequestVo wrongRequestVo) { WrongResponseVO wrongResponseVO = new WrongResponseVO(); // 查询该用户的所有考试 List examPaperScores = examPaperScoreMapper.selectByUserId(wrongRequestVo.getUserId()); List questions = new ArrayList<>(); // 遍历所有考试获得考试详情 examPaperScores.stream().forEach(examPaperScore -> { try{ // 解析json字符串 List paperFixQuestionVOS = JsonUtil.toJsonListObject(examPaperScore.getPaperContent(), PaperFixQuestionVO.class); paperFixQuestionVOS.stream().forEach(paperFixQuestionVO -> { List 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(); } }); // 条件查询 // 对集合中的题目进行模糊查询过滤 List doQuestionVOS = questions.stream() // 标题不为空或空字符串,模糊查询 .filter(question -> { if (wrongRequestVo.getTitle() == null || wrongRequestVo.getTitle().trim().equals("")) { return true; } return question.getTitle().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().equals("")) { return true; } return question.getExamName().toLowerCase().contains(wrongRequestVo.getExamName().toLowerCase()); }) .collect(Collectors.toList()); // 分页 List list = doQuestionVOS.stream().skip((wrongRequestVo.getPageIndex() - 1) * wrongRequestVo.getPageSize()).collect(Collectors.toList()); wrongResponseVO.setList(list); wrongResponseVO.setTotal(doQuestionVOS.size()); wrongResponseVO.setPageSize(wrongRequestVo.getPageSize()); wrongResponseVO.setPageIndex(wrongRequestVo.getPageIndex()); return wrongResponseVO; } }