From 0d042b11c8e357a98870ab49820e8f5975e21eef Mon Sep 17 00:00:00 2001 From: xsx <825657193@qq.com> Date: Wed, 11 Feb 2026 11:53:13 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BE=A4=E7=A6=BB=E7=BA=BF=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E6=8B=89=E5=8F=96=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/bx/implatform/contant/Constant.java | 5 +++++ .../implatform/service/GroupMemberService.java | 10 ++++++---- .../service/impl/GroupMemberServiceImpl.java | 15 ++++++--------- .../service/impl/GroupMessageServiceImpl.java | 17 ++++++++++++----- .../service/impl/GroupServiceImpl.java | 4 +++- .../service/impl/PrivateMessageServiceImpl.java | 7 +++---- .../bx/implatform/thirdparty/MinioService.java | 1 - 7 files changed, 35 insertions(+), 24 deletions(-) diff --git a/im-platform/src/main/java/com/bx/implatform/contant/Constant.java b/im-platform/src/main/java/com/bx/implatform/contant/Constant.java index d255ba3..c423fdb 100644 --- a/im-platform/src/main/java/com/bx/implatform/contant/Constant.java +++ b/im-platform/src/main/java/com/bx/implatform/contant/Constant.java @@ -30,4 +30,9 @@ public final class Constant { */ public static final Long MAX_NORMAL_GROUP_MEMBER = 500L; + /** + * 离线消息最大拉取时间(天) + */ + public static final Long MAX_OFFLINE_MESSAGE_DAYS = 30L; + } diff --git a/im-platform/src/main/java/com/bx/implatform/service/GroupMemberService.java b/im-platform/src/main/java/com/bx/implatform/service/GroupMemberService.java index 770943b..49d1ac4 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/GroupMemberService.java +++ b/im-platform/src/main/java/com/bx/implatform/service/GroupMemberService.java @@ -1,9 +1,9 @@ package com.bx.implatform.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.bx.implatform.dto.GroupDndDTO; import com.bx.implatform.entity.GroupMember; +import java.util.Date; import java.util.List; public interface GroupMemberService extends IService { @@ -26,13 +26,15 @@ public interface GroupMemberService extends IService { */ List findByUserId(Long userId); + /** - * 根据用户id查询一个月内退的群 + * 根据用户id查询某段时间内退的群 * - * @param userId 用户id + * @param userId 用户id + * @param minQuitTime 退群时间 * @return 成员列表 */ - List findQuitInMonth(Long userId); + public List findQuitMembers(Long userId, Date minQuitTime); /** * 根据群聊id查询群聊成员(包括已退出) diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMemberServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMemberServiceImpl.java index 9302c61..1f39385 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMemberServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupMemberServiceImpl.java @@ -9,7 +9,6 @@ import com.bx.implatform.contant.RedisKey; import com.bx.implatform.entity.GroupMember; import com.bx.implatform.mapper.GroupMemberMapper; import com.bx.implatform.service.GroupMemberService; -import com.bx.implatform.util.DateTimeUtils; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -42,7 +41,6 @@ public class GroupMemberServiceImpl extends ServiceImpl findByUserId(Long userId) { LambdaQueryWrapper memberWrapper = Wrappers.lambdaQuery(); @@ -51,12 +49,12 @@ public class GroupMemberServiceImpl extends ServiceImpl findQuitInMonth(Long userId) { - Date monthTime = DateTimeUtils.addMonths(new Date(), -1); - LambdaQueryWrapper memberWrapper = Wrappers.lambdaQuery(); - memberWrapper.eq(GroupMember::getUserId, userId).eq(GroupMember::getQuit, true) - .ge(GroupMember::getQuitTime, monthTime); - return this.list(memberWrapper); + public List findQuitMembers(Long userId, Date minQuitTime) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(GroupMember::getUserId, userId); + wrapper.eq(GroupMember::getQuit, true); + wrapper.ge(GroupMember::getQuitTime, minQuitTime); + return this.list(wrapper); } @Override @@ -107,7 +105,6 @@ public class GroupMemberServiceImpl extends ServiceImpl userIds) { if (CollectionUtils.isEmpty(userIds)) { 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 e56817e..0dde1fe 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 @@ -10,7 +10,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bx.imclient.IMClient; import com.bx.imcommon.contant.IMConstant; -import com.bx.imcommon.enums.IMTerminalType; import com.bx.imcommon.model.IMGroupMessage; import com.bx.imcommon.model.IMUserInfo; import com.bx.imcommon.util.CommaTextUtils; @@ -153,8 +152,8 @@ public class GroupMessageServiceImpl extends ServiceImpl wrapper = Wrappers.lambdaQuery(); wrapper.gt(GroupMessage::getId, minId); wrapper.gt(GroupMessage::getSendTime, minDate); @@ -162,8 +161,16 @@ public class GroupMessageServiceImpl extends ServiceImpl messages = this.list(wrapper); - // 退群前的消息 - List quitMembers = groupMemberService.findQuitInMonth(session.getUserId()); + // 查询退群前的消息 + Date minQuitTime = minDate; + if (minId > 0) { + // 如果某个群的退群时间大于起始消息的发送时间,那消息是不用推送的,过滤掉 + GroupMessage message = this.getById(minId); + if (!Objects.isNull(message) && message.getSendTime().compareTo(minDate) > 0) { + minQuitTime = message.getSendTime(); + } + } + List quitMembers = groupMemberService.findQuitMembers(session.getUserId(), minQuitTime); for (GroupMember quitMember : quitMembers) { wrapper = Wrappers.lambdaQuery(); wrapper.gt(GroupMessage::getId, minId); diff --git a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java index 34daed1..3494861 100644 --- a/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java +++ b/im-platform/src/main/java/com/bx/implatform/service/impl/GroupServiceImpl.java @@ -35,6 +35,7 @@ import com.bx.implatform.vo.GroupVO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.compress.utils.Lists; +import org.apache.commons.lang3.time.DateUtils; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; @@ -235,7 +236,8 @@ public class GroupServiceImpl extends ServiceImpl implements // 查询当前用户的群id列表 List groupMembers = groupMemberService.findByUserId(session.getUserId()); // 一个月内退的群可能存在退群前的离线消息,一并返回作为前端缓存 - groupMembers.addAll(groupMemberService.findQuitInMonth(session.getUserId())); + Date minDate = DateUtils.addDays(new Date(), Math.toIntExact(-Constant.MAX_OFFLINE_MESSAGE_DAYS)); + groupMembers.addAll(groupMemberService.findQuitMembers(session.getUserId(),minDate)); if (groupMembers.isEmpty()) { return new LinkedList<>(); } 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 b642090..8872838 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 @@ -7,10 +7,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.bx.imclient.IMClient; import com.bx.imcommon.contant.IMConstant; -import com.bx.imcommon.enums.IMTerminalType; import com.bx.imcommon.model.IMPrivateMessage; import com.bx.imcommon.model.IMUserInfo; import com.bx.imcommon.util.ThreadPoolExecutorFactory; +import com.bx.implatform.contant.Constant; import com.bx.implatform.dto.PrivateMessageDTO; import com.bx.implatform.entity.PrivateMessage; import com.bx.implatform.enums.MessageStatus; @@ -32,7 +32,6 @@ import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.stream.Collectors; @@ -141,8 +140,8 @@ public class PrivateMessageServiceImpl extends ServiceImpl wrapper = Wrappers.lambdaQuery(); - // 只能拉取最近1个月的消息 - Date minDate = DateUtils.addMonths(new Date(), -1); + // 只能拉取最近30天的消息 + Date minDate = DateUtils.addDays(new Date(), Math.toIntExact(-Constant.MAX_OFFLINE_MESSAGE_DAYS)); wrapper.gt(PrivateMessage::getId, minId); wrapper.ge(PrivateMessage::getSendTime, minDate); wrapper.and(wp -> wp.eq(PrivateMessage::getSendId, session.getUserId()).or() diff --git a/im-platform/src/main/java/com/bx/implatform/thirdparty/MinioService.java b/im-platform/src/main/java/com/bx/implatform/thirdparty/MinioService.java index d5ad8da..aa36d5b 100644 --- a/im-platform/src/main/java/com/bx/implatform/thirdparty/MinioService.java +++ b/im-platform/src/main/java/com/bx/implatform/thirdparty/MinioService.java @@ -1,7 +1,6 @@ package com.bx.implatform.thirdparty; import cn.hutool.core.util.IdUtil; -import cn.hutool.core.util.RandomUtil; import com.bx.implatform.util.DateTimeUtils; import com.bx.implatform.util.FileUtil; import io.minio.*;