From 7e3fad927aff6245b101d557ad88364217a8fca2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Mon, 15 Sep 2025 21:16:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=A4=E5=8F=8B=E4=B8=AD=E6=9B=B4=E6=8D=A2?= =?UTF-8?q?=E9=BA=A6=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/model/Friend.php | 71 +++++++++++++++++++++++++++----- 1 file changed, 60 insertions(+), 11 deletions(-) diff --git a/application/api/model/Friend.php b/application/api/model/Friend.php index 9c73d51..857e367 100644 --- a/application/api/model/Friend.php +++ b/application/api/model/Friend.php @@ -407,7 +407,7 @@ class Friend extends Model public function getRanking($room_id,$friend_id) { // 获取有心动值的用户对且不重复 $originalPairs = db::name('vs_user_friending_heart') - ->where(array('room_id'=>$room_id,'friend_id'=>$friend_id)) + ->where(['room_id'=>$room_id,'friend_id'=>$friend_id]) ->order('heart_value DESC')->select(); // 初始化排名数组和已使用用户数组 $ranking = []; @@ -517,6 +517,10 @@ class Friend extends Model public function friendPlayPit($room_id,$friend_id){ //查询当前交友心动值表 $heart_data = $this->getRanking($room_id,$friend_id); + //数组根据里面的heart_value 由大到小进行排序 + usort($heart_data, function($a, $b) { + return $b['heart_value'] - $a['heart_value']; + }); $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]; @@ -530,6 +534,13 @@ class Friend extends Model break; } + 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']; + $pit[$pit_number_array[$pit_number_array_reverse[$key]]] = $value['user2_id']; + } + } + if($value['user1_id'] == -1){ if(!in_array($value['user2_id'],$pit_unique)){ $pit[$pit_number_array_reverse[$key]] = $value['user2_id']; @@ -542,15 +553,6 @@ class Friend extends Model } } - 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']; @@ -561,7 +563,7 @@ class Friend extends Model } //换麦 - public function changePitToPosPair($room_id,$friendPlayPit){ + public function changePitToPosPairs($room_id,$friendPlayPit){ $now_pit_u = array_flip($friendPlayPit); //按照键值排序数组 ksort($now_pit_u); @@ -678,6 +680,53 @@ class Friend extends Model } } + //换麦 + public function changePitToPosPair($room_id,$friendPlayPit){ + $new_pit_u = array_flip($friendPlayPit); + //按照键值排序数组 + ksort($new_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, $new_pit_u);//第一个数组中存在但其他数组中不存在的键/值对 + $result2 = array_diff_assoc($new_pit_u, $pit_user); + if(!empty($result) || !empty($result2)){//换麦 + if($result){//原有麦位上的用户,且不在新麦位上的用户 + foreach ($result as $key_result => $value_result){ + db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $key_result])->update(['user_id' => 0]); + } + } + //新麦位上的用户 + foreach ($new_pit_u as $key_result2 => $value_result2){ + db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $key_result2])->update(['user_id' => $value_result2]); + } + + $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); + } + + } + //交友厅游戏开始后送礼后一系列操作 //插入/更新心动表