Explorar o código

计算指定题库的题目题型数量

yangfeng hai 1 ano
pai
achega
2d8bba8eea
Modificáronse 18 ficheiros con 754 adicións e 0 borrados
  1. 8 0
      web/src/main/java/com/ynfy/buss/exam/question/mapper/QuestionMapper.java
  2. 13 0
      web/src/main/java/com/ynfy/buss/exam/question/mapper/xml/QuestionMapper.xml
  3. 8 0
      web/src/main/java/com/ynfy/buss/exam/question/service/IQuestionService.java
  4. 11 0
      web/src/main/java/com/ynfy/buss/exam/question/service/impl/QuestionServiceImpl.java
  5. 14 0
      web/src/main/java/com/ynfy/buss/exam/repository/controller/RepositoryController.java
  6. 5 0
      web/src/main/java/com/ynfy/buss/exam/repository/entity/Repository.java
  7. 172 0
      web/src/main/java/com/ynfy/buss/practice/userpractice/controller/UserPracticeController.java
  8. 118 0
      web/src/main/java/com/ynfy/buss/practice/userpractice/entity/UserPractice.java
  9. 14 0
      web/src/main/java/com/ynfy/buss/practice/userpractice/mapper/UserPracticeMapper.java
  10. 5 0
      web/src/main/java/com/ynfy/buss/practice/userpractice/mapper/xml/UserPracticeMapper.xml
  11. 23 0
      web/src/main/java/com/ynfy/buss/practice/userpractice/service/IUserPracticeService.java
  12. 41 0
      web/src/main/java/com/ynfy/buss/practice/userpractice/service/impl/UserPracticeServiceImpl.java
  13. 161 0
      web/src/main/java/com/ynfy/buss/practice/userpracticequestion/controller/UserPracticeQuestionController.java
  14. 110 0
      web/src/main/java/com/ynfy/buss/practice/userpracticequestion/entity/UserPracticeQuestion.java
  15. 14 0
      web/src/main/java/com/ynfy/buss/practice/userpracticequestion/mapper/UserPracticeQuestionMapper.java
  16. 5 0
      web/src/main/java/com/ynfy/buss/practice/userpracticequestion/mapper/xml/UserPracticeQuestionMapper.xml
  17. 14 0
      web/src/main/java/com/ynfy/buss/practice/userpracticequestion/service/IUserPracticeQuestionService.java
  18. 18 0
      web/src/main/java/com/ynfy/buss/practice/userpracticequestion/service/impl/UserPracticeQuestionServiceImpl.java

+ 8 - 0
web/src/main/java/com/ynfy/buss/exam/question/mapper/QuestionMapper.java

@@ -75,4 +75,12 @@ public interface QuestionMapper extends BaseMapper<Question> {
      */
     List<QuestionDTO> countQuestionByRepository(@Param("repositoryIds") List<String> repositoryIds);
 
+    /**
+     * 计算指定题库的题目题型数量
+     *
+     * @param repositoryId
+     * @return
+     */
+    List<QuestionDTO> countQuestionNumByType(String repositoryId);
+
 }

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

@@ -291,4 +291,17 @@
         GROUP BY
                 repository_id
     </select>
+
+    <select id="countQuestionNumByType" resultType="com.ynfy.buss.exam.question.dto.QuestionDTO">
+        SELECT
+            type,
+            COUNT(*) as num
+        FROM
+            question
+        <where>
+            repository_id = #{repositoryId}
+        </where>
+        GROUP BY
+            type
+    </select>
 </mapper>

+ 8 - 0
web/src/main/java/com/ynfy/buss/exam/question/service/IQuestionService.java

@@ -112,4 +112,12 @@ public interface IQuestionService extends IService<Question> {
      * @return
      */
     List<QuestionDTO> countQuestionByRepository(List<String> repositoryIds);
+
+    /**
+     * 计算指定题库的题目题型数量
+     *
+     * @param repositoryId
+     * @return
+     */
+    List<QuestionDTO> countQuestionNumByType(String repositoryId);
 }

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

@@ -544,4 +544,15 @@ public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> i
     public List<QuestionDTO> countQuestionByRepository(List<String> repositoryIds) {
         return questionMapper.countQuestionByRepository(repositoryIds);
     }
+
+    /**
+     * 计算指定题库的题目题型数量
+     *
+     * @param repositoryId
+     * @return
+     */
+    @Override
+    public List<QuestionDTO> countQuestionNumByType(String repositoryId) {
+        return questionMapper.countQuestionNumByType(repositoryId);
+    }
 }

