Browse Source

!188 兼容新版本的hbuilder(loading组件命名冲突)

Merge pull request !188 from blue/v_3.0.0
master
blue 2 weeks ago
committed by Gitee
parent
commit
c854cd3953
No known key found for this signature in database GPG Key ID: 173E9B9CA92EEF8F
  1. 3
      README.md
  2. 22
      im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java
  3. 6
      im-uniapp/components/chat-message-item/chat-message-item.vue
  4. 3
      im-uniapp/components/custom-loading/custom-loading.vue
  5. 8
      im-uniapp/pages/chat/chat.vue
  6. 31
      im-uniapp/store/chatStore.js

3
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
#### 项目结构 #### 项目结构
| 模块 | 功能 | | 模块 | 功能 |

22
im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java

@ -145,22 +145,22 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
@Override @Override
public List<GroupMessageVO> loadOffineMessage(Long minId) { public List<GroupMessageVO> loadOffineMessage(Long minId) {
UserSession session = SessionContext.getSession(); UserSession session = SessionContext.getSession();
List<GroupMessage> messages = new ArrayList<>();
// 查询用户加入的群组 // 查询用户加入的群组
List<GroupMember> members = groupMemberService.findByUserId(session.getUserId()); List<GroupMember> members = groupMemberService.findByUserId(session.getUserId());
Map<Long, GroupMember> groupMemberMap = CollStreamUtil.toIdentityMap(members, GroupMember::getGroupId); Map<Long, GroupMember> groupMemberMap = CollStreamUtil.toIdentityMap(members, GroupMember::getGroupId);
Set<Long> groupIds = groupMemberMap.keySet(); Set<Long> groupIds = groupMemberMap.keySet();
if (groupIds.isEmpty()) {
return Collections.EMPTY_LIST;
}
// 只能拉取最近30天的消息 // 只能拉取最近30天的消息
Date minDate = DateUtils.addDays(new Date(), Math.toIntExact(-Constant.MAX_OFFLINE_MESSAGE_DAYS)); Date minDate = DateUtils.addDays(new Date(), Math.toIntExact(-Constant.MAX_OFFLINE_MESSAGE_DAYS));
LambdaQueryWrapper<GroupMessage> wrapper = Wrappers.lambdaQuery(); if(!groupIds.isEmpty()) {
wrapper.gt(GroupMessage::getId, minId); LambdaQueryWrapper<GroupMessage> wrapper = Wrappers.lambdaQuery();
wrapper.gt(GroupMessage::getSendTime, minDate); wrapper.gt(GroupMessage::getId, minId);
wrapper.in(GroupMessage::getGroupId, groupIds); wrapper.gt(GroupMessage::getSendTime, minDate);
wrapper.orderByDesc(GroupMessage::getId); wrapper.in(GroupMessage::getGroupId, groupIds);
wrapper.last("limit 50000"); wrapper.orderByDesc(GroupMessage::getId);
List<GroupMessage> messages = this.list(wrapper); wrapper.last("limit 50000");
messages = this.list(wrapper);
}
// 查询退群前的消息 // 查询退群前的消息
Date minQuitTime = minDate; Date minQuitTime = minDate;
if (minId > 0) { if (minId > 0) {
@ -172,7 +172,7 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
} }
List<GroupMember> quitMembers = groupMemberService.findQuitMembers(session.getUserId(), minQuitTime); List<GroupMember> quitMembers = groupMemberService.findQuitMembers(session.getUserId(), minQuitTime);
for (GroupMember quitMember : quitMembers) { for (GroupMember quitMember : quitMembers) {
wrapper = Wrappers.lambdaQuery(); LambdaQueryWrapper<GroupMessage> wrapper = Wrappers.lambdaQuery();
wrapper.gt(GroupMessage::getId, minId); wrapper.gt(GroupMessage::getId, minId);
wrapper.between(GroupMessage::getSendTime, minDate, quitMember.getQuitTime()); wrapper.between(GroupMessage::getSendTime, minDate, quitMember.getQuitTime());
wrapper.eq(GroupMessage::getGroupId, quitMember.getGroupId()); wrapper.eq(GroupMessage::getGroupId, quitMember.getGroupId());

6
im-uniapp/components/chat-message-item/chat-message-item.vue

@ -30,7 +30,7 @@
<image class="send-image" :style="imageStyle" mode="aspectFill" <image class="send-image" :style="imageStyle" mode="aspectFill"
:src="contentData.thumbUrl" lazy-load="true" @click.stop="onShowFullImage()"> :src="contentData.thumbUrl" lazy-load="true" @click.stop="onShowFullImage()">
</image> </image>
<loading v-if="sending"></loading> <custom-loading v-if="sending"></custom-loading>
</view> </view>
</long-press-menu> </long-press-menu>
</view> </view>
@ -43,7 +43,7 @@
<view class="file-size">{{ fileSize }}</view> <view class="file-size">{{ fileSize }}</view>
</view> </view>
<view class="file-icon iconfont icon-file"></view> <view class="file-icon iconfont icon-file"></view>
<loading v-if="sending"></loading> <custom-loading v-if="sending"></custom-loading>
</view> </view>
</long-press-menu> </long-press-menu>
</view> </view>
@ -66,7 +66,7 @@
</view> </view>
</long-press-menu> </long-press-menu>
<view v-if="sending&&(isTextMessage||isAudioMessage)" class="sending"> <view v-if="sending&&(isTextMessage||isAudioMessage)" class="sending">
<loading :size="40" icon-color="#656adf" :mask="false"></loading> <custom-loading :size="40" icon-color="#656adf" :mask="false"></custom-loading>
</view> </view>
<view v-else-if="sendFail" @click="onSendFail" <view v-else-if="sendFail" @click="onSendFail"
class="send-fail iconfont icon-warning-circle-fill"></view> class="send-fail iconfont icon-warning-circle-fill"></view>

3
im-uniapp/components/loading/loading.vue → im-uniapp/components/custom-loading/custom-loading.vue

@ -7,6 +7,7 @@
<script> <script>
export default { export default {
name: 'custom-loading',
data() { data() {
return {} return {}
}, },
@ -68,4 +69,4 @@ export default {
transform: rotate(360deg) transform: rotate(360deg)
} }
} }
</style> </style>

8
im-uniapp/pages/chat/chat.vue

@ -2,14 +2,14 @@
<view class="tab-page"> <view class="tab-page">
<nav-bar search @search="onSearch()">消息</nav-bar> <nav-bar search @search="onSearch()">消息</nav-bar>
<view v-if="loading" class="chat-loading"> <view v-if="loading" class="chat-loading">
<loading :size="50" :mask="false"> <custom-loading :size="50" :mask="false">
<view>消息接收中...</view> <view>消息接收中...</view>
</loading> </custom-loading>
</view> </view>
<view v-else-if="initializing" class="chat-loading"> <view v-else-if="initializing" class="chat-loading">
<loading :size="50" :mask="false"> <custom-loading :size="50" :mask="false">
<view>正在初始化...</view> <view>正在初始化...</view>
</loading> </custom-loading>
</view> </view>
<view class="nav-bar" v-if="showSearch"> <view class="nav-bar" v-if="showSearch">
<view class="nav-search"> <view class="nav-search">

31
im-uniapp/store/chatStore.js

@ -355,14 +355,20 @@ export default defineStore('chatStore', {
// 排序 // 排序
chats.sort((chat1, chat2) => chat2.lastSendTime - chat1.lastSendTime); chats.sort((chat1, chat2) => chat2.lastSendTime - chat1.lastSendTime);
// #ifndef APP-PLUS // #ifndef APP-PLUS
/** // h5和小程序的stroge一般只有5m,大约只能存储1w条消息,所以可能需要清理部分历史消息
* 由于h5和小程序的stroge只有5m,大约只能存储2w条消息所以可能需要清理部分历史消息 const storageInfo = uni.getStorageInfoSync();
*/ console.log(`storage缓存: ${storageInfo.currentSize} KB`)
this.fliterMessage(chats, 5000, 1000); // 空间不足(大于3mb)时,清理这个设备登录过其他账户的消息
if (storageInfo && storageInfo.currentSize > 3000) {
console.log("storage空间不足,清理其他用户缓存..")
this.cleanOtherUserCache();
}
// 保证消息总数量不超过3000条,每个会话不超过500条
this.fliterMessage(chats, 3000, 500);
// #endif // #endif
// 记录热数据索引位置 // 记录热数据索引位置
chats.forEach(chat => { 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.hotMinIdx = chat.messages.length;
chat.stored = false; chat.stored = false;
} }
@ -388,6 +394,21 @@ export default defineStore('chatStore', {
if (remainTotalSize > maxTotalSize) { if (remainTotalSize > maxTotalSize) {
this.fliterMessage(chats, maxTotalSize, maxPerChatSize / 2); 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) { saveToStorage(withColdMessage) {
// 加载中不保存,防止卡顿 // 加载中不保存,防止卡顿

Loading…
Cancel
Save