src/main/java/cc/mrbird/febs/ai/controller/memberAnswer/ApiMemberAnswerController.java
@@ -1,14 +1,10 @@ package cc.mrbird.febs.ai.controller.memberAnswer; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerDto; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerInsureDto; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerPreviousDto; import cc.mrbird.febs.ai.req.memberAnswer.ApiQuestionAnswerDto; import cc.mrbird.febs.ai.req.memberAnswer.*; import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkItemPageDto; import cc.mrbird.febs.ai.req.product.ApiProductInfoDto; import cc.mrbird.febs.ai.res.memberAnswer.ApiMemberAnswerInsureVo; import cc.mrbird.febs.ai.res.memberAnswer.ApiMemberAnswerPreviousVo; import cc.mrbird.febs.ai.res.memberAnswer.ApiMemberAnswerVo; import cc.mrbird.febs.ai.res.memberAnswer.ApiQuestionItemInfoVo; import cc.mrbird.febs.ai.res.memberAnswer.*; import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkItemVo; import cc.mrbird.febs.ai.res.product.ApiProductInfoVo; import cc.mrbird.febs.ai.service.AiMemberAnswerService; import cc.mrbird.febs.common.entity.FebsResponse; @@ -76,4 +72,14 @@ return apiMemberAnswerService.previous(dto); } @ApiOperation(value = "错题集记录分页查询", notes = "错题集记录分页查询") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = ApiMemberAnswerWrongVo.class) }) @PostMapping(value = "/wrongPage") public FebsResponse wrongPage(@RequestBody @Validated ApiMemberAnswerWrongPageDto dto) { return apiMemberAnswerService.wrongPage(dto); } } src/main/java/cc/mrbird/febs/ai/mapper/AiMemberAnswerItemMapper.java
@@ -2,7 +2,9 @@ import cc.mrbird.febs.ai.entity.AiMemberAnswerItem; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerPreviousDto; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerWrongPageDto; import cc.mrbird.febs.ai.res.memberAnswer.ApiMemberAnswerPreviousVo; import cc.mrbird.febs.ai.res.memberAnswer.ApiMemberAnswerWrongVo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; @@ -16,4 +18,6 @@ public interface AiMemberAnswerItemMapper extends BaseMapper<AiMemberAnswerItem> { Page<ApiMemberAnswerPreviousVo> selectPageListByQuery(Page<ApiMemberAnswerPreviousVo> page, @Param("record") ApiMemberAnswerPreviousDto dto); Page<ApiMemberAnswerWrongVo> getWrongPageListByQuery(Page<ApiMemberAnswerWrongVo> page,@Param("record") ApiMemberAnswerWrongPageDto dto); } src/main/java/cc/mrbird/febs/ai/req/memberAnswer/ApiMemberAnswerWrongPageDto.java
New file @@ -0,0 +1,26 @@ package cc.mrbird.febs.ai.req.memberAnswer; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotNull; /** * @author Administrator */ @Data @ApiModel(value = "ApiMemberAnswerWrongPageDto", description = "参数") public class ApiMemberAnswerWrongPageDto { @NotNull(message = "页码不能为空") @ApiModelProperty(value = "页码", example = "1") private Integer pageNow; @NotNull(message = "每页数量不能为空") @ApiModelProperty(value = "每页数量", example = "10") private Integer pageSize; @ApiModelProperty(hidden = true) private String memberUuid; } src/main/java/cc/mrbird/febs/ai/res/memberAnswer/ApiMemberAnswerWrongVo.java
New file @@ -0,0 +1,33 @@ package cc.mrbird.febs.ai.res.memberAnswer; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @author Administrator */ @Data @ApiModel(value = "ApiMemberAnswerWrongVo", description = "参数") public class ApiMemberAnswerWrongVo { @ApiModelProperty(value = "题目") private String title; @ApiModelProperty(value = "难度:1-简单,2-中等,3-困难") private Integer difficulty; @ApiModelProperty(value = "用户答题答案ID") private String memberAnswerQuestionId; @ApiModelProperty(value = "答案解析") private String answerAnalysis; @ApiModelProperty(value = "题目ID") private String productQuestionId; @ApiModelProperty(value = "选项") private List<ApiMemberAnswerPreviousItemVo> answerList; } src/main/java/cc/mrbird/febs/ai/service/AiMemberAnswerItemService.java
@@ -2,7 +2,9 @@ import cc.mrbird.febs.ai.entity.AiMemberAnswerItem; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerPreviousDto; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerWrongPageDto; import cc.mrbird.febs.ai.res.memberAnswer.ApiMemberAnswerPreviousVo; import cc.mrbird.febs.common.entity.FebsResponse; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; @@ -16,4 +18,6 @@ Page<ApiMemberAnswerPreviousVo> getPageListByQuery(Page<ApiMemberAnswerPreviousVo> page, ApiMemberAnswerPreviousDto dto); FebsResponse wrongPage(ApiMemberAnswerWrongPageDto dto); } src/main/java/cc/mrbird/febs/ai/service/AiMemberAnswerService.java
@@ -1,10 +1,7 @@ package cc.mrbird.febs.ai.service; import cc.mrbird.febs.ai.entity.AiMemberAnswer; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerDto; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerInsureDto; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerPreviousDto; import cc.mrbird.febs.ai.req.memberAnswer.ApiQuestionAnswerDto; import cc.mrbird.febs.ai.req.memberAnswer.*; import cc.mrbird.febs.common.entity.FebsResponse; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; @@ -29,4 +26,6 @@ FebsResponse insure(ApiMemberAnswerInsureDto dto); FebsResponse previous(ApiMemberAnswerPreviousDto dto); FebsResponse wrongPage(ApiMemberAnswerWrongPageDto dto); } src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerItemServiceImpl.java
@@ -1,15 +1,31 @@ package cc.mrbird.febs.ai.service.impl; import cc.mrbird.febs.ai.entity.AiMemberAnswerItem; import cc.mrbird.febs.ai.entity.AiProductQuestionItem; import cc.mrbird.febs.ai.mapper.AiMemberAnswerItemMapper; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerPreviousDto; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerWrongPageDto; import cc.mrbird.febs.ai.res.memberAnswer.ApiMemberAnswerPreviousItemVo; import cc.mrbird.febs.ai.res.memberAnswer.ApiMemberAnswerPreviousVo; import cc.mrbird.febs.ai.res.memberAnswer.ApiMemberAnswerWrongVo; import cc.mrbird.febs.ai.res.product.ApiProductVo; import cc.mrbird.febs.ai.service.AiMemberAnswerItemService; import cc.mrbird.febs.ai.service.AiProductQuestionItemService; import cc.mrbird.febs.common.entity.FebsResponse; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** * AI用户答题记录子表 Service实现类 @@ -23,9 +39,50 @@ public class AiMemberAnswerItemServiceImpl extends ServiceImpl<AiMemberAnswerItemMapper, AiMemberAnswerItem> implements AiMemberAnswerItemService { private final AiMemberAnswerItemMapper aiMemberAnswerItemMapper; private final AiProductQuestionItemService aiProductQuestionItemService; @Override public Page<ApiMemberAnswerPreviousVo> getPageListByQuery(Page<ApiMemberAnswerPreviousVo> page, ApiMemberAnswerPreviousDto dto) { return aiMemberAnswerItemMapper.selectPageListByQuery(page, dto); } @Override public FebsResponse wrongPage(ApiMemberAnswerWrongPageDto dto) { // 创建分页对象,传入当前页和每页大小 Page<ApiMemberAnswerWrongVo> page = new Page<>(dto.getPageNow(), dto.getPageSize()); Page<ApiMemberAnswerWrongVo> pageListByQuery = aiMemberAnswerItemMapper.getWrongPageListByQuery(page, dto); List<ApiMemberAnswerWrongVo> records = pageListByQuery.getRecords(); if (CollUtil.isNotEmpty(records)){ Set<String> collect = records.stream().map(ApiMemberAnswerWrongVo::getProductQuestionId).collect(Collectors.toSet()); LambdaQueryWrapper<AiProductQuestionItem> questionItemQuery = Wrappers.lambdaQuery(AiProductQuestionItem.class); questionItemQuery.in(AiProductQuestionItem::getProductQuestionId,collect); List<AiProductQuestionItem> listByQuery = aiProductQuestionItemService.getListByQuery(questionItemQuery); if (CollUtil.isNotEmpty(listByQuery)){ //利用stream流,操作集合listByQuery,返回一个map对象,key为productQuestionId,value为List<AiProductQuestionItem>对象 Map<String, List<AiProductQuestionItem>> questionItemMap = listByQuery.stream().collect(Collectors.groupingBy(AiProductQuestionItem::getProductQuestionId)); for (ApiMemberAnswerWrongVo record : records){ String productQuestionId = record.getProductQuestionId(); List<AiProductQuestionItem> questionItemList = questionItemMap.get(productQuestionId); List<ApiMemberAnswerPreviousItemVo> answerList = new ArrayList<>(); if (CollUtil.isNotEmpty(questionItemList)){ for (AiProductQuestionItem questionItem : questionItemList){ ApiMemberAnswerPreviousItemVo itemVo = new ApiMemberAnswerPreviousItemVo(); itemVo.setId(questionItem.getId()); itemVo.setAnswer(questionItem.getAnswer()); itemVo.setAnswerAnalysis(questionItem.getAnswerAnalysis()); itemVo.setCorrectAnswer(questionItem.getCorrectAnswer()); answerList.add(itemVo); } } record.setAnswerList(answerList); } } } return new FebsResponse().success().data(pageListByQuery); } } src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java
@@ -2,10 +2,7 @@ import cc.mrbird.febs.ai.entity.*; import cc.mrbird.febs.ai.mapper.AiMemberAnswerMapper; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerDto; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerInsureDto; import cc.mrbird.febs.ai.req.memberAnswer.ApiMemberAnswerPreviousDto; import cc.mrbird.febs.ai.req.memberAnswer.ApiQuestionAnswerDto; import cc.mrbird.febs.ai.req.memberAnswer.*; import cc.mrbird.febs.ai.res.memberAnswer.*; import cc.mrbird.febs.ai.res.product.ApiProductVo; import cc.mrbird.febs.ai.res.productQuestionItem.ApiMemberAnswerItemVo; @@ -282,4 +279,13 @@ } return new FebsResponse().success().data(apiMemberAnswerPreviousVo); } @Override public FebsResponse wrongPage(ApiMemberAnswerWrongPageDto dto) { String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid(); dto.setMemberUuid(memberUuid); return aiMemberAnswerItemService.wrongPage(dto); } } src/main/resources/mapper/modules/AiMemberAnswerItemMapper.xml
@@ -15,4 +15,18 @@ a.answer_id = #{record.memberAnswerId} order by a.CREATED_TIME desc </select> <select id="getWrongPageListByQuery" resultType="cc.mrbird.febs.ai.res.memberAnswer.ApiMemberAnswerWrongVo"> select a.title as title, a.difficulty as difficulty, a.member_answer_question_id as memberAnswerQuestionId, a.answer_analysis as answerAnalysis, a.product_question_id as productQuestionId from ai_member_answer_item a where a.member_id = #{record.memberUuid} and a.is_collected = 1 order by a.CREATED_TIME desc </select> </mapper>