获取题目信息、收藏题目等

master
caolin 1 day ago
parent 36ef6e2bb5
commit acf3a5683e
  1. 8
      src/main/java/com/wrj/driver/server/controller/WrjQuestionController.java
  2. 9
      src/main/java/com/wrj/driver/server/controller/WrjQuestionTestController.java
  3. 7
      src/main/java/com/wrj/driver/server/controller/WrjUserCollectQuestionController.java
  4. 14
      src/main/java/com/wrj/driver/server/dto/QuestionQueryDto.java
  5. 3
      src/main/java/com/wrj/driver/server/dto/TestQueryDto.java
  6. 6
      src/main/java/com/wrj/driver/server/dto/TestSubmitDto.java
  7. 7
      src/main/java/com/wrj/driver/server/mapper/WrjQuestionMapper.java
  8. 12
      src/main/java/com/wrj/driver/server/mapper/WrjQuestionPracticeMapper.java
  9. 4
      src/main/java/com/wrj/driver/server/mapper/WrjUserCollectQuestionMapper.java
  10. 8
      src/main/java/com/wrj/driver/server/service/IWrjQuestionService.java
  11. 2
      src/main/java/com/wrj/driver/server/service/IWrjQuestionTestService.java
  12. 4
      src/main/java/com/wrj/driver/server/service/IWrjUserCollectQuestionService.java
  13. 38
      src/main/java/com/wrj/driver/server/service/impl/WrjQuestionPracticeServiceImpl.java
  14. 38
      src/main/java/com/wrj/driver/server/service/impl/WrjQuestionServiceImpl.java
  15. 8
      src/main/java/com/wrj/driver/server/service/impl/WrjQuestionTestServiceImpl.java
  16. 6
      src/main/java/com/wrj/driver/server/service/impl/WrjUserCollectQuestionServiceImpl.java
  17. 1
      src/main/java/com/wrj/driver/server/util/SecurityUtil.java
  18. 10
      src/main/java/com/wrj/driver/server/vo/QuestionPracticeVo.java
  19. 20
      src/main/java/com/wrj/driver/server/vo/QuestionVo.java
  20. 70
      src/main/java/com/wrj/driver/server/vo/UserQuestionPracticeVo.java
  21. 61
      src/main/resources/mapper/WrjQuestionMapper.xml
  22. 31
      src/main/resources/mapper/WrjQuestionPracticeMapper.xml
  23. 3
      src/main/resources/mapper/WrjQuestionTestMapper.xml
  24. 9
      src/main/resources/mapper/WrjUserCollectQuestionMapper.xml

