房间在线列表处理

This commit is contained in:
2026-01-03 15:53:03 +08:00
parent 891087cf7a
commit 93b21b4ee0
3 changed files with 47 additions and 14 deletions

View File

@@ -761,7 +761,7 @@ class Friend extends Model
}
}
}
//获取此阶段的1-6麦位 全部返给前端 前端比对 里面没有自己 则闭麦……
$getRoomNullPit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',7]])->select();
$data_users = [];
foreach($getRoomNullPit as $key_data => $value_data){

View File

@@ -2269,7 +2269,7 @@ class Room extends Model
if (!$room_id) {
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
}
$room_type = db::name('vs_room')->where(['id' => $room_id])->value('type_id');
$lists['on_pit'] = [];
$lists['off_pit'] = [];
@@ -2287,14 +2287,9 @@ class Room extends Model
// 第一页特殊处理,显示麦上用户
if ($page == 1) {
// $onPitUser = db::name('vs_room_visitor')->alias('a')
// ->join('user b', 'a.user_id = b.id','left')
// ->field('a.id,a.user_id,b.nickname,b.avatar,b.hide_status,a.is_onpit')
// ->where(['a.room_id' => $room_id])//is_onpit1-未上麦0-已上麦
// ->select();
$onPitUser = db::name('vs_room_visitor')
->field('id,user_id,is_onpit')
->where(['room_id' => $room_id])
->where(['room_id' => $room_id, 'is_onpit' => 0])//0-在麦上1-不在麦上
->select();
$validOnPitUsers = [];
@@ -2338,8 +2333,13 @@ class Room extends Model
->order('a.id', 'desc')
->select();
$validOffPitUsers = [];
if(!empty($offPitUser)){
foreach ($offPitUser as &$v) {
foreach ($offPitUser as $k => $v) {
$isOnPit = db::name('vs_room_pit')->where(['user_id' => $v['user_id'],'room_id' => $room_id])->value('pit_number');
if($isOnPit){
continue;
}
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
$v['icon'][1] = model('UserData')->user_charm_icon($v['user_id']);//魅力图标
//判断是否是歌手 如果是 返回等级图标
@@ -2352,12 +2352,14 @@ class Room extends Model
$role = $this->get_user_role($v['user_id'], $room_id);
$v['role'] = $role['role'];
$v['pit_number'] = $role['pit_number'];
$validOffPitUsers [] = $v;
}
unset($v); // 释放引用
$lists['off_pit'] = $offPitUser;
$lists['off_pit'] = $validOffPitUsers;
}
} else {
$validOffPitUsers = [];
$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')
@@ -2367,7 +2369,11 @@ class Room extends Model
->select();
if(!empty($offPitUser)){
foreach ($offPitUser as &$v) {
foreach ($offPitUser as $k => $v) {
$isOnPit = db::name('vs_room_pit')->where(['user_id' => $v['user_id'],'room_id' => $room_id])->value('pit_number');
if($isOnPit){
continue;
}
$v['icon'][0] = model('UserData')->user_wealth_icon($v['user_id']);//财富图标
$v['icon'][1] = model('UserData')->user_charm_icon($v['user_id']);//魅力图标
//判断是否是歌手 如果是 返回等级图标
@@ -2380,9 +2386,10 @@ class Room extends Model
$role = $this->get_user_role($v['user_id'], $room_id);
$v['role'] = $role['role'];
$v['pit_number'] = $role['pit_number'];
$validOffPitUsers [] = $v;
}
unset($v); // 释放引用
$lists['off_pit'] = $offPitUser;
$lists['off_pit'] = $validOffPitUsers;
}
}

View File

@@ -180,6 +180,32 @@ class RoomAuction extends Model
$v['avatar'] = db::name('user')->where('id',$v['user_id'])->value('avatar');
$v['sex'] = db::name('user')->where('id',$v['user_id'])->value('sex');
}
//获取 用户列表中的用户ID
$user_ids = array_column((array)$list,'user_id');
//获取上一次的这几个用户 缓存中获取
$cache_list = Cache::get('room_auction_list_' . $auction_id);
if($cache_list){
//取交集(上次和本次都在线的)
$user_idss = array_intersect($user_ids,$cache_list);
if($user_idss){
//取差集(上次的所有和这次还在的,剩余的就是该下线的) 那就是该下线的用户
$user_ids_old = array_diff($user_idss,$cache_list);
if($user_ids_old){
foreach ($user_ids_old as $vvl){
db::name('vs_room_visitor')->where(['room_id' => $auction['room_id'],'user_id' => $vvl])->update(['is_onpit' => 1]);
}
}
}else{
foreach ($cache_list as $vl){
db::name('vs_room_visitor')->where(['room_id' => $auction['room_id'],'user_id' => $vl])->update(['is_onpit' => 1]);
}
}
}
//没有就设置这个几个上线(在线列表的时候使用)
foreach ($user_ids as $vv){
db::name('vs_room_visitor')->where(['room_id' => $auction['room_id'],'user_id' => $vv])->update(['is_onpit' => 0]);
}
Cache::set('room_auction_list_' . $auction_id,$user_ids);
}
return $list;
}