From b5c5251913b868f303acfe5e387d84ed6af1a82e Mon Sep 17 00:00:00 2001 From: pengjie <2413927716@qq.com> Date: Mon, 20 Jul 2026 16:59:44 +0800 Subject: [PATCH] =?UTF-8?q?feat(IM):=20=E6=B7=BB=E5=8A=A0=E7=BE=A4?= =?UTF-8?q?=E6=88=90=E5=91=98=E6=97=B6=E5=90=8C=E6=AD=A5=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=88=90=E5=91=98=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit addGroupMember在导入账号后逐个调用accountImport导入成员Nick名称 Co-Authored-By: Claude --- .../service/impl/EmergencyApiServiceImpl.java | 22 ++++++++++++++++++- .../com/renkang/im/dto/AddGroupMemberDTO.java | 7 ++++++ .../renkang/im/util/TencentCloudImUtil.java | 10 +++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/impl/EmergencyApiServiceImpl.java b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/impl/EmergencyApiServiceImpl.java index 8f37a2a..698d76d 100644 --- a/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/impl/EmergencyApiServiceImpl.java +++ b/health-emergency/health-emergency-biz/src/main/java/com/renkang/emergency/api/service/impl/EmergencyApiServiceImpl.java @@ -1073,13 +1073,18 @@ public class EmergencyApiServiceImpl implements EmergencyApiService { log.info("关爱/急救人员员工编号匹配到{}个系统用户, workNos={}", sysUsers.size(), workNoList); // 6. 拉入IM群聊 - List memberAccounts = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList()); + Map sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getId, u -> u, (a, b) -> a)); + List memberAccounts = new ArrayList<>(sysUserMap.keySet()); AddGroupMemberDTO addDto = new AddGroupMemberDTO(); addDto.setGroupId(groupId); addDto.setSilence(1); addDto.setMemberList(memberAccounts.stream().map(account -> { AddGroupMemberDTO.MemberListDTO m = new AddGroupMemberDTO.MemberListDTO(); m.setMemberAccount(account); + SysUser u = sysUserMap.get(account); + if (u != null && StrUtil.isNotBlank(u.getRealname())) { + m.setMemberName(u.getRealname()); + } return m; }).collect(Collectors.toList())); @@ -1371,11 +1376,26 @@ public class EmergencyApiServiceImpl implements EmergencyApiService { if (newMemberList.isEmpty()) { ExceptionAssertsUtil.fail("所选成员已在群聊中"); } + // 查询成员名称用于IM账号导入 + Map memberNameMap = new HashMap<>(); + List profUsers = emergencyProfessionUserMapper.selectList( + new LambdaQueryWrapper().in(EmergencyProfessionUser::getUserId, newMemberList)); + profUsers.forEach(u -> memberNameMap.put(u.getUserId(), u.getRealname())); + List remainingIds = newMemberList.stream() + .filter(id -> !memberNameMap.containsKey(id)).collect(Collectors.toList()); + if (!remainingIds.isEmpty()) { + emergencyCloudManager.listUser(remainingIds).forEach((id, u) -> { + if (StrUtil.isNotBlank(u.getRealname())) { + memberNameMap.put(id, u.getRealname()); + } + }); + } AddGroupMemberDTO addGroupMemberDTO = new AddGroupMemberDTO(); addGroupMemberDTO.setGroupId(dto.getGroupId()); addGroupMemberDTO.setMemberList(newMemberList.stream().map(userId -> { AddGroupMemberDTO.MemberListDTO memberListDTO = new AddGroupMemberDTO.MemberListDTO(); memberListDTO.setMemberAccount(userId); + memberListDTO.setMemberName(memberNameMap.get(userId)); return memberListDTO; }).collect(Collectors.toList())); //添加群成员 diff --git a/health-im/health-im-api/src/main/java/com/renkang/im/dto/AddGroupMemberDTO.java b/health-im/health-im-api/src/main/java/com/renkang/im/dto/AddGroupMemberDTO.java index 96842d4..5ead20d 100644 --- a/health-im/health-im-api/src/main/java/com/renkang/im/dto/AddGroupMemberDTO.java +++ b/health-im/health-im-api/src/main/java/com/renkang/im/dto/AddGroupMemberDTO.java @@ -1,5 +1,6 @@ package com.renkang.im.dto; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -50,5 +51,11 @@ public class AddGroupMemberDTO { @NotNull(message = "群成员ID不能为空") @JsonProperty("Member_Account") private String memberAccount; + + /** + * 群成员名称(可选,仅用于IM账号导入,不发送到腾讯IM) + */ + @JsonIgnore + private String memberName; } } diff --git a/health-im/health-im-biz/src/main/java/com/renkang/im/util/TencentCloudImUtil.java b/health-im/health-im-biz/src/main/java/com/renkang/im/util/TencentCloudImUtil.java index 443749d..71dfd89 100644 --- a/health-im/health-im-biz/src/main/java/com/renkang/im/util/TencentCloudImUtil.java +++ b/health-im/health-im-biz/src/main/java/com/renkang/im/util/TencentCloudImUtil.java @@ -532,6 +532,16 @@ public class TencentCloudImUtil { .map(AddGroupMemberDTO.MemberListDTO::getMemberAccount) .collect(Collectors.toList()); multiAccountImport(memberAccounts); + // 导入成员名称(失败不影响主流程) + for (AddGroupMemberDTO.MemberListDTO member : dto.getMemberList()) { + if (StringUtils.isNotEmpty(member.getMemberName())) { + try { + accountImport(member.getMemberAccount(), member.getMemberName(), null); + } catch (Exception e) { + log.warn("导入群成员名称失败, account={}, name={}", member.getMemberAccount(), member.getMemberName(), e); + } + } + } } Integer random = RandomUtils.nextInt(0, 999999999);