From de8b3cf7a9b22be7abcb544a53dcea7f1b340760 Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Wed, 20 Aug 2025 17:23:14 +0800 Subject: [PATCH] feat(ai): 新增开始答题V2 接口 --- src/main/java/cc/mrbird/febs/ai/res/memberAnswer/ApiMemberAnswerVoV2.java | 16 ++++++++ src/main/java/cc/mrbird/febs/ai/service/AiMemberAnswerService.java | 2 + src/main/resources/mapper/modules/AiMemberAnswerItemMapper.xml | 1 src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java | 70 +++++++++++++++++++++++++++++++++++ src/main/java/cc/mrbird/febs/ai/controller/memberAnswer/ApiMemberAnswerController.java | 10 +++++ src/main/java/cc/mrbird/febs/ai/entity/AiMemberAnswerItem.java | 5 ++ 6 files changed, 103 insertions(+), 1 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/ai/controller/memberAnswer/ApiMemberAnswerController.java b/src/main/java/cc/mrbird/febs/ai/controller/memberAnswer/ApiMemberAnswerController.java index 99dd2db..e3c6dec 100644 --- a/src/main/java/cc/mrbird/febs/ai/controller/memberAnswer/ApiMemberAnswerController.java +++ b/src/main/java/cc/mrbird/febs/ai/controller/memberAnswer/ApiMemberAnswerController.java @@ -33,6 +33,16 @@ private final AiMemberAnswerService apiMemberAnswerService; + @ApiOperation(value = "开始答题V2", notes = "开始答题V2") + @ApiResponses({ + @ApiResponse(code = 200, message = "success", response = ApiMemberAnswerVoV2.class) + }) + @PostMapping(value = "/startV2") + public FebsResponse startV2(@RequestBody @Validated ApiMemberAnswerDto dto) { + + return apiMemberAnswerService.startAnswerV2(dto); + } + @ApiOperation(value = "开始答题", notes = "开始答题") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = ApiMemberAnswerVo.class) diff --git a/src/main/java/cc/mrbird/febs/ai/entity/AiMemberAnswerItem.java b/src/main/java/cc/mrbird/febs/ai/entity/AiMemberAnswerItem.java index e040fa6..f90fea1 100644 --- a/src/main/java/cc/mrbird/febs/ai/entity/AiMemberAnswerItem.java +++ b/src/main/java/cc/mrbird/febs/ai/entity/AiMemberAnswerItem.java @@ -83,4 +83,9 @@ * 是否加入错题集:0-否,1-是 */ private Integer isCollected; + + /** + * 排序 + */ + private Integer sort; } diff --git a/src/main/java/cc/mrbird/febs/ai/res/memberAnswer/ApiMemberAnswerVoV2.java b/src/main/java/cc/mrbird/febs/ai/res/memberAnswer/ApiMemberAnswerVoV2.java new file mode 100644 index 0000000..83f7165 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/ai/res/memberAnswer/ApiMemberAnswerVoV2.java @@ -0,0 +1,16 @@ +package cc.mrbird.febs.ai.res.memberAnswer; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author Administrator + */ +@Data +@ApiModel(value = "ApiMemberAnswerVoV2", description = "参数") +public class ApiMemberAnswerVoV2 { + + @ApiModelProperty(value = "当前页") + private Integer current; +} diff --git a/src/main/java/cc/mrbird/febs/ai/service/AiMemberAnswerService.java b/src/main/java/cc/mrbird/febs/ai/service/AiMemberAnswerService.java index 6fac5df..bf48a10 100644 --- a/src/main/java/cc/mrbird/febs/ai/service/AiMemberAnswerService.java +++ b/src/main/java/cc/mrbird/febs/ai/service/AiMemberAnswerService.java @@ -17,6 +17,8 @@ AiMemberAnswer getOneByQuery(LambdaQueryWrapper<AiMemberAnswer> aiMemberAnswerLambdaQueryWrapper); + FebsResponse startAnswerV2(ApiMemberAnswerDto dto); + FebsResponse startAnswer(ApiMemberAnswerDto dto); boolean checkMemberAnswerDone(AiMemberAnswer aiMemberAnswer); diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java index 44a88fd..a13c68e 100644 --- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberAnswerServiceImpl.java @@ -53,6 +53,76 @@ return aiMemberAnswerMapper.selectOne(aiMemberAnswerLambdaQueryWrapper); } + @Override + public FebsResponse startAnswerV2(ApiMemberAnswerDto dto) { + String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid(); + ApiMemberAnswerVoV2 apiMemberAnswerVoV2 = new ApiMemberAnswerVoV2(); + Integer current = 1; + + String productId = dto.getId(); + AiProduct aiProduct = aiProductService.getById(productId); + if(ObjectUtil.isNull(aiProduct)){ + throw new RuntimeException("产品不存在"); + } + //验证产品分类下是否有题目 + String productCategoryId = aiProduct.getProductCategoryId(); + LambdaQueryWrapper<AiProductQuestion> questionLambdaQueryWrapper = Wrappers.lambdaQuery(AiProductQuestion.class); + questionLambdaQueryWrapper.eq(AiProductQuestion::getProductCategoryId,productCategoryId); + questionLambdaQueryWrapper.eq(AiProductQuestion::getState,1); + questionLambdaQueryWrapper.last("limit 1"); + List<AiProductQuestion> aiProductQuestions = aiProductQuestionService.getListByQuery(questionLambdaQueryWrapper); + if(CollUtil.isEmpty(aiProductQuestions)){ + // todo 没有题目采用AI生成题目 + throw new RuntimeException("产品没有题目"); + } + //判断该产品是否有正在进行的练习 + Date createdTime = new Date(); + LambdaQueryWrapper<AiMemberAnswer> aiMemberAnswerLambdaQueryWrapper = Wrappers.lambdaQuery(AiMemberAnswer.class); + aiMemberAnswerLambdaQueryWrapper.eq(AiMemberAnswer::getMemberId,memberUuid); + aiMemberAnswerLambdaQueryWrapper.eq(AiMemberAnswer::getProductId,aiProduct.getId()); + aiMemberAnswerLambdaQueryWrapper.eq(AiMemberAnswer::getState,0); + AiMemberAnswer aiMemberAnswer = this.getOneByQuery(aiMemberAnswerLambdaQueryWrapper); + if(ObjectUtil.isNull(aiMemberAnswer)){ + Integer questionCount = aiProduct.getQuestionCount(); + aiMemberAnswer = new AiMemberAnswer(); + aiMemberAnswer.setId(UUID.getSimpleUUIDString()); + aiMemberAnswer.setCreatedTime(createdTime); + aiMemberAnswer.setUpdatedTime(createdTime); + aiMemberAnswer.setProductId(aiProduct.getId()); + aiMemberAnswer.setMemberId(memberUuid); + aiMemberAnswer.setState(0); + aiMemberAnswer.setScore(0); + aiMemberAnswer.setQuestionCnt(questionCount); + aiMemberAnswer.setDoneCnt(0); + aiMemberAnswer.setCorrectCnt(0); + aiMemberAnswerMapper.insert(aiMemberAnswer); + List<AiMemberAnswerItem> aiMemberAnswerItems = new ArrayList<>(); + for (int i = 1; i <= questionCount; i++){ + //初始化答题记录 + AiProductQuestion aiProductQuestion = aiProductQuestionService.createQuestion(aiProduct.getId()); + AiMemberAnswerItem aiMemberAnswerItem = new AiMemberAnswerItem(); + aiMemberAnswerItem.setId(UUID.getSimpleUUIDString()); + aiMemberAnswerItem.setCreatedTime(createdTime); + aiMemberAnswerItem.setAnswerId(aiMemberAnswer.getId()); + aiMemberAnswerItem.setProductId(aiMemberAnswer.getProductId()); + aiMemberAnswerItem.setMemberId(memberUuid); + aiMemberAnswerItem.setProductQuestionId(aiProductQuestion.getId()); + aiMemberAnswerItem.setTitle(aiProductQuestion.getTitle()); + aiMemberAnswerItem.setDifficulty(aiProductQuestion.getDifficulty()); + aiMemberAnswerItem.setMemberAnswerState(0); + aiMemberAnswerItem.setSort( i ); + aiMemberAnswerItems.add(aiMemberAnswerItem); + } + aiMemberAnswerItemService.saveBatch(aiMemberAnswerItems); + current = 1; + }else{ + current = aiMemberAnswer.getDoneCnt(); + } + apiMemberAnswerVoV2.setCurrent(current); + + return new FebsResponse().success().data(apiMemberAnswerVoV2); + } + @Override public FebsResponse startAnswer(ApiMemberAnswerDto dto) { diff --git a/src/main/resources/mapper/modules/AiMemberAnswerItemMapper.xml b/src/main/resources/mapper/modules/AiMemberAnswerItemMapper.xml index b963691..1c01379 100644 --- a/src/main/resources/mapper/modules/AiMemberAnswerItemMapper.xml +++ b/src/main/resources/mapper/modules/AiMemberAnswerItemMapper.xml @@ -13,7 +13,6 @@ from ai_member_answer_item a where a.answer_id = #{record.memberAnswerId} - and a.member_answer_state != 0 order by a.CREATED_TIME desc </select> -- Gitblit v1.9.1