房间用户列表

This commit is contained in:
2025-12-09 20:21:36 +08:00
parent 1687640191
commit 742cd5aef2

View File

@@ -1844,56 +1844,44 @@ class Room extends Model
}
unset($v); // 释放引用
$lists['on_pit'] = $onPitUser;
$onPitUserIds = array_column($lists['on_pit'], 'user_id');
}
}
// 计算麦上用户数量
$onPitCount = count($lists['on_pit']);
// 获取麦下用户(非隐身用户)
if ($page == 1) {
// 第一页:需要的麦下用户数量 = limit - 麦上用户数量
$needOffPitCount = $limit - $onPitCount;
if ($needOffPitCount > 0) {
$offPitUser = db::name('vs_room_visitor')->alias('a')
->join('user b', 'a.user_id = b.id','left')
->field('a.user_id,b.nickname,b.avatar,b.hide_status,a.is_onpit')
->where(['a.room_id' => $room_id,'b.hide_status' => 0,'a.is_onpit' => 1,'a.user_id' => ['not in', empty($onPitUserIds) ? [0] : $onPitUserIds]]) // 非隐身且未上麦
->limit(0, $needOffPitCount)
->order('a.id', 'desc')
->select();
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']);//魅力图标
//判断是否是歌手 如果是 返回等级图标
$isSinnger = db::name('vs_singer')->where(['user_id' => $v['user_id'], 'status' => 1])->value('level');
if ($isSinnger) {
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinnger, 'deletetime' => 0])->value('image');//等级图标
}
//用户的角色
$role = $this->get_user_role($v['user_id'], $room_id);
$v['role'] = $role['role'];
$v['pit_number'] = $role['pit_number'];
}
unset($v); // 释放引用
$lists['off_pit'] = $offPitUser;
}
}
} else {
// 第二页及以后:只显示麦下用户
$offset = ($page - 1) * $limit;
// 确保偏移量不会为负数
$offset = max(0, $offset);
$offPitUser = db::name('vs_room_visitor')->alias('a')
->join('user b', 'a.user_id = b.id','left')
->field('a.user_id,b.nickname,b.avatar,b.hide_status,a.is_onpit')
->where(['a.room_id' => $room_id,'b.hide_status' => 0,'a.is_onpit' => 1,'a.user_id' => ['not in', empty($onPitUserIds) ? [0] : $onPitUserIds]]) // 非隐身且未上麦
->limit($offset, $limit)
->where(['a.room_id' => $room_id,'b.hide_status' => 0,'a.is_onpit' => 1]) // 非隐身且未上麦
->page($page, $limit)
->order('a.id', 'desc')
->select();
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']);//魅力图标
//判断是否是歌手 如果是 返回等级图标
$isSinnger = db::name('vs_singer')->where(['user_id' => $v['user_id'], 'status' => 1])->value('level');
if ($isSinnger) {
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinnger, 'deletetime' => 0])->value('image');//等级图标
}
//用户的角色
$role = $this->get_user_role($v['user_id'], $room_id);
$v['role'] = $role['role'];
$v['pit_number'] = $role['pit_number'];
}
unset($v); // 释放引用
$lists['off_pit'] = $offPitUser;
}
} else {
$offPitUser = db::name('vs_room_visitor')->alias('a')
->join('user b', 'a.user_id = b.id','left')
->field('a.user_id,b.nickname,b.avatar,b.hide_status,a.is_onpit')
->where(['a.room_id' => $room_id,'b.hide_status' => 0,'a.is_onpit' => 1]) // 非隐身且未上麦
->page($page, $limit)
->order('a.id', 'desc')
->select();