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);