From 154d9ca8a201dd3537f48fdb518c3775e6cb1083 Mon Sep 17 00:00:00 2001 From: lkddi Date: Tue, 3 Mar 2026 14:48:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E4=BA=BA=E6=95=B0=E6=94=B9=E7=94=A8=20ChatSt?= =?UTF-8?q?ateService::getRoomUsers()=20=E7=A1=AE=E4=BF=9D=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E9=80=BB=E8=BE=91=E4=B8=8E=E5=90=8D=E5=8D=95=E4=B8=80?= =?UTF-8?q?=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/ChatController.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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, ];