@ -7,6 +7,7 @@ import com.wrj.driver.server.dto.QuestionQueryDto;
import com.wrj.driver.server.exception.BusinessException; import com.wrj.driver.server.exception.BusinessException;
import com.wrj.driver.server.response.BaseResponse; import com.wrj.driver.server.response.BaseResponse;
import com.wrj.driver.server.service.IWrjQuestionService; import com.wrj.driver.server.service.IWrjQuestionService;
import com.wrj.driver.server.util.SecurityUtil;
import com.wrj.driver.server.vo.QuestionVo; import com.wrj.driver.server.vo.QuestionVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -58,6 +59,13 @@ public class WrjQuestionController {
return BaseResponse.success(questionService.queryQuestion(queryDto)); return BaseResponse.success(questionService.queryQuestion(queryDto));
} }
@ApiOperation("根据查询条件获取题目(带用户答题信息)")
@PostMapping("/queryQuestionWithUser")
public BaseResponse queryQuestionWithUser(@RequestBody QuestionQueryDto queryDto) {
log.info("根据查询条件获取题目(带用户答题信息)======>queryDto:{}", queryDto);
return BaseResponse.success(questionService.queryQuestionWithUser(queryDto));
}
@ApiOperation("根据查询条件获取题目Id") @ApiOperation("根据查询条件获取题目Id")
@PostMapping("/queryQuestionId") @PostMapping("/queryQuestionId")
public BaseResponse queryQuestionId(@RequestBody QuestionQueryDto queryDto) { public BaseResponse queryQuestionId(@RequestBody QuestionQueryDto queryDto) {

@ -6,6 +6,7 @@ import com.wrj.driver.server.dto.TestQueryDto;
import com.wrj.driver.server.dto.TestSubmitDto; import com.wrj.driver.server.dto.TestSubmitDto;
import com.wrj.driver.server.response.BaseResponse; import com.wrj.driver.server.response.BaseResponse;
import com.wrj.driver.server.service.IWrjQuestionTestService; import com.wrj.driver.server.service.IWrjQuestionTestService;
import com.wrj.driver.server.util.SecurityUtil;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -38,6 +39,14 @@ public class WrjQuestionTestController {
return testService.testSubmit(submitDto); return testService.testSubmit(submitDto);
} }
@ApiOperation("获取模拟考试主键")
@GetMapping("/getTestId")
public BaseResponse getTestId() {
log.info("获取模拟考试id======>userId:{}", SecurityUtil.getUserId());
return BaseResponse.success(testService.getTestId());
}
@ApiOperation("获取考试统计") @ApiOperation("获取考试统计")
@PostMapping("/testTotal") @PostMapping("/testTotal")
public BaseResponse testTotal(@RequestBody @Valid TestQueryDto queryDto) { public BaseResponse testTotal(@RequestBody @Valid TestQueryDto queryDto) {

@ -32,4 +32,11 @@ public class WrjUserCollectQuestionController {
return BaseResponse.success(collectQuestionService.updateUserCollectQuestion(questionId, SecurityUtil.getUserId())); return BaseResponse.success(collectQuestionService.updateUserCollectQuestion(questionId, SecurityUtil.getUserId()));
} }
@ApiOperation("获取用户收藏题目id")
@PostMapping("/getUserCollectQuestionId")
public BaseResponse getUserCollectQuestionId(@RequestParam Integer driverTypeId) {
log.info("获取用户收藏题目id======>driverTypeId:{},userId:{}", driverTypeId, SecurityUtil.getUserId());
return BaseResponse.success(collectQuestionService.getUserCollectQuestionId(driverTypeId, SecurityUtil.getUserId()));
}
} }

@ -9,6 +9,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import javax.validation.constraints.NotBlank;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
@ -75,4 +76,17 @@ public class QuestionQueryDto implements Serializable {
@ApiModelProperty("是否是图片") @ApiModelProperty("是否是图片")
private Integer isImage; private Integer isImage;
/**
* 答题类型 1-顺序练习 2-章节练习 3-随机练习 4-模拟考试 5-错题训练 6-收藏训练"
*/
@ApiModelProperty(value = "答题类型 1-顺序练习 2-章节练习 3-随机练习 4-模拟考试 5-错题训练 6-收藏训练",required = true)
@NotBlank(message = "答题类型不能为空")
private String practiceType;
/**
* 用户id
*/
@ApiModelProperty("用户id")
private Long userId;
} }

@ -29,4 +29,7 @@ public class TestQueryDto {
@ApiModelProperty(value = "用户id") @ApiModelProperty(value = "用户id")
private Long userId; private Long userId;
@ApiModelProperty(value = "模拟考试标识")
private Long testId;
} }

