Commit 44981bbee81572ce5a13ef6c30dd595f195d0f33

Authored by YunaiV
1 parent fa474c6f

♻️ 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
@@ -21,12 +21,4 @@ public class ImGroupUpdateReqVO { @@ -21,12 +21,4 @@ public class ImGroupUpdateReqVO {
21 @Schema(description = "群公告") 21 @Schema(description = "群公告")
22 private String notice; 22 private String notice;
23 23
24 - // ========== 以下字段来自 im_group_member 表(当前用户在该群的个人设置) ==========  
25 -  
26 - @Schema(description = "我在本群的昵称")  
27 - private String displayUserName;  
28 -  
29 - @Schema(description = "群名备注")  
30 - private String displayGroupName;  
31 -  
32 } 24 }
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; @@ -12,7 +12,6 @@ import cn.iocoder.yudao.module.im.controller.admin.group.vo.ImGroupCreateReqVO;
12 import cn.iocoder.yudao.module.im.controller.admin.group.vo.ImGroupUpdateReqVO; 12 import cn.iocoder.yudao.module.im.controller.admin.group.vo.ImGroupUpdateReqVO;
13 import cn.iocoder.yudao.module.im.controller.admin.group.vo.member.ImGroupMemberInviteReqVO; 13 import cn.iocoder.yudao.module.im.controller.admin.group.vo.member.ImGroupMemberInviteReqVO;
14 import cn.iocoder.yudao.module.im.controller.admin.group.vo.member.ImGroupMemberRemoveReqVO; 14 import cn.iocoder.yudao.module.im.controller.admin.group.vo.member.ImGroupMemberRemoveReqVO;
15 -import cn.iocoder.yudao.module.im.controller.admin.group.vo.member.ImGroupMemberUpdateReqVO;  
16 import cn.iocoder.yudao.module.im.dal.dataobject.friend.ImFriendDO; 15 import cn.iocoder.yudao.module.im.dal.dataobject.friend.ImFriendDO;
17 import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupDO; 16 import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupDO;
18 import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO; 17 import cn.iocoder.yudao.module.im.dal.dataobject.group.ImGroupMemberDO;
@@ -92,35 +91,23 @@ public class ImGroupServiceImpl implements ImGroupService { @@ -92,35 +91,23 @@ public class ImGroupServiceImpl implements ImGroupService {
92 @CacheEvict(cacheNames = GROUP, key = "#updateReqVO.id") 91 @CacheEvict(cacheNames = GROUP, key = "#updateReqVO.id")
93 @Transactional(rollbackFor = Exception.class) 92 @Transactional(rollbackFor = Exception.class)
94 public ImGroupDO updateGroup(ImGroupUpdateReqVO updateReqVO, Long userId) { 93 public ImGroupDO updateGroup(ImGroupUpdateReqVO updateReqVO, Long userId) {
95 - // 1. 校验群存在 94 + // 1.1 校验群存在
96 ImGroupDO group = validateGroupExists(updateReqVO.getId()); 95 ImGroupDO group = validateGroupExists(updateReqVO.getId());
97 -  
98 - // 2. 更新群信息(name、avatar、notice → im_group 表)  
99 - boolean hasGroupInfoChange = !ObjUtil.isAllEmpty(  
100 - updateReqVO.getName(), updateReqVO.getAvatar(), updateReqVO.getNotice());  
101 - if (hasGroupInfoChange) {  
102 - if (ObjUtil.notEqual(group.getOwnerUserId(), userId)) {  
103 - throw exception(GROUP_NOT_OWNER);  
104 - }  
105 - // 2.1 更新数据库  
106 - ImGroupDO updateObj = BeanUtils.toBean(updateReqVO, ImGroupDO.class);  
107 - groupMapper.updateById(updateObj);  
108 - // 同步到内存中的 group 对象,避免再次查询  
109 - BeanUtil.copyProperties(updateReqVO, group, CopyOptions.create().ignoreNullValue());  
110 -  
111 - // 2.2 群信息的变更,推送给所有群成员  
112 - List<ImGroupMemberDO> members = groupMemberService.getActiveGroupMemberListByGroupId(group.getId());  
113 - Set<Long> memberUserIds = convertSet(members, ImGroupMemberDO::getUserId);  
114 - webSocketService.sendGroupMessageAsync(memberUserIds,  
115 - ImGroupMessageDTO.ofGroupUpdate(userId, group.getId())); 96 + // 1.2 校验操作人是群主
  97 + if (ObjUtil.notEqual(group.getOwnerUserId(), userId)) {
  98 + throw exception(GROUP_NOT_OWNER);
116 } 99 }
117 100
118 - // 3. 更新当前用户的群成员信息(displayUserName、displayGroupName → im_group_member 表)  
119 - if (!ObjUtil.isAllEmpty(updateReqVO.getDisplayUserName(), updateReqVO.getDisplayGroupName())) {  
120 - groupMemberService.updateGroupMember(userId, new ImGroupMemberUpdateReqVO()  
121 - .setGroupId(updateReqVO.getId()).setDisplayUserName(updateReqVO.getDisplayUserName())  
122 - .setDisplayGroupName(updateReqVO.getDisplayGroupName()));  
123 - } 101 + // 2. 更新数据库
  102 + ImGroupDO updateObj = BeanUtils.toBean(updateReqVO, ImGroupDO.class);
  103 + groupMapper.updateById(updateObj);
  104 + BeanUtil.copyProperties(updateReqVO, group, CopyOptions.create().ignoreNullValue());
  105 +
  106 + // 3. 群信息的变更,推送给所有群成员
  107 + List<ImGroupMemberDO> members = groupMemberService.getActiveGroupMemberListByGroupId(group.getId());
  108 + Set<Long> memberUserIds = convertSet(members, ImGroupMemberDO::getUserId);
  109 + webSocketService.sendGroupMessageAsync(memberUserIds,
  110 + ImGroupMessageDTO.ofGroupUpdate(userId, group.getId()));
124 return group; 111 return group;
125 } 112 }
126 113