From 668a99ef2b6fd3c69dca811455de011525e492c1 Mon Sep 17 00:00:00 2001 From: Wang Yue Sheng <743517231@qq.com> Date: Sun, 3 May 2026 17:04:27 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=E4=BC=98=E5=8C=96=E8=81=8A=E5=A4=A9?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=9C=8D=E5=8A=A1=EF=BC=8C=E5=8E=BB=E9=99=A4?= =?UTF-8?q?=E6=97=A0=E7=94=A8=E5=BC=95=E7=94=A8=E5=B9=B6=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=A9=BA=E6=8C=87=E9=92=88=E5=88=A4=E6=96=AD=E5=92=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=BB=98=E8=AE=A4=E6=8E=92=E5=BA=8F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/ruoyi/service/chat/impl/ChatMessageServiceImpl.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatMessageServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatMessageServiceImpl.java index 8af56a81d..d4bfa158f 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatMessageServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatMessageServiceImpl.java @@ -74,8 +74,11 @@ public List queryList(ChatMessageBo bo) { } private LambdaQueryWrapper buildQueryWrapper(ChatMessageBo bo) { - Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + if (bo == null) { + return lqw.orderByAsc(ChatMessage::getId); + } + lqw.orderByAsc(ChatMessage::getId); lqw.eq(bo.getSessionId() != null, ChatMessage::getSessionId, bo.getSessionId()); lqw.eq(bo.getUserId() != null, ChatMessage::getUserId, bo.getUserId()); From b378a337f6d8c6f79b79674dfefdfd006a0b47ed Mon Sep 17 00:00:00 2001 From: Wang Yue Sheng <743517231@qq.com> Date: Mon, 4 May 2026 10:18:43 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix(chat):=20=E4=BC=98=E5=8C=96=E4=BC=9A?= =?UTF-8?q?=E8=AF=9D=E6=B6=88=E6=81=AF=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=BC=BA=E7=A9=BA=E5=80=BC=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E4=B8=8E=E5=AE=B9=E9=94=99=E8=83=BD=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chat/impl/ChatMessageServiceImpl.java | 42 ++++++++++++++++--- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatMessageServiceImpl.java b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatMessageServiceImpl.java index d4bfa158f..366b06a3b 100644 --- a/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatMessageServiceImpl.java +++ b/ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/service/chat/impl/ChatMessageServiceImpl.java @@ -17,10 +17,10 @@ import org.ruoyi.service.chat.IChatMessageService; import org.springframework.stereotype.Service; import org.ruoyi.mapper.chat.ChatMessageMapper; +import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Collection; /** @@ -158,12 +158,34 @@ public List getMessagesBySessionId(Lon ChatMessageBo bo = new ChatMessageBo(); bo.setSessionId(sessionId); List voList = queryList(bo); - + if (CollectionUtils.isEmpty(voList)) { + return chatMessageList; + } for (ChatMessageVo chatMessageVo : voList) { - switch (chatMessageVo.getRole()) { - case "user" -> chatMessageList.add(UserMessage.from(chatMessageVo.getContent())); - case "assistant" -> chatMessageList.add(AiMessage.from(chatMessageVo.getContent())); + //过滤掉不合法的消息记录,避免对话历史中出现异常数据导致模型调用失败 + if (chatMessageVo == null + || StringUtils.isBlank(chatMessageVo.getRole()) + || StringUtils.isBlank(chatMessageVo.getContent())) { + continue; } + //角色类型不区分大小写,统一转换为小写进行处理 + String role = chatMessageVo.getRole().trim().toLowerCase(java.util.Locale.ROOT); + switch (role) { + case "user" -> + chatMessageList.add( + UserMessage.from(chatMessageVo.getContent().trim()) + ); + + case "assistant" -> + chatMessageList.add( + AiMessage.from(chatMessageVo.getContent().trim()) + ); + + default -> + log.warn("Unknown chat role when loading history, sessionId={}, role={}", + sessionId, role); + } + } return chatMessageList; } @@ -185,7 +207,11 @@ public Boolean deleteBySessionId(Long sessionId) { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(ChatMessage::getSessionId, sessionId); - return baseMapper.delete(lqw) > 0; + + int rows = baseMapper.delete(lqw); + // rows=0 表示无匹配数据,不视为失败 + log.debug("delete chat history finished, sessionId={}, rows={}", sessionId, rows); + return true; } /** @@ -204,6 +230,10 @@ public void saveChatMessage(Long userId, Long sessionId, String content, String log.warn("缺少用户ID,无法保存消息"); return; } + if (StringUtils.isBlank(content)) { + log.warn("消息内容为空,跳过保存"); + return; + } ChatMessageBo messageBo = new ChatMessageBo(); messageBo.setUserId(userId);