diff --git a/app/Http/Controllers/ChatController.php b/app/Http/Controllers/ChatController.php index 092329e..4699188 100644 --- a/app/Http/Controllers/ChatController.php +++ b/app/Http/Controllers/ChatController.php @@ -555,7 +555,7 @@ class ChatController extends Controller /** * 返回所有房间的在线人数,供右侧房间面板轮询使用。 * - * 合并 rooms 数据库记录与 Redis 在线名单, + * 使用 ChatStateService::getRoomUsers() 保证与名单逻辑完全一致。 * 返回 [{ id, name, online, permit_level, door_open }] 数组。 */ public function roomsOnlineStatus(): JsonResponse @@ -563,12 +563,13 @@ class ChatController extends Controller $rooms = Room::orderBy('id')->get(['id', 'room_name', 'permit_level', 'door_open']); $data = $rooms->map(function (Room $room) { - $onlineCount = Redis::hlen("room:{$room->id}:users"); + // 与名单/心跳使用完全相同的方式读取在线人数 + $onlineCount = count($this->chatState->getRoomUsers($room->id)); return [ 'id' => $room->id, 'name' => $room->room_name, - 'online' => (int) $onlineCount, + 'online' => $onlineCount, 'permit_level' => $room->permit_level ?? 0, 'door_open' => (bool) $room->door_open, ];