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 7ae8b42..d634656 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 @@ -160,13 +160,14 @@ public class GroupMessageServiceImpl extends ServiceImpl wrapper = Wrappers.lambdaQuery(); wrapper.gt(GroupMessage::getId, minId) .gt(GroupMessage::getSendTime, minDate) .in(GroupMessage::getGroupId, groupIds) .ne(GroupMessage::getStatus, MessageStatus.RECALL.code()) - .orderByDesc(GroupMessage::getId).last("limit 3000"); + .orderByDesc(GroupMessage::getId); List messages = this.list(wrapper); // 通过群聊对消息进行分组 Map> messageGroupMap = messages.stream().collect(Collectors.groupingBy(GroupMessage::getGroupId)); diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java index 213c809..f0a000b 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/PrivateMessageServiceImpl.java @@ -37,8 +37,8 @@ import java.util.stream.Collectors; @Slf4j @Service @RequiredArgsConstructor -public class PrivateMessageServiceImpl extends ServiceImpl implements - PrivateMessageService { +public class PrivateMessageServiceImpl extends ServiceImpl + implements PrivateMessageService { private final FriendService friendService; private final IMClient imClient; @@ -58,7 +58,7 @@ public class PrivateMessageServiceImpl extends ServiceImpl findHistoryMessage(Long friendId, Long page, Long size) { page = page > 0 ? page : 1; @@ -120,17 +119,16 @@ public class PrivateMessageServiceImpl extends ServiceImpl wrapper = new QueryWrapper<>(); - wrapper.lambda().and(wrap -> wrap.and( - wp -> wp.eq(PrivateMessage::getSendId, userId) - .eq(PrivateMessage::getRecvId, friendId)) - .or(wp -> wp.eq(PrivateMessage::getRecvId, userId) - .eq(PrivateMessage::getSendId, friendId))) - .ne(PrivateMessage::getStatus, MessageStatus.RECALL.code()) - .orderByDesc(PrivateMessage::getId) + wrapper.lambda().and( + wrap -> wrap.and(wp -> wp.eq(PrivateMessage::getSendId, userId).eq(PrivateMessage::getRecvId, friendId)) + .or(wp -> wp.eq(PrivateMessage::getRecvId, userId).eq(PrivateMessage::getSendId, friendId))) + .ne(PrivateMessage::getStatus, MessageStatus.RECALL.code()).orderByDesc(PrivateMessage::getId) .last("limit " + stIdx + "," + size); List messages = this.list(wrapper); - List messageInfos = messages.stream().map(m -> BeanUtils.copyProperties(m, PrivateMessageVO.class)).collect(Collectors.toList()); + List messageInfos = + messages.stream().map(m -> BeanUtils.copyProperties(m, PrivateMessageVO.class)) + .collect(Collectors.toList()); log.info("拉取聊天记录,用户id:{},好友id:{},数量:{}", userId, friendId, messageInfos.size()); return messageInfos; } @@ -138,7 +136,7 @@ public class PrivateMessageServiceImpl extends ServiceImpl friendIds = friends.stream().map(Friend::getFriendId).collect(Collectors.toList()); // 获取当前用户的消息 LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); - // 只能拉取最近3个月的3000条消息 - Date minDate = DateUtils.addMonths(new Date(), -3); - queryWrapper.gt(PrivateMessage::getId, minId) - .ge(PrivateMessage::getSendTime, minDate) - .ne(PrivateMessage::getStatus, MessageStatus.RECALL.code()) - .and(wrap -> wrap.and( - wp -> wp.eq(PrivateMessage::getSendId, session.getUserId()) - .in(PrivateMessage::getRecvId, friendIds)) - .or(wp -> wp.eq(PrivateMessage::getRecvId, session.getUserId()) - .in(PrivateMessage::getSendId, friendIds))) - .orderByDesc(PrivateMessage::getId) - .last("limit 3000"); + // 只能拉取最近3个月的消息,移动端只拉取一个月消息 + int months = session.getTerminal().equals(IMTerminalType.APP.code()) ? 1 : 3; + Date minDate = DateUtils.addMonths(new Date(), -months); + queryWrapper.gt(PrivateMessage::getId, minId).ge(PrivateMessage::getSendTime, minDate) + .ne(PrivateMessage::getStatus, MessageStatus.RECALL.code()).and(wrap -> wrap.and( + wp -> wp.eq(PrivateMessage::getSendId, session.getUserId()).in(PrivateMessage::getRecvId, friendIds)) + .or(wp -> wp.eq(PrivateMessage::getRecvId, session.getUserId()).in(PrivateMessage::getSendId, friendIds))) + .orderByDesc(PrivateMessage::getId); List messages = this.list(queryWrapper); // 消息顺序从小到大 CollectionUtil.reverse(messages); // 推送消息 - for(PrivateMessage m:messages ){ + for (PrivateMessage m : messages) { PrivateMessageVO vo = BeanUtils.copyProperties(m, PrivateMessageVO.class); IMPrivateMessage sendMessage = new IMPrivateMessage<>(); sendMessage.setSender(new IMUserInfo(m.getSendId(), IMTerminalType.WEB.code())); @@ -214,34 +208,28 @@ public class PrivateMessageServiceImpl extends ServiceImpl updateWrapper = Wrappers.lambdaUpdate(); - updateWrapper.eq(PrivateMessage::getSendId, friendId) - .eq(PrivateMessage::getRecvId, session.getUserId()) + updateWrapper.eq(PrivateMessage::getSendId, friendId).eq(PrivateMessage::getRecvId, session.getUserId()) .eq(PrivateMessage::getStatus, MessageStatus.SENDED.code()) .set(PrivateMessage::getStatus, MessageStatus.READED.code()); this.update(updateWrapper); log.info("消息已读,接收方id:{},发送方id:{}", session.getUserId(), friendId); } - @Override public Long getMaxReadedId(Long friendId) { UserSession session = SessionContext.getSession(); LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); - wrapper.eq(PrivateMessage::getSendId, session.getUserId()) - .eq(PrivateMessage::getRecvId, friendId) - .eq(PrivateMessage::getStatus, MessageStatus.READED.code()) - .orderByDesc(PrivateMessage::getId) - .select(PrivateMessage::getId) - .last("limit 1"); + wrapper.eq(PrivateMessage::getSendId, session.getUserId()).eq(PrivateMessage::getRecvId, friendId) + .eq(PrivateMessage::getStatus, MessageStatus.READED.code()).orderByDesc(PrivateMessage::getId) + .select(PrivateMessage::getId).last("limit 1"); PrivateMessage message = this.getOne(wrapper); - if(Objects.isNull(message)){ + if (Objects.isNull(message)) { return -1L; } return message.getId(); } - - private void sendLoadingMessage(Boolean isLoadding){ + private void sendLoadingMessage(Boolean isLoadding) { UserSession session = SessionContext.getSession(); PrivateMessageVO msgInfo = new PrivateMessageVO(); msgInfo.setType(MessageType.LOADING.code()); diff --git a/im-uniapp/store/chatStore.js b/im-uniapp/store/chatStore.js index b4ac8d2..c5964f0 100644 --- a/im-uniapp/store/chatStore.js +++ b/im-uniapp/store/chatStore.js @@ -20,7 +20,7 @@ export default defineStore('chatStore', { for (let chat of chatsData.chats) { // 暂存至缓冲区 chat.stored = false; - cacheChats.push(chat); + cacheChats.push(JSON.parse(JSON.stringify(chat))); // 加载期间显示只前15个会话做做样子,一切都为了加快初始化时间 if (this.chats.length < 15) { chat.messages = [];