From 513e5442723f501525bf9ca6210b16561e5d3a2b Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Tue, 24 Mar 2026 11:41:07 +0800
Subject: [PATCH] 1

---
 trading-order-service/src/main/java/com/yami/trading/service/chat/online/OnlineChatMessageServiceImpl.java |   21 +++++++++++++++++----
 trading-order-admin/src/main/java/com/yami/trading/admin/controller/chat/NewAdminOnlineChatController.java |   16 ++++++++++++++++
 2 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/chat/NewAdminOnlineChatController.java b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/chat/NewAdminOnlineChatController.java
index c6f40cb..8457470 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/admin/controller/chat/NewAdminOnlineChatController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/admin/controller/chat/NewAdminOnlineChatController.java
@@ -1,6 +1,8 @@
 package com.yami.trading.admin.controller.chat;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.yami.trading.bean.chat.domain.MessageUser;
 import com.yami.trading.bean.chat.domain.OnlineChatMessage;
 import com.yami.trading.bean.model.Customer;
@@ -10,6 +12,7 @@
 import com.yami.trading.common.util.DateUtils;
 import com.yami.trading.common.util.StringUtils;
 import com.yami.trading.common.web.ResultObject;
+import com.yami.trading.dao.chat.OnlinechatMessageMapper;
 import com.yami.trading.security.common.util.SecurityUtils;
 import com.yami.trading.service.AwsS3OSSFileService;
 import com.yami.trading.service.chat.online.OnlineChatMessageService;
@@ -46,6 +49,9 @@
 
     @Autowired
     AwsS3OSSFileService awsS3OSSFileService;
+
+    @Autowired
+    OnlinechatMessageMapper onlinechatMessageMapper;
 
     /**
      * 在线聊天-人员列表
@@ -165,6 +171,16 @@
                         onlineChatVisitorMessageService.updateUnread(partyid, "customer", "read");
                     }
                 } else {
+                    // 修复:缓存空时,直接查询数据库兜底
+                    if (CollectionUtils.isEmpty(list)) {
+                        QueryWrapper<OnlineChatMessage> wrapper = new QueryWrapper<>();
+                        wrapper.eq("party_id", partyid)
+                                .orderByDesc("create_time")
+                                .last("limit 30");
+                        list = onlinechatMessageMapper.selectList(wrapper);
+                        onlineChatMessageService.putMessage(partyid, list);
+                    }
+
                     if (cacheMessageUser != null && cacheMessageUser.getCustomerUnreadmsg() > 0) {
                         onlineChatMessageService.updateUnread(partyid, "customer", "read");
                     }
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/chat/online/OnlineChatMessageServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/chat/online/OnlineChatMessageServiceImpl.java
index e073409..2dc9017 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/chat/online/OnlineChatMessageServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/chat/online/OnlineChatMessageServiceImpl.java
@@ -95,7 +95,7 @@
             });
         }
 
-        int start = cacheIndex(messageId, result);
+        /*int start = cacheIndex(messageId, result);
 //		start = start == 0 ? start : start + 1;// 空消息则表示首页,消息索引的后一条为起始
         int end = start + pageSize;
 
@@ -107,7 +107,14 @@
 
         List<OnlineChatMessage> list = result.subList(start, end);
 
-        return list;
+        return list;*/
+
+        // 4. 计算分页起始位置
+        int start = cacheIndex(messageId, result);
+        int end = Math.min(start + pageSize, result.size());
+
+        // 5. 安全截取
+        return start >= end ? new LinkedList<>() : result.subList(start, end);
     }
 
     /**
@@ -127,10 +134,16 @@
                 index = i;
             }
         }
-        if (index == -1) {
+        /*if (index == -1) {
             throw new BusinessException("参数异常,消息获取失败");
         }
-        return index + 1;
+        return index + 1;*/
+        // 修复1:没找到消息,返回0(首页),不抛异常
+        if (index == -1) {
+            return 0;
+        }
+        // 修复2:最后一条消息,返回列表长度,不越界
+        return Math.min(index + 1, list.size());
     }
 
     @Override

--
Gitblit v1.9.3