From 7d23b6be0f767bf6cd61dc2e7f298ca0e96edb0b Mon Sep 17 00:00:00 2001 From: ziin Date: Wed, 28 Jan 2026 20:53:47 +0800 Subject: [PATCH] =?UTF-8?q?fix(service):=20=E4=BB=85=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E6=B4=BB=E8=B7=83=E4=BC=9A=E8=AF=9D=E4=B8=AD=E7=9A=84=E8=81=8A?= =?UTF-8?q?=E5=A4=A9=E8=A7=92=E8=89=B2=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KeyboardAiChatMessageServiceImpl.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiChatMessageServiceImpl.java b/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiChatMessageServiceImpl.java index 258e99c..8c5dc51 100644 --- a/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiChatMessageServiceImpl.java +++ b/src/main/java/com/yolo/keyborad/service/impl/KeyboardAiChatMessageServiceImpl.java @@ -79,14 +79,31 @@ public class KeyboardAiChatMessageServiceImpl extends ServiceImpl getChattedCompanionIds(Long userId) { - // 使用原生SQL查询用户聊过天的所有角色ID,按最近聊天时间倒序 + // 1. 查询用户所有活跃会话 + LambdaQueryWrapper sessionWrapper = new LambdaQueryWrapper<>(); + sessionWrapper.eq(KeyboardAiChatSession::getUserId, userId) + .eq(KeyboardAiChatSession::getIsActive, true); + List activeSessions = sessionService.list(sessionWrapper); + + // 2. 如果没有活跃会话,返回空列表 + if (activeSessions == null || activeSessions.isEmpty()) { + return Collections.emptyList(); + } + + // 3. 提取活跃会话的 sessionId 列表 + List activeSessionIds = activeSessions.stream() + .map(KeyboardAiChatSession::getId) + .collect(java.util.stream.Collectors.toList()); + + // 4. 查询这些会话中的消息,获取 companionId,按最近聊天时间倒序 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(KeyboardAiChatMessage::getUserId, userId) - .select(KeyboardAiChatMessage::getCompanionId) - .groupBy(KeyboardAiChatMessage::getCompanionId) - .orderByDesc(KeyboardAiChatMessage::getCompanionId); + .in(KeyboardAiChatMessage::getSessionId, activeSessionIds) + .orderByDesc(KeyboardAiChatMessage::getCreatedAt); List messages = this.list(queryWrapper); + + // 5. 去重并保持顺序(按最近聊天时间) return messages.stream() .map(KeyboardAiChatMessage::getCompanionId) .distinct()