diff --git a/application/api/model/Friend.php b/application/api/model/Friend.php index daaf65f..fc14120 100644 --- a/application/api/model/Friend.php +++ b/application/api/model/Friend.php @@ -570,108 +570,120 @@ class Friend extends Model //换麦 public function changePitToPosPair($room_id,$friendPlayPit){ -// $push = new Push(0, $this->room_id); - //获取实际麦位上的用 - $newPitUser = array_keys($friendPlayPit); - //获取当前麦位上的用户 - $oldPitUser = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number'=>['<',7]])->column('user_id'); - //获取交集 - $intersection = array_intersect($newPitUser,$oldPitUser); - //取差集 - $diff = array_diff($newPitUser,$oldPitUser); - $changeData = []; - if($diff){ - //推下麦 - foreach($diff as $key => $value){ - if(in_array($value,$oldPitUser)){ - //查询当前空麦位 - $pit_null = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]); - if($pit_null){ -// $this->room_pit_model->getOnPit($this->room_id, $value, $pit_null); - model('api/RoomPit')->OnPit($value, $room_id, $pit_null); -// db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $pit_null])->update(['user_id' => $value]); - }else{ - //下麦 - $UserRoomPit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'user_id' => $value])->value('pit_number'); - model('api/RoomPit')->DownPit($value, $room_id, $UserRoomPit); - } - } - - if(in_array($value,$newPitUser)){ - //推上麦 - //获取目标麦位是否有人 - $getRoomPitUser= db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $friendPlayPit[$value]])->value('user_id'); - if($getRoomPitUser){ + $now_pit_u = array_flip($friendPlayPit); + //按照键值排序数组 + ksort($now_pit_u); + //查询现在麦位上有用户的数据 并且重组结果,键为麦位,值为用户,值必须存在,没值则不展示 + $pit_user = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number'=>['<',7],'user_id' => ['>', 0]]) + ->order('pit_number ASC') + ->column('pit_number,user_id'); + //比较两个数组,无论是键的差异还是值的差异,都输出字符串”有差异“否则输出”没有差异“ + $result = array_diff_assoc($pit_user, $now_pit_u); + $result2 = array_diff_assoc($now_pit_u, $pit_user); + if(!empty($result) || !empty($result2)){ +// var_dump('有差异'); + //获取实际麦位上的用 + $newPitUser = array_keys($friendPlayPit); + //获取当前麦位上的用户 + $oldPitUser = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number'=>['<',7]])->column('user_id'); + //获取交集 + $intersection = array_intersect($newPitUser,$oldPitUser); + //取差集 + $diff = array_diff($newPitUser,$oldPitUser); + $changeData = []; + if($diff){ + //推下麦 + foreach($diff as $key => $value){ + if(in_array($value,$oldPitUser)){ //查询当前空麦位 - $getRoomNullPitss = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10,$friendPlayPit[$value]]); - if($getRoomNullPitss){ -// $this->room_pit_model->getOnPit($this->room_id, $getRoomPitUser, $getRoomNullPitss); - db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $getRoomNullPitss])->update(['user_id' => $getRoomPitUser]); + $pit_null = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]); + if($pit_null){ +// $this->room_pit_model->getOnPit($this->room_id, $value, $pit_null); + model('api/RoomPit')->OnPit($value, $room_id, $pit_null); +// db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $pit_null])->update(['user_id' => $value]); }else{ - model('api/RoomPit')->DownPit($getRoomPitUser, $room_id, $friendPlayPit[$value]); + //下麦 + $UserRoomPit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'user_id' => $value])->value('pit_number'); + model('api/RoomPit')->DownPit($value, $room_id, $UserRoomPit); } } - model('api/RoomPit')->OnPit($value, $room_id, $friendPlayPit[$value]); - } - } - } - if($intersection){//交换麦位 - //查询麦上的用户 - $newPitUserStr = implode(',',$newPitUser); - $getRoomPit = db::name('vs_room_pit')->where("room_id=".$room_id." AND user_id in (".$newPitUserStr.")")->column('pit_number'); - db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['in', $getRoomPit]])->update(['user_id' => 0]); - $changePitUser = []; - foreach ($friendPlayPit as $key => $value){ - if(empty($value)){ - $value = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]); - } - //获取目标麦位是否有人 - $isPitHaveUser= db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $value])->value('user_id'); - if($isPitHaveUser && !in_array($isPitHaveUser,$newPitUser)){ - $changePitUser[$key]['user_id'] = $isPitHaveUser; - $changePitUser[$key]['pit_number'] = $value; - } - db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $value])->update(['user_id' => $key]); - } - //处理原麦位上的用户 - foreach ($changePitUser as $key_change => $value_change){ - //判断是否在左边 1,,2,,3 麦位上 - if(in_array($value_change['pit_number'],[1,2,3])){ - $null_pit = model('api/RoomPit')->getRoomNullPitWithout($room_id, [4,5,6,7,8,9,10]); - if(empty($null_pit)){ - $null_pit = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]); - } - }else{ - $null_pit = model('api/RoomPit')->getRoomNullPitWithout($room_id, [1,2,3,7,8,9,10]); - if(empty($null_pit)){ - $null_pit = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]); - } - } - db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $null_pit])->update(['user_id' => $value_change['user_id']]); - } -// $getRoomNullPit = $this->room_pit_model->where(['room_id'=>$room_id,'pit_number'=>['notin',[7,9]]])->select(); - $getRoomNullPit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',7]])->select(); - $data_users = []; - foreach($getRoomNullPit as $key_data => $value_data){ - $data_users[$key_data]['user_id'] = $value_data['user_id']; - $data_users[$key_data]['nickname'] = db::name('user')->where('id',$value_data['user_id'])->value('nickname'); - $data_users[$key_data]['avatar'] = db::name('user')->where('id',$value_data['user_id'])->value('avatar'); - $data_users[$key_data]['sex'] = db::name('user')->where('id',$value_data['user_id'])->value('sex'); - //获取用户在此房间今天的魅力值 - $charm =[]; - if($value_data['user_id']){ - $charm = db::name('vs_room_user_charm')->where(['user_id' => $value_data['user_id'],'room_id' => $room_id])->value('charm'); - } - $data_users[$key_data]['dress'] = model('Decorate')->user_decorate_detail($value_data['user_id'],1); - $data_users[$key_data]['charm'] = $charm??0; - $data_users[$key_data]['pit_number'] = $value_data['pit_number']; - } - //推送给前端消息 - $text['text'] = '房间换麦位'; - $text['list'] = $data_users; - model('api/Chat')->sendMsg(1053,$room_id,$text); - } + if(in_array($value,$newPitUser)){ + //推上麦 + //获取目标麦位是否有人 + $getRoomPitUser= db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $friendPlayPit[$value]])->value('user_id'); + if($getRoomPitUser){ + //查询当前空麦位 + $getRoomNullPitss = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10,$friendPlayPit[$value]]); + if($getRoomNullPitss){ +// $this->room_pit_model->getOnPit($this->room_id, $getRoomPitUser, $getRoomNullPitss); + db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $getRoomNullPitss])->update(['user_id' => $getRoomPitUser]); + }else{ + model('api/RoomPit')->DownPit($getRoomPitUser, $room_id, $friendPlayPit[$value]); + } + } + model('api/RoomPit')->OnPit($value, $room_id, $friendPlayPit[$value]); + } + } + } + if($intersection){//交换麦位 + //查询麦上的用户 + $newPitUserStr = implode(',',$newPitUser); + $getRoomPit = db::name('vs_room_pit')->where("room_id=".$room_id." AND user_id in (".$newPitUserStr.")")->column('pit_number'); + db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['in', $getRoomPit]])->update(['user_id' => 0]); + $changePitUser = []; + foreach ($friendPlayPit as $key => $value){ + if(empty($value)){ + $value = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]); + } + //获取目标麦位是否有人 + $isPitHaveUser= db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $value])->value('user_id'); + if($isPitHaveUser && !in_array($isPitHaveUser,$newPitUser)){ + $changePitUser[$key]['user_id'] = $isPitHaveUser; + $changePitUser[$key]['pit_number'] = $value; + } + db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $value])->update(['user_id' => $key]); + } + //处理原麦位上的用户 + foreach ($changePitUser as $key_change => $value_change){ + //判断是否在左边 1,,2,,3 麦位上 + if(in_array($value_change['pit_number'],[1,2,3])){ + $null_pit = model('api/RoomPit')->getRoomNullPitWithout($room_id, [4,5,6,7,8,9,10]); + if(empty($null_pit)){ + $null_pit = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]); + } + }else{ + $null_pit = model('api/RoomPit')->getRoomNullPitWithout($room_id, [1,2,3,7,8,9,10]); + if(empty($null_pit)){ + $null_pit = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]); + } + } + db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $null_pit])->update(['user_id' => $value_change['user_id']]); + } +// $getRoomNullPit = $this->room_pit_model->where(['room_id'=>$room_id,'pit_number'=>['notin',[7,9]]])->select(); + $getRoomNullPit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',7]])->select(); + $data_users = []; + foreach($getRoomNullPit as $key_data => $value_data){ + $data_users[$key_data]['user_id'] = $value_data['user_id']; + $data_users[$key_data]['nickname'] = db::name('user')->where('id',$value_data['user_id'])->value('nickname'); + $data_users[$key_data]['avatar'] = db::name('user')->where('id',$value_data['user_id'])->value('avatar'); + $data_users[$key_data]['sex'] = db::name('user')->where('id',$value_data['user_id'])->value('sex'); + //获取用户在此房间今天的魅力值 + $charm =[]; + if($value_data['user_id']){ + $charm = db::name('vs_room_user_charm')->where(['user_id' => $value_data['user_id'],'room_id' => $room_id])->value('charm'); + } + $data_users[$key_data]['dress'] = model('Decorate')->user_decorate_detail($value_data['user_id'],1); + $data_users[$key_data]['charm'] = $charm??0; + $data_users[$key_data]['pit_number'] = $value_data['pit_number']; + } + //推送给前端消息 + $text['text'] = '房间换麦位'; + $text['list'] = $data_users; + model('api/Chat')->sendMsg(1053,$room_id,$text); + } + + } } diff --git a/application/api/model/Room.php b/application/api/model/Room.php index 12de0cc..2886fa3 100644 --- a/application/api/model/Room.php +++ b/application/api/model/Room.php @@ -2619,11 +2619,13 @@ class Room extends Model if($room_id == '' || $user_id == ''){ return ['code' => 0, 'msg' => '参数错误', 'data' => null]; } - $clear_time = db::name('vs_room_user_charm')->where(['room_id' => $room_id, 'user_id' => $user_id])->order('id', 'desc')->value('clear_time') ?? 0; + $clear_time = db::name('vs_room_user_charm')->where(['room_id' => $room_id, 'user_id' => $user_id]) + ->order('id', 'desc')->value('clear_time') ?? 0; $list = db::name('vs_give_gift')->alias('a') ->join('user b', 'a.user_id=b.id') ->field('a.user_id,sum(a.total_price) as total_price,b.nickname,b.avatar,b.user_code') - ->where(['a.from_id' => $room_id, 'a.gift_user' => $user_id, 'a.createtime' => ['>',$clear_time],'a.from' => 2])->group('a.user_id')->select(); + ->where(['a.from_id' => $room_id, 'a.gift_user' => $user_id, 'a.createtime' => ['>',$clear_time],'a.from' => 2]) + ->group('a.user_id')->select(); if($list){ foreach ($list as &$v){ $v['charm'] = $v['total_price'] * get_system_config_value('coin_charm_exp');