From 07d6f21fedfaed25c29afb3aa79dc6839d4e2f68 Mon Sep 17 00:00:00 2001 From: pengjie <2413927716@qq.com> Date: Tue, 4 Aug 2026 18:58:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(im):=20=E9=82=80=E8=AF=B7=E5=85=A5=E7=BE=A4?= =?UTF-8?q?=E6=97=B6=E4=BD=BF=E7=94=A8=E7=9C=9F=E5=AE=9E=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=BA=AB=E4=BB=BD=E8=B0=83=E7=94=A8IM=20API,=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E6=98=BE=E7=A4=BA=E7=9C=9F=E5=AE=9E=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=90=8D=E8=80=8C=E9=9D=9Eadministrator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AddGroupMemberDTO 新增 fromAccount 内部字段 - TencentCloudImUtil 新增带 identifier 参数的 getHttpsUrl 重载 - addGroupMember 检测 fromAccount,有则用该用户 UserSig - EmergencyApiServiceImpl.addGroupUser 传入当前登录用户ID Co-Authored-By: Claude --- .../service/impl/EmergencyApiServiceImpl.java | 1 + .../com/renkang/im/dto/AddGroupMemberDTO.java | 7 ++++++ .../renkang/im/util/TencentCloudImUtil.java | 22 +++++++++++++++---- 3 files changed, 26 insertions(+), 4 deletions(-) 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 0034161..0b52d6d 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 @@ -1400,6 +1400,7 @@ public class EmergencyApiServiceImpl implements EmergencyApiService { } AddGroupMemberDTO addGroupMemberDTO = new AddGroupMemberDTO(); addGroupMemberDTO.setGroupId(dto.getGroupId()); + addGroupMemberDTO.setFromAccount(loginUser.getId()); addGroupMemberDTO.setMemberList(newMemberList.stream().map(userId -> { AddGroupMemberDTO.MemberListDTO memberListDTO = new AddGroupMemberDTO.MemberListDTO(); memberListDTO.setMemberAccount(userId); 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 7bb39d2..9a51d5a 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 @@ -40,6 +40,13 @@ public class AddGroupMemberDTO { @JsonProperty("MemberList") private List memberList; + /** + * 发起邀请的用户ID(内部字段,不发送到腾讯IM) + * 设置后会使用该用户的 UserSig 调用 IM API,系统通知会显示该用户名 + * 不设置则默认使用 administrator + */ + private String fromAccount; + @NoArgsConstructor @Data public static class MemberListDTO { 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 fe46454..04251e2 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 @@ -114,8 +114,18 @@ public class TencentCloudImUtil { * 获取腾讯im请求路径 */ private String getHttpsUrl(String imServiceApi, Integer random) { + return getHttpsUrl(imServiceApi, random, APP_MANAGER); + } + + /** + * 获取腾讯im请求路径(指定操作人) + * + * @param identifier 操作人账号,系统通知中会显示该用户名 + */ + private String getHttpsUrl(String imServiceApi, Integer random, String identifier) { + String userSig = tximUtil.genUserSig(identifier); return String.format("%s%s?sdkappid=%s&identifier=%s&usersig=%s&random=%s&contenttype=json", - HTTPS_URL_PREFIX, imServiceApi, sdkAppId, APP_MANAGER, this.getTxCloudUserSig(), random); + HTTPS_URL_PREFIX, imServiceApi, sdkAppId, identifier, userSig, random); } @@ -566,18 +576,22 @@ public class TencentCloudImUtil { importAccountsWithNames(accountList); } + // 如果指定了 fromAccount,则用该用户身份调用 API,系统通知会显示真实用户名 + String identifier = StringUtils.isNotEmpty(dto.getFromAccount()) ? dto.getFromAccount() : APP_MANAGER; + Integer random = RandomUtils.nextInt(0, 999999999); - String httpsUrl = getHttpsUrl(TencentCloudImApiConstant.GroupManage.ADD_GROUP_MEMBER, random); + String httpsUrl = getHttpsUrl(TencentCloudImApiConstant.GroupManage.ADD_GROUP_MEMBER, random, identifier); String jsonString = objectMapper.writeValueAsString(dto); JSONObject jsonObject = JSONObject.parseObject(jsonString); - // 移除 memberName 字段,腾讯IM API 不接受此字段 + // 移除内部字段,腾讯IM API 不接受 + jsonObject.remove("fromAccount"); JSONArray memberList = jsonObject.getJSONArray("MemberList"); if (memberList != null) { for (int i = 0; i < memberList.size(); i++) { memberList.getJSONObject(i).remove("memberName"); } } - log.info("腾讯云im添加群成员,请求参数:{}", jsonObject); + log.info("腾讯云im添加群成员,identifier={},请求参数:{}", identifier, jsonObject); String result = HttpUtil.doPost(httpsUrl, jsonObject); log.info("腾讯云im添加群成员,返回结果:{}", result); return JSONObject.toJavaObject(JSONObject.parseObject(result), AddGroupMemberVO.class);