@ -22,6 +22,12 @@ import java.util.List;
@ApiModel("成绩提交入参") @ApiModel("成绩提交入参")
public class TestSubmitDto { public class TestSubmitDto {
/**
* 车型标识
*/
@ApiModelProperty(value = "模拟考试标识",required = true)
private Long testId;
/** /**
* 车型标识 * 车型标识
*/ */

@ -30,6 +30,13 @@ public interface WrjQuestionMapper extends BaseMapper<WrjQuestion> {
*/ */
List<QuestionVo> queryQuestion(@Param("queryDto") QuestionQueryDto queryDto); List<QuestionVo> queryQuestion(@Param("queryDto") QuestionQueryDto queryDto);
/**
* 查询考题带用户答题信息
* @param queryDto
* @return
*/
List<QuestionVo> queryQuestionWithUser(QuestionQueryDto queryDto);
/** /**
* 获取考题id * 获取考题id
* *

@ -6,9 +6,12 @@ import com.wrj.driver.server.dto.QuestionPracticeQueryDto;
import com.wrj.driver.server.entity.WrjQuestionPractice; import com.wrj.driver.server.entity.WrjQuestionPractice;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wrj.driver.server.vo.QuestionPracticeVo; import com.wrj.driver.server.vo.QuestionPracticeVo;
import com.wrj.driver.server.vo.UserQuestionPracticeVo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* <p> * <p>
* 用户答题练习表 Mapper 接口 * 用户答题练习表 Mapper 接口
@ -24,4 +27,13 @@ public interface WrjQuestionPracticeMapper extends BaseMapper<WrjQuestionPractic
int clearPracticeRecord(@Param("userId") Long userId, @Param("practiceType") String practiceType); int clearPracticeRecord(@Param("userId") Long userId, @Param("practiceType") String practiceType);
IPage<QuestionPracticeVo> queryQuestionPracticePage(@Param("page") Page<QuestionPracticeVo> page, @Param("queryDto") QuestionPracticeQueryDto queryDto); IPage<QuestionPracticeVo> queryQuestionPracticePage(@Param("page") Page<QuestionPracticeVo> page, @Param("queryDto") QuestionPracticeQueryDto queryDto);
/**
* 查询用户答题信息
*
* @param questionIdList
* @param userId
* @return
*/
List<UserQuestionPracticeVo> queryUserQuestionPracticeMsg(@Param("questionIdList") List<Long> questionIdList, @Param("userId") Long userId, @Param("practiceType") String practiceType);
} }

@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List;
/** /**
* <p> * <p>
* 用户收藏表 Mapper 接口 * 用户收藏表 Mapper 接口
@ -20,4 +22,6 @@ public interface WrjUserCollectQuestionMapper extends BaseMapper<WrjUserCollectQ
WrjUserCollectQuestion selectByUserIdAndQuestionId(@Param("userId") Long userId, @Param("questionId") Long questionId); WrjUserCollectQuestion selectByUserIdAndQuestionId(@Param("userId") Long userId, @Param("questionId") Long questionId);
int deleteByUserIdAndQuestionId(@Param("userId") Long userId, @Param("questionId") Long questionId); int deleteByUserIdAndQuestionId(@Param("userId") Long userId, @Param("questionId") Long questionId);
List<Long> getUserCollectQuestionId(@Param("driverTypeId") Integer driverTypeId, @Param("userId") Long userId);
} }

@ -41,6 +41,13 @@ public interface IWrjQuestionService extends IService<WrjQuestion> {
*/ */
List<QuestionVo> queryQuestion(QuestionQueryDto queryDto); List<QuestionVo> queryQuestion(QuestionQueryDto queryDto);
/**
* 根据查询条件获取题目带用户答题信息
* @param queryDto
* @return
*/
List<QuestionVo> queryQuestionWithUser(QuestionQueryDto queryDto);
/** /**
* 根据查询条件获取题目Id * 根据查询条件获取题目Id
* @param queryDto * @param queryDto
@ -83,5 +90,4 @@ public interface IWrjQuestionService extends IService<WrjQuestion> {
* @return * @return
*/ */
Map<String,Integer> querySpecialNum(QuestionQueryDto queryDto); Map<String,Integer> querySpecialNum(QuestionQueryDto queryDto);
} }

