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