Forráskód Böngészése

题目乱序,答案乱序

yangfeng 2 éve
szülő
commit
d862c947bd

+ 8 - 0
web/src/main/java/com/yntravelsky/buss/exam/exam/entity/Exam.java

@@ -138,6 +138,14 @@ public class Exam implements Serializable {
     @ApiModelProperty(value = "切换到其他页面多长时间判定为切屏")
     private Integer leaveTime;
 
+    @Excel(name = "是否题目乱序", width = 15)
+    @ApiModelProperty(value = "是否题目乱序")
+    private Boolean questionDisorder;
+
+    @Excel(name = "是否答案乱序", width = 15)
+    @ApiModelProperty(value = "是否答案乱序")
+    private Boolean answerDisorder;
+
     @TableField(exist = false)
     private Paper paper;
 

+ 4 - 0
web/src/main/java/com/yntravelsky/buss/exam/exam/mapper/xml/ExamMapper.xml

@@ -17,6 +17,8 @@
                 p.id as exam_paper_id,
                 e.limit_count,
                 e.examiner,
+                e.question_disorder,
+                e.answer_disorder,
                 p.id as paper_id,
                 p.title as paperName,
                 p.total_score,
@@ -48,6 +50,8 @@
         <result column="leave_on" property="leaveOn" jdbcType="BOOLEAN"/>
         <result column="total_leave_times" property="totalLeaveTimes" jdbcType="INTEGER"/>
         <result column="leave_time" property="leaveTime" jdbcType="INTEGER"/>
+        <result column="question_disorder" property="questionDisorder" jdbcType="BOOLEAN"/>
+        <result column="answer_disorder" property="answerDisorder" jdbcType="BOOLEAN"/>
 
         <association property="paper" javaType="com.yntravelsky.buss.exam.paper.entity.Paper">
             <id column="paper_id" property="id" jdbcType="VARCHAR"/>

+ 79 - 4
web/src/main/java/com/yntravelsky/buss/exam/exam/service/impl/ExamServiceImpl.java

@@ -31,7 +31,10 @@ import com.yntravelsky.buss.exam.userexam.entity.UserExam;
 import com.yntravelsky.buss.exam.userexam.service.IUserExamService;
 import com.yntravelsky.buss.exam.userexamquestion.entity.UserExamQuestion;
 import com.yntravelsky.buss.exam.userexamquestion.service.IUserExamQuestionService;
+import com.yntravelsky.buss.exam.userexamquestionanswer.entity.UserExamQuestionAnswer;
+import com.yntravelsky.buss.exam.userexamquestionanswer.service.IUserExamQuestionAnswerService;
 import com.yntravelsky.buss.exam.userexamresult.service.IUserExamResultService;
+import com.yntravelsky.common.utils.CharUtil;
 import com.yntravelsky.common.utils.CronUtils;
 import com.yntravelsky.common.utils.ThreadPoolUtil;
 import org.apache.commons.lang.StringUtils;
@@ -92,6 +95,10 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
     @Autowired
     private ISysDepartService sysDepartService;
 
+
+    @Autowired
+    private IUserExamQuestionAnswerService userExamQuestionAnswerService;
+
     @Override
     public Exam detail(String id) {
         return examMapper.detail(id);
@@ -146,6 +153,11 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
         List<PaperQuestion> paperQuestionList = null;
         if (paper.getJoinType().intValue() == JoinType.XT.getCode()) {//选题
             paperQuestionList = paperQuestionService.listByPaperId(paper.getId());
+            //题目乱序
+            if (!Objects.isNull(exam.getQuestionDisorder()) && exam.getQuestionDisorder()) {
+                //题目洗牌
+                paperQuestionList = questionShuffle(paperQuestionList);
+            }
         } else if (paper.getJoinType().intValue() == JoinType.SJ.getCode()) {//随机抽题
             //生成题目
             paperQuestionList = paperService.generateQuestion(paper.getId());
@@ -157,6 +169,22 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
         return this.saveExam(userId, exam, paper.getId(), paperQuestionList);
     }
 
+    /**
+     * 题目乱序
+     */
+    public List<PaperQuestion> questionShuffle(List<PaperQuestion> paperQuestionList) {
+        List<PaperQuestion> shuffleList = new ArrayList<>();
+        Map<Integer, List<PaperQuestion>> map = paperQuestionList.stream()
+                .collect(Collectors.groupingBy(PaperQuestion::getQuestionType, LinkedHashMap::new, Collectors.toList()));
+        for (Map.Entry<Integer, List<PaperQuestion>> item : map.entrySet()) {
+            //题目洗牌
+            Collections.shuffle(item.getValue());
+            shuffleList.addAll(item.getValue());
+        }
+        //重新排序
+        return paperQuestionService.sort(shuffleList);
+    }
+
 
     /**
      * 保存考试
@@ -180,6 +208,8 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
         //保存考试关联的试题列表
         if (!CollectionUtils.isEmpty(paperQuestionList)) {
             this.savePaperQuestion(userExam.getId(), paperQuestionList);
+            //保存用户考试的题目答案
+            this.saveQuestionAnswer(userExam.getId(), exam, paperQuestionList);
         }
 
         // 截止时间
@@ -196,6 +226,44 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
         return userExam;
     }
 
+    /**
+     * 保存用户考试的题目答案
+     *
+     * @param userExamId
+     * @param paperQuestionList
+     */
+    public void saveQuestionAnswer(String userExamId, Exam exam, List<PaperQuestion> paperQuestionList) {
+        //获取题目和答案
+        List<Question> questionList = listQuestion(paperQuestionList);
+        if (!CollectionUtils.isEmpty(questionList)) {
+            List<UserExamQuestionAnswer> userExamQuestionAnswerList = new ArrayList<>();
+            questionList.stream().forEach(question -> {
+                List<QuestionAnswer> answerList = question.getAnswerList();
+                if (!CollectionUtils.isEmpty(answerList)) {
+                    //答案乱序(判断题除外)
+                    if (!Objects.isNull(exam.getAnswerDisorder()) && exam.getAnswerDisorder()
+                            && QuestionType.JUDGE.getCode().intValue() != question.getType()) {
+                        //答案洗牌
+                        Collections.shuffle(answerList);
+                    }
+                    int sort = 1;
+                    for (QuestionAnswer questionAnswer : answerList) {
+                        UserExamQuestionAnswer userExamQuestionAnswer = new UserExamQuestionAnswer();
+                        userExamQuestionAnswer.setUserExamId(userExamId);
+                        userExamQuestionAnswer.setQuestionId(question.getId());
+                        userExamQuestionAnswer.setAnswerId(questionAnswer.getId());
+                        userExamQuestionAnswer.setIsRight(questionAnswer.getIsRight());
+                        userExamQuestionAnswer.setSort(sort);
+                        userExamQuestionAnswer.setTag(CharUtil.getZm(sort - 1));
+                        userExamQuestionAnswerList.add(userExamQuestionAnswer);
+                        sort++;
+                    }
+                }
+            });
+            userExamQuestionAnswerService.saveBatch(userExamQuestionAnswerList);
+        }
+    }
+
 
     /**
      * 创建定时任务
@@ -261,7 +329,7 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
         List<Map<String, AnswerCardDTO>> answerCardList = new ArrayList<>();
         if (!CollectionUtils.isEmpty(userExamQuestionList)) {
             //获取题目和答案
-            Map<String, Question> questionMap = getQuestionMap(userExamQuestionList, needAnswerFlag, needAnalysis);
+            Map<String, Question> questionMap = getUserExamQuestionMap(userExamId, userExamQuestionList, needAnswerFlag, needAnalysis);
 
             //设置题目
             setUserExamQuestion(questionMap, userExamQuestionList);
@@ -386,7 +454,7 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
                     .toMap(UserExamQuestion::getQuestionIndex, a -> a, (k1, k2) -> k1));
 
             //获取题目和答案
-            Map<String, Question> questionMap = getQuestionMap(userExamQuestionList, true, false);
+            Map<String, Question> questionMap = getUserExamQuestionMap(dto.getUserExamId(), userExamQuestionList, true, false);
 
             //计算最终得分
             int score = calcFinalScore(examAnswers, userExamQuestionMap, questionMap, userExamQuestionList);
@@ -403,12 +471,19 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
 
 
     //获取题目和答案
-    public Map<String, Question> getQuestionMap(List<UserExamQuestion> userExamQuestionList, boolean needAnswerFlag, boolean needAnalysis) {
+    public Map<String, Question> getUserExamQuestionMap(String userExamId, List<UserExamQuestion> userExamQuestionList,
+                                                        boolean needAnswerFlag, boolean needAnalysis) {
         List<String> questionIdList = userExamQuestionList.stream().map(UserExamQuestion::getQuestionId).collect(Collectors.toList());
-        List<Question> questionList = questionService.selectQuestionList(questionIdList, needAnswerFlag, needAnalysis);
+        List<Question> questionList = questionService.listUserExamQuestionAnswer(userExamId, questionIdList, needAnswerFlag, needAnalysis);
         return questionList.stream().collect(Collectors.toMap(Question::getId, a -> a, (k1, k2) -> k1));
     }
 
+    //获取题目和答案
+    public List<Question> listQuestion(List<PaperQuestion> paperQuestionList) {
+        List<String> questionIdList = paperQuestionList.stream().map(PaperQuestion::getQuestionId).collect(Collectors.toList());
+        return questionService.selectQuestionList(questionIdList, true, true);
+    }
+
 
     /**
      * 计算最终得分

+ 11 - 0
web/src/main/java/com/yntravelsky/buss/exam/question/mapper/QuestionMapper.java

@@ -27,6 +27,17 @@ public interface QuestionMapper extends BaseMapper<Question> {
     List<Question> selectQuestionList(@Param("idList") List<String> idList, @Param("needAnswerFlag") boolean needAnswerFlag
             , @Param("needAnalysis") boolean needAnalysis);
 
+    /**
+     * 查询用户的考试题目和答案(此时查询的答案可能是乱序的)
+     *
+     * @param idList
+     * @param needAnswerFlag 是否需要标记答案
+     * @param needAnalysis   是否需要解析
+     * @return
+     */
+    List<Question> listUserExamQuestionAnswer(@Param("userExamId") String userExamId, @Param("idList") List<String> idList,
+                                              @Param("needAnswerFlag") boolean needAnswerFlag, @Param("needAnalysis") boolean needAnalysis);
+
     List<QuestionDTO> groupLevelById(@Param("repositoryIds") List<String> repositoryIds, @Param("type") Integer type);
 
     List<Question> listByPaperId(String paperId);

+ 39 - 0
web/src/main/java/com/yntravelsky/buss/exam/question/mapper/xml/QuestionMapper.xml

@@ -57,6 +57,45 @@
         order by q.id,qa.sort
     </select>
 
+    <select id="listUserExamQuestionAnswer" resultMap="QuestionMap">
+        SELECT
+            q.id,
+            q.type,
+            q.level,
+            q.content,
+            q.repository_id,
+            qa.id as qa_id,
+            qa.content as qa_content ,
+            <choose>
+                <when test="needAnalysis">
+                    q.analysis,
+                    qa.analysis as qa_analysis,
+                </when>
+            </choose>
+            <choose>
+                <when test="needAnswerFlag">
+                    ueqa.is_right,
+                </when>
+            </choose>
+            ueqa.tag,
+            ueqa.sort as qa_sort
+            FROM question q
+            LEFT JOIN user_exam_question_answer ueqa on q.id=ueqa.question_id
+            LEFT JOIN question_answer qa on ueqa.answer_id=qa.id
+        <where>
+            <if test="userExamId !=null and userExamId !=''">
+                AND ueqa.user_exam_id = #{userExamId}
+            </if>
+            <if test="idList !=null and idList.size()>0">
+                AND q.id IN
+                <foreach collection="idList" item="item" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        ORDER BY q.id,ueqa.sort
+    </select>
+
     <select id="groupLevelById" resultType="com.yntravelsky.buss.exam.question.dto.QuestionDTO">
         SELECT
                     tmp.*,

+ 11 - 0
web/src/main/java/com/yntravelsky/buss/exam/question/service/IQuestionService.java

@@ -83,4 +83,15 @@ public interface IQuestionService extends IService<Question> {
      * @return
      */
     List<Question> listQuestionByCondition(List<QuestionConditionDTO> dtoList);
+
+
+    /**
+     * 查询用户的考试题目和答案(此时查询的答案可能是乱序的)
+     *
+     * @param idList
+     * @param needAnswerFlag 是否需要标记答案
+     * @param needAnalysis   是否需要解析
+     * @return
+     */
+    List<Question> listUserExamQuestionAnswer(String userExamId, List<String> idList, boolean needAnswerFlag, boolean needAnalysis);
 }

+ 13 - 0
web/src/main/java/com/yntravelsky/buss/exam/question/service/impl/QuestionServiceImpl.java

@@ -418,4 +418,17 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
     public List<Question> listQuestionByCondition(List<QuestionConditionDTO> dtoList) {
         return questionMapper.listQuestionByCondition(dtoList);
     }
+
+    /**
+     * 查询用户的考试题目和答案(此时查询的答案可能是乱序的)
+     *
+     * @param idList
+     * @param needAnswerFlag 是否需要标记答案
+     * @param needAnalysis   是否需要解析
+     * @return
+     */
+    @Override
+    public List<Question> listUserExamQuestionAnswer(String userExamId, List<String> idList, boolean needAnswerFlag, boolean needAnalysis) {
+        return questionMapper.listUserExamQuestionAnswer(userExamId, idList, needAnswerFlag, needAnalysis);
+    }
 }

+ 161 - 0
web/src/main/java/com/yntravelsky/buss/exam/userexamquestionanswer/controller/UserExamQuestionAnswerController.java

@@ -0,0 +1,161 @@
+package com.yntravelsky.buss.exam.userexamquestionanswer.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yntravelsky.buss.exam.userexamquestionanswer.entity.UserExamQuestionAnswer;
+import com.yntravelsky.buss.exam.userexamquestionanswer.service.IUserExamQuestionAnswerService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+
+/**
+ * @Description: 用户考试答案
+ * @Author: jeecg-boot
+ * @Date: 2023-04-01
+ * @Version: V1.0
+ */
+@Api(tags = "用户考试答案")
+@RestController
+@RequestMapping("/serExamQuestionAnswer")
+@Slf4j
+public class UserExamQuestionAnswerController extends JeecgController<UserExamQuestionAnswer, IUserExamQuestionAnswerService> {
+    @Autowired
+    private IUserExamQuestionAnswerService userExamQuestionAnswerService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param userExamQuestionAnswer
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "用户考试答案-分页列表查询")
+    @ApiOperation(value = "用户考试答案-分页列表查询", notes = "用户考试答案-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<UserExamQuestionAnswer>> queryPageList(UserExamQuestionAnswer userExamQuestionAnswer,
+                                                               @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                               @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                               HttpServletRequest req) {
+        QueryWrapper<UserExamQuestionAnswer> queryWrapper = QueryGenerator.initQueryWrapper(userExamQuestionAnswer, req.getParameterMap());
+        Page<UserExamQuestionAnswer> page = new Page<UserExamQuestionAnswer>(pageNo, pageSize);
+        IPage<UserExamQuestionAnswer> pageList = userExamQuestionAnswerService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     *
+     * @param userExamQuestionAnswer
+     * @return
+     */
+    @AutoLog(value = "用户考试答案-添加")
+    @ApiOperation(value = "用户考试答案-添加", notes = "用户考试答案-添加")
+    //@RequiresPermissions("exam.userexamquestionanswer:user_exam_question_answer:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody UserExamQuestionAnswer userExamQuestionAnswer) {
+        userExamQuestionAnswerService.save(userExamQuestionAnswer);
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param userExamQuestionAnswer
+     * @return
+     */
+    @AutoLog(value = "用户考试答案-编辑")
+    @ApiOperation(value = "用户考试答案-编辑", notes = "用户考试答案-编辑")
+    //@RequiresPermissions("exam.userexamquestionanswer:user_exam_question_answer:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody UserExamQuestionAnswer userExamQuestionAnswer) {
+        userExamQuestionAnswerService.updateById(userExamQuestionAnswer);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "用户考试答案-通过id删除")
+    @ApiOperation(value = "用户考试答案-通过id删除", notes = "用户考试答案-通过id删除")
+    //@RequiresPermissions("exam.userexamquestionanswer:user_exam_question_answer:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        userExamQuestionAnswerService.removeById(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "用户考试答案-批量删除")
+    @ApiOperation(value = "用户考试答案-批量删除", notes = "用户考试答案-批量删除")
+    //@RequiresPermissions("exam.userexamquestionanswer:user_exam_question_answer:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.userExamQuestionAnswerService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    //@AutoLog(value = "用户考试答案-通过id查询")
+    @ApiOperation(value = "用户考试答案-通过id查询", notes = "用户考试答案-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<UserExamQuestionAnswer> queryById(@RequestParam(name = "id", required = true) String id) {
+        UserExamQuestionAnswer userExamQuestionAnswer = userExamQuestionAnswerService.getById(id);
+        if (userExamQuestionAnswer == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(userExamQuestionAnswer);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param userExamQuestionAnswer
+     */
+    //@RequiresPermissions("exam.userexamquestionanswer:user_exam_question_answer:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, UserExamQuestionAnswer userExamQuestionAnswer) {
+        return super.exportXls(request, userExamQuestionAnswer, UserExamQuestionAnswer.class, "用户考试答案");
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    //@RequiresPermissions("exam.userexamquestionanswer:user_exam_question_answer:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, UserExamQuestionAnswer.class);
+    }
+
+}

+ 77 - 0
web/src/main/java/com/yntravelsky/buss/exam/userexamquestionanswer/entity/UserExamQuestionAnswer.java

@@ -0,0 +1,77 @@
+package com.yntravelsky.buss.exam.userexamquestionanswer.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 用户考试答案表
+ * @Author: jeecg-boot
+ * @Date: 2023-04-01
+ * @Version: V1.0
+ */
+@Data
+@TableName("user_exam_question_answer")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "user_exam_question_answer对象", description = "用户考试答案表")
+public class UserExamQuestionAnswer implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键")
+    private String id;
+    /**
+     * 用户考试id
+     */
+    @Excel(name = "用户考试id", width = 15)
+    @ApiModelProperty(value = "用户考试id")
+    private String userExamId;
+    /**
+     * 题目ID
+     */
+    @Excel(name = "题目ID", width = 15)
+    @ApiModelProperty(value = "题目ID")
+    private String questionId;
+    /**
+     * 回答项ID
+     */
+    @Excel(name = "回答项ID", width = 15)
+    @ApiModelProperty(value = "回答项ID")
+    private String answerId;
+    /**
+     * 排序
+     */
+    @Excel(name = "排序", width = 15)
+    @ApiModelProperty(value = "排序")
+    private Integer sort;
+    /**
+     * 选项标签
+     */
+    @Excel(name = "选项标签", width = 15)
+    @ApiModelProperty(value = "选项标签")
+    private String tag;
+    /**
+     * 是否正确项
+     */
+    @Excel(name = "是否正确项", width = 15)
+    @ApiModelProperty(value = "是否正确项")
+    private Boolean isRight;
+    /**
+     * 是否选中
+     */
+    @Excel(name = "是否选中", width = 15)
+    @ApiModelProperty(value = "是否选中")
+    private Boolean checked;
+}

