房间用户列表
This commit is contained in:
@@ -1504,7 +1504,7 @@ class Room extends Model
|
||||
|
||||
|
||||
//房间在线列表
|
||||
public function room_online_list($room_id, $page, $limit)
|
||||
public function room_online_lists($room_id, $page, $limit)
|
||||
{
|
||||
$lists['on_pit'] = [];
|
||||
$lists['off_pit'] = [];
|
||||
@@ -1623,6 +1623,182 @@ class Room extends Model
|
||||
}
|
||||
|
||||
|
||||
//房间在线列表
|
||||
public function room_online_list($room_id, $page, $limit)
|
||||
{
|
||||
if (!$room_id) {
|
||||
return ['code' => 0, 'msg' => '参数错误'];
|
||||
}
|
||||
|
||||
$roomType = db::name('vs_room')->where(['id' => $room_id])->field('type_id,label_id')->find();
|
||||
if (!$roomType) {
|
||||
return ['code' => 0, 'msg' => '房间不存在'];
|
||||
}
|
||||
|
||||
$onPitUserIds = [];
|
||||
$lists['on_pit'] = db::name('vs_room_pit')->alias('a')
|
||||
->join('user b', 'a.user_id = b.id')
|
||||
->where(['a.room_id' => $room_id, 'a.user_id' => ['>', 0]])
|
||||
->field('a.user_id,b.nickname,b.avatar,a.pit_number')
|
||||
->select();
|
||||
|
||||
// 处理麦位上的用户信息
|
||||
if (!empty($lists['on_pit']) && is_array($lists['on_pit'])) {
|
||||
foreach ($lists['on_pit'] as &$v) {
|
||||
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
|
||||
$v['icon'][1] = model('UserData')->user_wealth_icon($v['user_id'], 1);//等级图标
|
||||
$isSinger = db::name('vs_singer')->where(['user_id' => $v['user_id'], 'status' => 1])->value('level');
|
||||
if ($isSinger) {
|
||||
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinger, 'deletetime' => 0])->value('image');//等级图标
|
||||
}
|
||||
//用户的角色
|
||||
$role = $this->get_user_role($v['user_id'], $room_id);
|
||||
$v['role'] = $role['role'];
|
||||
}
|
||||
unset($v); // 释放引用
|
||||
|
||||
// 根据角色排序 房主>管理员>主持人>普通用户
|
||||
usort($lists['on_pit'], function ($a, $b) {
|
||||
if ($a['role'] == $b['role']) {
|
||||
return 0;
|
||||
}
|
||||
return ($a['role'] < $b['role']) ? -1 : 1;
|
||||
});
|
||||
|
||||
$onPitUserIds = array_column($lists['on_pit'], 'user_id');
|
||||
} else {
|
||||
$lists['on_pit'] = [];
|
||||
}
|
||||
|
||||
// 根据房间类型处理不同情况下的麦位用户
|
||||
if ($roomType['type_id'] == 10 || $roomType['type_id'] == 9 || $roomType['type_id'] == 7 ||
|
||||
($roomType['type_id'] == 1 && $roomType['label_id'] == 1)) {
|
||||
// 这些房间类型已处理过麦位用户,无需额外处理
|
||||
} elseif ($roomType['type_id'] == 1 && $roomType['label_id'] == 2) { // K歌房
|
||||
// 处理K歌房的模拟麦位用户
|
||||
$onPitUser = db::name('vs_room_pit_simulate')->alias('a')
|
||||
->join('user b', 'a.user_id = b.id')
|
||||
->field('a.user_id,b.nickname,b.avatar')
|
||||
->where(['a.room_id' => $room_id])
|
||||
->select();
|
||||
|
||||
if (!empty($onPitUser) && is_array($onPitUser)) {
|
||||
foreach ($onPitUser as &$v) {
|
||||
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
|
||||
$v['icon'][1] = model('UserData')->user_wealth_icon($v['user_id'], 1);//等级图标
|
||||
$isSinger = db::name('vs_singer')->where(['user_id' => $v['user_id'], 'status' => 1])->value('level');
|
||||
if ($isSinger) {
|
||||
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinger, 'deletetime' => 0])->value('image');//等级图标
|
||||
}
|
||||
//用户的角色
|
||||
$role = $this->get_user_role($v['user_id'], $room_id);
|
||||
$v['role'] = $role['role'];
|
||||
}
|
||||
unset($v); // 释放引用
|
||||
|
||||
// 把模拟麦位用户添加到麦位用户列表后面
|
||||
$lists['on_pit'] = array_merge($lists['on_pit'], $onPitUser);
|
||||
|
||||
// 重新根据角色排序 房主>管理员>主持人>普通用户
|
||||
usort($lists['on_pit'], function ($a, $b) {
|
||||
if ($a['role'] == $b['role']) {
|
||||
return 0;
|
||||
}
|
||||
return ($a['role'] < $b['role']) ? -1 : 1;
|
||||
});
|
||||
|
||||
$onPitUserIds = array_column($lists['on_pit'], 'user_id');
|
||||
}
|
||||
} elseif ($roomType['type_id'] == 2) { // 拍卖房
|
||||
$auction_id = db::name('vs_room_auction')
|
||||
->where(['room_id' => $room_id])
|
||||
->order('auction_id', 'desc')
|
||||
->field('auction_id,status,gift_price')
|
||||
->find();
|
||||
|
||||
if ($auction_id && $auction_id['status'] == 2) {
|
||||
$auct = db::name('vs_room_auction_bid_log')->alias('a')
|
||||
->join('user b', 'a.user_id = b.id')
|
||||
->field('a.user_id, SUM(a.gift_price) AS gift_prices, b.nickname,b.avatar')
|
||||
->where(['a.auction_id' => $auction_id['auction_id']])
|
||||
->group('user_id')
|
||||
->having('gift_prices >= ' . $auction_id['gift_price'])
|
||||
->order('gift_prices DESC')
|
||||
->limit(6)
|
||||
->select();
|
||||
|
||||
if (!empty($auct) && is_array($auct)) {
|
||||
foreach ($auct as &$v) {
|
||||
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
|
||||
$v['icon'][1] = model('UserData')->user_wealth_icon($v['user_id'], 1);//等级图标
|
||||
$isSinger = db::name('vs_singer')->where(['user_id' => $v['user_id'], 'status' => 1])->value('level');
|
||||
if ($isSinger) {
|
||||
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinger, 'deletetime' => 0])->value('image');//等级图标
|
||||
}
|
||||
//用户的角色
|
||||
$role = $this->get_user_role($v['user_id'], $room_id);
|
||||
$v['role'] = $role['role'];
|
||||
}
|
||||
unset($v); // 释放引用
|
||||
|
||||
// 把竞拍用户添加到麦位用户列表后面
|
||||
$lists['on_pit'] = array_merge($lists['on_pit'], $auct);
|
||||
|
||||
// 重新根据角色排序 房主>管理员>主持人>普通用户
|
||||
usort($lists['on_pit'], function ($a, $b) {
|
||||
if ($a['role'] == $b['role']) {
|
||||
return 0;
|
||||
}
|
||||
return ($a['role'] < $b['role']) ? -1 : 1;
|
||||
});
|
||||
|
||||
$onPitUserIds = array_column($lists['on_pit'], 'user_id');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 处理不在麦位上的用户(观众)
|
||||
$lists['off_pit'] = db::name('vs_room_visitor')->alias('a')
|
||||
->join('user b', 'a.user_id = b.id')
|
||||
->field('a.user_id,b.nickname,b.avatar')
|
||||
->where([
|
||||
'a.room_id' => $room_id,
|
||||
'b.hide_status' => 0, // 非隐身用户
|
||||
'a.user_id' => ['not in', empty($onPitUserIds) ? [0] : $onPitUserIds] // 不在麦位上的用户
|
||||
])
|
||||
->page($page, $limit)
|
||||
->select();
|
||||
|
||||
if (!empty($lists['off_pit']) && is_array($lists['off_pit'])) {
|
||||
foreach ($lists['off_pit'] as &$v) {
|
||||
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
|
||||
$v['icon'][1] = model('UserData')->user_wealth_icon($v['user_id'], 1);//等级图标
|
||||
$isSinger = db::name('vs_singer')->where(['user_id' => $v['user_id'], 'status' => 1])->value('level');
|
||||
if ($isSinger) {
|
||||
$v['icon'][2] = db::name('vs_singer_level')->where(['level' => $isSinger, 'deletetime' => 0])->value('image');//等级图标
|
||||
}
|
||||
//用户的角色
|
||||
$role = $this->get_user_role($v['user_id'], $room_id);
|
||||
$v['role'] = $role['role'];
|
||||
}
|
||||
unset($v); // 释放引用
|
||||
|
||||
// 根据角色排序 房主>管理员>主持人>普通用户
|
||||
usort($lists['off_pit'], function ($a, $b) {
|
||||
if ($a['role'] == $b['role']) {
|
||||
return 0;
|
||||
}
|
||||
return ($a['role'] < $b['role']) ? -1 : 1;
|
||||
});
|
||||
} else {
|
||||
$lists['off_pit'] = [];
|
||||
}
|
||||
|
||||
return ['code' => 1, 'msg' => '成功', 'data' => $lists];
|
||||
}
|
||||
|
||||
|
||||
|
||||
//用户在房间内的角色
|
||||
public function get_user_role($user_id, $room_id)
|
||||
{
|
||||
@@ -1639,7 +1815,7 @@ class Room extends Model
|
||||
}else{
|
||||
$return['role'] = 4;
|
||||
}
|
||||
$return['pit_number'] = db::name('vs_room_pit')->where(['room_id' => $room_id, 'user_id' => $user_id])->value('pit_number') ?? 0;
|
||||
// $return['pit_number'] = db::name('vs_room_pit')->where(['room_id' => $room_id, 'user_id' => $user_id])->value('pit_number') ?? 0;
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user