xiangpei
2024-05-15 fe29db7a08e9da70ca3c78db27a11e48fa5f6f43
src/main/java/com/mindskip/xzs/service/impl/QuestionServiceImpl.java
@@ -1,5 +1,7 @@
package com.mindskip.xzs.service.impl;
import com.alibaba.fastjson.JSON;
import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.domain.QuestionSubject;
import com.mindskip.xzs.domain.other.KeyValue;
import com.mindskip.xzs.domain.Question;
@@ -8,16 +10,15 @@
import com.mindskip.xzs.domain.enums.QuestionTypeEnum;
import com.mindskip.xzs.domain.question.QuestionItemObject;
import com.mindskip.xzs.domain.question.QuestionObject;
import com.mindskip.xzs.domain.vo.QuestionContentVO;
import com.mindskip.xzs.domain.vo.QuestionVO;
import com.mindskip.xzs.repository.QuestionMapper;
import com.mindskip.xzs.repository.SubjectMapper;
import com.mindskip.xzs.service.QuestionService;
import com.mindskip.xzs.service.QuestionSubjectService;
import com.mindskip.xzs.service.SubjectService;
import com.mindskip.xzs.service.TextContentService;
import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.JsonUtil;
import com.mindskip.xzs.utility.ModelMapperSingle;
import com.mindskip.xzs.utility.ExamUtil;
import com.mindskip.xzs.utility.*;
import com.mindskip.xzs.viewmodel.admin.education.SubjectPageRequestVM;
import com.mindskip.xzs.viewmodel.admin.question.ExamQuestionVO;
import com.mindskip.xzs.viewmodel.admin.question.QuestionEditItemVM;
@@ -25,14 +26,20 @@
import com.mindskip.xzs.viewmodel.admin.question.QuestionPageRequestVM;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentRequestVM;
import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentResponseVM;
import com.mindskip.xzs.vo.QuestionExportVO;
import com.mindskip.xzs.vo.QuestionImportVO;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Service
@@ -156,27 +163,27 @@
        questionEditRequestVM.setTitle(questionObject.getTitleContent());
        //答案
//        QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(question.getQuestionType());
//        switch (questionTypeEnum) {
//            case SingleChoice:
//            case TrueFalse:
//                questionEditRequestVM.setCorrect(question.getCorrect());
//                break;
//            case MultipleChoice:
//                questionEditRequestVM.setCorrectArray(ExamUtil.contentToArray(question.getCorrect()));
//                break;
//            case GapFilling:
//                List<String> correctContent = questionObject.getQuestionItemObjects().stream().map(d -> d.getContent()).collect(Collectors.toList());
//                questionEditRequestVM.setCorrectArray(correctContent);
//                break;
//            case ShortAnswer:
//                questionEditRequestVM.setCorrect(questionObject.getCorrect());
//                break;
//            default:
//                break;
//        }
//        questionEditRequestVM.setScore(ExamUtil.scoreToVM(question.getScore()));
//        questionEditRequestVM.setAnalyze(questionObject.getAnalyze());
        QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(question.getQuestionType());
        switch (questionTypeEnum) {
            case SingleChoice:
            case TrueFalse:
                questionEditRequestVM.setCorrect(question.getCorrect());
                break;
            case MultipleChoice:
                questionEditRequestVM.setCorrectArray(ExamUtil.contentToArray(question.getCorrect()));
                break;
            case GapFilling:
                List<String> correctContent = questionObject.getQuestionItemObjects().stream().map(d -> d.getContent()).collect(Collectors.toList());
                questionEditRequestVM.setCorrectArray(correctContent);
                break;
            case ShortAnswer:
                questionEditRequestVM.setCorrect(questionObject.getCorrect());
                break;
            default:
                break;
        }
        questionEditRequestVM.setScore(ExamUtil.scoreToVM(question.getScore()));
        questionEditRequestVM.setAnalyze(questionObject.getAnalyze());
        //题目项映射
@@ -251,4 +258,59 @@
    }
    @Override
    public List<QuestionImportVO> export(QuestionExportVO query) {
        return questionMapper.export(query);
    }
    @Override
    public PageInfo<QuestionPageStudentResponseVM> selectQuestion(QuestionPageStudentRequestVM model) {
        return PageHelper.startPage(model.getPageIndex(), model.getPageSize(), "id desc").doSelectPageInfo(() ->
                questionMapper.selectQuestion(model).stream().peek(
                        q -> q.setShortTitle(HtmlUtil.clear(q.getShortTitle()))
                ).collect(Collectors.toList())
        );
    }
    @Override
    public RestResponse selectContentById(Integer id) {
        QuestionVO questionVO = questionMapper.selectContentById(id);
        jsonQuestion(questionVO);
        if (QuestionTypeEnum.MultipleChoice.getCode().equals(questionVO.getQuestionType())) {
            // 多选题需要返回答案数量,学员选中对应数量才查询答案
            if (StringUtils.hasText(questionVO.getCorrect())) {
                questionVO.setAnswerNum(questionVO.getCorrect().split(",").length);
            }
        }
        questionVO.setContentJson("");
        questionVO.setCorrect("");
        questionVO.getContent().setCorrect("");
        questionVO.getContent().setAnalyze("");
        return RestResponse.ok(questionVO);
    }
    @Override
    public RestResponse getAnswer(Integer id) {
        QuestionVO questionVO = questionMapper.getAnswer(id);
        if (Objects.nonNull(questionVO) && StringUtils.hasText(questionVO.getCorrect())) {
            QuestionContentVO vo = JSON.parseObject(questionVO.getContentJson(), QuestionContentVO.class);
            vo.setQuestionItemObjects(null);
            vo.setTitleContent(null);
            vo.setCorrect(questionVO.getCorrect());
            return RestResponse.ok(vo);
        }
        return RestResponse.ok(null);
    }
    /**
     * 处理题目内容JSON
     *
     * @param vo
     */
    public void jsonQuestion(QuestionVO vo) {
        if (StringUtils.hasText(vo.getContentJson())) {
            QuestionContentVO questionContent = JSON.parseObject(vo.getContentJson(), QuestionContentVO.class);
            vo.setContent(questionContent);
        }
    }
}