+ 14 - 0
web/src/main/java/com/yntravelsky/buss/exam/userexamquestionanswer/mapper/UserExamQuestionAnswerMapper.java

@@ -0,0 +1,14 @@
+package com.yntravelsky.buss.exam.userexamquestionanswer.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yntravelsky.buss.exam.userexamquestionanswer.entity.UserExamQuestionAnswer;
+
+/**
+ * @Description: 用户考试答案表
+ * @Author: jeecg-boot
+ * @Date:   2023-04-01
+ * @Version: V1.0
+ */
+public interface UserExamQuestionAnswerMapper extends BaseMapper<UserExamQuestionAnswer> {
+
+}

+ 5 - 0
web/src/main/java/com/yntravelsky/buss/exam/userexamquestionanswer/mapper/xml/UserExamQuestionAnswerMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yntravelsky.buss.exam.userexamquestionanswer.mapper.UserExamQuestionAnswerMapper">
+
+</mapper>

+ 14 - 0
web/src/main/java/com/yntravelsky/buss/exam/userexamquestionanswer/service/IUserExamQuestionAnswerService.java

@@ -0,0 +1,14 @@
+package com.yntravelsky.buss.exam.userexamquestionanswer.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yntravelsky.buss.exam.userexamquestionanswer.entity.UserExamQuestionAnswer;
+
+/**
+ * @Description: 用户考试答案表
+ * @Author: jeecg-boot
+ * @Date:   2023-04-01
+ * @Version: V1.0
+ */
+public interface IUserExamQuestionAnswerService extends IService<UserExamQuestionAnswer> {
+
+}

+ 18 - 0
web/src/main/java/com/yntravelsky/buss/exam/userexamquestionanswer/service/impl/UserExamQuestionAnswerServiceImpl.java

@@ -0,0 +1,18 @@
+package com.yntravelsky.buss.exam.userexamquestionanswer.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yntravelsky.buss.exam.userexamquestionanswer.entity.UserExamQuestionAnswer;
+import com.yntravelsky.buss.exam.userexamquestionanswer.mapper.UserExamQuestionAnswerMapper;
+import com.yntravelsky.buss.exam.userexamquestionanswer.service.IUserExamQuestionAnswerService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 用户考试答案表
+ * @Author: jeecg-boot
+ * @Date: 2023-04-01
+ * @Version: V1.0
+ */
+@Service
+public class UserExamQuestionAnswerServiceImpl extends ServiceImpl<UserExamQuestionAnswerMapper, UserExamQuestionAnswer> implements IUserExamQuestionAnswerService {
+
+}