From 36ef6e2bb5ab0a6454c64459b13a604f93954fc0 Mon Sep 17 00:00:00 2001 From: caolin <1149034574@qq.com> Date: Thu, 3 Jul 2025 17:57:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E7=94=A8=E6=88=B7=E7=AD=94?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WrjQuestionPracticeController.java | 13 +- .../WrjUserCollectQuestionController.java | 3 - .../com/wrj/driver/server/dto/PageParam.java | 35 ++++ .../server/dto/QuestionPracticeAddDto.java | 28 ++-- .../server/dto/QuestionPracticeQueryDto.java | 40 +++-- .../mapper/WrjQuestionPracticeMapper.java | 6 + .../service/IWrjQuestionPracticeService.java | 7 + .../impl/WrjQuestionPracticeServiceImpl.java | 15 ++ .../driver/server/vo/QuestionPracticeVo.java | 152 ++++++++++++++++++ .../mapper/WrjQuestionPracticeMapper.xml | 52 +++++- 10 files changed, 311 insertions(+), 40 deletions(-) create mode 100644 src/main/java/com/wrj/driver/server/dto/PageParam.java create mode 100644 src/main/java/com/wrj/driver/server/vo/QuestionPracticeVo.java diff --git a/src/main/java/com/wrj/driver/server/controller/WrjQuestionPracticeController.java b/src/main/java/com/wrj/driver/server/controller/WrjQuestionPracticeController.java index 897b65c..7394cb9 100644 --- a/src/main/java/com/wrj/driver/server/controller/WrjQuestionPracticeController.java +++ b/src/main/java/com/wrj/driver/server/controller/WrjQuestionPracticeController.java @@ -1,18 +1,18 @@ package com.wrj.driver.server.controller; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.wrj.driver.server.dto.QuestionPracticeAddDto; -import com.wrj.driver.server.dto.QuestionQueryDto; +import com.wrj.driver.server.dto.QuestionPracticeQueryDto; import com.wrj.driver.server.response.BaseResponse; import com.wrj.driver.server.service.IWrjQuestionPracticeService; import com.wrj.driver.server.util.SecurityUtil; +import com.wrj.driver.server.vo.QuestionPracticeVo; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import org.springframework.stereotype.Controller; - import javax.validation.Valid; /** @@ -50,11 +50,10 @@ public class WrjQuestionPracticeController { @ApiOperation("查询练习记录") @PostMapping("/query") - public BaseResponse query(@RequestBody QuestionPracticeAddDto addDto) { + public BaseResponse> query(@RequestBody QuestionPracticeQueryDto queryDto) { - addDto.setUserId(SecurityUtil.getUserId()); - log.info("答题练习======>addDto:{}", addDto); - return BaseResponse.success(practiceService.insertQuestionPractice(addDto)); + log.info("查询练习记录======>queryDto:{}", queryDto); + return BaseResponse.success(practiceService.query(queryDto)); } } diff --git a/src/main/java/com/wrj/driver/server/controller/WrjUserCollectQuestionController.java b/src/main/java/com/wrj/driver/server/controller/WrjUserCollectQuestionController.java index dccd211..8670779 100644 --- a/src/main/java/com/wrj/driver/server/controller/WrjUserCollectQuestionController.java +++ b/src/main/java/com/wrj/driver/server/controller/WrjUserCollectQuestionController.java @@ -1,7 +1,6 @@ package com.wrj.driver.server.controller; -import com.wrj.driver.server.dto.QuestionPracticeAddDto; import com.wrj.driver.server.response.BaseResponse; import com.wrj.driver.server.service.IWrjUserCollectQuestionService; import com.wrj.driver.server.util.SecurityUtil; @@ -10,8 +9,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import org.springframework.stereotype.Controller; - /** *

* 用户收藏表 前端控制器 diff --git a/src/main/java/com/wrj/driver/server/dto/PageParam.java b/src/main/java/com/wrj/driver/server/dto/PageParam.java new file mode 100644 index 0000000..a4050a1 --- /dev/null +++ b/src/main/java/com/wrj/driver/server/dto/PageParam.java @@ -0,0 +1,35 @@ +package com.wrj.driver.server.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +@Data +@ApiModel("分页查询基础参数") +public class PageParam implements Serializable { + + private static final Integer PAGE_NO = 1; + private static final Integer PAGE_SIZE = 10; + + /** + * 每页条数 - 不分页 + * + * 例如说,导出接口,可以设置 {@link #pageSize} 为 -1 不分页,查询所有数据。 + */ + public static final Integer PAGE_SIZE_NONE = -1; + + @ApiModelProperty(value = "页码,从 1 开始",required = true) + @NotNull(message = "页码不能为空") + @Min(value = 1, message = "页码最小值为 1") + private Integer pageNo = PAGE_NO; + + @ApiModelProperty(value = "每页条数",required = true) + @NotNull(message = "每页条数不能为空") + @Min(value = 1, message = "每页条数最小值为 1") + private Integer pageSize = PAGE_SIZE; + +} diff --git a/src/main/java/com/wrj/driver/server/dto/QuestionPracticeAddDto.java b/src/main/java/com/wrj/driver/server/dto/QuestionPracticeAddDto.java index 1004b90..e49eeb7 100644 --- a/src/main/java/com/wrj/driver/server/dto/QuestionPracticeAddDto.java +++ b/src/main/java/com/wrj/driver/server/dto/QuestionPracticeAddDto.java @@ -9,7 +9,6 @@ import lombok.experimental.Accessors; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.io.Serializable; -import java.util.List; /** *

@@ -31,29 +30,32 @@ public class QuestionPracticeAddDto implements Serializable { * 题目标识 */ @ApiModelProperty(value = "题目标识",required = true) + @NotNull(message = "题目标识不能为空") private Long questionId; /** - * 用户手机号 + * 用户标识 */ - @ApiModelProperty("用户手机号") - private String phone; - - /** - * 答题结果 - */ - @ApiModelProperty("答题结果") - private String answerResult; + @ApiModelProperty("用户标识") + private Long userId; /** * 答题类型 1-顺序练习 2-章节练习 3-随机练习 4-模拟考试 */ @ApiModelProperty(value = "答题类型 1-顺序练习 2-章节练习 3-随机练习 4-模拟考试 5-错题训练 6-收藏训练",required = true) + @NotBlank(message = "答题类型不能为空") private String practiceType; /** - * 答题类型 1-顺序练习 2-章节练习 3-随机练习 4-模拟考试 + * 用户选择的答案 */ - @ApiModelProperty(value = "答题类型 1-顺序练习 2-章节练习 3-随机练习 4-模拟考试 5-错题训练 6-收藏训练",required = true) - private List practiceTypeList; + @ApiModelProperty("用户选择的答案") + @NotBlank(message = "答案不能为空") + private String answer; + + /** + * 业务标识,顺序练习对应顺序练习批次,模拟考试对应考试test_id + */ + @ApiModelProperty("业务标识,顺序练习对应顺序练习批次,模拟考试对应考试test_id") + private Long businessCode; } diff --git a/src/main/java/com/wrj/driver/server/dto/QuestionPracticeQueryDto.java b/src/main/java/com/wrj/driver/server/dto/QuestionPracticeQueryDto.java index 64b03b6..b7915cf 100644 --- a/src/main/java/com/wrj/driver/server/dto/QuestionPracticeQueryDto.java +++ b/src/main/java/com/wrj/driver/server/dto/QuestionPracticeQueryDto.java @@ -6,9 +6,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; import java.io.Serializable; +import java.util.List; /** *

@@ -21,8 +20,8 @@ import java.io.Serializable; @Data @EqualsAndHashCode(callSuper = false) @Accessors(chain = true) -@ApiModel("答题练习入参") -public class QuestionPracticeQueryDto implements Serializable { +@ApiModel("答题练习查询入参") +public class QuestionPracticeQueryDto extends PageParam implements Serializable { private static final long serialVersionUID = 1L; @@ -30,32 +29,41 @@ public class QuestionPracticeQueryDto implements Serializable { * 题目标识 */ @ApiModelProperty(value = "题目标识",required = true) - @NotNull(message = "题目标识不能为空") private Long questionId; /** - * 用户标识 + * 题目 */ - @ApiModelProperty("用户标识") - private Long userId; + @ApiModelProperty(value = "题目") + private String question; /** - * 答题类型 1-顺序练习 2-章节练习 3-随机练习 4-模拟考试 + * 学员手机号或姓名 */ - @ApiModelProperty(value = "答题类型 1-顺序练习 2-章节练习 3-随机练习 4-模拟考试 5-错题训练 6-收藏训练",required = true) - @NotBlank(message = "答题类型不能为空") - private String practiceType; + @ApiModelProperty("学员手机号或姓名") + private String userNameOrPhone; /** * 用户选择的答案 */ @ApiModelProperty("用户选择的答案") - @NotBlank(message = "答案不能为空") private String answer; /** - * 业务标识,顺序练习对应顺序练习批次,模拟考试对应考试test_id + * 答题结果 1-正确 2-错误 + */ + @ApiModelProperty("答题结果 1-正确 2-错误") + private String answerResult; + + /** + * 答题类型 1-顺序练习 2-章节练习 3-随机练习 4-模拟考试 + */ + @ApiModelProperty(value = "答题类型 1-顺序练习 2-章节练习 3-随机练习 4-模拟考试 5-错题训练 6-收藏训练",required = true) + private String practiceType; + + /** + * 答题类型 1-顺序练习 2-章节练习 3-随机练习 4-模拟考试 */ - @ApiModelProperty("业务标识,顺序练习对应顺序练习批次,模拟考试对应考试test_id") - private Long businessCode; + @ApiModelProperty(value = "答题类型 1-顺序练习 2-章节练习 3-随机练习 4-模拟考试 5-错题训练 6-收藏训练",required = true) + private List practiceTypeList; } diff --git a/src/main/java/com/wrj/driver/server/mapper/WrjQuestionPracticeMapper.java b/src/main/java/com/wrj/driver/server/mapper/WrjQuestionPracticeMapper.java index 87ffbdd..1a919bf 100644 --- a/src/main/java/com/wrj/driver/server/mapper/WrjQuestionPracticeMapper.java +++ b/src/main/java/com/wrj/driver/server/mapper/WrjQuestionPracticeMapper.java @@ -1,7 +1,11 @@ package com.wrj.driver.server.mapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wrj.driver.server.dto.QuestionPracticeQueryDto; import com.wrj.driver.server.entity.WrjQuestionPractice; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wrj.driver.server.vo.QuestionPracticeVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -18,4 +22,6 @@ import org.apache.ibatis.annotations.Param; public interface WrjQuestionPracticeMapper extends BaseMapper { int clearPracticeRecord(@Param("userId") Long userId, @Param("practiceType") String practiceType); + + IPage queryQuestionPracticePage(@Param("page") Page page, @Param("queryDto") QuestionPracticeQueryDto queryDto); } diff --git a/src/main/java/com/wrj/driver/server/service/IWrjQuestionPracticeService.java b/src/main/java/com/wrj/driver/server/service/IWrjQuestionPracticeService.java index a727540..8f4b818 100644 --- a/src/main/java/com/wrj/driver/server/service/IWrjQuestionPracticeService.java +++ b/src/main/java/com/wrj/driver/server/service/IWrjQuestionPracticeService.java @@ -1,8 +1,13 @@ package com.wrj.driver.server.service; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.wrj.driver.server.dto.QuestionPracticeAddDto; +import com.wrj.driver.server.dto.QuestionPracticeQueryDto; import com.wrj.driver.server.entity.WrjQuestionPractice; import com.baomidou.mybatisplus.extension.service.IService; +import com.wrj.driver.server.vo.QuestionPracticeVo; + +import java.util.List; /** *

@@ -17,4 +22,6 @@ public interface IWrjQuestionPracticeService extends IService query(QuestionPracticeQueryDto queryDto); } diff --git a/src/main/java/com/wrj/driver/server/service/impl/WrjQuestionPracticeServiceImpl.java b/src/main/java/com/wrj/driver/server/service/impl/WrjQuestionPracticeServiceImpl.java index f331f0a..8d8b084 100644 --- a/src/main/java/com/wrj/driver/server/service/impl/WrjQuestionPracticeServiceImpl.java +++ b/src/main/java/com/wrj/driver/server/service/impl/WrjQuestionPracticeServiceImpl.java @@ -2,8 +2,11 @@ package com.wrj.driver.server.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.wrj.driver.server.constant.Constants; import com.wrj.driver.server.dto.QuestionPracticeAddDto; +import com.wrj.driver.server.dto.QuestionPracticeQueryDto; import com.wrj.driver.server.entity.WrjQuestion; import com.wrj.driver.server.entity.WrjQuestionPractice; import com.wrj.driver.server.entity.WrjQuestionPracticeTotal; @@ -15,11 +18,13 @@ import com.wrj.driver.server.mapper.WrjQuestionPracticeTotalMapper; import com.wrj.driver.server.mapper.WrjUserErrorQuestionMapper; import com.wrj.driver.server.service.IWrjQuestionPracticeService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wrj.driver.server.vo.QuestionPracticeVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; +import java.util.List; /** *

@@ -101,4 +106,14 @@ public class WrjQuestionPracticeServiceImpl extends ServiceImpl query(QuestionPracticeQueryDto queryDto) { + + Page page = new Page<>(queryDto.getPageNo(), queryDto.getPageSize()); + + IPage pageResult = practiceMapper.queryQuestionPracticePage(page, queryDto); + + return pageResult; + } } diff --git a/src/main/java/com/wrj/driver/server/vo/QuestionPracticeVo.java b/src/main/java/com/wrj/driver/server/vo/QuestionPracticeVo.java new file mode 100644 index 0000000..8411ad2 --- /dev/null +++ b/src/main/java/com/wrj/driver/server/vo/QuestionPracticeVo.java @@ -0,0 +1,152 @@ +package com.wrj.driver.server.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +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 java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 用户答题练习 + *

+ * + * @author Automated procedures + * @since 2025-06-29 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel("用户答题练习出参") +public class QuestionPracticeVo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 练习标识 + */ + @ApiModelProperty("练习标识") + private Long practiceId; + + /** + * 题目标识 + */ + @ApiModelProperty("题目标识") + private Long questionId; + + /** + * 题目内容 + */ + @ApiModelProperty("题目内容") + private String question; + + /** + * 选项A + */ + @ApiModelProperty("选项A") + private String chooseA; + + /** + * 选项B + */ + @ApiModelProperty("选项B") + private String chooseB; + + /** + * 选项C + */ + @ApiModelProperty("选项C") + private String chooseC; + + /** + * 选项D + */ + @ApiModelProperty("选项D") + private String chooseD; + + /** + * 选项E + */ + @ApiModelProperty("选项E") + private String chooseE; + + /** + * 选项F + */ + @ApiModelProperty("选项F") + private String chooseF; + + /** + * 选项G + */ + @ApiModelProperty("选项G") + private String chooseG; + + /** + * 正确答案 + */ + @ApiModelProperty("正确答案") + private String trueAnswer; + + /** + * 题目图片url + */ + @ApiModelProperty("题目图片url") + private String imageUrl; + + /** + * 用户标识 + */ + @ApiModelProperty("用户标识") + private Long userId; + + /** + * 用户名称 + */ + @ApiModelProperty("用户名称") + private String userName; + + /** + * 用户手机号 + */ + @ApiModelProperty("用户手机号") + private String phone; + + /** + * 练习类型 1-顺序练习 2-章节练习 3-随机练习 4-模拟考试 5-错题训练 6-收藏训练 + */ + @ApiModelProperty("练习类型 1-顺序练习 2-章节练习 3-随机练习 4-模拟考试 5-错题训练 6-收藏训练") + private String practiceType; + + /** + * 用户选择的答案 + */ + @ApiModelProperty("用户选择的答案") + private String answer; + + /** + * 答题结果 1-正确 2-错误 + */ + @ApiModelProperty("答题结果 1-正确 2-错误") + private String answerResult; + + /** + * 业务标识,顺序练习对应顺序练习批次,模拟考试对应考试test_id + */ + @ApiModelProperty("业务标识,顺序练习对应顺序练习批次,模拟考试对应考试test_id") + private Long businessCode; + + /** + * 练习时间 + */ + @ApiModelProperty("答题时间") + private String practiceTime; + +} diff --git a/src/main/resources/mapper/WrjQuestionPracticeMapper.xml b/src/main/resources/mapper/WrjQuestionPracticeMapper.xml index ab1eb18..4eea353 100644 --- a/src/main/resources/mapper/WrjQuestionPracticeMapper.xml +++ b/src/main/resources/mapper/WrjQuestionPracticeMapper.xml @@ -6,6 +6,56 @@ update wrj_question_practice set is_clear = 1 - where user_id = #{userId} and practice_type = #{practiceType} + where user_id = #{userId} and practice_type = #{practiceType} and is_clear = 0 + +