diff --git a/application/api/model/Friend.php b/application/api/model/Friend.php index a98f9475..1809622f 100644 --- a/application/api/model/Friend.php +++ b/application/api/model/Friend.php @@ -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){ diff --git a/application/api/model/Room.php b/application/api/model/Room.php index 1413ca35..6432e093 100644 --- a/application/api/model/Room.php +++ b/application/api/model/Room.php @@ -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_onpit:1-未上麦,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; } } diff --git a/application/api/model/RoomAuction.php b/application/api/model/RoomAuction.php index 5b61ee3a..7ad17523 100644 --- a/application/api/model/RoomAuction.php +++ b/application/api/model/RoomAuction.php @@ -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; }