@ -27,6 +27,8 @@ public interface IWrjQuestionTestService extends IService<WrjQuestionTest> {
*/ */
BaseResponse testSubmit(TestSubmitDto submitDto); BaseResponse testSubmit(TestSubmitDto submitDto);
Long getTestId();
/** /**
* 考试成绩统计 * 考试成绩统计
* @param queryDto * @param queryDto

@ -3,6 +3,8 @@ package com.wrj.driver.server.service;
import com.wrj.driver.server.entity.WrjUserCollectQuestion; import com.wrj.driver.server.entity.WrjUserCollectQuestion;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/** /**
* <p> * <p>
* 用户收藏表 服务类 * 用户收藏表 服务类
@ -14,4 +16,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
public interface IWrjUserCollectQuestionService extends IService<WrjUserCollectQuestion> { public interface IWrjUserCollectQuestionService extends IService<WrjUserCollectQuestion> {
Boolean updateUserCollectQuestion(Long questionId, Long userId); Boolean updateUserCollectQuestion(Long questionId, Long userId);
List<Long> getUserCollectQuestionId(Integer driverTypeId, Long userId);
} }

@ -1,6 +1,7 @@
package com.wrj.driver.server.service.impl; package com.wrj.driver.server.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -19,11 +20,13 @@ import com.wrj.driver.server.mapper.WrjUserErrorQuestionMapper;
import com.wrj.driver.server.service.IWrjQuestionPracticeService; import com.wrj.driver.server.service.IWrjQuestionPracticeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wrj.driver.server.vo.QuestionPracticeVo; import com.wrj.driver.server.vo.QuestionPracticeVo;
import com.wrj.driver.server.vo.QuestionVo;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@ -114,6 +117,41 @@ public class WrjQuestionPracticeServiceImpl extends ServiceImpl<WrjQuestionPract
IPage<QuestionPracticeVo> pageResult = practiceMapper.queryQuestionPracticePage(page, queryDto); IPage<QuestionPracticeVo> pageResult = practiceMapper.queryQuestionPracticePage(page, queryDto);
questionOptionHandler(pageResult.getRecords());
return pageResult; return pageResult;
} }
/**
* 问题选项规整
*/
private void questionOptionHandler(List<QuestionPracticeVo> questionVos) {
if (CollectionUtil.isNotEmpty(questionVos)) {
for (QuestionPracticeVo questionVo : questionVos) {
//如果选项A没有值 则为判断题
List<QuestionVo.QuestionOption> optionList = new ArrayList<>();
if (StrUtil.isBlank(questionVo.getChooseA()) || StrUtil.equals(questionVo.getType(), Constants.QUESTION_TYPE_ONE)) {
optionList.add(new QuestionVo.QuestionOption("A", "正确", "A"));
optionList.add(new QuestionVo.QuestionOption("B", "错误", "B"));
} else {
//起码ABCD都有
optionList.add(new QuestionVo.QuestionOption("A", questionVo.getChooseA(), "A"));
optionList.add(new QuestionVo.QuestionOption("B", questionVo.getChooseB(), "B"));
optionList.add(new QuestionVo.QuestionOption("C", questionVo.getChooseC(), "C"));
optionList.add(new QuestionVo.QuestionOption("D", questionVo.getChooseD(), "D"));
if (StrUtil.isNotBlank(questionVo.getChooseE())) {
optionList.add(new QuestionVo.QuestionOption("E", questionVo.getChooseE(), "E"));
}
if (StrUtil.isNotBlank(questionVo.getChooseF())) {
optionList.add(new QuestionVo.QuestionOption("F", questionVo.getChooseF(), "F"));
}
if (StrUtil.isNotBlank(questionVo.getChooseG())) {
optionList.add(new QuestionVo.QuestionOption("G", questionVo.getChooseG(), "G"));
}
}
questionVo.setOptionList(optionList);
}
}
}
} }

