fuliqi
2024-06-17 ff72e1d0b87a6a52330baa620656dc0f1c4cfc8b
试卷模块
3个文件已修改
67 ■■■■■ 已修改文件
src/main/java/com/ycl/jxkg/domain/exam/PaperQuestion.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/exam/PaperQuestionSettingDTO.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/exam/PaperQuestion.java
@@ -21,4 +21,10 @@
    private String correct;
    private String analyze;
    //语音题文件名
    private String audioFile;
    //语音题原始名
    private String originalFile;
}
src/main/java/com/ycl/jxkg/domain/exam/PaperQuestionSettingDTO.java
@@ -7,7 +7,7 @@
@Data
public class PaperQuestionSettingDTO {
    //标题(单选题、判断题)
    //标题(单选题(20分)...)
    private String title;
    //题目类别
    private Integer questionType;
src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java
@@ -1,28 +1,34 @@
package com.ycl.jxkg.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.jxkg.base.Result;
import com.ycl.jxkg.base.SystemCode;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycl.jxkg.base.Result;
import com.ycl.jxkg.base.SystemCode;
import com.ycl.jxkg.context.WebContext;
import com.ycl.jxkg.domain.entity.ExamPaper;
import com.ycl.jxkg.domain.entity.Question;
import com.ycl.jxkg.domain.exam.PaperFixQuestionDTO;
import com.ycl.jxkg.domain.exam.PaperQuestion;
import com.ycl.jxkg.domain.exam.PaperQuestionSettingDTO;
import com.ycl.jxkg.domain.form.ExamPaperForm;
import com.ycl.jxkg.domain.other.KeyValue;
import com.ycl.jxkg.domain.question.QuestionItemObject;
import com.ycl.jxkg.domain.question.QuestionObject;
import com.ycl.jxkg.domain.question.RandomQuestionDTO;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperEditRequestVO;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperPageRequestVO;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperTitleItemVO;
import com.ycl.jxkg.domain.vo.admin.exam.ExamResponseVO;
import com.ycl.jxkg.domain.vo.student.dashboard.PaperFilter;
import com.ycl.jxkg.domain.vo.student.dashboard.PaperInfo;
import com.ycl.jxkg.domain.vo.student.exam.ExamPaperPageVO;
import com.ycl.jxkg.enums.ExamPaperTypeEnum;
import com.ycl.jxkg.domain.other.KeyValue;
import com.ycl.jxkg.enums.QuestionTypeEnum;
import com.ycl.jxkg.enums.VisibilityEnum;
import com.ycl.jxkg.mapper.ExamPaperMapper;
@@ -32,27 +38,16 @@
import com.ycl.jxkg.service.SubjectService;
import com.ycl.jxkg.service.TextContentService;
import com.ycl.jxkg.utils.DateTimeUtil;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperEditRequestVO;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperPageRequestVO;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperTitleItemVO;
import com.ycl.jxkg.domain.vo.student.dashboard.PaperFilter;
import com.ycl.jxkg.domain.vo.student.dashboard.PaperInfo;
import com.ycl.jxkg.domain.vo.student.exam.ExamPaperPageVO;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ycl.jxkg.domain.entity.ExamPaper;
import com.ycl.jxkg.utils.JsonUtil;
import com.ycl.jxkg.utils.PageInfoHelper;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.stream.Collectors;
@Service
@@ -74,6 +69,21 @@
        examPaper.setScore(new BigDecimal(form.getScore()));
        //随机试卷
        if (ExamPaperTypeEnum.Random.getCode().equals(form.getPaperType())) {
            //校验题目数量
            List<PaperQuestionSettingDTO> questionSetting = form.getQuestionSetting();
            //题目配置里配的试卷类型
            List<Integer> types = questionSetting.stream().map(PaperQuestionSettingDTO::getQuestionType).collect(Collectors.toList());
            Map<Integer, List<Integer>> map = questionMapper.selectBySubject(form.getSubjectId(), types)
                    .stream().collect(Collectors.groupingBy(RandomQuestionDTO::getQuestionType, Collectors.mapping(RandomQuestionDTO::getQuestionId, Collectors.toList())));
            for (PaperQuestionSettingDTO settingDTO : questionSetting) {
                Integer num = settingDTO.getNum();
                Integer questionType = settingDTO.getQuestionType();
                //需要配置的题目数量为0则跳过
                if(num ==null || num ==0 )continue;
                List<Integer> questions = map.get(questionType);
                if(CollectionUtils.isEmpty(questions) || num > questions.size())return Result.fail(SystemCode.InnerError.getCode(), QuestionTypeEnum.fromCode(questionType).getName()+"题目数量不足");
            }
            examPaper.setContent(JSON.toJSONString(form.getQuestionSetting()));
            baseMapper.insert(examPaper);
            return Result.ok();
@@ -112,7 +122,7 @@
                Result InnerError6 = createQuestion(questionSetting, questionTitleList, questionType, questionIdList,QuestionTypeEnum.Calculate.getCode());
                if (InnerError6 != null) return InnerError6;
            }
            examPaper.setContent(JSON.toJSONString(form.getQuestionTitleList()));
            examPaper.setContent(JSON.toJSONString(questionTitleList));
            baseMapper.insert(examPaper);
            return Result.ok();
        }
@@ -126,16 +136,16 @@
                if (dto.getQuestionType().equals(questionType)) {
                    settingDTO = dto;
                }
            }
            // 需要生成的题目数量
            }// 需要生成的题目数量
            Integer num = settingDTO.getNum();
            if(num ==0){
            if(num ==null || num ==0 ){
                //题目配置此类型数量为0,跳过,不生成题目。
                return null;
            }
            if (CollectionUtils.isEmpty(questionIdList) || num > questionIdList.size()) {
                return Result.fail(SystemCode.InnerError.getCode(), "题目数量不足");
                return Result.fail(SystemCode.InnerError.getCode(), QuestionTypeEnum.fromCode(questionType).getName()+"题目数量不足");
            }
            // 使用Random类生成不重复的随机索引
            Set<Integer> indexes = new HashSet<>();
            Random random = new Random();
@@ -156,7 +166,13 @@
                PaperQuestion paperQuestion = new PaperQuestion();
                BeanUtils.copyProperties(question,paperQuestion);
                paperQuestion.setScore(settingDTO.getScore());
                paperQuestion.setItems(JSONArray.parseArray(question.getContent(), QuestionItemObject.class));
                //转换
                QuestionObject questionObject = JSONObject.parseObject(question.getContent(), QuestionObject.class);
                if(questionObject != null){
                    paperQuestion.setItems(questionObject.getQuestionItemObjects());
                    paperQuestion.setAnalyze(questionObject.getAnalyze());
                    paperQuestion.setTitle(questionObject.getTitleContent());
                }
                questionList.add(paperQuestion);
            }
            PaperFixQuestionDTO dto = new PaperFixQuestionDTO();
@@ -264,6 +280,7 @@
            vo.setQuestionTitleList(JSONArray.parseArray(examPaper.getContent(), PaperFixQuestionDTO.class));
        } else {
            //随序试卷
            vo.setQuestionTitleList(JSONArray.parseArray(examPaper.getContent(), PaperFixQuestionDTO.class));
        }
        return vo;
    }