$userId]), '联系人加载失败' ); $friendIds = array_values(array_unique(array_filter(array_map(static function ($uid): string { return trim((string)$uid); }, $friendResult['list'] ?? [])))); if (!$friendIds) { respond(0, 'success', ['contacts' => []]); } $usersResult = requireImSuccess( imAdminPost('/admin/user/batch_get_infos', ['list' => $friendIds]), '联系人资料加载失败' ); try { ensureWebImAppTables(); $remarkMap = fetchWebUserRemarkMap(imAppDb(), $userId, $friendIds); } catch (Throwable) { $remarkMap = []; } try { $friendAliasMap = fetchImFriendAliasMap(imDb(), $userId, $friendIds); } catch (Throwable) { $friendAliasMap = []; } $contactsByUid = []; foreach (array_values(array_filter($usersResult['userInfos'] ?? [], 'is_array')) as $user) { $uid = (string)($user['userId'] ?? ''); if ($uid === '' || isset($contactsByUid[$uid])) { continue; } $alias = $friendAliasMap[$uid] ?? ''; if ($alias === '') { $alias = $remarkMap[$uid] ?? ''; } $contactsByUid[$uid] = [ 'uid' => $uid, 'name' => (string)($user['name'] ?? $uid), 'displayName' => (string)($user['displayName'] ?? $user['name'] ?? $uid), 'mobile' => (string)($user['mobile'] ?? ''), 'portrait' => (string)($user['portrait'] ?? ''), 'address' => (string)($user['address'] ?? ''), 'alias' => $alias, ]; } respond(0, 'success', ['contacts' => array_values($contactsByUid)]); } catch (Throwable $error) { respond(500, $error->getMessage() ?: '联系人服务暂不可用'); }