@ -12,9 +12,12 @@ import com.wrj.driver.server.entity.WrjQuestion;
import com.wrj.driver.server.entity.WrjSysConfig; import com.wrj.driver.server.entity.WrjSysConfig;
import com.wrj.driver.server.exception.BusinessException; import com.wrj.driver.server.exception.BusinessException;
import com.wrj.driver.server.mapper.WrjQuestionMapper; import com.wrj.driver.server.mapper.WrjQuestionMapper;
import com.wrj.driver.server.mapper.WrjQuestionPracticeMapper;
import com.wrj.driver.server.redis.RedisCache; import com.wrj.driver.server.redis.RedisCache;
import com.wrj.driver.server.service.*; import com.wrj.driver.server.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wrj.driver.server.util.SecurityUtil;
import com.wrj.driver.server.vo.UserQuestionPracticeVo;
import com.wrj.driver.server.vo.WrjTypeChapterVo; import com.wrj.driver.server.vo.WrjTypeChapterVo;
import com.wrj.driver.server.vo.QuestionVo; import com.wrj.driver.server.vo.QuestionVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -23,6 +26,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/** /**
* <p> * <p>
@ -48,6 +53,9 @@ public class WrjQuestionServiceImpl extends ServiceImpl<WrjQuestionMapper, WrjQu
@Autowired @Autowired
private IWrjTypeChapterService wrjTypeChapterService; private IWrjTypeChapterService wrjTypeChapterService;
@Autowired
private WrjQuestionPracticeMapper practiceMapper;
@Override @Override
public QuestionVo queryQuestionById(QuestionQueryDto queryDto) { public QuestionVo queryQuestionById(QuestionQueryDto queryDto) {
QuestionQueryDto newDto = new QuestionQueryDto() QuestionQueryDto newDto = new QuestionQueryDto()
@ -72,6 +80,36 @@ public class WrjQuestionServiceImpl extends ServiceImpl<WrjQuestionMapper, WrjQu
return questionVos; return questionVos;
} }
@Override
public List<QuestionVo> queryQuestionWithUser(QuestionQueryDto queryDto) {
List<QuestionVo> questionVos = queryQuestion(queryDto);
questionOptionHandler(questionVos);
// 处理用户练习信息
handlerUserPracticeMsg(questionVos, SecurityUtil.getUserId(),queryDto.getPracticeType());
return questionVos;
}
private void handlerUserPracticeMsg(List<QuestionVo> questionVos,Long userId,String practiceType) {
if (CollectionUtil.isEmpty(questionVos) || Objects.isNull(userId) || StrUtil.isBlank(practiceType)){
return;
}
List<Long> questionIdList = questionVos.stream().map(s -> s.getQuestionId()).collect(Collectors.toList());
List<UserQuestionPracticeVo> userQuestionPracticeVos = practiceMapper.queryUserQuestionPracticeMsg(questionIdList, userId, practiceType);
if (CollectionUtil.isEmpty(userQuestionPracticeVos)){
return;
}
Map<Long, UserQuestionPracticeVo> userQuestionPracticeVoMap = userQuestionPracticeVos.stream().collect(Collectors.toMap(UserQuestionPracticeVo::getQuestionId, Function.identity(), (x1, x2) -> x1));
for (QuestionVo questionVo : questionVos) {
questionVo.setUserQuestionPracticeVo(userQuestionPracticeVoMap.get(questionVo.getQuestionId()));
}
}
@Override @Override
public List<Long> queryQuestionId(QuestionQueryDto queryDto) { public List<Long> queryQuestionId(QuestionQueryDto queryDto) {

@ -1,6 +1,7 @@
package com.wrj.driver.server.service.impl; package com.wrj.driver.server.service.impl;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.wrj.driver.server.dto.SecurityUser; import com.wrj.driver.server.dto.SecurityUser;
@ -40,6 +41,8 @@ import java.util.stream.Collectors;
@Service @Service
public class WrjQuestionTestServiceImpl extends ServiceImpl<WrjQuestionTestMapper, WrjQuestionTest> implements IWrjQuestionTestService { public class WrjQuestionTestServiceImpl extends ServiceImpl<WrjQuestionTestMapper, WrjQuestionTest> implements IWrjQuestionTestService {
@Autowired
private Snowflake snowflake;
@Autowired @Autowired
private IWrjSysConfigService configService; private IWrjSysConfigService configService;
@ -60,6 +63,11 @@ public class WrjQuestionTestServiceImpl extends ServiceImpl<WrjQuestionTestMappe
return new BaseResponse(StatusEnum.SUCCESS.getCode(), "", questionTest); return new BaseResponse(StatusEnum.SUCCESS.getCode(), "", questionTest);
} }
@Override
public Long getTestId() {
return snowflake.nextId();
}
@Override @Override
public TestTotalVo testTotal(TestQueryDto queryDto) { public TestTotalVo testTotal(TestQueryDto queryDto) {
TestTotalVo testTotalVo = new TestTotalVo(); TestTotalVo testTotalVo = new TestTotalVo();

@ -10,6 +10,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
/** /**
* <p> * <p>
@ -43,4 +44,9 @@ public class WrjUserCollectQuestionServiceImpl extends ServiceImpl<WrjUserCollec
return Boolean.TRUE; return Boolean.TRUE;
} }
@Override
public List<Long> getUserCollectQuestionId(Integer driverTypeId, Long userId) {
return collectQuestionMapper.getUserCollectQuestionId(driverTypeId,userId);
}
} }

@ -51,7 +51,6 @@ public class SecurityUtil {
if (null != loginUser) { if (null != loginUser) {
userId = loginUser.getUserId(); userId = loginUser.getUserId();
} }
return userId; return userId;
} }
} }

@ -12,6 +12,7 @@ import lombok.experimental.Accessors;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
/** /**
* <p> * <p>
@ -47,6 +48,12 @@ public class QuestionPracticeVo implements Serializable {
@ApiModelProperty("题目内容") @ApiModelProperty("题目内容")
private String question; private String question;
/**
* 题目类型
*/
@ApiModelProperty("题目类型")
private String type;
/** /**
* 选项A * 选项A
*/ */
@ -89,6 +96,9 @@ public class QuestionPracticeVo implements Serializable {
@ApiModelProperty("选项G") @ApiModelProperty("选项G")
private String chooseG; private String chooseG;
@ApiModelProperty("选项列表")
private List<QuestionVo.QuestionOption> optionList;
/** /**
* 正确答案 * 正确答案
*/ */

@ -175,6 +175,26 @@ public class QuestionVo {
@ApiModelProperty("答案D关键字") @ApiModelProperty("答案D关键字")
private String dWords; private String dWords;
/**
* 平台回答数量
*/
@ApiModelProperty("平台回答数量")
private Long answerNumber;
/**
* 平台回答正确数量
*/
@ApiModelProperty("平台回答正确数量")
private Long number;
/**
* 用户答题信息
*/
@ApiModelProperty("用户答题信息")
private UserQuestionPracticeVo userQuestionPracticeVo;
@Data @Data
@Accessors @Accessors

@ -0,0 +1,70 @@
package com.wrj.driver.server.vo;
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.util.List;
/**
* <p>
* 用户答题练习参数
* </p>
*
* @author Automated procedures
* @since 2025-06-29
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel("用户答题练习出参")
public class UserQuestionPracticeVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 题目标识
*/
@ApiModelProperty("题目标识")
private Long questionId;
/**
* 用户标识
*/
@ApiModelProperty("用户标识")
private Long userId;
/**
* 用户选择的答案
*/
@ApiModelProperty("用户选择的答案")
private String answer;
/**
* 答题结果 1-正确 2-错误
*/
@ApiModelProperty("答题结果 1-正确 2-错误")
private String answerResult;
/**
* 练习时间
*/
@ApiModelProperty("答题时间")
private String practiceTime;
/**
* 用户答题次数
*/
@ApiModelProperty("用户答题次数")
private Long userAnswerNumbr;
/**
* 用户答题正确次数
*/
@ApiModelProperty("用户答题正确次数")
private Long userRightNumber;
}

@ -203,5 +203,66 @@
MAX(tq.show_order) MAX(tq.show_order)
from wrj_question tq from wrj_question tq
</select> </select>
<select id="queryQuestionWithUser" resultType="com.wrj.driver.server.vo.QuestionVo">
select
tq.question_id,
tq.question,
tq.choose_a,
tq.choose_b,
tq.choose_c,
tq.choose_d,
tq.choose_e,
tq.choose_f,
tq.choose_g,
tq.true_answer,
tq.image_url,
tq.best_answer,
tq.skill_info,
tq.error_info,
tq.chapter,
tq.options,
tq.type,
tq.show_order,
tq.origin_id,
tq.is_active,
tq.title_words,
tq.skill_words,
tq.a_words,
tq.b_words,
tq.c_words,
tq.d_words
from wrj_question tq
left join wrj_chapter cha on tq.chapter = cha.chapter_id
left join wrj_type_chapter tcc on tcc.chapter_id = cha.chapter_id
<where>
tq.is_active = '0'
<if test="queryDto.questionId !=null">
and tq.question_id = #{queryDto.questionId}
</if>
<if test="queryDto.questionIdList !=null and queryDto.questionIdList.size() > 0">
and tq.question_id in
<foreach collection="queryDto.questionIdList" open="(" item="item" separator="," close=")">
#{item}
</foreach>
</if>
<if test="queryDto.chapter !=null">
and tq.chapter = #{queryDto.chapter}
</if>
<if test="queryDto.question !=null and queryDto.question !=''">
and tq.question like concat('%' , #{queryDto.question} , '%')
</if>
<if test="queryDto.driverTypeId !=null">
and tcc.type_id = #{queryDto.driverTypeId}
</if>
<if test="queryDto.type !=null and queryDto.type != ''">
and tq.type = #{queryDto.type}
</if>
<if test="queryDto.isImage !=null">
and tq.image_url is not null
</if>
</where>
group by tq.question_id
order by tq.show_order asc, question_id asc
</select>
</mapper> </mapper>

@ -28,6 +28,7 @@
wq.choose_d, wq.choose_d,
wq.choose_e, wq.choose_e,
wq.choose_f, wq.choose_f,
wq.type,
wq.true_answer wq.true_answer
from wrj_question_practice wqp from wrj_question_practice wqp
left join wrj_question wq on wqp.question_id = wq.question_id left join wrj_question wq on wqp.question_id = wq.question_id
@ -58,4 +59,34 @@
</where> </where>
group by wqp.practice_id desc group by wqp.practice_id desc
</select> </select>
<select id="queryUserQuestionPracticeMsg" resultType="com.wrj.driver.server.vo.UserQuestionPracticeVo">
select
wqp.question_id,
wqp.user_id,
wqp.answer,
wqp.answer_result,
DATE_FORMAT(wqp.practice_time, '%Y-%m-%d %H:%i:%s') as practiceTime,
wqpt.answer_number as userAnswerNumbr,
wqpt.right_number as userRightNumber
from
wrj_question_practice wqp
left join wrj_question_practice_total wqpt on wqp.question_id = wqpt.question_id and wqp.user_id = wqpt.user_id
<where>
wqp.is_clear = 0
<if test="questionIdList !=null and questionIdList.size() > 0">
and wqp.question_id in
<foreach collection="questionIdList" open="(" item="item" separator="," close=")">
#{item}
</foreach>
</if>
<if test="userId !=null">
and wqp.user_id = #{userId}
</if>
<if test="practiceType !=null and practiceType !=''">
and wqp.practice_type = #{practiceType}
</if>
</where>
</select>
</mapper> </mapper>

@ -15,6 +15,9 @@
from wrj_question_test a from wrj_question_test a
inner join wrj_driver_type b on b.type_id = a.type_id inner join wrj_driver_type b on b.type_id = a.type_id
<where> <where>
<if test="param.testId != null">
and a.test_id = #{param.testId}
</if>
<if test="param.driverTypeId != null"> <if test="param.driverTypeId != null">
and a.type_id = #{param.driverTypeId} and a.type_id = #{param.driverTypeId}
</if> </if>

@ -10,6 +10,15 @@
where question_id = #{questionId} and user_id = #{userId} where question_id = #{questionId} and user_id = #{userId}
</select> </select>
<select id="getUserCollectQuestionId" resultType="java.lang.Long">
select
question_id
from wrj_user_collect_question wucq
left join wrj_question wq on wucq.question_id = wq.question_id
left join wrj_type_chapter wtc on wtc.chapter_id = wq.chapter
where wucq.user_id = #{userId} and wq.is_active = '0' and wtc.type_id = #{driverTypeId}
</select>
<delete id="deleteByUserIdAndQuestionId"> <delete id="deleteByUserIdAndQuestionId">
delete from wrj_user_collect_question delete from wrj_user_collect_question
where question_id = #{questionId} and user_id = #{userId} where question_id = #{questionId} and user_id = #{userId}

Loading…
Cancel
Save