From de4559337b49fd140aff8a45377ee6ae173b654e Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 25 Aug 2025 16:19:46 +0800
Subject: [PATCH] feat(ai): 添加问答记录详情分页查询功能
---
src/main/java/cc/mrbird/febs/ai/req/talk/ApiTalkItemPageDto.java | 33 +++++++++++
src/main/resources/mapper/modules/AiTalkItemMapper.xml | 20 ++++++
src/main/java/cc/mrbird/febs/ai/res/talk/ApiTalkItemPageVo.java | 47 +++++++++++++++
src/main/java/cc/mrbird/febs/ai/service/impl/AiTalkItemServiceImpl.java | 15 +++++
src/main/java/cc/mrbird/febs/ai/controller/talk/ApiAiTalkController.java | 14 ++++
src/main/java/cc/mrbird/febs/ai/mapper/AiTalkItemMapper.java | 7 ++
src/main/java/cc/mrbird/febs/ai/service/impl/AiTalkServiceImpl.java | 8 ++
src/main/java/cc/mrbird/febs/ai/service/AiTalkItemService.java | 3 +
src/main/java/cc/mrbird/febs/ai/service/AiTalkService.java | 3 +
9 files changed, 149 insertions(+), 1 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/ai/controller/talk/ApiAiTalkController.java b/src/main/java/cc/mrbird/febs/ai/controller/talk/ApiAiTalkController.java
index a8d47bd..10d9e8a 100644
--- a/src/main/java/cc/mrbird/febs/ai/controller/talk/ApiAiTalkController.java
+++ b/src/main/java/cc/mrbird/febs/ai/controller/talk/ApiAiTalkController.java
@@ -4,10 +4,12 @@
import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkDto;
import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkItemPageDto;
import cc.mrbird.febs.ai.req.talk.ApiTalkDto;
+import cc.mrbird.febs.ai.req.talk.ApiTalkItemPageDto;
import cc.mrbird.febs.ai.req.talk.ApiTalkPageDto;
import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkItemVo;
import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkStreamVo;
import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkVo;
+import cc.mrbird.febs.ai.res.talk.ApiTalkItemPageVo;
import cc.mrbird.febs.ai.res.talk.ApiTalkPageVo;
import cc.mrbird.febs.ai.res.talk.ApiTalkVo;
import cc.mrbird.febs.ai.service.AiMemberTalkService;
@@ -46,7 +48,7 @@
return aiTalkService.talkOpen(dto);
}
- @ApiOperation(value = "用户AI问答记录分页查询", notes = "用户AI问答记录分页查询")
+ @ApiOperation(value = "问答记录分页查询", notes = "问答记录分页查询")
@ApiResponses({
@ApiResponse(code = 200, message = "success", response = ApiTalkPageVo.class)
})
@@ -56,6 +58,16 @@
return aiTalkService.talkList(dto);
}
+ @ApiOperation(value = "问答记录详情分页查询", notes = "问答记录详情分页查询")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = ApiTalkItemPageVo.class)
+ })
+ @PostMapping(value = "/historyPage")
+ public FebsResponse historyPage(@RequestBody @Validated ApiTalkItemPageDto dto) {
+
+ return aiTalkService.historyPage(dto);
+ }
+
@ApiOperation("提问AI(流式)")
@ApiResponses({
@ApiResponse(code = 200, message = "流式响应", response = ApiMemberTalkStreamVo.class),
diff --git a/src/main/java/cc/mrbird/febs/ai/mapper/AiTalkItemMapper.java b/src/main/java/cc/mrbird/febs/ai/mapper/AiTalkItemMapper.java
index 01533d2..7db45b4 100644
--- a/src/main/java/cc/mrbird/febs/ai/mapper/AiTalkItemMapper.java
+++ b/src/main/java/cc/mrbird/febs/ai/mapper/AiTalkItemMapper.java
@@ -1,7 +1,14 @@
package cc.mrbird.febs.ai.mapper;
import cc.mrbird.febs.ai.entity.AiTalkItem;
+import cc.mrbird.febs.ai.req.talk.ApiTalkItemPageDto;
+import cc.mrbird.febs.ai.res.talk.ApiTalkItemPageVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
public interface AiTalkItemMapper extends BaseMapper<AiTalkItem> {
+
+ Page<ApiTalkItemPageVo> getPageListByQuery(Page<ApiTalkItemPageVo> page, @Param("record")ApiTalkItemPageDto dto);
+
}
diff --git a/src/main/java/cc/mrbird/febs/ai/req/talk/ApiTalkItemPageDto.java b/src/main/java/cc/mrbird/febs/ai/req/talk/ApiTalkItemPageDto.java
new file mode 100644
index 0000000..3ee37a7
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/ai/req/talk/ApiTalkItemPageDto.java
@@ -0,0 +1,33 @@
+package cc.mrbird.febs.ai.req.talk;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author Administrator
+ */
+@Data
+@ApiModel(value = "ApiTalkItemPageDto", description = "参数")
+public class ApiTalkItemPageDto {
+
+ @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 talkId;
+
+ @ApiModelProperty(value = "消息ID")
+ private String talkItemId;
+
+ @ApiModelProperty(hidden = true)
+ private String memberUuid;
+}
diff --git a/src/main/java/cc/mrbird/febs/ai/res/talk/ApiTalkItemPageVo.java b/src/main/java/cc/mrbird/febs/ai/res/talk/ApiTalkItemPageVo.java
new file mode 100644
index 0000000..fa8ad5e
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/ai/res/talk/ApiTalkItemPageVo.java
@@ -0,0 +1,47 @@
+package cc.mrbird.febs.ai.res.talk;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author Administrator
+ */
+@Data
+@ApiModel(value = "ApiTalkItemPageVo", description = "参数")
+public class ApiTalkItemPageVo {
+ /**
+ * 用户对话ID (UUID)
+ */
+
+ @ApiModelProperty(value = "会话ID")
+ private String talkId;
+
+ /**
+ * 用户消息ID (UUID)
+ */
+
+ @ApiModelProperty(value = "消息ID")
+ private String talkItemId;
+
+ /**
+ * 类型 1-AI提问 2-用户回答 3-AI分析结果
+ */
+
+ @ApiModelProperty(value = "类型 1-用户提问 2-AI回答")
+ private Integer type;
+
+ /**
+ * 内容
+ */
+
+ @ApiModelProperty(value = "内容(文本格式)")
+ private String context;
+
+ @ApiModelProperty(value = "时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date createdTime;
+}
diff --git a/src/main/java/cc/mrbird/febs/ai/service/AiTalkItemService.java b/src/main/java/cc/mrbird/febs/ai/service/AiTalkItemService.java
index 229f2b6..3162531 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/AiTalkItemService.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/AiTalkItemService.java
@@ -1,6 +1,8 @@
package cc.mrbird.febs.ai.service;
import cc.mrbird.febs.ai.entity.AiTalkItem;
+import cc.mrbird.febs.ai.req.talk.ApiTalkItemPageDto;
+import cc.mrbird.febs.common.entity.FebsResponse;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -8,4 +10,5 @@
void add(String id, int code, String context, String memberUuid, DateTime date);
+ FebsResponse historyPage(ApiTalkItemPageDto dto);
}
diff --git a/src/main/java/cc/mrbird/febs/ai/service/AiTalkService.java b/src/main/java/cc/mrbird/febs/ai/service/AiTalkService.java
index d89047d..f6dc5f9 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/AiTalkService.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/AiTalkService.java
@@ -2,6 +2,7 @@
import cc.mrbird.febs.ai.entity.AiTalk;
import cc.mrbird.febs.ai.req.talk.ApiTalkDto;
+import cc.mrbird.febs.ai.req.talk.ApiTalkItemPageDto;
import cc.mrbird.febs.ai.req.talk.ApiTalkPageDto;
import cc.mrbird.febs.common.entity.FebsResponse;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -18,4 +19,6 @@
Flux<FebsResponse> answerStream(String question);
FebsResponse talkList(ApiTalkPageDto dto);
+
+ FebsResponse historyPage(ApiTalkItemPageDto dto);
}
diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiTalkItemServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiTalkItemServiceImpl.java
index 7a4a121..7197ab6 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiTalkItemServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiTalkItemServiceImpl.java
@@ -2,9 +2,14 @@
import cc.mrbird.febs.ai.entity.AiTalkItem;
import cc.mrbird.febs.ai.mapper.AiTalkItemMapper;
+import cc.mrbird.febs.ai.req.talk.ApiTalkItemPageDto;
+import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkItemVo;
+import cc.mrbird.febs.ai.res.talk.ApiTalkItemPageVo;
import cc.mrbird.febs.ai.service.AiTalkItemService;
import cc.mrbird.febs.ai.utils.UUID;
+import cc.mrbird.febs.common.entity.FebsResponse;
import cn.hutool.core.date.DateTime;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -14,6 +19,8 @@
@Service
@RequiredArgsConstructor
public class AiTalkItemServiceImpl extends ServiceImpl<AiTalkItemMapper, AiTalkItem> implements AiTalkItemService {
+
+ private final AiTalkItemMapper aiTalkItemMapper;
@Override
public void add(String id, int code, String context, String memberUuid, DateTime date) {
AiTalkItem aiTalkItem = new AiTalkItem();
@@ -25,4 +32,12 @@
aiTalkItem.setContext(context);
this.baseMapper.insert(aiTalkItem);
}
+
+ @Override
+ public FebsResponse historyPage(ApiTalkItemPageDto dto) {
+ // 创建分页对象,传入当前页和每页大小
+ Page<ApiTalkItemPageVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
+ Page<ApiTalkItemPageVo> pageListByQuery = aiTalkItemMapper.getPageListByQuery(page, dto);
+ return new FebsResponse().success().data(pageListByQuery);
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/ai/service/impl/AiTalkServiceImpl.java b/src/main/java/cc/mrbird/febs/ai/service/impl/AiTalkServiceImpl.java
index 9410135..539dbac 100644
--- a/src/main/java/cc/mrbird/febs/ai/service/impl/AiTalkServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/ai/service/impl/AiTalkServiceImpl.java
@@ -3,6 +3,7 @@
import cc.mrbird.febs.ai.entity.AiTalk;
import cc.mrbird.febs.ai.mapper.AiTalkMapper;
import cc.mrbird.febs.ai.req.talk.ApiTalkDto;
+import cc.mrbird.febs.ai.req.talk.ApiTalkItemPageDto;
import cc.mrbird.febs.ai.req.talk.ApiTalkPageDto;
import cc.mrbird.febs.ai.res.memberAnswer.ApiMemberProductWorkVo;
import cc.mrbird.febs.ai.res.talk.ApiTalkPageVo;
@@ -80,4 +81,11 @@
return new FebsResponse().success().data(pageListByQuery);
}
+ @Override
+ public FebsResponse historyPage(ApiTalkItemPageDto dto) {
+ String memberUuid = LoginUserUtil.getLoginUser().getMemberUuid();
+ dto.setMemberUuid(memberUuid);
+ return aiTalkItemService.historyPage(dto);
+ }
+
}
diff --git a/src/main/resources/mapper/modules/AiTalkItemMapper.xml b/src/main/resources/mapper/modules/AiTalkItemMapper.xml
index e6ad3c7..dcc9a23 100644
--- a/src/main/resources/mapper/modules/AiTalkItemMapper.xml
+++ b/src/main/resources/mapper/modules/AiTalkItemMapper.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.AiTalkItemMapper">
+
+ <select id="getPageListByQuery" resultType="cc.mrbird.febs.ai.res.talk.ApiTalkItemPageVo">
+ select
+ a.ID as talkItemId,
+ a.member_talk_id as talkId,
+ a.type as type,
+ a.context as context,
+ a.CREATED_TIME as createdTime
+ from ai_talk_item a
+ <where>
+ and a.member_id = #{record.memberUuid}
+ and a.talk_id = #{record.talkId}
+ <if test="record != null">
+ <if test="record.talkItemId != null">
+ and a.id < #{record.talkItemId}
+ </if>
+ </if>
+ </where>
+ order by a.CREATED_TIME desc
+ </select>
</mapper>
\ No newline at end of file
--
Gitblit v1.9.1