交友换麦优化

This commit is contained in:
2025-09-15 16:11:38 +08:00
parent 952350c4ea
commit d997efe73a
2 changed files with 113 additions and 99 deletions

View File

@@ -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);
}
}
}

View File

@@ -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');