龚焕茏
2024-06-26 541e77765ef787c48c4b0f694b499a4fc5196d6e
src/main/java/com/ycl/jxkg/service/impl/ExamServiceImpl.java
@@ -3,28 +3,30 @@
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.context.WebContext;
import com.ycl.jxkg.domain.entity.*;
import com.ycl.jxkg.domain.entity.Exam;
import com.ycl.jxkg.domain.entity.ExamPaper;
import com.ycl.jxkg.domain.entity.ExamSubmitTemp;
import com.ycl.jxkg.domain.entity.Question;
import com.ycl.jxkg.domain.exam.PaperFixQuestionDTO;
import com.ycl.jxkg.domain.exam.PaperQuestionSettingDTO;
import com.ycl.jxkg.domain.form.ExamForm;
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.enums.ExamPaperTypeEnum;
import com.ycl.jxkg.enums.QuestionTypeEnum;
import com.ycl.jxkg.enums.general.ExamStatusEnum;
import com.ycl.jxkg.enums.general.ExamSubmitTempStatusEnum;
import com.ycl.jxkg.mapper.*;
import com.ycl.jxkg.service.ExamPaperService;
import com.ycl.jxkg.service.ExamService;
import com.ycl.jxkg.base.Result;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ycl.jxkg.domain.form.ExamForm;
import com.ycl.jxkg.domain.query.ExamQuery;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import com.ycl.jxkg.utils.PageUtil;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
@@ -138,6 +140,7 @@
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Result start(Integer id) {
        Exam exam = baseMapper.selectById(id);
        if (Objects.isNull(exam)) {
@@ -165,7 +168,6 @@
            }
            // 转换
            List<PaperFixQuestionVO> data = this.coverTo(examPaper);
            return Result.ok().data(data);
        } else if (ExamPaperTypeEnum.Random.getCode().equals(examPaper.getPaperType())) {
            // 根据随机试卷的配置,随机生成对应题目
@@ -173,8 +175,13 @@
                throw new RuntimeException("试卷配置异常,请联系老师");
            }
            List<PaperQuestionSettingDTO> paperSettingList = JSON.parseArray(examPaper.getContent(), PaperQuestionSettingDTO.class);
            List<DoQuestionVO> questionList = new ArrayList<>(24);
            // 试卷内容
            List<PaperFixQuestionVO> examData = new ArrayList<>(8);
            for (PaperQuestionSettingDTO paperSetting : paperSettingList) {
                PaperFixQuestionVO paperFixQuestionVO = new PaperFixQuestionVO();
                paperFixQuestionVO.setTitle(paperSetting.getTitle());
                paperFixQuestionVO.setQuestionType(paperSetting.getQuestionType());
                // 拿到课目下某类题型的x道随机题
                List<Question> questions = questionMapper.getRandomQuestion(examPaper.getSubjectId(), paperSetting.getQuestionType(), paperSetting.getNum());
                if (paperSetting.getNum() > questions.size()) {
@@ -194,16 +201,17 @@
                    doQuestionVO.setAudioFile(item.getAudioFile());
                    return doQuestionVO;
                }).collect(Collectors.toList());
                questionList.addAll(childQuestions);
                paperFixQuestionVO.setQuestionList(childQuestions);
                examData.add(paperFixQuestionVO);
            }
            // 保持随机试卷和固定试卷的格式一致
            List<PaperFixQuestionVO> examData = new ArrayList<>(1);
            PaperFixQuestionVO paperFixQuestionVO = new PaperFixQuestionVO();
            paperFixQuestionVO.setQuestionList(questionList);
            paperFixQuestionVO.setTitle("");
            paperFixQuestionVO.setQuestionType(null);
            examData.add(paperFixQuestionVO);
            ExamSubmitTemp examSubmitTemp = new ExamSubmitTemp();
            examSubmitTemp.setExamId(id);
            examSubmitTemp.setStatus(ExamSubmitTempStatusEnum.TEMP);
            examSubmitTemp.setExamSubmit(JSON.toJSONString(examData));
            examSubmitTemp.setCreateTime(new Date());
            examSubmitTemp.setUserId(webContext.getCurrentUser().getId());
            examSubmitTemp.setMarkPaperStatus(ExamSubmitTempStatusEnum.TEMP);
            examSubmitTempMapper.insert(examSubmitTemp);
            return Result.ok(examData);
        }
        return Result.ok();
@@ -419,4 +427,10 @@
        }
        return Result.ok(vo);
    }
    @Override
    public Result monitorList(ExamQuery query) {
        IPage<ExamSubmitTempVO> page = PageUtil.getPage(query, ExamSubmitTempVO.class);
        return Result.ok().data(examSubmitTempMapper.monitorList(page, query));
    }
}