From 83b6ee65a7d3c1f37d8ec896902b5189132d59c7 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 27 Aug 2025 15:00:38 +0800
Subject: [PATCH] feat(ai): 添加再练一次(重新回答)功能

---
 src/main/java/cc/mrbird/febs/ai/req/memberTalk/ApiMemberTalkReloadDto.java         |   22 +++++++++++
 src/main/java/cc/mrbird/febs/ai/service/AiMemberTalkService.java                   |    7 +--
 src/main/java/cc/mrbird/febs/ai/res/memberTalk/ApiMemberTalkReloadVo.java          |   37 ++++++++++++++++++
 src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkServiceImpl.java          |   25 ++++++++++--
 src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkController.java |   17 ++++++--
 5 files changed, 96 insertions(+), 12 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkController.java b/src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkController.java
index 80348df..48488d4 100644
--- a/src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkController.java
+++ b/src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkController.java
@@ -1,10 +1,8 @@
 package cc.mrbird.febs.ai.controller.memberTalk;
 
-import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkAnswerDto;
-import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkDto;
-import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkItemPageDto;
-import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkStreamDto;
+import cc.mrbird.febs.ai.req.memberTalk.*;
 import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkItemVo;
+import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkReloadVo;
 import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkStreamVo;
 import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkVo;
 import cc.mrbird.febs.ai.service.AiMemberTalkService;
@@ -46,6 +44,17 @@
     }
 
 
+    @ApiOperation(value = "再练一次(重新回答)", notes = "再练一次(重新回答)")
+    @ApiResponses({
+            @ApiResponse(code = 200, message = "success", response = ApiMemberTalkReloadVo.class)
+    })
+    @PostMapping(value = "/reload")
+    public FebsResponse reload(@RequestBody @Validated ApiMemberTalkReloadDto dto) {
+
+        return aiMemberTalkService.reload(dto);
+    }
+
+
     @ApiOperation(value = "回答", notes = "回答")
     @ApiResponses({
             @ApiResponse(code = 200, message = "success", response = ApiMemberTalkVo.class)
diff --git a/src/main/java/cc/mrbird/febs/ai/req/memberTalk/ApiMemberTalkReloadDto.java b/src/main/java/cc/mrbird/febs/ai/req/memberTalk/ApiMemberTalkReloadDto.java
new file mode 100644
index 0000000..0a062b4
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/ai/req/memberTalk/ApiMemberTalkReloadDto.java
@@ -0,0 +1,22 @@
+package cc.mrbird.febs.ai.req.memberTalk;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @author Administrator
+ */
+@Data
+@ApiModel(value = "ApiMemberTalkReloadDto", description = "参数")
+public class ApiMemberTalkReloadDto {
+
+    /**
+     * 用户对话ID (UUID)
+     */
+    @NotBlank(message = "会话ID不能为空")
+    @ApiModelProperty(value = "会话ID", example = "10")
+    private String memberTalkId;
+}
diff --git a/src/main/java/cc/mrbird/febs/ai/res/memberTalk/ApiMemberTalkReloadVo.java b/src/main/java/cc/mrbird/febs/ai/res/memberTalk/ApiMemberTalkReloadVo.java
new file mode 100644
index 0000000..b36713f
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/ai/res/memberTalk/ApiMemberTalkReloadVo.java
@@ -0,0 +1,37 @@
+package cc.mrbird.febs.ai.res.memberTalk;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author Administrator
+ */
+@Data
+@ApiModel(value = "ApiMemberTalkReloadVo", description = "参数")
+public class ApiMemberTalkReloadVo {
+
+    /**
+     * 用户对话ID (UUID)
+     */
+
+    @ApiModelProperty(value = "会话ID")
+    private String memberTalkId;
+
+    /**
+     * 类型 1-AI提问 2-用户回答 3-AI分析结果
+     */
+
+    @ApiModelProperty(value = "类型 1-AI提问 2-用户回答 3-AI分析结果")
+    private Integer type;
+
+    /**
+     * 内容
+     */
+
+    @ApiModelProperty(value = "内容(文本格式)")
+    private String context;
+
+    @ApiModelProperty(value = "内容亮点、建议、参考答案、核心知识点雷达图表数据(数据对象)")
+    private String report;
+}
diff --git a/src/main/java/cc/mrbird/febs/ai/service/AiMemberTalkService.java b/src/main/java/cc/mrbird/febs/ai/service/AiMemberTalkService.java
index c985823..4b51641 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/AiMemberTalkService.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/AiMemberTalkService.java
@@ -1,10 +1,7 @@
 package cc.mrbird.febs.ai.service;
 
 import cc.mrbird.febs.ai.entity.AiMemberTalk;
-import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkAnswerDto;
-import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkDto;
-import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkItemPageDto;
-import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkStreamDto;
+import cc.mrbird.febs.ai.req.memberTalk.*;
 import cc.mrbird.febs.ai.res.ai.AiResponse;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -27,6 +24,8 @@
 
     FebsResponse start(ApiMemberTalkDto dto);
 
+    FebsResponse reload(ApiMemberTalkReloadDto dto);
+
     void startStream(ApiMemberTalkDto dto, Consumer<AiResponse> callback);
 
     AiMemberTalk getByQuery(LambdaQueryWrapper<AiMemberTalk> query);
diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkServiceImpl.java
index 05791c7..b921f93 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkServiceImpl.java
@@ -7,11 +7,9 @@
 import cc.mrbird.febs.ai.mapper.AiMemberTalkMapper;
 import cc.mrbird.febs.ai.req.ai.AiMessage;
 import cc.mrbird.febs.ai.req.ai.AiRequest;
-import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkAnswerDto;
-import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkDto;
-import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkItemPageDto;
-import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkStreamDto;
+import cc.mrbird.febs.ai.req.memberTalk.*;
 import cc.mrbird.febs.ai.res.ai.AiResponse;
+import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkReloadVo;
 import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkVo;
 import cc.mrbird.febs.ai.service.AiMemberTalkItemService;
 import cc.mrbird.febs.ai.service.AiMemberTalkService;
@@ -101,6 +99,25 @@
     }
 
     @Override
+    public FebsResponse reload(ApiMemberTalkReloadDto dto) {
+
+        String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid();
+        ApiMemberTalkReloadVo apiMemberTalkReloadVo = new ApiMemberTalkReloadVo();
+        String memberTalkId = dto.getMemberTalkId();
+        LambdaQueryWrapper<AiMemberTalkItem> queryWrapper = Wrappers.lambdaQuery(AiMemberTalkItem.class);
+        queryWrapper.eq(AiMemberTalkItem::getMemberTalkId,memberTalkId);
+        queryWrapper.eq(AiMemberTalkItem::getType,AiTypeEnum.QUESTION_ANSWER.getCode());
+        queryWrapper.orderByDesc(AiMemberTalkItem::getCreatedTime);
+        AiMemberTalkItem byQuery = aiMemberTalkItemService.getByQuery(queryWrapper);
+        if (ObjectUtil.isNotNull(byQuery)){
+            apiMemberTalkReloadVo.setContext(byQuery.getContext());
+            apiMemberTalkReloadVo.setMemberTalkId(memberTalkId);
+            apiMemberTalkReloadVo.setType(AiTypeEnum.QUESTION_ANSWER.getCode());
+        }
+        return new FebsResponse().success().data(apiMemberTalkReloadVo);
+    }
+
+    @Override
     public void startStream(ApiMemberTalkDto dto, Consumer<AiResponse> callback) {
         try {
             String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid();

--
Gitblit v1.9.1