From 44981bbee81572ce5a13ef6c30dd595f195d0f33 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Thu, 23 Apr 2026 01:12:27 +0800 Subject: [PATCH] ♻️ refactor(im): 拆分 updateGroup 职责,仅保留群整体信息更新 - ImGroupServiceImpl#updateGroup 移除 displayUserName/displayGroupName 处理逻辑,交由 updateGroupMember 承接 - 去掉 hasGroupInfoChange 判断,群主校验前置 - ImGroupUpdateReqVO 清理 displayUserName/displayGroupName 字段 --- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/vo/ImGroupUpdateReqVO.java | 8 -------- yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java | 41 ++++++++++++++--------------------------- 2 files changed, 14 insertions(+), 35 deletions(-) diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/vo/ImGroupUpdateReqVO.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/vo/ImGroupUpdateReqVO.java index 6e57289..d423d50 100644 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/vo/ImGroupUpdateReqVO.java +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/vo/ImGroupUpdateReqVO.java @@ -21,12 +21,4 @@ public class ImGroupUpdateReqVO { @Schema(description = "群公告") private String notice; - // ========== 以下字段来自 im_group_member 表(当前用户在该群的个人设置) ========== - - @Schema(description = "我在本群的昵称") - private String displayUserName; - - @Schema(description = "群名备注") - private String displayGroupName; - } diff --git a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java index dd3fdb7..1870a9e 100644 --- a/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java +++ b/yudao-module-im/yudao-module-im-biz/src/main/java/cn/iocoder/yudao/module/im/service/group/ImGroupServiceImpl.java @@ -12,7 +12,6 @@ import cn.iocoder.yudao.module.im.controller.admin.group.vo.ImGroupCreateReqVO; import cn.iocoder.yudao.module.im.controller.admin.group.vo.ImGroupUpdateReqVO; import cn.iocoder.yudao.module.im.controller.admin.group.vo.member.ImGroupMemberInviteReqVO; import cn.iocoder.yudao.module.im.controller.admin.group.vo.member.ImGroupMemberRemoveReqVO; -import cn.iocoder.yudao.module.im.controller.admin.group.vo.member.ImGroupMemberUpdateReqVO; import cn.iocoder.yudao.module.im.dal.dataobject.friend.ImFriendDO; import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupDO; import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; @@ -92,35 +91,23 @@ public class ImGroupServiceImpl implements ImGroupService { @CacheEvict(cacheNames = GROUP, key = "#updateReqVO.id") @Transactional(rollbackFor = Exception.class) public ImGroupDO updateGroup(ImGroupUpdateReqVO updateReqVO, Long userId) { - // 1. 校验群存在 + // 1.1 校验群存在 ImGroupDO group = validateGroupExists(updateReqVO.getId()); - - // 2. 更新群信息(name、avatar、notice → im_group 表) - boolean hasGroupInfoChange = !ObjUtil.isAllEmpty( - updateReqVO.getName(), updateReqVO.getAvatar(), updateReqVO.getNotice()); - if (hasGroupInfoChange) { - if (ObjUtil.notEqual(group.getOwnerUserId(), userId)) { - throw exception(GROUP_NOT_OWNER); - } - // 2.1 更新数据库 - ImGroupDO updateObj = BeanUtils.toBean(updateReqVO, ImGroupDO.class); - groupMapper.updateById(updateObj); - // 同步到内存中的 group 对象,避免再次查询 - BeanUtil.copyProperties(updateReqVO, group, CopyOptions.create().ignoreNullValue()); - - // 2.2 群信息的变更,推送给所有群成员 - List members = groupMemberService.getActiveGroupMemberListByGroupId(group.getId()); - Set memberUserIds = convertSet(members, ImGroupMemberDO::getUserId); - webSocketService.sendGroupMessageAsync(memberUserIds, - ImGroupMessageDTO.ofGroupUpdate(userId, group.getId())); + // 1.2 校验操作人是群主 + if (ObjUtil.notEqual(group.getOwnerUserId(), userId)) { + throw exception(GROUP_NOT_OWNER); } - // 3. 更新当前用户的群成员信息(displayUserName、displayGroupName → im_group_member 表) - if (!ObjUtil.isAllEmpty(updateReqVO.getDisplayUserName(), updateReqVO.getDisplayGroupName())) { - groupMemberService.updateGroupMember(userId, new ImGroupMemberUpdateReqVO() - .setGroupId(updateReqVO.getId()).setDisplayUserName(updateReqVO.getDisplayUserName()) - .setDisplayGroupName(updateReqVO.getDisplayGroupName())); - } + // 2. 更新数据库 + ImGroupDO updateObj = BeanUtils.toBean(updateReqVO, ImGroupDO.class); + groupMapper.updateById(updateObj); + BeanUtil.copyProperties(updateReqVO, group, CopyOptions.create().ignoreNullValue()); + + // 3. 群信息的变更,推送给所有群成员 + List members = groupMemberService.getActiveGroupMemberListByGroupId(group.getId()); + Set memberUserIds = convertSet(members, ImGroupMemberDO::getUserId); + webSocketService.sendGroupMessageAsync(memberUserIds, + ImGroupMessageDTO.ofGroupUpdate(userId, group.getId())); return group; } -- libgit2 0.21.4