房间用户列表
This commit is contained in:
@@ -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];
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user