+ 14 - 0
web/src/main/java/com/ynfy/buss/exam/repository/controller/RepositoryController.java

@@ -161,4 +161,18 @@ public class RepositoryController extends JeecgController<Repository, IRepositor
         }
         return Result.OK(repository);
     }
+
+    /**
+     * 计算指定题库的题目题型数量
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "计算指定题库的题目题型数量", notes = "计算指定题库的题目题型数量")
+    @GetMapping(value = "/getById")
+    public Result<Repository> getById(@RequestParam String id) {
+        Repository repository = repositoryService.getById(id);
+        repository.setQuestionDTOList(questionService.countQuestionNumByType(id));
+        return Result.OK(repository);
+    }
 }

+ 5 - 0
web/src/main/java/com/ynfy/buss/exam/repository/entity/Repository.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ynfy.buss.exam.question.dto.QuestionDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -15,6 +16,7 @@ import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.util.Date;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -87,6 +89,9 @@ public class Repository implements Serializable {
     @TableField(exist = false)
     private Integer num;
 
+    @TableField(exist = false)
+    private List<QuestionDTO> questionDTOList;
+
 
     @Override
     public boolean equals(Object o) {

+ 172 - 0
web/src/main/java/com/ynfy/buss/practice/userpractice/controller/UserPracticeController.java

@@ -0,0 +1,172 @@
+package com.ynfy.buss.practice.userpractice.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.ynfy.buss.practice.userpractice.entity.UserPractice;
+import com.ynfy.buss.practice.userpractice.service.IUserPracticeService;
+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-11-19
+ * @Version: V1.0
+ */
+@Api(tags = "用户练习表")
+@RestController
+@RequestMapping("/practice/userPractice")
+@Slf4j
+public class UserPracticeController extends JeecgController<UserPractice, IUserPracticeService> {
+    @Autowired
+    private IUserPracticeService userPracticeService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param userPractice
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "用户练习表-分页列表查询")
+    @ApiOperation(value = "用户练习表-分页列表查询", notes = "用户练习表-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<UserPractice>> queryPageList(UserPractice userPractice,
+                                                     @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                     @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                     HttpServletRequest req) {
+        QueryWrapper<UserPractice> queryWrapper = QueryGenerator.initQueryWrapper(userPractice, req.getParameterMap());
+        Page<UserPractice> page = new Page<UserPractice>(pageNo, pageSize);
+        IPage<UserPractice> pageList = userPracticeService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     *
+     * @param userPractice
+     * @return
+     */
+    @AutoLog(value = "用户练习表-添加")
+    @ApiOperation(value = "用户练习表-添加", notes = "用户练习表-添加")
+    //@RequiresPermissions("practice.userpractice:user_practice:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody UserPractice userPractice) {
+        userPracticeService.save(userPractice);
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param userPractice
+     * @return
+     */
+    @AutoLog(value = "用户练习表-编辑")
+    @ApiOperation(value = "用户练习表-编辑", notes = "用户练习表-编辑")
+    //@RequiresPermissions("practice.userpractice:user_practice:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody UserPractice userPractice) {
+        userPracticeService.updateById(userPractice);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "用户练习表-通过id删除")
+    @ApiOperation(value = "用户练习表-通过id删除", notes = "用户练习表-通过id删除")
+    //@RequiresPermissions("practice.userpractice:user_practice:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        userPracticeService.removeById(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "用户练习表-批量删除")
+    @ApiOperation(value = "用户练习表-批量删除", notes = "用户练习表-批量删除")
+    //@RequiresPermissions("practice.userpractice:user_practice:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.userPracticeService.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<UserPractice> queryById(@RequestParam(name = "id", required = true) String id) {
+        UserPractice userPractice = userPracticeService.getById(id);
+        if (userPractice == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(userPractice);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param userPractice
+     */
+    //@RequiresPermissions("practice.userpractice:user_practice:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, UserPractice userPractice) {
+        return super.exportXls(request, userPractice, UserPractice.class, "用户练习表");
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    //@RequiresPermissions("practice.userpractice:user_practice:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, UserPractice.class);
+    }
+
+    /**
+     * 获取用户最近的练习
+     *
+     * @return
+     */
+    @ApiOperation(value = "获取用户最近的练习", notes = "获取用户最近的练习")
+    @GetMapping(value = "/getRecentPractice")
+    public Result<?> getRecentPractice() {
+        return Result.OK(userPracticeService.getRecentPractice());
+    }
+
+}

