交友换麦优化
This commit is contained in:
@@ -570,108 +570,120 @@ class Friend extends Model
|
|||||||
|
|
||||||
//换麦
|
//换麦
|
||||||
public function changePitToPosPair($room_id,$friendPlayPit){
|
public function changePitToPosPair($room_id,$friendPlayPit){
|
||||||
// $push = new Push(0, $this->room_id);
|
$now_pit_u = array_flip($friendPlayPit);
|
||||||
//获取实际麦位上的用
|
//按照键值排序数组
|
||||||
$newPitUser = array_keys($friendPlayPit);
|
ksort($now_pit_u);
|
||||||
//获取当前麦位上的用户
|
//查询现在麦位上有用户的数据 并且重组结果,键为麦位,值为用户,值必须存在,没值则不展示
|
||||||
$oldPitUser = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number'=>['<',7]])->column('user_id');
|
$pit_user = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number'=>['<',7],'user_id' => ['>', 0]])
|
||||||
//获取交集
|
->order('pit_number ASC')
|
||||||
$intersection = array_intersect($newPitUser,$oldPitUser);
|
->column('pit_number,user_id');
|
||||||
//取差集
|
//比较两个数组,无论是键的差异还是值的差异,都输出字符串”有差异“否则输出”没有差异“
|
||||||
$diff = array_diff($newPitUser,$oldPitUser);
|
$result = array_diff_assoc($pit_user, $now_pit_u);
|
||||||
$changeData = [];
|
$result2 = array_diff_assoc($now_pit_u, $pit_user);
|
||||||
if($diff){
|
if(!empty($result) || !empty($result2)){
|
||||||
//推下麦
|
// var_dump('有差异');
|
||||||
foreach($diff as $key => $value){
|
//获取实际麦位上的用
|
||||||
if(in_array($value,$oldPitUser)){
|
$newPitUser = array_keys($friendPlayPit);
|
||||||
//查询当前空麦位
|
//获取当前麦位上的用户
|
||||||
$pit_null = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]);
|
$oldPitUser = db::name('vs_room_pit')->where(['room_id' => $room_id,'pit_number'=>['<',7]])->column('user_id');
|
||||||
if($pit_null){
|
//获取交集
|
||||||
// $this->room_pit_model->getOnPit($this->room_id, $value, $pit_null);
|
$intersection = array_intersect($newPitUser,$oldPitUser);
|
||||||
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]);
|
$diff = array_diff($newPitUser,$oldPitUser);
|
||||||
}else{
|
$changeData = [];
|
||||||
//下麦
|
if($diff){
|
||||||
$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);
|
foreach($diff as $key => $value){
|
||||||
}
|
if(in_array($value,$oldPitUser)){
|
||||||
}
|
|
||||||
|
|
||||||
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]]);
|
$pit_null = model('api/RoomPit')->getRoomNullPitWithout($room_id, [7,8,9,10]);
|
||||||
if($getRoomNullPitss){
|
if($pit_null){
|
||||||
// $this->room_pit_model->getOnPit($this->room_id, $getRoomPitUser, $getRoomNullPitss);
|
// $this->room_pit_model->getOnPit($this->room_id, $value, $pit_null);
|
||||||
db::name('vs_room_pit')->where(['room_id' => $room_id, 'pit_number' => $getRoomNullPitss])->update(['user_id' => $getRoomPitUser]);
|
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{
|
}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);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2619,11 +2619,13 @@ class Room extends Model
|
|||||||
if($room_id == '' || $user_id == ''){
|
if($room_id == '' || $user_id == ''){
|
||||||
return ['code' => 0, 'msg' => '参数错误', 'data' => null];
|
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')
|
$list = db::name('vs_give_gift')->alias('a')
|
||||||
->join('user b', 'a.user_id=b.id')
|
->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')
|
->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){
|
if($list){
|
||||||
foreach ($list as &$v){
|
foreach ($list as &$v){
|
||||||
$v['charm'] = $v['total_price'] * get_system_config_value('coin_charm_exp');
|
$v['charm'] = $v['total_price'] * get_system_config_value('coin_charm_exp');
|
||||||
|
|||||||
Reference in New Issue
Block a user