房间在线列表处理
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user