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

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

@ -145,22 +145,22 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
@Override
public List<GroupMessageVO> loadOffineMessage(Long minId) {
UserSession session = SessionContext.getSession();
List<GroupMessage> messages = new ArrayList<>();
// 查询用户加入的群组
List<GroupMember> members = groupMemberService.findByUserId(session.getUserId());
Map<Long, GroupMember> groupMemberMap = CollStreamUtil.toIdentityMap(members, GroupMember::getGroupId);
Set<Long> groupIds = groupMemberMap.keySet();
if (groupIds.isEmpty()) {
return Collections.EMPTY_LIST;
}
// 只能拉取最近30天的消息
Date minDate = DateUtils.addDays(new Date(), Math.toIntExact(-Constant.MAX_OFFLINE_MESSAGE_DAYS));
if(!groupIds.isEmpty()) {
LambdaQueryWrapper<GroupMessage> 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<GroupMessage> messages = this.list(wrapper);
messages = this.list(wrapper);
}
// 查询退群前的消息
Date minQuitTime = minDate;
if (minId > 0) {
@ -172,7 +172,7 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
}
List<GroupMember> quitMembers = groupMemberService.findQuitMembers(session.getUserId(), minQuitTime);
for (GroupMember quitMember : quitMembers) {
wrapper = Wrappers.lambdaQuery();
LambdaQueryWrapper<GroupMessage> wrapper = Wrappers.lambdaQuery();
wrapper.gt(GroupMessage::getId, minId);
wrapper.between(GroupMessage::getSendTime, minDate, quitMember.getQuitTime());
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"
:src="contentData.thumbUrl" lazy-load="true" @click.stop="onShowFullImage()">
</image>
<loading v-if="sending"></loading>
<custom-loading v-if="sending"></custom-loading>
</view>
</long-press-menu>
</view>
@ -43,7 +43,7 @@
<view class="file-size">{{ fileSize }}</view>
</view>
<view class="file-icon iconfont icon-file"></view>
<loading v-if="sending"></loading>
<custom-loading v-if="sending"></custom-loading>
</view>
</long-press-menu>
</view>
@ -66,7 +66,7 @@
</view>
</long-press-menu>
<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 v-else-if="sendFail" @click="onSendFail"
class="send-fail iconfont icon-warning-circle-fill"></view>

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

@ -7,6 +7,7 @@
<script>
export default {
name: 'custom-loading',
data() {
return {}
},

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

@ -2,14 +2,14 @@
<view class="tab-page">
<nav-bar search @search="onSearch()">消息</nav-bar>
<view v-if="loading" class="chat-loading">
<loading :size="50" :mask="false">
<custom-loading :size="50" :mask="false">
<view>消息接收中...</view>
</loading>
</custom-loading>
</view>
<view v-else-if="initializing" class="chat-loading">
<loading :size="50" :mask="false">
<custom-loading :size="50" :mask="false">
<view>正在初始化...</view>
</loading>
</custom-loading>
</view>
<view class="nav-bar" v-if="showSearch">
<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);
// #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) {
// 加载中不保存,防止卡顿

Loading…
Cancel
Save