房间在线列表处理

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

@@ -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;
}