xiangpei
2024-06-28 dd8dae675ea55425d5c68ae5a51fcfaf931a72ba
临时提交表增加题目答案副本
2个文件已修改
1个文件已添加
76 ■■■■ 已修改文件
src/main/java/com/ycl/jxkg/domain/entity/ExamSubmitTemp.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/vo/QuestionAnswerCopyVO.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/entity/ExamSubmitTemp.java
@@ -46,6 +46,10 @@
    /** 状态:临时、完成 */
    private ExamSubmitTempStatusEnum markPaperStatus;
    @TableField("question_answer_copy")
    /** 试卷中题目对应的答案 */
    private String questionAnswerCopy;
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private Date createTime;
src/main/java/com/ycl/jxkg/domain/vo/QuestionAnswerCopyVO.java
New file
@@ -0,0 +1,23 @@
package com.ycl.jxkg.domain.vo;
import lombok.Data;
import java.util.List;
/**
 * @author:xp
 * @date:2024/6/28 16:18
 */
@Data
public class QuestionAnswerCopyVO {
    /** 题目ID */
    private Integer id;
    /** 解析 */
    private String analyze;
    /** 学员答案 */
    private String correct;
}
src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
@@ -10,6 +10,7 @@
import com.ycl.jxkg.context.WebContext;
import com.ycl.jxkg.domain.entity.*;
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.AddTimeForm;
import com.ycl.jxkg.domain.form.ExamForm;
@@ -17,11 +18,8 @@
import com.ycl.jxkg.domain.query.ExamQuery;
import com.ycl.jxkg.domain.question.QuestionObject;
import com.ycl.jxkg.domain.vo.*;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperEditRequestVO;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperMarkAnswerVO;
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperMarkVO;
import com.ycl.jxkg.domain.vo.student.exam.ExamPaperReadVO;
import com.ycl.jxkg.domain.vo.student.exam.ExamPaperSubmitVO;
import com.ycl.jxkg.enums.DeductTypeEnum;
import com.ycl.jxkg.enums.ExamPaperTypeEnum;
import com.ycl.jxkg.enums.QuestionTypeEnum;
@@ -32,11 +30,9 @@
import com.ycl.jxkg.server.WebsocketServer;
import com.ycl.jxkg.service.ExamPaperService;
import com.ycl.jxkg.service.ExamService;
import com.ycl.jxkg.utils.JsonUtil;
import com.ycl.jxkg.utils.PageUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
@@ -192,6 +188,15 @@
            startExamVO.setDoTime(hasJoin.getDoTime());
            return Result.ok(startExamVO);
        }
        // 响应数据
        StartExamVO startExamVO = new StartExamVO();
        startExamVO.setExamName(exam.getExamName());
        startExamVO.setId(exam.getId());
        startExamVO.setSuggestTime(examPaper.getSuggestTime());
        // 试卷内容
        List<PaperFixQuestionVO> examData;
        // 拿到题目副本数据
        List<QuestionAnswerCopyVO> questionAnswerCopyVOList = new ArrayList<>(32);
        // 将题目转换为可临时保存的题目结构。固定试卷和随序试卷的题目是直接保存到content字段的
        if (ExamPaperTypeEnum.Fixed.getCode().equals(examPaper.getPaperType())
                || ExamPaperTypeEnum.RandomOrder.getCode().equals(examPaper.getPaperType())) {
@@ -199,17 +204,14 @@
                throw new RuntimeException("试卷题目为空");
            }
            // 转换
            List<PaperFixQuestionVO> data = this.coverTo(examPaper);
            return Result.ok().data(data);
            examData = this.coverTo(examPaper, questionAnswerCopyVOList);
        } else if (ExamPaperTypeEnum.Random.getCode().equals(examPaper.getPaperType())) {
            // 根据随机试卷的配置,随机生成对应题目
            if (!StringUtils.hasText(examPaper.getContent())) {
                throw new RuntimeException("试卷配置异常,请联系老师");
            }
            List<PaperQuestionSettingDTO> paperSettingList = JSON.parseArray(examPaper.getContent(), PaperQuestionSettingDTO.class);
            // 试卷内容
            List<PaperFixQuestionVO> examData = new ArrayList<>(8);
            examData = new ArrayList<>(8);
            for (PaperQuestionSettingDTO paperSetting : paperSettingList) {
                PaperFixQuestionVO paperFixQuestionVO = new PaperFixQuestionVO();
                paperFixQuestionVO.setTitle(paperSetting.getTitle());
@@ -219,6 +221,7 @@
                if (paperSetting.getNum() > questions.size()) {
                    throw new RuntimeException("配置的题目数不足以生成试卷");
                }
                // 拿到题目后组装为可临时保存的题目结构
                List<DoQuestionVO> childQuestions = questions.stream().map(item -> {
                    DoQuestionVO doQuestionVO = new DoQuestionVO();
@@ -231,6 +234,13 @@
                    doQuestionVO.setId(item.getId());
                    doQuestionVO.setOriginalFile(item.getOriginalFile());
                    doQuestionVO.setAudioFile(item.getAudioFile());
                    // 题目副本
                    QuestionAnswerCopyVO copy = new QuestionAnswerCopyVO();
                    copy.setAnalyze(JSON.parseObject(item.getContent(), PaperQuestion.class).getAnalyze());
                    copy.setCorrect(item.getCorrect());
                    questionAnswerCopyVOList.add(copy);
                    return doQuestionVO;
                }).collect(Collectors.toList());
                paperFixQuestionVO.setQuestionList(childQuestions);
@@ -238,19 +248,15 @@
            }
            ExamSubmitTemp examSubmitTemp = new ExamSubmitTemp();
            examSubmitTemp.setExamId(id);
            //TODO
            examSubmitTemp.setStatus(ExamSubmitTempStatusEnum.temp);
            examSubmitTemp.setExamSubmit(JSON.toJSONString(examData));
            examSubmitTemp.setCreateTime(new Date());
            examSubmitTemp.setUserId(webContext.getCurrentUser().getId());
            //TODO
            examSubmitTemp.setMarkPaperStatus(ExamSubmitTempStatusEnum.temp);
            examSubmitTemp.setQuestionAnswerCopy(JSON.toJSONString(questionAnswerCopyVOList));
            examSubmitTempMapper.insert(examSubmitTemp);
            StartExamVO startExamVO = new StartExamVO();
            startExamVO.setExamName(exam.getExamName());
            startExamVO.setId(exam.getId());
            startExamVO.setTitleList(examData);
            startExamVO.setSuggestTime(examPaper.getSuggestTime());
            return Result.ok(startExamVO);
        }
        return Result.ok();
