xiangpei
2024-05-15 851990e521ed5b0cb0e367b319bb484f04c4c47e
在线练习完善
4个文件已修改
87 ■■■■ 已修改文件
src/main/java/com/mindskip/xzs/domain/PracticeQuestionCondition.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/impl/PracticeQuestionConditionServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/PracticeQuestionCondition.java
@@ -30,10 +30,8 @@
    /** 最近一次保存时间 */
    private Date latestTime;
    /** 做题详情 */
    @NotEmpty(message = "未做题不能保存")
    private List<QuestionFinishCondition> questionConditions;
    @NotNull(message = "未做题不能保存")
    private QuestionFinishCondition questionCondition;
    @Data
    public static class QuestionFinishCondition {
src/main/java/com/mindskip/xzs/domain/vo/SubjectQuestionVO.java
@@ -1,5 +1,6 @@
package com.mindskip.xzs.domain.vo;
import com.mindskip.xzs.domain.PracticeQuestionCondition;
import lombok.Data;
import java.util.List;
@@ -15,17 +16,6 @@
    private String subjectName;
    private List<Integer> questionIds;
    @Data
    public static class QuestionPractice {
        private Integer questionId;
        /** 是否做过:0没有 1做了 */
        private Integer doIt;
    }
    private List<PracticeQuestionCondition.QuestionFinishCondition> questionConditions;
}
src/main/java/com/mindskip/xzs/service/impl/PracticeQuestionConditionServiceImpl.java
@@ -7,8 +7,11 @@
import com.mindskip.xzs.service.PracticeQuestionConditionService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
@@ -23,18 +26,36 @@
    private final WebContext webContext;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void save(PracticeQuestionCondition entity) {
        // 如果做错了,加入错题集
        if (! entity.getQuestionCondition().getRight()) {
        }
        PracticeQuestionCondition old = mapper.selectByPracticeId(entity.getPracticeId());
        if (Objects.isNull(old)) {
            old = new PracticeQuestionCondition();
            old.setUserId(webContext.getCurrentUser().getId());
            old.setPracticeId(entity.getPracticeId());
            old.setContent(JSON.toJSONString(entity.getQuestionConditions()));
            ArrayList<Object> objects = new ArrayList<>(1);
            objects.add(entity.getQuestionCondition());
            old.setContent(JSON.toJSONString(objects));
            old.setLatestTime(new Date());
            mapper.save(old);
        } else {
            // 更新内容
            mapper.updateContentById(JSON.toJSONString(entity.getQuestionConditions()), old.getId(), new Date());
            List<PracticeQuestionCondition.QuestionFinishCondition> list = JSON.parseArray(old.getContent(), PracticeQuestionCondition.QuestionFinishCondition.class);
            if (list.stream().anyMatch(item -> item.getQuestionId().equals(entity.getQuestionCondition().getQuestionId()))) {
                for (PracticeQuestionCondition.QuestionFinishCondition item : list) {
                    if (item.getQuestionId().equals(entity.getQuestionCondition().getQuestionId())) {
                        item = entity.getQuestionCondition();
                        break;
                    }
                }
            } else {
                list.add(entity.getQuestionCondition());
            }
            mapper.updateContentById(JSON.toJSONString(list), old.getId(), new Date());
        }
    }
src/main/java/com/mindskip/xzs/service/impl/SelfPracticeServiceImpl.java
@@ -7,6 +7,7 @@
import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.context.WebContext;
import com.mindskip.xzs.domain.ExamPaperAnswer;
import com.mindskip.xzs.domain.PracticeQuestionCondition;
import com.mindskip.xzs.domain.Question;
import com.mindskip.xzs.domain.SelfPractice;
import com.mindskip.xzs.domain.enums.PracticeQuestionTypeEnum;
@@ -16,10 +17,7 @@
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;
import com.mindskip.xzs.repository.SubjectMapper;
import com.mindskip.xzs.repository.*;
import com.mindskip.xzs.service.SelfPracticeService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
@@ -45,7 +43,7 @@
    private final WebContext webContext;
    private final QuestionSubjectMapper questionSubjectMapper;
    private final SubjectMapper subjectMapper;
    private final QuestionMapper questionMapper;
    private final PracticeQuestionConditionMapper practiceQuestionConditionMapper;
    @Override
    public RestResponse add(SelfPracticeVO vo) {
@@ -69,6 +67,7 @@
        PageInfo<SelfPracticeVO> info = PageHelper.startPage(query.getPageNum(), query.getPageSize()).doSelectPageInfo(() ->
                selfPracticeMapper.page(query));
        info.getList().stream().forEach(item -> {
            // 查询课目名、课目总体数
            List<Integer> subjects = JSON.parseArray(item.getSubjectString(), Integer.class);
            item.setSubjects(subjects);
            List<String> subjectNames = subjectMapper.selectSubjectName(subjects);
@@ -76,6 +75,14 @@
                item.setSubjectNames(subjectNames.stream().collect(Collectors.joining("、")));
            }
            item.setTotalQuestionNum(questionSubjectMapper.countQuestionNum(subjects));
            // 查询已经做了多少
            PracticeQuestionCondition practiceQuestionCondition = practiceQuestionConditionMapper.selectByPracticeId(item.getId());
            if (Objects.nonNull(practiceQuestionCondition)) {
                List<PracticeQuestionCondition.QuestionFinishCondition> questionFinishConditions = JSON.parseArray(practiceQuestionCondition.getContent(), PracticeQuestionCondition.QuestionFinishCondition.class);
                item.setDoNum(questionFinishConditions.size());
            } else {
                item.setDoNum(0);
            }
        });
        return RestResponse.ok(info);
    }
@@ -97,18 +104,39 @@
            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()));
                }
                // 根据做题记录增加标识,页面渲染做没做过,做对没有
                PracticeQuestionCondition practiceQuestionCondition = practiceQuestionConditionMapper.selectByPracticeId(id);
                List<PracticeQuestionCondition.QuestionFinishCondition> questionFinishConditions = new ArrayList<>(48);
                if (Objects.nonNull(practiceQuestionCondition)) { // json反序列化得到做题情况
                    questionFinishConditions = JSON.parseArray(practiceQuestionCondition.getContent(), PracticeQuestionCondition.QuestionFinishCondition.class);
                }
                List<PracticeQuestionCondition.QuestionFinishCondition> finalQuestionFinishConditions = questionFinishConditions;
                // 组装前端数据
                List<PracticeQuestionCondition.QuestionFinishCondition> questionData = questionIds.stream().map(questionId -> {
                    PracticeQuestionCondition.QuestionFinishCondition questionPractice = new PracticeQuestionCondition.QuestionFinishCondition();
                    questionPractice.setQuestionId(questionId);
                    for (PracticeQuestionCondition.QuestionFinishCondition questionFinishCondition : finalQuestionFinishConditions) {
                        if (questionFinishCondition.getQuestionId().equals(questionId)) {
                            questionPractice.setRight(questionFinishCondition.getRight());
                            questionPractice.setAnswer(questionFinishCondition.getAnswer());
                            questionPractice.setHasDo(questionFinishCondition.getHasDo());
                        }
                    }
                    return questionPractice;
                }).collect(Collectors.toList());
                // 返回响应数据
                SubjectQuestionVO subjectQuestionVO = new SubjectQuestionVO();
                subjectQuestionVO.setSubjectId(subjectId);
                subjectQuestionVO.setSubjectName(subjectName);
                subjectQuestionVO.setQuestionIds(questionIds);
                subjectQuestionVO.setQuestionConditions(questionData);
                list.add(subjectQuestionVO);
            }
            return RestResponse.ok(list);