From 3aa16600d895f816a33aaf5609ca6209a73edb64 Mon Sep 17 00:00:00 2001 From: pengjie <2413927716@qq.com> Date: Mon, 20 Jul 2026 17:35:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(im):=20=E6=96=B0=E5=A2=9EimportAccountsWit?= =?UTF-8?q?hNames=E6=96=B9=E6=B3=95=EF=BC=8CaddGroupMember=E6=97=B6?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=AF=BC=E5=85=A5=E8=B4=A6=E5=8F=B7=E5=90=8D?= =?UTF-8?q?=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 importAccountsWithNames 方法,使用腾讯IM新版 AccountList 格式导入账号及昵称 - addGroupMember 改为调用新方法,一次批量导入账号+名称 - multiAccountImport 旧方法保持不变,不影响其他调用方 - AddGroupMemberDTO.memberName 移除@JsonIgnore,确保Feign跨服务传输 Co-Authored-By: Claude --- .../renkang/im/util/TencentCloudImUtil.java | 38 ++++++++++++------- 1 file changed, 25 insertions(+), 13 deletions(-) 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 3f5759a..ad28e27 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 @@ -164,6 +164,22 @@ public class TencentCloudImUtil { return result; } + /** + * 导入多个账号(带昵称) + * + * @param accounts 账号信息列表,每个元素包含 UserID 和可选的 Nick + */ + public String importAccountsWithNames(List accounts) { + Integer random = RandomUtils.nextInt(0, 999999999); + String httpsUrl = getHttpsUrl(TencentCloudImApiConstant.AccountManage.MULTI_ACCOUNT_IMPORT, random); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("AccountList", accounts); + log.info("腾讯云im导入多个账号,请求参数:{}", jsonObject); + String result = HttpUtil.doPost(httpsUrl, jsonObject); + log.info("腾讯云im导入多个账户,返回结果:{}", result); + return result; + } + /** * 删除账号 * @@ -526,22 +542,18 @@ public class TencentCloudImUtil { */ public AddGroupMemberVO addGroupMember(AddGroupMemberDTO dto) { try { - // 先导入账号,确保成员在IM系统中已注册 + // 先导入账号及其名称,确保成员在IM系统中已注册 if (dto.getMemberList() != null && !dto.getMemberList().isEmpty()) { - List memberAccounts = dto.getMemberList().stream() - .map(AddGroupMemberDTO.MemberListDTO::getMemberAccount) - .collect(Collectors.toList()); - multiAccountImport(memberAccounts); - // 导入成员名称(失败不影响主流程) - for (AddGroupMemberDTO.MemberListDTO member : dto.getMemberList()) { + // 构建腾讯IM新版 AccountList 格式(含昵称) + List accountList = dto.getMemberList().stream().map(member -> { + JSONObject account = new JSONObject(); + account.put("UserID", member.getMemberAccount()); if (StringUtils.isNotEmpty(member.getMemberName())) { - try { - accountImport(member.getMemberAccount(), member.getMemberName(), null); - } catch (Exception e) { - log.warn("导入群成员名称失败, account={}, name={}", member.getMemberAccount(), member.getMemberName(), e); - } + account.put("Nick", member.getMemberName()); } - } + return account; + }).collect(Collectors.toList()); + importAccountsWithNames(accountList); } Integer random = RandomUtils.nextInt(0, 999999999);