+ 118 - 0
web/src/main/java/com/ynfy/buss/practice/userpractice/entity/UserPractice.java

@@ -0,0 +1,118 @@
+package com.ynfy.buss.practice.userpractice.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+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 org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 用户练习表
+ * @Author: jeecg-boot
+ * @Date: 2023-11-19
+ * @Version: V1.0
+ */
+@Data
+@TableName("user_practice")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "user_practice对象", description = "用户练习表")
+public class UserPractice 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 userId;
+    /**
+     * 练习类型,1.题库练习,2.每日一练
+     */
+    @Excel(name = "练习类型,1.题库练习,2.每日一练", width = 15)
+    @ApiModelProperty(value = "练习类型,1.题库练习,2.每日一练")
+    private Integer type;
+    /**
+     * 题库id
+     */
+    @Excel(name = "题库id", width = 15)
+    @ApiModelProperty(value = "题库id")
+    private String repositoryId;
+    /**
+     * 练习模式:1.顺序练习,2.随机练习,3.题型练习
+     */
+    @Excel(name = "练习模式:1.顺序练习,2.随机练习,3.题型练习", width = 15)
+    @ApiModelProperty(value = "练习模式:1.顺序练习,2.随机练习,3.题型练习")
+    private Integer mode;
+    /**
+     * 题型
+     */
+    @Excel(name = "题型", width = 15)
+    @ApiModelProperty(value = "题型")
+    private Integer questionType;
+    /**
+     * 答对数量
+     */
+    @Excel(name = "答对数量", width = 15)
+    @ApiModelProperty(value = "答对数量")
+    private String rightNumber;
+    /**
+     * 总题数量
+     */
+    @Excel(name = "总题数量", width = 15)
+    @ApiModelProperty(value = "总题数量")
+    private String totalNumber;
+    /**
+     * 正确率
+     */
+    @Excel(name = "正确率", width = 15)
+    @ApiModelProperty(value = "正确率")
+    private Double accuracy;
+    /**
+     * 提交时间
+     */
+    @Excel(name = "提交时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "提交时间")
+    private Date commitTime;
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**
+     * 创建日期
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+    /**
+     * 更新日期
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+}

+ 14 - 0
web/src/main/java/com/ynfy/buss/practice/userpractice/mapper/UserPracticeMapper.java

@@ -0,0 +1,14 @@
+package com.ynfy.buss.practice.userpractice.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ynfy.buss.practice.userpractice.entity.UserPractice;
+
+/**
+ * @Description: 用户练习表
+ * @Author: jeecg-boot
+ * @Date: 2023-11-19
+ * @Version: V1.0
+ */
+public interface UserPracticeMapper extends BaseMapper<UserPractice> {
+
+}

+ 5 - 0
web/src/main/java/com/ynfy/buss/practice/userpractice/mapper/xml/UserPracticeMapper.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.ynfy.buss.practice.userpractice.mapper.UserPracticeMapper">
+
+</mapper>

+ 23 - 0
web/src/main/java/com/ynfy/buss/practice/userpractice/service/IUserPracticeService.java

@@ -0,0 +1,23 @@
+package com.ynfy.buss.practice.userpractice.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ynfy.buss.practice.userpractice.entity.UserPractice;
+
+import java.util.List;
+
+/**
+ * @Description: 用户练习表
+ * @Author: jeecg-boot
+ * @Date: 2023-11-19
+ * @Version: V1.0
+ */
+public interface IUserPracticeService extends IService<UserPractice> {
+
+
+    /**
+     * 获取用户最近的练习
+     *
+     * @return
+     */
+    List<UserPractice> getRecentPractice();
+}

+ 41 - 0
web/src/main/java/com/ynfy/buss/practice/userpractice/service/impl/UserPracticeServiceImpl.java

@@ -0,0 +1,41 @@
+package com.ynfy.buss.practice.userpractice.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ynfy.buss.practice.userpractice.entity.UserPractice;
+import com.ynfy.buss.practice.userpractice.mapper.UserPracticeMapper;
+import com.ynfy.buss.practice.userpractice.service.IUserPracticeService;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.system.vo.LoginUser;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @Description: 用户练习表
+ * @Author: jeecg-boot
+ * @Date: 2023-11-19
+ * @Version: V1.0
+ */
+@Service
+public class UserPracticeServiceImpl extends ServiceImpl<UserPracticeMapper, UserPractice> implements IUserPracticeService {
+
+    /**
+     * 获取用户最近的练习
+     *
+     * @return
+     */
+    @Override
+    public List<UserPractice> getRecentPractice() {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+        Page<UserPractice> page = new Page<UserPractice>(1, 5);
+
+        LambdaQueryWrapper<UserPractice> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(UserPractice::getUserId, user.getId()).orderByDesc(UserPractice::getCommitTime);
+        IPage<UserPractice> pageList = page(page, wrapper);
+        return pageList.getRecords();
+    }
+}

+ 161 - 0
web/src/main/java/com/ynfy/buss/practice/userpracticequestion/controller/UserPracticeQuestionController.java

@@ -0,0 +1,161 @@
+package com.ynfy.buss.practice.userpracticequestion.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.ynfy.buss.practice.userpracticequestion.entity.UserPracticeQuestion;
+import com.ynfy.buss.practice.userpracticequestion.service.IUserPracticeQuestionService;
+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-11-19
+ * @Version: V1.0
+ */
+@Api(tags = "用户练习题目表")
+@RestController
+@RequestMapping("/practice/userPracticeQuestion")
+@Slf4j
+public class UserPracticeQuestionController extends JeecgController<UserPracticeQuestion, IUserPracticeQuestionService> {
+    @Autowired
+    private IUserPracticeQuestionService userPracticeQuestionService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param userPracticeQuestion
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    //@AutoLog(value = "用户练习题目表-分页列表查询")
+    @ApiOperation(value = "用户练习题目表-分页列表查询", notes = "用户练习题目表-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<UserPracticeQuestion>> queryPageList(UserPracticeQuestion userPracticeQuestion,
+                                                             @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                             @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                             HttpServletRequest req) {
+        QueryWrapper<UserPracticeQuestion> queryWrapper = QueryGenerator.initQueryWrapper(userPracticeQuestion, req.getParameterMap());
+        Page<UserPracticeQuestion> page = new Page<UserPracticeQuestion>(pageNo, pageSize);
+        IPage<UserPracticeQuestion> pageList = userPracticeQuestionService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     *
+     * @param userPracticeQuestion
+     * @return
+     */
+    @AutoLog(value = "用户练习题目表-添加")
+    @ApiOperation(value = "用户练习题目表-添加", notes = "用户练习题目表-添加")
+    //@RequiresPermissions("practice.userpracticequestion:user_practice_question:add")
+    @PostMapping(value = "/add")
+    public Result<String> add(@RequestBody UserPracticeQuestion userPracticeQuestion) {
+        userPracticeQuestionService.save(userPracticeQuestion);
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param userPracticeQuestion
+     * @return
+     */
+    @AutoLog(value = "用户练习题目表-编辑")
+    @ApiOperation(value = "用户练习题目表-编辑", notes = "用户练习题目表-编辑")
+    //@RequiresPermissions("practice.userpracticequestion:user_practice_question:edit")
+    @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+    public Result<String> edit(@RequestBody UserPracticeQuestion userPracticeQuestion) {
+        userPracticeQuestionService.updateById(userPracticeQuestion);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "用户练习题目表-通过id删除")
+    @ApiOperation(value = "用户练习题目表-通过id删除", notes = "用户练习题目表-通过id删除")
+    //@RequiresPermissions("practice.userpracticequestion:user_practice_question:delete")
+    @DeleteMapping(value = "/delete")
+    public Result<String> delete(@RequestParam(name = "id", required = true) String id) {
+        userPracticeQuestionService.removeById(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "用户练习题目表-批量删除")
+    @ApiOperation(value = "用户练习题目表-批量删除", notes = "用户练习题目表-批量删除")
+    //@RequiresPermissions("practice.userpracticequestion:user_practice_question:deleteBatch")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<String> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.userPracticeQuestionService.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<UserPracticeQuestion> queryById(@RequestParam(name = "id", required = true) String id) {
+        UserPracticeQuestion userPracticeQuestion = userPracticeQuestionService.getById(id);
+        if (userPracticeQuestion == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(userPracticeQuestion);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param userPracticeQuestion
+     */
+    //@RequiresPermissions("practice.userpracticequestion:user_practice_question:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, UserPracticeQuestion userPracticeQuestion) {
+        return super.exportXls(request, userPracticeQuestion, UserPracticeQuestion.class, "用户练习题目表");
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    //@RequiresPermissions("practice.userpracticequestion:user_practice_question:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, UserPracticeQuestion.class);
+    }
+
+}

+ 110 - 0
web/src/main/java/com/ynfy/buss/practice/userpracticequestion/entity/UserPracticeQuestion.java

@@ -0,0 +1,110 @@
+package com.ynfy.buss.practice.userpracticequestion.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+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 org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: 用户练习题目表
+ * @Author: jeecg-boot
+ * @Date: 2023-11-19
+ * @Version: V1.0
+ */
+@Data
+@TableName("user_practice_question")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "user_practice_question对象", description = "用户练习题目表")
+public class UserPracticeQuestion implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 试卷id
+     */
+    @Excel(name = "试卷id", width = 15)
+    @ApiModelProperty(value = "试卷id")
+    private String userPracticeId;
+    /**
+     * 题目id
+     */
+    @Excel(name = "题目id", width = 15)
+    @ApiModelProperty(value = "题目id")
+    private String questionId;
+    /**
+     * 题目类型
+     */
+    @Excel(name = "题目类型", width = 15)
+    @ApiModelProperty(value = "题目类型")
+    private Integer questionType;
+    /**
+     * 问题排序
+     */
+    @Excel(name = "问题排序", width = 15)
+    @ApiModelProperty(value = "问题排序")
+    private Integer sort;
+    /**
+     * 是否已答
+     */
+    @Excel(name = "是否已答", width = 15)
+    @ApiModelProperty(value = "是否已答")
+    private Boolean answered;
+    /**
+     * 是否答对
+     */
+    @Excel(name = "是否答对", width = 15)
+    @ApiModelProperty(value = "是否答对")
+    private Boolean isRight;
+    /**
+     * 答案
+     */
+    @Excel(name = "答案", width = 15)
+    @ApiModelProperty(value = "答案")
+    private String answer;
+    /**
+     * 按序作答
+     */
+    @Excel(name = "按序作答", width = 15)
+    @ApiModelProperty(value = "按序作答")
+    private Boolean canBlankOption;
+    /**
+     * 创建人
+     */
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+    /**
+     * 创建日期
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+    /**
+     * 更新人
+     */
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+    /**
+     * 更新日期
+     */
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+}

+ 14 - 0
web/src/main/java/com/ynfy/buss/practice/userpracticequestion/mapper/UserPracticeQuestionMapper.java

@@ -0,0 +1,14 @@
+package com.ynfy.buss.practice.userpracticequestion.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ynfy.buss.practice.userpracticequestion.entity.UserPracticeQuestion;
+
+/**
+ * @Description: 用户练习题目表
+ * @Author: jeecg-boot
+ * @Date: 2023-11-19
+ * @Version: V1.0
+ */
+public interface UserPracticeQuestionMapper extends BaseMapper<UserPracticeQuestion> {
+
+}

+ 5 - 0
web/src/main/java/com/ynfy/buss/practice/userpracticequestion/mapper/xml/UserPracticeQuestionMapper.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.ynfy.buss.practice.userpracticequestion.mapper.UserPracticeQuestionMapper">
+
+</mapper>

+ 14 - 0
web/src/main/java/com/ynfy/buss/practice/userpracticequestion/service/IUserPracticeQuestionService.java

@@ -0,0 +1,14 @@
+package com.ynfy.buss.practice.userpracticequestion.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ynfy.buss.practice.userpracticequestion.entity.UserPracticeQuestion;
+
+/**
+ * @Description: 用户练习题目表
+ * @Author: jeecg-boot
+ * @Date: 2023-11-19
+ * @Version: V1.0
+ */
+public interface IUserPracticeQuestionService extends IService<UserPracticeQuestion> {
+
+}

+ 18 - 0
web/src/main/java/com/ynfy/buss/practice/userpracticequestion/service/impl/UserPracticeQuestionServiceImpl.java

@@ -0,0 +1,18 @@
+package com.ynfy.buss.practice.userpracticequestion.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ynfy.buss.practice.userpracticequestion.entity.UserPracticeQuestion;
+import com.ynfy.buss.practice.userpracticequestion.mapper.UserPracticeQuestionMapper;
+import com.ynfy.buss.practice.userpracticequestion.service.IUserPracticeQuestionService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: 用户练习题目表
+ * @Author: jeecg-boot
+ * @Date: 2023-11-19
+ * @Version: V1.0
+ */
+@Service
+public class UserPracticeQuestionServiceImpl extends ServiceImpl<UserPracticeQuestionMapper, UserPracticeQuestion> implements IUserPracticeQuestionService {
+
+}