feat(IM): 添加群成员时同步导入成员名称

addGroupMember在导入账号后逐个调用accountImport导入成员Nick名称

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-07-20 16:59:44 +08:00
co-authored by Claude
parent 38a0aa07dd
commit b5c5251913
3 changed files with 38 additions and 1 deletions
@@ -1073,13 +1073,18 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
log.info("关爱/急救人员员工编号匹配到{}个系统用户, workNos={}", sysUsers.size(), workNoList); log.info("关爱/急救人员员工编号匹配到{}个系统用户, workNos={}", sysUsers.size(), workNoList);
// 6. 拉入IM群聊 // 6. 拉入IM群聊
List<String> memberAccounts = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList()); Map<String, SysUser> sysUserMap = sysUsers.stream().collect(Collectors.toMap(SysUser::getId, u -> u, (a, b) -> a));
List<String> memberAccounts = new ArrayList<>(sysUserMap.keySet());
AddGroupMemberDTO addDto = new AddGroupMemberDTO(); AddGroupMemberDTO addDto = new AddGroupMemberDTO();
addDto.setGroupId(groupId); addDto.setGroupId(groupId);
addDto.setSilence(1); addDto.setSilence(1);
addDto.setMemberList(memberAccounts.stream().map(account -> { addDto.setMemberList(memberAccounts.stream().map(account -> {
AddGroupMemberDTO.MemberListDTO m = new AddGroupMemberDTO.MemberListDTO(); AddGroupMemberDTO.MemberListDTO m = new AddGroupMemberDTO.MemberListDTO();
m.setMemberAccount(account); m.setMemberAccount(account);
SysUser u = sysUserMap.get(account);
if (u != null && StrUtil.isNotBlank(u.getRealname())) {
m.setMemberName(u.getRealname());
}
return m; return m;
}).collect(Collectors.toList())); }).collect(Collectors.toList()));
@@ -1371,11 +1376,26 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
if (newMemberList.isEmpty()) { if (newMemberList.isEmpty()) {
ExceptionAssertsUtil.fail("所选成员已在群聊中"); ExceptionAssertsUtil.fail("所选成员已在群聊中");
} }
// 查询成员名称用于IM账号导入
Map<String, String> memberNameMap = new HashMap<>();
List<EmergencyProfessionUser> profUsers = emergencyProfessionUserMapper.selectList(
new LambdaQueryWrapper<EmergencyProfessionUser>().in(EmergencyProfessionUser::getUserId, newMemberList));
profUsers.forEach(u -> memberNameMap.put(u.getUserId(), u.getRealname()));
List<String> 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 addGroupMemberDTO = new AddGroupMemberDTO();
addGroupMemberDTO.setGroupId(dto.getGroupId()); addGroupMemberDTO.setGroupId(dto.getGroupId());
addGroupMemberDTO.setMemberList(newMemberList.stream().map(userId -> { addGroupMemberDTO.setMemberList(newMemberList.stream().map(userId -> {
AddGroupMemberDTO.MemberListDTO memberListDTO = new AddGroupMemberDTO.MemberListDTO(); AddGroupMemberDTO.MemberListDTO memberListDTO = new AddGroupMemberDTO.MemberListDTO();
memberListDTO.setMemberAccount(userId); memberListDTO.setMemberAccount(userId);
memberListDTO.setMemberName(memberNameMap.get(userId));
return memberListDTO; return memberListDTO;
}).collect(Collectors.toList())); }).collect(Collectors.toList()));
//添加群成员 //添加群成员
@@ -1,5 +1,6 @@
package com.renkang.im.dto; package com.renkang.im.dto;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -50,5 +51,11 @@ public class AddGroupMemberDTO {
@NotNull(message = "群成员ID不能为空") @NotNull(message = "群成员ID不能为空")
@JsonProperty("Member_Account") @JsonProperty("Member_Account")
private String memberAccount; private String memberAccount;
/**
* 群成员名称(可选,仅用于IM账号导入,不发送到腾讯IM)
*/
@JsonIgnore
private String memberName;
} }
} }
@@ -532,6 +532,16 @@ public class TencentCloudImUtil {
.map(AddGroupMemberDTO.MemberListDTO::getMemberAccount) .map(AddGroupMemberDTO.MemberListDTO::getMemberAccount)
.collect(Collectors.toList()); .collect(Collectors.toList());
multiAccountImport(memberAccounts); 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); Integer random = RandomUtils.nextInt(0, 999999999);