修复:房间在线人数改用 ChatStateService::getRoomUsers() 确保统计逻辑与名单一致
This commit is contained in:
@@ -555,7 +555,7 @@ class ChatController extends Controller
|
|||||||
/**
|
/**
|
||||||
* 返回所有房间的在线人数,供右侧房间面板轮询使用。
|
* 返回所有房间的在线人数,供右侧房间面板轮询使用。
|
||||||
*
|
*
|
||||||
* 合并 rooms 数据库记录与 Redis 在线名单,
|
* 使用 ChatStateService::getRoomUsers() 保证与名单逻辑完全一致。
|
||||||
* 返回 [{ id, name, online, permit_level, door_open }] 数组。
|
* 返回 [{ id, name, online, permit_level, door_open }] 数组。
|
||||||
*/
|
*/
|
||||||
public function roomsOnlineStatus(): JsonResponse
|
public function roomsOnlineStatus(): JsonResponse
|
||||||
@@ -563,12 +563,13 @@ class ChatController extends Controller
|
|||||||
$rooms = Room::orderBy('id')->get(['id', 'room_name', 'permit_level', 'door_open']);
|
$rooms = Room::orderBy('id')->get(['id', 'room_name', 'permit_level', 'door_open']);
|
||||||
|
|
||||||
$data = $rooms->map(function (Room $room) {
|
$data = $rooms->map(function (Room $room) {
|
||||||
$onlineCount = Redis::hlen("room:{$room->id}:users");
|
// 与名单/心跳使用完全相同的方式读取在线人数
|
||||||
|
$onlineCount = count($this->chatState->getRoomUsers($room->id));
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'id' => $room->id,
|
'id' => $room->id,
|
||||||
'name' => $room->room_name,
|
'name' => $room->room_name,
|
||||||
'online' => (int) $onlineCount,
|
'online' => $onlineCount,
|
||||||
'permit_level' => $room->permit_level ?? 0,
|
'permit_level' => $room->permit_level ?? 0,
|
||||||
'door_open' => (bool) $room->door_open,
|
'door_open' => (bool) $room->door_open,
|
||||||
];
|
];
|
||||||
|
|||||||
Reference in New Issue
Block a user