feat: 补充IM个人资料同步 + 群成员头像导入修复
1. 在8处头像/名称变更点补充imHelloApi.accountReg()调用,同步更新IM个人资料: - SysUserController.updateUserAvatar 用户换头像 - SysUserController.appEdit 移动端编辑资料 - SysUserController.edit 后台编辑用户 - EmergencyProfessionUserServiceImpl.customEdit 应急人员编辑 - EmergencyCenterAdminServiceImpl.updateAdmin 中心管理员编辑 - HealthUserEmployeeExServiceImpl.updateUserInfo 员工编辑 - ConDoctorApiController.update 专家端个人简介修改 - AsyncExportService.importDoctor 批量导入医生 所有syncImProfile方法内部try-catch兜底,失败不影响主流程。 2. AddGroupMemberDTO新增memberAvatar字段,TencentCloudImUtil.addGroupMember 导入IM账号时传递FaceUrl,EmergencyApiServiceImpl.addGroupUser构建头像映射。 3. jeecg-system-biz/pom.xml新增health-im-api依赖。 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
+12
-2
@@ -1384,11 +1384,17 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
|
||||
if (newMemberList.isEmpty()) {
|
||||
ExceptionAssertsUtil.fail("所选成员已在群聊中");
|
||||
}
|
||||
// 查询成员名称用于IM账号导入
|
||||
// 查询成员名称和头像用于IM账号导入
|
||||
Map<String, String> memberNameMap = new HashMap<>();
|
||||
Map<String, String> memberAvatarMap = new HashMap<>();
|
||||
List<EmergencyProfessionUser> profUsers = emergencyProfessionUserMapper.selectList(
|
||||
new LambdaQueryWrapper<EmergencyProfessionUser>().in(EmergencyProfessionUser::getUserId, newMemberList));
|
||||
profUsers.forEach(u -> memberNameMap.put(u.getUserId(), u.getRealname()));
|
||||
profUsers.forEach(u -> {
|
||||
memberNameMap.put(u.getUserId(), u.getRealname());
|
||||
if (StrUtil.isNotBlank(u.getAvatar())) {
|
||||
memberAvatarMap.put(u.getUserId(), u.getAvatar());
|
||||
}
|
||||
});
|
||||
List<String> remainingIds = newMemberList.stream()
|
||||
.filter(id -> !memberNameMap.containsKey(id)).collect(Collectors.toList());
|
||||
if (!remainingIds.isEmpty()) {
|
||||
@@ -1396,6 +1402,9 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
|
||||
if (StrUtil.isNotBlank(u.getRealname())) {
|
||||
memberNameMap.put(id, u.getRealname());
|
||||
}
|
||||
if (StrUtil.isNotBlank(u.getAvatar())) {
|
||||
memberAvatarMap.put(id, u.getAvatar());
|
||||
}
|
||||
});
|
||||
}
|
||||
AddGroupMemberDTO addGroupMemberDTO = new AddGroupMemberDTO();
|
||||
@@ -1404,6 +1413,7 @@ public class EmergencyApiServiceImpl implements EmergencyApiService {
|
||||
AddGroupMemberDTO.MemberListDTO memberListDTO = new AddGroupMemberDTO.MemberListDTO();
|
||||
memberListDTO.setMemberAccount(userId);
|
||||
memberListDTO.setMemberName(memberNameMap.get(userId));
|
||||
memberListDTO.setMemberAvatar(memberAvatarMap.get(userId));
|
||||
return memberListDTO;
|
||||
}).collect(Collectors.toList()));
|
||||
//添加群成员
|
||||
|
||||
+26
@@ -14,8 +14,14 @@ import com.renkang.emergency.entity.EmergencyCenterAdmin;
|
||||
import com.renkang.emergency.manager.EmergencyCloudManager;
|
||||
import com.renkang.emergency.mapper.EmergencyCenterAdminMapper;
|
||||
import com.renkang.emergency.service.IEmergencyCenterAdminService;
|
||||
import com.renkang.im.api.IMHelloApi;
|
||||
import com.renkang.im.entity.ConSessionRequestDO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jeecg.bean.request.ListUser;
|
||||
import org.jeecg.common.constant.CommonConstant;
|
||||
import org.jeecg.common.exception.ExceptionAssertsUtil;
|
||||
import org.jeecg.common.system.api.ISysBaseAPI;
|
||||
import org.jeecg.common.system.vo.LoginUserNew;
|
||||
import org.jeecg.common.system.vo.SysUserModel;
|
||||
import org.jeecg.common.util.CheckPasswordUtil;
|
||||
import org.jeecg.common.util.PasswordUtil;
|
||||
@@ -37,6 +43,7 @@ import java.util.List;
|
||||
* @Author YangYuanChen
|
||||
* @Data 20242024/8/21下午2:06
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class EmergencyCenterAdminServiceImpl extends ServiceImpl<EmergencyCenterAdminMapper, EmergencyCenterAdmin> implements IEmergencyCenterAdminService {
|
||||
|
||||
@@ -44,6 +51,10 @@ public class EmergencyCenterAdminServiceImpl extends ServiceImpl<EmergencyCenter
|
||||
private EmergencyCloudManager cloudManager;
|
||||
@Autowired
|
||||
private RedisStreamUtil redisStreamUtil;
|
||||
@Autowired
|
||||
private IMHelloApi imHelloApi;
|
||||
@Autowired
|
||||
private ISysBaseAPI sysBaseAPI;
|
||||
|
||||
@Override
|
||||
public IPage<EmergencyCenterAdmin> customPage(String centerId, String type, String realName, Integer pageNo, Integer pageSize) {
|
||||
@@ -101,6 +112,21 @@ public class EmergencyCenterAdminServiceImpl extends ServiceImpl<EmergencyCenter
|
||||
|
||||
// 修改system
|
||||
updateUserStream(byId.getUserId(), admin.getRealname());
|
||||
// 同步IM个人资料
|
||||
syncImProfile(byId.getUserId());
|
||||
}
|
||||
|
||||
private void syncImProfile(String userId) {
|
||||
try {
|
||||
List<LoginUserNew> users = sysBaseAPI.listUserByIds(new ListUser(Collections.singletonList(userId)));
|
||||
if (CollUtil.isNotEmpty(users)) {
|
||||
ConSessionRequestDO req = new ConSessionRequestDO();
|
||||
req.setAccountList(Collections.singletonList(users.get(0)));
|
||||
imHelloApi.accountReg(req);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("同步IM个人资料失败, userId: {}", userId, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+27
@@ -17,8 +17,14 @@ import com.renkang.emergency.manager.PermissionManager;
|
||||
import com.renkang.emergency.mapper.EmergencyProfessionUserMapper;
|
||||
import com.renkang.emergency.mapper.EmergencySchedulesNewItemMapper;
|
||||
import com.renkang.emergency.service.EmergencyProfessionUserService;
|
||||
import com.renkang.im.api.IMHelloApi;
|
||||
import com.renkang.im.entity.ConSessionRequestDO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jeecg.bean.request.ListUser;
|
||||
import org.jeecg.common.constant.CommonConstant;
|
||||
import org.jeecg.common.exception.ExceptionAssertsUtil;
|
||||
import org.jeecg.common.system.api.ISysBaseAPI;
|
||||
import org.jeecg.common.system.vo.LoginUserNew;
|
||||
import org.jeecg.common.system.vo.SysUserModel;
|
||||
import org.jeecg.common.util.PasswordUtil;
|
||||
import org.jeecg.redis.RedisStreamKeyEnum;
|
||||
@@ -27,6 +33,7 @@ import org.jeecg.util.RSAEncryptUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -37,6 +44,7 @@ import java.util.stream.Collectors;
|
||||
* @author stan
|
||||
* @since 2024-09-12 09:38:13
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class EmergencyProfessionUserServiceImpl extends ServiceImpl<EmergencyProfessionUserMapper, EmergencyProfessionUser> implements EmergencyProfessionUserService {
|
||||
|
||||
@@ -48,6 +56,10 @@ public class EmergencyProfessionUserServiceImpl extends ServiceImpl<EmergencyPro
|
||||
private PermissionManager permissionManager;
|
||||
@Autowired
|
||||
private EmergencySchedulesNewItemMapper emergencySchedulesNewItemMapper;
|
||||
@Autowired
|
||||
private IMHelloApi imHelloApi;
|
||||
@Autowired
|
||||
private ISysBaseAPI sysBaseAPI;
|
||||
|
||||
@Override
|
||||
public IPage<EmergencyProfessionUser> customPage(String name, String centerId, int type, int pageNo, int pageSize) {
|
||||
@@ -145,6 +157,21 @@ public class EmergencyProfessionUserServiceImpl extends ServiceImpl<EmergencyPro
|
||||
}
|
||||
// 修改system
|
||||
updateUserStream(oldData.getUserId(), data.getRealname(), data.getAvatar());
|
||||
// 同步IM个人资料
|
||||
syncImProfile(oldData.getUserId());
|
||||
}
|
||||
|
||||
private void syncImProfile(String userId) {
|
||||
try {
|
||||
List<LoginUserNew> users = sysBaseAPI.listUserByIds(new ListUser(Collections.singletonList(userId)));
|
||||
if (CollUtil.isNotEmpty(users)) {
|
||||
ConSessionRequestDO req = new ConSessionRequestDO();
|
||||
req.setAccountList(Collections.singletonList(users.get(0)));
|
||||
imHelloApi.accountReg(req);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("同步IM个人资料失败, userId: {}", userId, e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user