From 9b44ed74e68df53f0483ac956c4c48d9beb9abd4 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 25 May 2026 00:29:00 +0800 Subject: [PATCH] fix(im): 批量修复 P1/P2 问题 --- yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/vo/ImGroupMuteMemberReqVO.java | 5 ++--- yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/vo/group/ImGroupMessageManagerPageReqVO.java | 3 +++ yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/vo/privates/ImPrivateMessageManagerPageReqVO.java | 3 +++ yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/dataobject/group/ImGroupMemberDO.java | 7 ++++++- yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImGroupMessageMapper.java | 1 + yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImPrivateMessageMapper.java | 16 +++++++++++++--- yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java | 3 ++- yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/websocket/dto/ImGroupMessageDTO.java | 2 +- 8 files changed, 31 insertions(+), 9 deletions(-) diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/vo/ImGroupMuteMemberReqVO.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/vo/ImGroupMuteMemberReqVO.java index 6b8eb18..a9927b3 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/vo/ImGroupMuteMemberReqVO.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/vo/ImGroupMuteMemberReqVO.java @@ -17,10 +17,9 @@ public class ImGroupMuteMemberReqVO { @NotNull(message = "用户编号不能为空") private Long userId; - // TODO @AI:是不是改成禁言结束时间更好?因为禁言时长可能会比较大,单位秒不太好理解。 - @Schema(description = "禁言时长(秒)", requiredMode = Schema.RequiredMode.REQUIRED, example = "600") + @Schema(description = "禁言时长(秒),0 表示永久禁言", requiredMode = Schema.RequiredMode.REQUIRED, example = "600") @NotNull(message = "禁言时长不能为空") - @Min(value = 1, message = "禁言时长至少 1 秒") + @Min(value = 0, message = "禁言时长不能小于 0 秒") private Integer mutedSeconds; } diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/vo/group/ImGroupMessageManagerPageReqVO.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/vo/group/ImGroupMessageManagerPageReqVO.java index af3ea38..86d236d 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/vo/group/ImGroupMessageManagerPageReqVO.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/vo/group/ImGroupMessageManagerPageReqVO.java @@ -24,6 +24,9 @@ public class ImGroupMessageManagerPageReqVO extends PageParam { @Schema(description = "消息类型", example = "1") private Integer type; // 参见 ImMessageTypeEnum 枚举类 + @Schema(description = "消息内容", example = "你好") + private String content; + @Schema(description = "消息状态", example = "0") private Integer status; // 参见 ImMessageStatusEnum 枚举类 diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/vo/privates/ImPrivateMessageManagerPageReqVO.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/vo/privates/ImPrivateMessageManagerPageReqVO.java index 36c6feb..e6a72da 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/vo/privates/ImPrivateMessageManagerPageReqVO.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/manager/message/vo/privates/ImPrivateMessageManagerPageReqVO.java @@ -24,6 +24,9 @@ public class ImPrivateMessageManagerPageReqVO extends PageParam { @Schema(description = "消息类型", example = "1") private Integer type; // 参见 ImMessageTypeEnum 枚举类 + @Schema(description = "消息内容", example = "你好") + private String content; + @Schema(description = "消息状态", example = "0") private Integer status; // 参见 ImMessageStatusEnum 枚举类 diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/dataobject/group/ImGroupMemberDO.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/dataobject/group/ImGroupMemberDO.java index c051af4..430264c 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/dataobject/group/ImGroupMemberDO.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/dataobject/group/ImGroupMemberDO.java @@ -27,6 +27,11 @@ import java.time.LocalDateTime; public class ImGroupMemberDO extends BaseDO { /** + * 永久禁言到期时间 + */ + public static final LocalDateTime PERMANENT_MUTE_END_TIME = LocalDateTime.of(9999, 12, 31, 23, 59, 59); + + /** * 编号 */ @TableId @@ -94,4 +99,4 @@ public class ImGroupMemberDO extends BaseDO { */ private LocalDateTime muteEndTime; -} \ No newline at end of file +} diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImGroupMessageMapper.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImGroupMessageMapper.java index 2354f05..84736fd 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImGroupMessageMapper.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImGroupMessageMapper.java @@ -119,6 +119,7 @@ public interface ImGroupMessageMapper extends BaseMapperX { .eqIfPresent(ImGroupMessageDO::getGroupId, reqVO.getGroupId()) .eqIfPresent(ImGroupMessageDO::getSenderId, reqVO.getSenderId()) .eqIfPresent(ImGroupMessageDO::getType, reqVO.getType()) + .likeIfPresent(ImGroupMessageDO::getContent, reqVO.getContent()) .eqIfPresent(ImGroupMessageDO::getStatus, reqVO.getStatus()) .betweenIfPresent(ImGroupMessageDO::getSendTime, reqVO.getSendTime()) .orderByDesc(ImGroupMessageDO::getId)); diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImPrivateMessageMapper.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImPrivateMessageMapper.java index 9b62b45..a33f29f 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImPrivateMessageMapper.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/dal/mysql/message/ImPrivateMessageMapper.java @@ -87,10 +87,20 @@ public interface ImPrivateMessageMapper extends BaseMapperX } default PageResult selectPage(ImPrivateMessageManagerPageReqVO reqVO) { - return selectPage(reqVO, new LambdaQueryWrapperX() - .eqIfPresent(ImPrivateMessageDO::getSenderId, reqVO.getSenderId()) - .eqIfPresent(ImPrivateMessageDO::getReceiverId, reqVO.getReceiverId()) + LambdaQueryWrapperX query = new LambdaQueryWrapperX<>(); + if (reqVO.getSenderId() != null && reqVO.getReceiverId() != null) { + query.and(w -> w.eq(ImPrivateMessageDO::getSenderId, reqVO.getSenderId()) + .eq(ImPrivateMessageDO::getReceiverId, reqVO.getReceiverId()) + .or() + .eq(ImPrivateMessageDO::getSenderId, reqVO.getReceiverId()) + .eq(ImPrivateMessageDO::getReceiverId, reqVO.getSenderId())); + } else { + query.eqIfPresent(ImPrivateMessageDO::getSenderId, reqVO.getSenderId()) + .eqIfPresent(ImPrivateMessageDO::getReceiverId, reqVO.getReceiverId()); + } + return selectPage(reqVO, query .eqIfPresent(ImPrivateMessageDO::getType, reqVO.getType()) + .likeIfPresent(ImPrivateMessageDO::getContent, reqVO.getContent()) .eqIfPresent(ImPrivateMessageDO::getStatus, reqVO.getStatus()) .betweenIfPresent(ImPrivateMessageDO::getSendTime, reqVO.getSendTime()) .orderByDesc(ImPrivateMessageDO::getId)); diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java index e2b8afc..2fc6c0a 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java @@ -667,7 +667,8 @@ public class ImGroupServiceImpl implements ImGroupService { validateMutePermission(operatorMember, targetMember); // 2. 设置 muteEndTime - LocalDateTime muteEndTime = LocalDateTime.now().plusSeconds(reqVO.getMutedSeconds()); + LocalDateTime muteEndTime = reqVO.getMutedSeconds() == 0 + ? ImGroupMemberDO.PERMANENT_MUTE_END_TIME : LocalDateTime.now().plusSeconds(reqVO.getMutedSeconds()); groupMemberService.updateGroupMemberMuteEndTime(reqVO.getGroupId(), reqVO.getUserId(), muteEndTime); // 3. 广播通知 diff --git a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/websocket/dto/ImGroupMessageDTO.java b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/websocket/dto/ImGroupMessageDTO.java index 2a83c84..9a9a72c 100644 --- a/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/websocket/dto/ImGroupMessageDTO.java +++ b/yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/service/websocket/dto/ImGroupMessageDTO.java @@ -83,7 +83,7 @@ public class ImGroupMessageDTO { * @return 群聊 DTO */ public static ImGroupMessageDTO ofSend(ImGroupMessageDO message) { - return BeanUtils.toBean(message, ImGroupMessageDTO.class); + return BeanUtils.toBean(message, ImGroupMessageDTO.class).setReceiverUserIds(null); } /** -- libgit2 0.21.4