@@ -260,9 +266,10 @@
     * 将数据库存储的题目,转为可临时保存的题目结构
     *
     * @param examPaper 试卷
     * @param questionAnswerCopyVOList 题目副本集合
     * @return
     */
    private List<PaperFixQuestionVO> coverTo(ExamPaper examPaper) {
    private List<PaperFixQuestionVO> coverTo(ExamPaper examPaper, List<QuestionAnswerCopyVO> questionAnswerCopyVOList) {
        if (!StringUtils.hasText(examPaper.getContent())) {
            throw new RuntimeException("试卷未配置题目,请联系老师");
        }
@@ -275,6 +282,7 @@
                DoQuestionVO doQuestionVO = new DoQuestionVO();
                doQuestionVO.setTitle(question.getTitle());
                doQuestionVO.setQuestionType(item.getQuestionType());
                // 填空题需要抹除content(因为是答案)
                if (QuestionTypeEnum.GapFilling.getCode().equals(doQuestionVO.getQuestionType())) {
                    question.getItems().stream().forEach(option -> {
@@ -285,6 +293,13 @@
                doQuestionVO.setId(question.getId());
                doQuestionVO.setOriginalFile(question.getOriginalFile());
                doQuestionVO.setAudioFile(question.getAudioFile());
                // 题目副本
                QuestionAnswerCopyVO copy = new QuestionAnswerCopyVO();
                copy.setAnalyze(question.getAnalyze());
                copy.setCorrect(question.getCorrect());
                questionAnswerCopyVOList.add(copy);
                return doQuestionVO;
            }).collect(Collectors.toList());
            if (ExamPaperTypeEnum.RandomOrder.getCode().equals(examPaper.getPaperType())) {