From 9067a11e18165a2ef843a8360c486cf88db258fd Mon Sep 17 00:00:00 2001 From: xsx <825657193@qq.com> Date: Thu, 12 Feb 2026 17:54:09 +0800 Subject: [PATCH 1/2] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E6=96=B0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=97=A0=E6=B3=95=E6=8B=89=E5=8F=96=E5=88=B0=E8=A2=AB?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E7=BE=A4=E7=9A=84=E6=B6=88=E6=81=AF=202.h5?= =?UTF-8?q?=E5=92=8C=E5=B0=8F=E7=A8=8B=E5=BA=8F=E5=9C=A8storage=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E4=B8=8D=E8=B6=B3=E6=97=B6=EF=BC=8C=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E6=B8=85=E9=99=A4=E5=85=B6=E4=BB=96=E7=94=A8=E6=88=B7=E7=9A=84?= =?UTF-8?q?=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/GroupMessageServiceImpl.java | 22 ++++++------- im-uniapp/store/chatStore.js | 31 ++++++++++++++++--- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java index 0dde1fe..5ea3e1f 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java @@ -145,22 +145,22 @@ public class GroupMessageServiceImpl extends ServiceImpl loadOffineMessage(Long minId) { UserSession session = SessionContext.getSession(); + List messages = new ArrayList<>(); // 查询用户加入的群组 List members = groupMemberService.findByUserId(session.getUserId()); Map groupMemberMap = CollStreamUtil.toIdentityMap(members, GroupMember::getGroupId); Set groupIds = groupMemberMap.keySet(); - if (groupIds.isEmpty()) { - return Collections.EMPTY_LIST; - } // 只能拉取最近30天的消息 Date minDate = DateUtils.addDays(new Date(), Math.toIntExact(-Constant.MAX_OFFLINE_MESSAGE_DAYS)); - LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); - wrapper.gt(GroupMessage::getId, minId); - wrapper.gt(GroupMessage::getSendTime, minDate); - wrapper.in(GroupMessage::getGroupId, groupIds); - wrapper.orderByDesc(GroupMessage::getId); - wrapper.last("limit 50000"); - List messages = this.list(wrapper); + if(!groupIds.isEmpty()) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.gt(GroupMessage::getId, minId); + wrapper.gt(GroupMessage::getSendTime, minDate); + wrapper.in(GroupMessage::getGroupId, groupIds); + wrapper.orderByDesc(GroupMessage::getId); + wrapper.last("limit 50000"); + messages = this.list(wrapper); + } // 查询退群前的消息 Date minQuitTime = minDate; if (minId > 0) { @@ -172,7 +172,7 @@ public class GroupMessageServiceImpl extends ServiceImpl quitMembers = groupMemberService.findQuitMembers(session.getUserId(), minQuitTime); for (GroupMember quitMember : quitMembers) { - wrapper = Wrappers.lambdaQuery(); + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); wrapper.gt(GroupMessage::getId, minId); wrapper.between(GroupMessage::getSendTime, minDate, quitMember.getQuitTime()); wrapper.eq(GroupMessage::getGroupId, quitMember.getGroupId()); diff --git a/im-uniapp/store/chatStore.js b/im-uniapp/store/chatStore.js index 56d8adc..ac47518 100644 --- a/im-uniapp/store/chatStore.js +++ b/im-uniapp/store/chatStore.js @@ -355,14 +355,20 @@ export default defineStore('chatStore', { // 排序 chats.sort((chat1, chat2) => chat2.lastSendTime - chat1.lastSendTime); // #ifndef APP-PLUS - /** - * 由于h5和小程序的stroge只有5m,大约只能存储2w条消息,所以可能需要清理部分历史消息 - */ - this.fliterMessage(chats, 5000, 1000); + // h5和小程序的stroge一般只有5m,大约只能存储1w条消息,所以可能需要清理部分历史消息 + const storageInfo = uni.getStorageInfoSync(); + console.log(`storage缓存: ${storageInfo.currentSize} KB`) + // 空间不足(大于3mb)时,清理这个设备登录过其他账户的消息 + if (storageInfo && storageInfo.currentSize > 3000) { + console.log("storage空间不足,清理其他用户缓存..") + this.cleanOtherUserCache(); + } + // 保证消息总数量不超过3000条,每个会话不超过500条 + this.fliterMessage(chats, 3000, 500); // #endif // 记录热数据索引位置 chats.forEach(chat => { - if(!chat.hotMinIdx || chat.hotMinIdx != chat.messages.length){ + if (!chat.hotMinIdx || chat.hotMinIdx != chat.messages.length) { chat.hotMinIdx = chat.messages.length; chat.stored = false; } @@ -388,6 +394,21 @@ export default defineStore('chatStore', { if (remainTotalSize > maxTotalSize) { this.fliterMessage(chats, maxTotalSize, maxPerChatSize / 2); } + console.log("消息留存总数量:", remainTotalSize) + console.log("单会话消息数量:", maxPerChatSize) + }, + cleanOtherUserCache() { + const userStore = useUserStore(); + const userId = userStore.userInfo.id; + const prefix = "chats-app-" + userId; + const res = uni.getStorageInfoSync(); + res.keys.forEach(key => { + // 清理其他用户的消息 + if (key.startsWith("chats-app") && !key.startsWith(prefix)) { + uni.removeStorageSync(key); + console.log("清理key:", key) + } + }) }, saveToStorage(withColdMessage) { // 加载中不保存,防止卡顿 From 8fa3f32577845972a3ce7fd6a333f8f2f9d5f5ba Mon Sep 17 00:00:00 2001 From: xsx <825657193@qq.com> Date: Sat, 21 Mar 2026 17:10:36 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=9A=84hbuilder(loading=E7=BB=84=E4=BB=B6=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E5=86=B2=E7=AA=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- .../components/chat-message-item/chat-message-item.vue | 6 +++--- .../loading.vue => custom-loading/custom-loading.vue} | 3 ++- im-uniapp/pages/chat/chat.vue | 8 ++++---- 4 files changed, 11 insertions(+), 9 deletions(-) rename im-uniapp/components/{loading/loading.vue => custom-loading/custom-loading.vue} (96%) diff --git a/README.md b/README.md index 6190e26..a3cae1b 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,8 @@ https://www.yuque.com/u1475064/imk5n2/qtezcg32q1d0dr29#SbvXq #### 付费服务 -商业版: https://www.yuque.com/u1475064/imk5n2/qtezcg32q1d0dr29 +商业版授权: https://www.yuque.com/u1475064/imk5n2/qtezcg32q1d0dr29 +付费代部署: https://www.yuque.com/u1475064/imk5n2/qgq5cvgmavallqnl #### 项目结构 | 模块 | 功能 | diff --git a/im-uniapp/components/chat-message-item/chat-message-item.vue b/im-uniapp/components/chat-message-item/chat-message-item.vue index dbcecc3..1574785 100644 --- a/im-uniapp/components/chat-message-item/chat-message-item.vue +++ b/im-uniapp/components/chat-message-item/chat-message-item.vue @@ -30,7 +30,7 @@ - + @@ -43,7 +43,7 @@ {{ fileSize }} - + @@ -66,7 +66,7 @@ - + diff --git a/im-uniapp/components/loading/loading.vue b/im-uniapp/components/custom-loading/custom-loading.vue similarity index 96% rename from im-uniapp/components/loading/loading.vue rename to im-uniapp/components/custom-loading/custom-loading.vue index b0f0c98..5845661 100644 --- a/im-uniapp/components/loading/loading.vue +++ b/im-uniapp/components/custom-loading/custom-loading.vue @@ -7,6 +7,7 @@