From a3f0a0cd83c4969d8ffb4b62a79a766b439c0dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Tue, 9 Dec 2025 19:08:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=BF=E9=97=B4=E7=94=A8=E6=88=B7=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/model/Room.php | 54 +++++++++++++++++++--------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/application/api/model/Room.php b/application/api/model/Room.php index eb60a780..a89ea952 100644 --- a/application/api/model/Room.php +++ b/application/api/model/Room.php @@ -1810,16 +1810,23 @@ class Room extends Model $lists['off_pit'] = []; $count = 0; + // 修改count计算逻辑:在麦上的用户即使隐身也要计算在内 $lists['count'] = db::name('vs_room_visitor')->alias('a') ->join('user b', 'a.user_id = b.id','left') - ->where(['a.room_id' => $room_id,'b.hide_status'=>0]) + ->where(function($query) use ($room_id) { + $query->where(['a.room_id' => $room_id,'b.hide_status'=>0]) // 非隐身用户 + ->whereOr(function($query2) use ($room_id) { + // 或者是隐身但已在麦上的用户 + $query2->where(['a.room_id' => $room_id,'b.hide_status'=>1,'a.is_onpit'=>0]); + }); + }) ->count(); if ($page == 1) { $onPitUser = db::name('vs_room_visitor')->alias('a') ->join('user b', 'a.user_id = b.id') ->field('a.user_id,b.nickname,b.avatar,b.hide_status,a.is_onpit') - ->where(['a.room_id' => $room_id,'a.is_onpit' => 0]) + ->where(['a.room_id' => $room_id,'a.is_onpit' => 0])//is_onpit:1-未上麦,0-已上麦 ->select(); if(!empty($onPitUser)){ foreach ($onPitUser as &$v) { @@ -1840,24 +1847,21 @@ class Room extends Model } } + // 计算还需要多少个未上麦的用户来填满页面 $pg = $limit - count($lists['on_pit']); + + // 正确处理分页逻辑,确保第二页及以后的数据完整性 if($pg > 0){ + // 获取未上麦的用户(非隐身用户) $offPitUser = db::name('vs_room_visitor')->alias('a') ->join('user b', 'a.user_id = b.id') ->field('a.user_id,b.nickname,b.avatar,b.hide_status,a.is_onpit') - ->where(['a.room_id' => $room_id,'a.is_onpit' => 1]) + ->where(['a.room_id' => $room_id,'b.hide_status' => 0,'a.is_onpit' => 1]) // 非隐身且未上麦 ->page($page, $pg) ->select(); - if(!empty($offPitUser)){ - // 过滤掉隐身用户并重新索引数组 - $filteredUsers = []; - foreach ($offPitUser as $v) { - if($v['hide_status'] == 1){ - $count++; - // 跳过隐身用户 - continue; - } + if(!empty($offPitUser)){ + foreach ($offPitUser as &$v) { $v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标 $v['icon'][1] = model('UserData')->user_charm_icon($v['user_id']);//魅力图标 //判断是否是歌手 如果是 返回等级图标 @@ -1870,21 +1874,13 @@ class Room extends Model $role = $this->get_user_role($v['user_id'], $room_id); $v['role'] = $role['role']; $v['pit_number'] = $role['pit_number']; - - $filteredUsers[] = $v; } - $lists['off_pit'] = $filteredUsers; + unset($v); // 释放引用 + $lists['off_pit'] = $offPitUser; } } - if (!empty($lists['off_pit']) && is_array($lists['off_pit'])) { - usort($lists['off_pit'], function ($a, $b) { - if ($a['role'] == $b['role']) { - return 0; - } - return ($a['role'] < $b['role']) ? -1 : 1; - }); - } + // 对麦位上用户按角色排序 if (!empty($lists['on_pit']) && is_array($lists['on_pit'])) { usort($lists['on_pit'], function ($a, $b) { if ($a['role'] == $b['role']) { @@ -1893,7 +1889,17 @@ class Room extends Model return ($a['role'] < $b['role']) ? -1 : 1; }); } - $lists['count'] = $lists['count'] - $count; + + // 对麦位下用户按角色排序 + if (!empty($lists['off_pit']) && is_array($lists['off_pit'])) { + usort($lists['off_pit'], function ($a, $b) { + if ($a['role'] == $b['role']) { + return 0; + } + return ($a['role'] < $b['role']) ? -1 : 1; + }); + } + return ['code' => 1, 'msg' => '成功', 'data' => $lists]; }