From 2be073dedb043f63700484fab18e4a0ffe1d5e09 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 13 Aug 2025 10:12:49 +0800
Subject: [PATCH] feat(ai): 添加对话记录分页查询功能
---
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkItemServiceImpl.java | 13 ++++
src/main/java/cc/mrbird/febs/ai/service/AiMemberTalkItemService.java | 4 +
src/main/java/cc/mrbird/febs/ai/res/memberTalk/ApiMemberTalkVo.java | 2
src/main/java/cc/mrbird/febs/ai/service/AiMemberTalkService.java | 3 +
src/main/java/cc/mrbird/febs/ai/res/ai/Report.java | 8 +-
src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkServiceImpl.java | 26 ++++++--
src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkController.java | 14 ++++
src/main/java/cc/mrbird/febs/ai/mapper/AiMemberTalkItemMapper.java | 5 +
src/main/java/cc/mrbird/febs/ai/req/memberTalk/ApiMemberTalkItemPageDto.java | 34 +++++++++++
src/main/resources/mapper/modules/AiMemberTalkItemMapper.xml | 20 ++++++
src/main/java/cc/mrbird/febs/ai/res/memberTalk/ApiMemberTalkItemVo.java | 43 ++++++++++++++
11 files changed, 160 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 ca256ba..a2d4df5 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
@@ -2,6 +2,8 @@
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.res.memberTalk.ApiMemberTalkItemVo;
import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkVo;
import cc.mrbird.febs.ai.service.AiMemberTalkService;
import cc.mrbird.febs.common.entity.FebsResponse;
@@ -15,7 +17,9 @@
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
+import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
+import java.util.List;
/**
* @author Administrator
@@ -52,6 +56,16 @@
return aiMemberTalkService.answer(dto);
}
+ @ApiOperation(value = "对话记录分页查询", notes = "对话记录分页查询")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = ApiMemberTalkItemVo.class)
+ })
+ @PostMapping(value = "/historyPage")
+ public FebsResponse historyPage(@RequestBody @Validated ApiMemberTalkItemPageDto dto) {
+
+ return aiMemberTalkService.historyPage(dto);
+ }
+
@PostMapping("/start-stream")
@ApiOperation("开始AI对话(流式)")
@ApiResponses({
diff --git a/src/main/java/cc/mrbird/febs/ai/mapper/AiMemberTalkItemMapper.java b/src/main/java/cc/mrbird/febs/ai/mapper/AiMemberTalkItemMapper.java
index e960267..44461f2 100644
--- a/src/main/java/cc/mrbird/febs/ai/mapper/AiMemberTalkItemMapper.java
+++ b/src/main/java/cc/mrbird/febs/ai/mapper/AiMemberTalkItemMapper.java
@@ -1,7 +1,11 @@
package cc.mrbird.febs.ai.mapper;
import cc.mrbird.febs.ai.entity.AiMemberTalkItem;
+import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkItemPageDto;
+import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkItemVo;
+import cc.mrbird.febs.ai.res.product.ApiProductVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* AI用户对话训练记录子表 Mapper接口
@@ -11,4 +15,5 @@
*/
public interface AiMemberTalkItemMapper extends BaseMapper<AiMemberTalkItem> {
+ Page<ApiMemberTalkItemVo> getPageListByQuery(Page<ApiMemberTalkItemVo> page, ApiMemberTalkItemPageDto dto);
}
diff --git a/src/main/java/cc/mrbird/febs/ai/req/memberTalk/ApiMemberTalkItemPageDto.java b/src/main/java/cc/mrbird/febs/ai/req/memberTalk/ApiMemberTalkItemPageDto.java
new file mode 100644
index 0000000..4d322d4
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/ai/req/memberTalk/ApiMemberTalkItemPageDto.java
@@ -0,0 +1,34 @@
+package cc.mrbird.febs.ai.req.memberTalk;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author Administrator
+ */
+@Data
+@ApiModel(value = "ApiMemberTalkDto", description = "参数")
+public class ApiMemberTalkItemPageDto {
+
+ @NotNull(message = "页码不能为空")
+ @ApiModelProperty(value = "页码", example = "1")
+ private Integer pageNow;
+
+ @NotNull(message = "每页数量不能为空")
+ @ApiModelProperty(value = "每页数量", example = "10")
+ private Integer pageSize;
+
+ @NotNull(message = "会话ID不能为空")
+ @ApiModelProperty(value = "会话ID", example = "1")
+ private String memberTalkId;
+
+ @ApiModelProperty(value = "消息ID")
+ private String memberTalkItemId;
+
+ @ApiModelProperty(hidden = true)
+ private String memberUuid;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/ai/res/ai/Report.java b/src/main/java/cc/mrbird/febs/ai/res/ai/Report.java
index f073ac1..2ce4d17 100644
--- a/src/main/java/cc/mrbird/febs/ai/res/ai/Report.java
+++ b/src/main/java/cc/mrbird/febs/ai/res/ai/Report.java
@@ -15,10 +15,10 @@
public class Report {
-
- @ApiModelProperty(value = "雷达图表数据")
- @JsonProperty("radar_data")
- private RadarData radarData;
+//
+// @ApiModelProperty(value = "雷达图表数据")
+// @JsonProperty("radar_data")
+// private RadarData radarData;
@ApiModelProperty(value = "雷达图表数据集合")
@JsonProperty("radar_data_items")
diff --git a/src/main/java/cc/mrbird/febs/ai/res/memberTalk/ApiMemberTalkItemVo.java b/src/main/java/cc/mrbird/febs/ai/res/memberTalk/ApiMemberTalkItemVo.java
new file mode 100644
index 0000000..2fa2d27
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/ai/res/memberTalk/ApiMemberTalkItemVo.java
@@ -0,0 +1,43 @@
+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 = "ApiMemberTalkItemVo", description = "参数")
+public class ApiMemberTalkItemVo {
+
+ /**
+ * 用户对话ID (UUID)
+ */
+
+ @ApiModelProperty(value = "会话ID")
+ private String memberTalkId;
+
+ /**
+ * 用户消息ID (UUID)
+ */
+
+ @ApiModelProperty(value = "消息ID")
+ private String memberTalkItemId;
+
+ /**
+ * 类型 1-AI提问 2-用户回答 3-AI分析结果
+ */
+
+ @ApiModelProperty(value = "类型 1-AI提问 2-用户回答 3-AI分析结果")
+ private Integer type;
+
+ /**
+ * 内容
+ */
+
+ @ApiModelProperty(value = "内容(文本格式)")
+ private String context;
+
+
+}
diff --git a/src/main/java/cc/mrbird/febs/ai/res/memberTalk/ApiMemberTalkVo.java b/src/main/java/cc/mrbird/febs/ai/res/memberTalk/ApiMemberTalkVo.java
index 7966519..7a46eb3 100644
--- a/src/main/java/cc/mrbird/febs/ai/res/memberTalk/ApiMemberTalkVo.java
+++ b/src/main/java/cc/mrbird/febs/ai/res/memberTalk/ApiMemberTalkVo.java
@@ -34,6 +34,6 @@
private String context;
@ApiModelProperty(value = "内容亮点、建议、参考答案、核心知识点雷达图表数据(数据对象)")
- private Report report;
+ private String report;
}
diff --git a/src/main/java/cc/mrbird/febs/ai/service/AiMemberTalkItemService.java b/src/main/java/cc/mrbird/febs/ai/service/AiMemberTalkItemService.java
index c3a151e..4da6a08 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/AiMemberTalkItemService.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/AiMemberTalkItemService.java
@@ -1,6 +1,8 @@
package cc.mrbird.febs.ai.service;
import cc.mrbird.febs.ai.entity.AiMemberTalkItem;
+import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkItemPageDto;
+import cc.mrbird.febs.common.entity.FebsResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -19,4 +21,6 @@
void add(String memberUuid, String id, int type, String resContext, Date createdTime);
AiMemberTalkItem getByQuery(LambdaQueryWrapper<AiMemberTalkItem> memberTalkItemQuery);
+
+ FebsResponse historyPage(ApiMemberTalkItemPageDto dto);
}
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 f533640..1d1502a 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/AiMemberTalkService.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/AiMemberTalkService.java
@@ -3,6 +3,7 @@
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.res.ai.AiResponse;
import cc.mrbird.febs.common.entity.FebsResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -33,4 +34,6 @@
FebsResponse answer(ApiMemberTalkAnswerDto dto);
AiMemberTalk add(String memberUuid, String productId, Date nowTime);
+
+ FebsResponse historyPage(ApiMemberTalkItemPageDto dto);
}
diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkItemServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkItemServiceImpl.java
index c3dc6d5..0b4a3a0 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkItemServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiMemberTalkItemServiceImpl.java
@@ -2,9 +2,14 @@
import cc.mrbird.febs.ai.entity.AiMemberTalkItem;
import cc.mrbird.febs.ai.mapper.AiMemberTalkItemMapper;
+import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkItemPageDto;
+import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkItemVo;
+import cc.mrbird.febs.ai.res.product.ApiProductVo;
import cc.mrbird.febs.ai.service.AiMemberTalkItemService;
import cc.mrbird.febs.ai.utils.UUID;
+import cc.mrbird.febs.common.entity.FebsResponse;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -44,4 +49,12 @@
public AiMemberTalkItem getByQuery(LambdaQueryWrapper<AiMemberTalkItem> memberTalkItemQuery) {
return aiMemberTalkItemMapper.selectOne(memberTalkItemQuery);
}
+
+ @Override
+ public FebsResponse historyPage(ApiMemberTalkItemPageDto dto) {
+ // 创建分页对象,传入当前页和每页大小
+ Page<ApiMemberTalkItemVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
+ Page<ApiMemberTalkItemVo> pageListByQuery = aiMemberTalkItemMapper.getPageListByQuery(page, dto);
+ return new FebsResponse().success().data(pageListByQuery);
+ }
}
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 db3d4ba..96ceed5 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,8 +7,11 @@
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.res.ai.AiResponse;
+import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkItemVo;
import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkVo;
+import cc.mrbird.febs.ai.res.product.ApiProductVo;
import cc.mrbird.febs.ai.service.AiMemberTalkItemService;
import cc.mrbird.febs.ai.service.AiMemberTalkService;
import cc.mrbird.febs.ai.service.AiProductRoleLinkService;
@@ -19,8 +22,10 @@
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
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;
@@ -86,8 +91,6 @@
apiMemberTalkVo.setMemberTalkId(aiMemberTalk.getId());
apiMemberTalkVo.setType(1);
apiMemberTalkVo.setContext(aiResponse.getResContext());
- apiMemberTalkVo.setReport(aiResponse.getReport());
-
return new FebsResponse().success().data(apiMemberTalkVo);
}
@@ -207,11 +210,13 @@
String format = StrUtil.format(ANSWER_FORMAT, aiMemberTalkItem.getContext(), reqContext);
log.info("format:{}",format);
- AiResponse aiResponse = aiService.start(aiProductRoleLink.getProductRoleId(), format);
-// AiResponse aiResponse = aiService.start(aiProductRoleLink.getProductRoleId(), reqContext);
+// AiResponse aiResponse = aiService.start(aiProductRoleLink.getProductRoleId(), format);
+ AiResponse aiResponse = aiService.start(aiProductRoleLink.getProductRoleId(), reqContext);
+ String context = null;
if(aiResponse.getCode().equals("200")){
Date nowTime = new Date();
- aiMemberTalkItemService.add(memberUuid,aiMemberTalk.getId(),3,aiResponse.getResContext(),nowTime);
+ context = String.valueOf(JSONUtil.parse(aiResponse.getReport()));
+ aiMemberTalkItemService.add(memberUuid,aiMemberTalk.getId(),3, context,nowTime);
this.updateTimeUpdate(nowTime,aiMemberTalk.getId());
}else{
throw new FebsException(aiResponse.getDescription());
@@ -219,8 +224,7 @@
ApiMemberTalkVo apiMemberTalkVo = new ApiMemberTalkVo();
apiMemberTalkVo.setMemberTalkId(aiMemberTalk.getId());
apiMemberTalkVo.setType(3);
- apiMemberTalkVo.setContext(aiResponse.getResContext());
- apiMemberTalkVo.setReport(aiResponse.getReport());
+ apiMemberTalkVo.setContext(context);
return new FebsResponse().success().data(apiMemberTalkVo);
}
@Override
@@ -233,4 +237,12 @@
aiMemberTalkMapper.insert(aiMemberTalk);
return aiMemberTalk;
}
+
+ @Override
+ public FebsResponse historyPage(ApiMemberTalkItemPageDto dto) {
+
+ String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid();
+ dto.setMemberUuid(memberUuid);
+ return aiMemberTalkItemService.historyPage(dto);
+ }
}
diff --git a/src/main/resources/mapper/modules/AiMemberTalkItemMapper.xml b/src/main/resources/mapper/modules/AiMemberTalkItemMapper.xml
index d171a0d..fa5ca59 100644
--- a/src/main/resources/mapper/modules/AiMemberTalkItemMapper.xml
+++ b/src/main/resources/mapper/modules/AiMemberTalkItemMapper.xml
@@ -1,4 +1,24 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cc.mrbird.febs.ai.mapper.AiMemberTalkItemMapper">
+
+
+ <select id="getPageListByQuery" resultType="cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkItemVo">
+ select
+ a.ID as memberTalkItemId,
+ a.member_talk_id as memberTalkId,
+ a.type as type,
+ a.context as context
+ from ai_member_talk_item a
+ <where>
+ and a.member_id = #{record.memberUuid}
+ and a.member_talk_id = #{record.memberTalkId}
+ <if test="record != null">
+ <if test="record.memberTalkItemId != null">
+ and a.id < #{record.memberTalkItemId}
+ </if>
+ </if>
+ </where>
+ order by a.CREATED_TIME desc
+ </select>
</mapper>
\ No newline at end of file
--
Gitblit v1.9.1