Forráskód Böngészése

!41 loadMessage排除加群之前的消息
Merge pull request !41 from Lancer/loadMsg

blue 2 éve
szülő
commit
cb6651245e

+ 20 - 11
im-platform/src/main/java/com/bx/implatform/service/impl/GroupMessageServiceImpl.java

@@ -1,6 +1,8 @@
 package com.bx.implatform.service.impl;
 
+import cn.hutool.core.collection.CollStreamUtil;
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -146,10 +148,11 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
     public List<GroupMessageVO> loadMessage(Long minId) {
         UserSession session = SessionContext.getSession();
         List<GroupMember> members = groupMemberService.findByUserId(session.getUserId());
-        List<Long> ids = members.stream().map(GroupMember::getGroupId).collect(Collectors.toList());
-        if (CollectionUtil.isEmpty(ids)) {
+        if (CollectionUtil.isEmpty(members)) {
             return new ArrayList<>();
         }
+        Map<Long, GroupMember> groupMemberMap = CollStreamUtil.toIdentityMap(members, GroupMember::getGroupId);
+        Set<Long> ids = groupMemberMap.keySet();
         // 只能拉取最近1个月的
         Date minDate = DateUtils.addMonths(new Date(), -1);
         LambdaQueryWrapper<GroupMessage> wrapper = Wrappers.lambdaQuery();
@@ -158,15 +161,21 @@ public class GroupMessageServiceImpl extends ServiceImpl<GroupMessageMapper, Gro
 
         List<GroupMessage> messages = this.list(wrapper);
         // 转成vo
-        List<GroupMessageVO> vos = messages.stream().map(m -> {
-            GroupMessageVO vo = BeanUtils.copyProperties(m, GroupMessageVO.class);
-            // 被@用户列表
-            if (StringUtils.isNotBlank(m.getAtUserIds())) {
-                List<String> atIds = Splitter.on(",").trimResults().splitToList(m.getAtUserIds());
-                vo.setAtUserIds(atIds.stream().map(Long::parseLong).collect(Collectors.toList()));
-            }
-            return vo;
-        }).collect(Collectors.toList());
+        List<GroupMessageVO> vos = messages.stream()
+            .filter(m -> {
+                //排除加群之前的消息
+                GroupMember member = groupMemberMap.get(m.getGroupId());
+                return Objects.nonNull(member) && DateUtil.compare(member.getCreatedTime(), m.getSendTime()) <= 0;
+            })
+            .map(m -> {
+                GroupMessageVO vo = BeanUtils.copyProperties(m, GroupMessageVO.class);
+                // 被@用户列表
+                if (StringUtils.isNotBlank(m.getAtUserIds()) && Objects.nonNull(vo)) {
+                    List<String> atIds = Splitter.on(",").trimResults().splitToList(m.getAtUserIds());
+                    vo.setAtUserIds(atIds.stream().map(Long::parseLong).collect(Collectors.toList()));
+                }
+                return vo;
+            }).collect(Collectors.toList());
         // 消息状态,数据库没有存群聊的消息状态,需要从redis取
         List<String> keys = ids.stream().map(id -> String.join(":", RedisKey.IM_GROUP_READED_POSITION, id.toString(), session.getUserId().toString()))
                 .collect(Collectors.toList());