where(['room_id' => $room_id, 'pit_number' => 9,'user_id' => $user_id])->find(); if(!$host){ return ['code' => 0, 'msg' => '没有权限操作', 'data' => null]; } $room_info = db::name('vs_room')->field('id,step,room_status')->where(['id' => $room_id,'room_status' =>1])->find(); if (!$room_info) { return ['code' => 0, 'msg' => '房间不存在!', 'data' => null]; } if($room_info['step'] == 2 || $room_info['step'] == 3){ return ['code' => 0, 'msg' => '交友正在进行中!', 'data' => null]; } //在麦位上的用户 $pit_user = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',7],'user_id' => ['<>',0]])->count(); if($pit_user >= 2) { $data['room_id'] = $room_id; $data['end_time'] = time() + get_system_config_value('friend_time') * 60; $data['create_time'] = time(); $data['status'] = 1; $id = db::name('vs_user_friending')->insertGetId($data); if (!$id) { return ['code' => 0, 'msg' => '操作失败!', 'data' => null]; } //修改房间状态 db::name('vs_room')->where(['id' => $room_id])->update(['step' => 2]); //清除房间用户的魅力 model('Room')->clear_user_charm($user_id, $room_id); //推送给前端消息 $text['text'] = '交友开始'; $text['step'] = 2; $text['friend_id'] = $id; $text['end_time'] = $data['end_time']; model('api/Chat')->sendMsg(1049,$room_id,$text); return ['code' => 1, 'msg' => '操作成功!', 'data' => ['friend_id' => $id]]; }else{ return ['code' => 0, 'msg' => '交友麦位至少两位用户才能开始', 'data' => null]; } } //延时 public function delay($user_id,$room_id,$id,$delay_times){ // 判断用户是否在主持麦 $host = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => 9,'user_id' => $user_id])->find(); if(!$host){ return ['code' => 0, 'msg' => '没有权限操作', 'data' => null]; } if (!$id || !$room_id) { return ['code' => 0, 'msg' => '参数有误!', 'data' => null]; } if($delay_times <= 0){ $delay_times = get_system_config_value('friend_delay_times'); } //修改结束 时间 $res = db::name('vs_user_friending')->where('id', $id)->update([ 'end_time' => Db::raw('end_time + ' . ($delay_times * 60)) ]); if(!$res){ return ['code' => 0, 'msg' => '操作失败!', 'data' => null]; } //推送延时 $text['text'] = '延时'; $text['friend_id'] = $id; $text['end_time'] = db::name('vs_user_friending')->where('id', $id)->value('end_time'); model('api/Chat')->sendMsg(1050,$room_id,$text); return ['code' => 1, 'msg' => '操作成功!', 'data' => null]; } //交友结束(结束牵手良缘) public function end_friend($user_id,$room_id,$id,$is_system = 0){ if (!$id || !$room_id) { return ['code' => 0, 'msg' => '参数有误!', 'data' => null]; } if($is_system == 0){ // 判断用户是否在主持麦 $host = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => 9,'user_id' => $user_id])->find(); if(!$host){ return ['code' => 0, 'msg' => '没有权限操作', 'data' => null]; } } // 获取心动值最高的 $originalPairs = db::name('vs_user_friending_heart') ->where(['room_id'=>$room_id,'friend_id'=>$id ,'status' =>1]) ->order('heart_value DESC')->find(); $friend_heart_value = get_system_config_value('friend_heart_value'); if($originalPairs && $originalPairs['heart_value'] >= $friend_heart_value){ $step = 3;//结束进入牵手良缘卡关系 //心动值达到伐值 返回用户信息与关系列表 $return['user1_id'] =$originalPairs['user1_id']; $return['user1_avatar'] = db::name('user')->where(['id'=>$originalPairs['user1_id']])->value('avatar'); $return['user1_nickname'] = db::name('user')->where(['id'=>$originalPairs['user1_id']])->value('nickname'); $return['user2_id'] =$originalPairs['user2_id']; $return['user2_avatar'] = db::name('user')->where(['id'=>$originalPairs['user2_id']])->value('avatar'); $return['user2_nickname'] = db::name('user')->where(['id'=>$originalPairs['user2_id']])->value('nickname'); $return['heart_value'] = $originalPairs['heart_value']; $return['heart_id'] = $originalPairs['id']; $room_updatatime = db::name('vs_room')->where(['id' => $room_id,'step' => $step])->value('updatetime'); if($room_updatatime){ //60秒内没操作 则创建关系无 if(time() - $room_updatatime > 60){ $this->createRelation(0,$room_id,$id,$return['user1_id'],$return['user2_id'],0); return ['code' => 1, 'msg' => '操作成功!', 'data' => $return]; } }else{ // 修改当前交友阶段 db::name('vs_room')->where(['id' => $room_id])->update(['step' => $step,'updatetime' => time()]); } }else{ $step = 1;//结束下一轮 // 修改当前交友阶段 分开写 放到前面是为了下麦 db::name('vs_room')->where(['id' => $room_id])->update(['step' => 1]); //所有人下麦 $on_pit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',7],'user_id' => ['<>',0]])->select(); if($on_pit){ foreach ($on_pit as $pit){ model('RoomPit')->DownPit($pit['user_id'], $room_id,$pit['pit_number']); } } $return = null; } //结束交友游戏 if($step == 1){ db::name('vs_user_friending')->where(['id' => $id])->update(['status' => 2]); } //推送给前端消息 $text['text'] = $step == 1 ? '交友结束' : '牵手良缘'; $text['step'] = $step;//1 等待邂逅 2 心动连线 3 牵手良缘 $text['friend_user'] = $return; $text['friend_id'] = $id; model('api/Chat')->sendMsg(1049,$room_id,$text); model('Room')->clear_user_charm(db::name('vs_room')->where(['id' => $room_id])->value('user_id'), $room_id); return ['code' => 1, 'msg' => '操作成功!', 'data' => $return]; } //心动值超过配置值 创建关系 public function createRelation($user_id,$room_id,$friend_id,$user1_id,$user2_id,$friending_config_id){ if (!$user1_id || !$user2_id || !$friend_id || !$room_id) { return ['code' => 0, 'msg' => '参数有误!', 'data' => null]; } $user1 = min($user1_id, $user2_id); $user2 = max($user1_id, $user2_id); $friending_heart = db::name('vs_user_friending_heart') ->where(['room_id'=>$room_id,'friend_id'=>$friend_id ,'user1_id' =>$user1,'user2_id' => $user2])->order('id desc')->find(); $originalPairs = db::name('vs_user_friending_heart') ->where(['id'=>$friending_heart['id']]) ->update(['status' => 3,'friend_config_id' =>$friending_config_id]); $msg = ''; if ($originalPairs) { $relation = db::name('vs_relation')->where('id',$friending_config_id)->value('name'); if($friending_heart['heart_value'] >= get_system_config_value('friend_heart_create_room') && $friending_config_id > 0){ //创建小房间 $room_ids = model('api/Room')->user_create_room($user1,'的电影房',get_system_config_value('web_site').'/data/avatar/head_pic.png','交友房产生的一次性房间',7); if($room_ids['code'] != 1){ $msg = 'cp电影房创建失败'; }else{ //记录小房间 $datda = [ 'room_id' => $room_ids['data'], 'relation_id' => $friending_config_id, 'user_id' => $user1, 'user_id1' => $user2, 'time_day' => time() + get_system_config_value('friend_room_timea') * 60, 'createtime' => time(), 'status' => 1, 'type' => 1 ]; db::name('vs_room_cp_movie')->insert($datda); if($room_ids['data']){ $text['text'] = '交友结束并创建房间'; $text['relation_name'] = $relation; $text['room_id'] = $room_ids['data'];//前端用来让用户跳转的房间id } } }else{ $text['text'] = '交友结束未创建房间'; } $text['user1_id'] = $user1; $text['user2_id'] = $user2; $text['user1_avatar'] = db::name('user')->where(['id'=>$user1])->value('avatar'); $text['user1_nickname'] = db::name('user')->where(['id'=>$user1])->value('nickname'); $text['user2_avatar'] = db::name('user')->where(['id'=>$user2])->value('avatar'); $text['user2_nickname'] = db::name('user')->where(['id'=>$user2])->value('nickname'); model('api/Chat')->sendMsg(1051,$room_id,$text); // 修改当前交友阶段 db::name('vs_room')->where(['id' => $room_id])->update(['step' => 1]); db::name('vs_user_friending')->where(['id' => $friend_id])->update(['status' => 2]); //所有人下麦 $on_pit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => ['<',7],'user_id' => ['<>',0]])->select(); if($on_pit){ foreach ($on_pit as $pit){ model('RoomPit')->DownPit($pit['user_id'], $room_id,$pit['pit_number']); } } $shijian = floor($friending_heart['heart_value']/get_system_config_value('friend_heart_value')) * get_system_config_value('friend_heart_times'); $friendendtime = time() + $shijian * 3600; //更新关系结束时间 db::name('vs_user_friending_heart')->where(['id'=>$friending_heart['id']])->update(['contact_end_time' => $friendendtime]); //关系增加时间 $room_auction = model('RoomAuction')->room_auction_create_or_add($user1_id,$user2_id,$friending_config_id,$shijian*3600,0); //推送给前端消息 $text['text'] = '交友结束'; $text['step'] = 1;//1 等待邂逅 2 心动连线 3 牵手良缘 model('api/Chat')->sendMsg(1049,$room_id,$text); return ['code' => 1, 'msg' => '创建关系成功!'.$msg, 'data' => null]; } else { //推送给前端消息 $text['text'] = '交友结束'; $text['step'] = 1;//1 等待邂逅 2 心动连线 3 牵手良缘 model('api/Chat')->sendMsg(1049,$room_id,$text); db::name('vs_user_friending')->where(['id' => $friend_id])->update(['status' => 2]); return ['code' => 0, 'msg' => '创建关系失败!', 'data' => null]; } } //退出私密房间 public function outRoom($user_id,$room_id){ //推送给前端消息 $text['text'] = '退出私密小屋'; model('api/Chat')->sendMsg(1055,$room_id,$text); // //查询在房间的用户 // $users = db::name('vs_room_visitor')->where(['room_id'=>$room_id])->select(); // if($users){ // //退出房间 // foreach ($users as $v){ // //退出房间 // model('Room')->quit_room($v['user_id'], $room_id,$v['user_id']); // } // }else{ // model('Room')->quit_room($user_id, $room_id,$user_id); // } //注销房间 db::name('vs_room')->where(['id'=>$room_id])->update(['room_status'=>3]); db::name('vs_room_cp_movie')->where(['room_id'=>$room_id])->update(['status'=>4]); model('api/Tencent')->delete_group('room'.$room_id); return ['code' => 1, 'msg' => '退出成功!', 'data' => null]; } //房间内送礼 /* * @param $uid 用户id * @param $to_uid 接收用户id组 * @param $gift_id 礼物id * @param $gift_num 礼物数量 * @param $from_type 来源 1聊天送礼物 2房间语聊送礼 3直播送礼 4动态打赏 5系统任务 6-cp房间送礼 * @param $type 1金币购买 2送背包礼物 * @param $room_id 房间id * @param $pit_number 坑位 */ public function room_give_gift($uid, $to_uid, $gift_id, $gift_num, $from_type, $type, $room_id, $pit_number, $heart_id,$give_gift_ext) { $res = model('GiveGift')->give_gift($uid, $to_uid, $gift_id, $gift_num, $from_type, $type, $room_id, $pit_number,$give_gift_ext); if($res['code'] != 1){ return $res; } //送礼成功后续操作 //查看当前时间是否在交友表的创建时间和结束时间段内 用来区分是否要拉取心动值高的用户上麦 $friend = db::name('vs_user_friending')->where(['room_id' => $room_id,'status' => 1])->order('id desc')->find(); if($friend && time() >= $friend['create_time'] && time() <= $friend['end_time']){ $heart_exp = get_system_config_value('coin_charm_exp');//金币与魅力值转换比 $sumPrice = $res['data']['gift_total'] * $heart_exp; $user_idd = $to_uid; if($heart_id){//有这个值就是助力 不参加抢麦操作 db::name('vs_user_friending_heart')->where(['id' => $heart_id])->setInc('heart_value', $sumPrice); $this->pullHeartChange($room_id,$friend['id']);//聊天室心动值变化通知 //生成新排名 判断抱上麦 还是换麦 $this->pullUserPit($room_id,$friend['id']); }else{ //判断送礼人或收礼人里面有主持和嘉宾 $host = $this->is_host($uid,$to_uid,$room_id); $user_idd = explode(",", $user_idd); // 将字符串转换为数组 //判断是否是主持 if($host['is_preside'] == 1){ if(!in_array($uid,$host['is_preside_user'])){//主持不是当前送礼人,那就是在收礼人中 //从数组中剔除主持人 && $is_preside_user!= UID $user_idd = array_diff($user_idd, $host['is_preside_user']); // 从数组中移除 if($user_idd){ //插入/更新心动表 $this->addUserHeart($uid,$user_idd,$friend['id'],$sumPrice,$room_id,$res['data']['gift_user_data']); //送礼产生心动值并计算 判断拉取用户上麦还是换麦 //生成新排名 判断抱上麦 还是换麦 $this->pullUserPit($room_id,$friend['id']); } } }else{ //插入/更新心动表 $this->addUserHeart($uid,$user_idd,$friend['id'],$sumPrice,$room_id,$res['data']['gift_user_data']); //送礼产生心动值并计算 判断拉取用户上麦还是换麦 //生成新排名 判断抱上麦 还是换麦 $this->pullUserPit($room_id,$friend['id']); } } } return ['code' => 1, 'msg' => '送礼成功', 'data' => null]; } //是否主持 public function is_host($uid,$to_uid,$room_id){ //获取当前主持人和嘉宾 $host[] = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number' => 9])->value('user_id'); $host[] = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number' => 10])->value('user_id'); $is_preside_user = []; $is_preside = 0; $user_ids = explode(",", $to_uid); foreach ($user_ids as $value) { //判断收礼人是否是主持 if (in_array($value, $host)) { $is_preside = 1; $is_preside_user[] = $value; } } //送礼人是主持或嘉宾 if (in_array($uid, $host)) { $is_preside = 1; $is_preside_user[] = $uid; } return ['is_preside' =>$is_preside,'is_preside_user' => $is_preside_user]; } function pullHeartChange($room_id,$friend_id){ //聊天室心动值变化通知 $newRanking = $this->getRanking($room_id,$friend_id); //心动值和心动表id if(!isset($newRanking[0]['heart_value']) || $newRanking[0]['heart_value'] <= 0){ $heart1 = -1; $heartId1 = -1; }else{ $heart1 = $newRanking[0]['heart_value']; $heartId1 = $newRanking[0]['id']; } if(!isset($newRanking[1]['heart_value']) || $newRanking[1]['heart_value'] <= 0){ $heart2 = -1; $heartId2 = -1; }else{ $heart2 = $newRanking[1]['heart_value']; $heartId2 = $newRanking[1]['id']; } if(!isset($newRanking[2]['heart_value']) || $newRanking[2]['heart_value'] <= 0){ $heart3 = -1; $heartId3 = -1; }else{ $heart3 = $newRanking[2]['heart_value']; $heartId3 = $newRanking[2]['id']; } $heart[0] = [ "heartNum" => $heart1, "heartId" => $heartId1, ]; $heart[1] = [ "heartNum" => $heart2, "heartId" => $heartId2, ]; $heart[2] = [ "heartNum" => $heart3, "heartId" => $heartId3, ]; // $push = new Push(0, $this->room_id); //实例化推送类 // $push->heartChatRoom($heart); //推送给前端消息 $text['text'] = '心动值变化通知'; $text['list'] = $heart; model('api/Chat')->sendMsg(1054,$room_id,$text); return $heart; } // 获取心跳值排行 public function getRanking($room_id,$friend_id) { // 获取有心动值的用户对且不重复 $originalPairs = db::name('vs_user_friending_heart') ->where(array('room_id'=>$room_id,'friend_id'=>$friend_id)) ->order('heart_value DESC')->select(); // 初始化排名数组和已使用用户数组 $ranking = []; $usedUsers = []; // 优先选择高价值且无重复用户的对 $heart_ids = []; foreach ($originalPairs as $rel) { // 检查当前用户对是否包含已使用的用户ID if (!in_array($rel['user1_id'], $usedUsers) && !in_array($rel['user2_id'], $usedUsers)) { // 将符合条件的用户对添加到排名列表中 $ranking[] = [ 'heart_value' => $rel['heart_value'], 'id' => $rel['id'], 'user1_id' => $rel['user1_id'], 'user2_id' => $rel['user2_id'], ]; // 更新已使用用户列表 $usedUsers = array_merge($usedUsers, [$rel['user1_id'], $rel['user2_id']]); $heart_ids[] = $rel['id']; // 如果排名列表达到3对用户,则停止循环 if (count($ranking) >= 3) break; } } $ranking1 = []; $ranking2 = []; if(count($ranking)<3){ $make_up_num = 3 - count($ranking); $ranking_make_up = db::name('vs_user_friending_heart') ->where(['room_id'=>$room_id,'friend_id'=>$friend_id ,'id'=> ['notin',$heart_ids]]) ->limit($make_up_num) ->order('heart_value DESC')->select(); foreach ($ranking_make_up as $rel1) { $heart_ids[] = $rel1['id']; if(in_array($rel1['user1_id'], $usedUsers) && in_array($rel1['user2_id'], $usedUsers)){ continue; } if(in_array($rel1['user1_id'], $usedUsers)){ $ranking1[] = [ 'heart_value' => 0, 'id' => $rel1['id'], 'user1_id' => -1, 'user2_id' => $rel1['user2_id'], ]; $usedUsers[] = $rel1['user2_id']; } if(in_array($rel1['user2_id'], $usedUsers)){ $ranking1[] = [ 'heart_value' => 0, 'id' => $rel1['id'], 'user1_id' => $rel1['user1_id'], 'user2_id' => -1, ]; $usedUsers[] = $rel1['user1_id']; } } } // 返回最终的排名列表 $ranking_rut = array_merge($ranking, $ranking1); $nnum = count($ranking)*2 + count($ranking1); if($nnum<6){ $make_up_num = 6 - $nnum; $ranking_make_up = db::name('vs_user_friending_heart') ->where(array('room_id'=>$room_id,'friend_id'=>$friend_id ,'id'=>array('notin',$heart_ids))) ->limit($make_up_num) ->order('heart_value DESC')->select(); if($ranking_make_up){ foreach ($ranking_make_up as $rel1) { $heart_ids[] = $rel1['id']; if(in_array($rel1['user1_id'], $usedUsers) && in_array($rel1['user2_id'], $usedUsers)){ continue; } if(in_array($rel1['user1_id'], $usedUsers)){ $ranking2[] = [ 'heart_value' => 0, 'id' => $rel1['id'], 'user1_id' => -1, 'user2_id' => $rel1['user2_id'], ]; $usedUsers[] = $rel1['user2_id']; } if(in_array($rel1['user2_id'], $usedUsers)){ $ranking2[] = [ 'heart_value' => 0, 'id' => $rel1['id'], 'user1_id' => $rel1['user1_id'], 'user2_id' => -1, ]; $usedUsers[] = $rel1['user1_id']; } } } } return array_merge($ranking_rut, $ranking2); } //抱上麦 还是换麦 public function pullUserPit($room_id,$friend_id){ $friendPlayPit = $this->friendPlayPit($room_id,$friend_id); // 获取实际应该对应的麦位 $this->changePitToPosPair($room_id,$friendPlayPit);//换麦,上下麦 $this->pullHeartChange($room_id,$friend_id);//聊天室心动值变化通知 } //交友处理麦位排名 public function friendPlayPit($room_id,$friend_id){ //查询当前交友心动值表 $heart_data = $this->getRanking($room_id,$friend_id); $pit = []; $pit_number_array = [2=>5,1=>6,3=>4,5=>2,6=>1,4=>3]; //麦位对应关系 $pit_number_array_reverse = [0=>2,1=>1,2=>3,3=>4,4=>5,5=>6]; if($heart_data){ //排麦位 $pit_unique = []; $key = 0; foreach($heart_data as $value) { //这条数据有一个用户已经排过了,就剔除这条数据 if(count($pit) >= 6){ break; } if($value['user1_id'] == -1){ if(!in_array($value['user2_id'],$pit_unique)){ $pit[$pit_number_array_reverse[$key]] = $value['user2_id']; } } if($value['user2_id'] == -1){ if(!in_array($value['user1_id'],$pit_unique)){ $pit[$pit_number_array_reverse[$key]] = $value['user1_id']; } } if($value['user1_id'] != -1 && $value['user2_id'] != -1){ if(!in_array($value['user1_id'],$pit_unique)){ $pit[$pit_number_array_reverse[$key]] = $value['user1_id']; } if(!in_array($value['user2_id'],$pit_unique)){ $pit[$pit_number_array[$pit_number_array_reverse[$key]]] = $value['user2_id']; } } //用户去重 $pit_unique[] = $value['user1_id']; $pit_unique[] = $value['user2_id']; $key++; } } return array_flip($pit); } //换麦 public function changePitToPosPair($room_id,$friendPlayPit){ $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)){ //查询当前空麦位 $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){ //查询当前空麦位 $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); } } } //交友厅游戏开始后送礼后一系列操作 //插入/更新心动表 public function addUserHeart($uid,$user_id,$friend_id,$value,$room_id,$user_data){ //给多个用户送礼 //数组重组 下标从0开始 $user_ids = array_values($user_id); // $heart_value = $value;//心动值 $heart_value = 0; $heart_exp = get_system_config_value('coin_charm_exp');//金币与魅力值转换比 for ($i = 0; $i < count($user_ids); $i++) { foreach ($user_data as $cv){ if($user_ids[$i] == $cv['user_id']){ $heart_value = $cv['gift_price'] * $heart_exp; } } // 处理用户ID顺序 $user1 = min($uid, $user_ids[$i]); $user2 = max($uid, $user_ids[$i]); // 更新心动关系表 $relation = db::name('vs_user_friending_heart')->where([ 'user1_id' => $user1, 'user2_id' => $user2, 'friend_id' => $friend_id ])->find(); if ($relation) { db::name('vs_user_friending_heart')->where([ 'room_id' => $room_id, 'user1_id' => $user1, 'user2_id' => $user2, 'friend_id' => $friend_id ])->setInc('heart_value', $heart_value); } else { $relation['id'] = db::name('vs_user_friending_heart')->insert([ 'room_id' => $room_id, 'user1_id' => $user1, 'user2_id' => $user2, 'friend_id' => $friend_id, 'heart_value' => $heart_value ]); } } //修改用户心动连线状态 // $relation = db::name('vs_user_friending_heart')->where("(user1_id=".$uid." OR user2_id=".$uid.") AND friend_id=$friend_id AND room_id=$room_id AND status!=3")->order('heart_value desc')->find(); // if($relation){ // db::name('vs_user_friending_heart')->where("(user1_id=".$uid." OR user2_id=".$uid.") AND friend_id=$friend_id AND room_id=$room_id AND status!=3")->update(['status'=>2]); // db::name('vs_user_friending_heart')->where(['id'=>$relation['id']])->update(['status'=>1]); // } } }