Commit 773d0941441fcdcb93aaeb97097f152515649c7e
1 parent
a0be8e29
fix(im): 修复群备注首屏展示和聊天列表名称覆盖
- 后端群 VO 返回当前用户维度的 groupRemark 和 silent - 群列表构建时通过成员关系回填个人群设置,并继续仅对有效成员回填置顶消息 - Vue3 群列表同步时以接口返回的个人群设置为准,只保留成员缓存 - 会话名写入入口统一使用 getGroupDisplayName,避免群备注被原群名覆盖 - 空群头像且成员未加载时异步预拉群成员,用于合成群头像 - 启用 IM Maven 模块和 yudao-server 对 IM 模块的依赖
Showing
2 changed files
with
14 additions
and
3 deletions
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/ImGroupController.java
| ... | ... | @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.im.controller.admin.group; |
| 3 | 3 | import cn.hutool.core.collection.CollUtil; |
| 4 | 4 | import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; |
| 5 | 5 | import cn.iocoder.yudao.framework.common.pojo.CommonResult; |
| 6 | +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; | |
| 6 | 7 | import cn.iocoder.yudao.framework.common.util.object.BeanUtils; |
| 7 | 8 | import cn.iocoder.yudao.module.im.controller.admin.group.vo.*; |
| 8 | 9 | import cn.iocoder.yudao.module.im.controller.admin.group.vo.member.ImGroupMemberInviteReqVO; |
| ... | ... | @@ -187,8 +188,10 @@ public class ImGroupController { |
| 187 | 188 | return Collections.emptyList(); |
| 188 | 189 | } |
| 189 | 190 | // 仅当前用户是有效成员的群才允许回填置顶消息 |
| 190 | - Set<Long> activeGroupIds = convertSet( | |
| 191 | - groupMemberService.getActiveGroupMemberListByUserId(loginUserId), ImGroupMemberDO::getGroupId); | |
| 191 | + Map<Long, ImGroupMemberDO> memberMap = convertMap( | |
| 192 | + groupMemberService.getGroupMemberListByUserId(loginUserId), ImGroupMemberDO::getGroupId); | |
| 193 | + Set<Long> activeGroupIds = convertSet(memberMap.values(), ImGroupMemberDO::getGroupId, | |
| 194 | + member -> CommonStatusEnum.ENABLE.getStatus().equals(member.getStatus())); | |
| 192 | 195 | Set<Long> allMessageIds = convertSetByFlatMap(groups, group -> activeGroupIds.contains(group.getId()) |
| 193 | 196 | ? CollUtil.emptyIfNull(group.getPinnedMessageIds()).stream() : Stream.empty()); |
| 194 | 197 | Map<Long, ImGroupMessageDO> messageMap = groupMessageService.getGroupMessageMap(allMessageIds); |
| ... | ... | @@ -198,6 +201,8 @@ public class ImGroupController { |
| 198 | 201 | // 标记登录用户在该群的成员状态,供前端区分当前群与历史退群 |
| 199 | 202 | boolean joined = activeGroupIds.contains(group.getId()); |
| 200 | 203 | groupVO.setJoinStatus(joined ? CommonStatusEnum.ENABLE.getStatus() : CommonStatusEnum.DISABLE.getStatus()); |
| 204 | + MapUtils.findAndThen(memberMap, group.getId(), member -> | |
| 205 | + groupVO.setGroupRemark(member.getGroupRemark()).setSilent(Boolean.TRUE.equals(member.getSilent()))); | |
| 201 | 206 | if (!joined || CollUtil.isEmpty(group.getPinnedMessageIds())) { |
| 202 | 207 | return groupVO; |
| 203 | 208 | } | ... | ... |
yudao-module-im/src/main/java/cn/iocoder/yudao/module/im/controller/admin/group/vo/ImGroupRespVO.java
| ... | ... | @@ -50,7 +50,13 @@ public class ImGroupRespVO { |
| 50 | 50 | @Schema(description = "当前登录用户在该群的成员状态:在群 / 已退群(历史退群群仍返回,供前端展示离线消息的群名 / 头像)") |
| 51 | 51 | private Integer joinStatus; // 参见 CommonStatusEnum 枚举 |
| 52 | 52 | |
| 53 | + @Schema(description = "当前登录用户对该群的备注") | |
| 54 | + private String groupRemark; | |
| 55 | + | |
| 56 | + @Schema(description = "当前登录用户是否免打扰") | |
| 57 | + private Boolean silent; | |
| 58 | + | |
| 53 | 59 | @Schema(description = "群置顶消息列表,按 pin 顺序(最先置顶的在前);非该群有效成员时为空") |
| 54 | 60 | private List<ImGroupMessageRespVO> pinnedMessages; |
| 55 | 61 | |
| 56 | -} | |
| 57 | 62 | \ No newline at end of file |
| 63 | +} | ... | ... |