From ef8b93c8d164b8746feeb0b71e2161a674da60cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Tue, 2 Dec 2025 11:31:51 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A6=BB=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/model/RoomPit.php | 12 +- application/api/model/RoomSong.php | 2 +- application/api/model/Sign.php | 6 +- application/api/model/Tencent.php | 200 +++++++++--------- application/cron/controller/FriendEnd.php | 59 ++++++ .../cron/controller/PerformPerSecond.php | 1 + 6 files changed, 172 insertions(+), 108 deletions(-) diff --git a/application/api/model/RoomPit.php b/application/api/model/RoomPit.php index 0bf9060..1899dcb 100644 --- a/application/api/model/RoomPit.php +++ b/application/api/model/RoomPit.php @@ -57,7 +57,7 @@ class RoomPit extends Model return ['code' => 0, 'msg' => '上麦失败', 'data' => null]; } // $nickname = model('User')->where(['id' => $user_id])->value('nickname'); - $FromUserInfo = db::name('user')->where('id',$user_id)->field('id as user_id,nickname,avatar,sex')->find(); + $FromUserInfo = db::name('user')->where('id',$user_id)->field('id as user_id,nickname,avatar,sex,is_online')->find(); $FromUserInfo['icon'][0] = model('UserData')->user_wealth_icon($user_id);//财富图标 $FromUserInfo['icon'][1] = model('UserData')->user_charm_icon($user_id);//魅力图标 $FromUserInfo['dress'] = model('Decorate')->user_decorate_detail($user_id,1); @@ -332,7 +332,7 @@ class RoomPit extends Model if(!$exchange || !$exchange1){ return ['code' => 0, 'msg' => '换麦失败', 'data' => null]; } - $FromUserInfo = db::name('user')->where('id',$user_id)->field('id as user_id,nickname,avatar,sex')->find(); + $FromUserInfo = db::name('user')->where('id',$user_id)->field('id as user_id,nickname,avatar,sex,is_online')->find(); $FromUserInfo['icon'][0] = model('UserData')->user_wealth_icon($user_id);//财富图标 $FromUserInfo['icon'][1] = model('UserData')->user_charm_icon($user_id);//魅力图标 $FromUserInfo['dress'] = model('Decorate')->user_decorate_detail($user_id,1); @@ -391,7 +391,7 @@ class RoomPit extends Model if(!$exchange || !$exchange1){ return ['code' => 0, 'msg' => '换麦失败', 'data' => null]; } - $FromUserInfo = db::name('user')->where('id',$user_id)->field('id as user_id,nickname,avatar,sex')->find(); + $FromUserInfo = db::name('user')->where('id',$user_id)->field('id as user_id,nickname,avatar,sex,is_online')->find(); $FromUserInfo['icon'][0] = model('UserData')->user_wealth_icon($user_id);//财富图标 $FromUserInfo['icon'][1] = model('UserData')->user_charm_icon($user_id);//魅力图标 $FromUserInfo['dress'] = model('Decorate')->user_decorate_detail($user_id,1); @@ -691,7 +691,7 @@ class RoomPit extends Model continue; } //聊天室推送系统消息 - $FromUserInfo = db::name('user')->where('id',$value)->field('id as user_id,nickname,avatar,sex')->find(); + $FromUserInfo = db::name('user')->where('id',$value)->field('id as user_id,nickname,avatar,sex,is_online')->find(); $FromUserInfo['icon'][0] = model('UserData')->user_wealth_icon($value);//财富图标 $FromUserInfo['icon'][1] = model('UserData')->user_charm_icon($value);//魅力图标 $FromUserInfo['dress'] = model('Decorate')->user_decorate_detail($value,1); @@ -736,7 +736,7 @@ class RoomPit extends Model // } Cache::set('auction_user_'.$room_id,$value); //聊天室推送系统消息 - $FromUserInfo = db::name('user')->where('id',$value)->field('id as user_id,nickname,avatar,sex')->find(); + $FromUserInfo = db::name('user')->where('id',$value)->field('id as user_id,nickname,avatar,sex,is_online')->find(); $FromUserInfo['icon'][0] = model('UserData')->user_wealth_icon($value);//财富图标 $FromUserInfo['icon'][1] = model('UserData')->user_charm_icon($value);//魅力图标 $FromUserInfo['dress'] = model('Decorate')->user_decorate_detail($value,1); @@ -813,7 +813,7 @@ class RoomPit extends Model return ['code' => 0, 'msg' => '操作失败', 'data' => null]; } //制造上麦信息 - $FromUserInfo = db::name('user')->where('id',$uid)->field('id as user_id,nickname,avatar,sex')->find(); + $FromUserInfo = db::name('user')->where('id',$uid)->field('id as user_id,nickname,avatar,sex,is_online')->find(); $FromUserInfo['icon'][0] = model('UserData')->user_wealth_icon($uid);//财富图标 $FromUserInfo['icon'][1] = model('UserData')->user_charm_icon($uid);//魅力图标 $FromUserInfo['dress'] = model('Decorate')->user_decorate_detail($uid,1); diff --git a/application/api/model/RoomSong.php b/application/api/model/RoomSong.php index be8e6f7..3998019 100644 --- a/application/api/model/RoomSong.php +++ b/application/api/model/RoomSong.php @@ -518,7 +518,7 @@ class RoomSong extends Model if(isset($pit_infos)){ return ['code' => 0, 'msg' => '用户已在麦上,请先下麦后再申请', 'data' => null]; } - $FromUserInfo = db::name('user')->where('id',$user_id)->field('id as user_id,nickname,avatar,sex')->find(); + $FromUserInfo = db::name('user')->where('id',$user_id)->field('id as user_id,nickname,avatar,sex,is_online')->find(); $FromUserInfo['icon'][0] = model('UserData')->user_wealth_icon($user_id);//财富图标 $FromUserInfo['icon'][1] = model('UserData')->user_charm_icon($user_id);//魅力图标 $FromUserInfo['dress'] = model('Decorate')->user_decorate_detail($user_id,1); diff --git a/application/api/model/Sign.php b/application/api/model/Sign.php index c46dafc..fa30849 100644 --- a/application/api/model/Sign.php +++ b/application/api/model/Sign.php @@ -240,7 +240,7 @@ class Sign extends Model } }else{ $result5 = db::name('vs_user_sign')->where(['id' => $is_sign['id']]) - ->update(['end_time' => time(),'type' => 3]); + ->update(['end_time' => time(),'type' => 4]); if(!$result5){ db::rollback(); return ['code' => 0, 'msg' => '网络错误,请重试', 'data' => null]; @@ -410,12 +410,12 @@ class Sign extends Model model('api/Chat')->sendMsg(1092,$room_id,$text); }else{ //修改房间信息 - $res1 = db::name('vs_room')->where('id',$room_id)->update([ + db::name('vs_room')->where('id',$room_id)->update([ 'sign_type' => 0, 'updatetime' => time() ]); //修改房间签约信息 - $res2 = db::name('vs_room_sign')->where(['id' => $sign_time]) + db::name('vs_room_sign')->where(['id' => $sign_time]) ->update([ 'sign_type' => 0, 'end_time' => time() diff --git a/application/api/model/Tencent.php b/application/api/model/Tencent.php index 0d26c39..0cea340 100644 --- a/application/api/model/Tencent.php +++ b/application/api/model/Tencent.php @@ -282,7 +282,11 @@ class Tencent extends Model $reslut = $this->tencent_post_url($postUrl, $curlPost); // $txt = date('Y-m-d H:i:s').'测试'; // error_log($txt, 3, 'a.txt'); - return $reslut; + if($reslut['ActionStatus'] == 'OK'){ + return ['code' => 1, 'msg' => '发送成功', 'data' => $reslut]; + }else{ + return ['code' => 0, 'msg' => $reslut['ErrorCode'], 'data' => $reslut]; + } } @@ -973,106 +977,106 @@ class Tencent extends Model //腾讯IM监控在线状态更新 public function tencent_member_status_change($info){ - $uid = substr($info['To_Account'],1); - $action = $info['Action']; - - if($action == 'Disconnect') { - $is_keep = 1; - $keep = db::name('vs_xintiao')->where('user_id' , $uid)->find(); - if(isset($keep)){ - if(time() - $keep['updatetime'] >= 60){ - $is_keep = 0; - } - } - - //判断保活用户是否安卓用户 - $user_system = db::name('user')->where('id' , $uid)->value('system'); - if($user_system == 'android'){ - Db::name('user')->where('id', $uid)->update(['is_online' => 0, 'updatetime' => time()]); - $quit_room = Db::name('vs_room_visitor')->where('user_id', $uid)->select(); - Log::record("腾讯离线推送,用户安卓所在房间信息".json_encode($quit_room),"infos"); - if($quit_room) { - foreach ($quit_room as &$v){ - if(isset($v['room_id'])){ - $room_type = db::name('vs_room')->where(['id' => $v['room_id']])->field('step,type_id,label_id')->find(); - // Log::record("腾讯离线推送,房间类型".json_encode($room_type),"infos"); - if($room_type['label_id'] == 1 && ($room_type['type_id'] == 1 || $room_type['type_id'] == 8)){ - // Log::record("腾讯离线推送,我是二卡八","infos"); - Db::name('user')->where('id', $uid)->update(['is_online' => 1, 'updatetime' => time()]); - }else{ - if(isset($room_type) && ($room_type['type_id'] == 7 && ($room_type['step'] == 2 ||$room_type['step'] == 3)) || $room_type == 2){ - $text['text'] = '掉线!'; - $text['user_id'] = $uid; - $text['type'] = 2; - model('Chat')->sendMsg(1058,$v['room_id'],$text); - }else { - //查询是否有切后台的操作 - // $bg_room = db::name('vs_user_in_room_bg')->where(['room_id' => $v['room_id'],'user_id' => $v['user_id']])->find(); - // if(!$bg_room){ - // // Log::record("腾讯离线推送,要踢你","infos"); - // model('Room')->quit_room($v['user_id'], $v['room_id'],$v['user_id'],2); - // } - Log::record("腾讯离线推送,判断心跳".$is_keep,"infos"); - if($is_keep == 0){ - model('Room')->quit_room($v['user_id'], $v['room_id'],$v['user_id'],2); - } - } - } - } - $room_type = null; - } - } - }else{ - Db::name('user')->where('id', $uid)->update(['is_online' => 0, 'updatetime' => time()]); - $quit_room = Db::name('vs_room_visitor')->where('user_id', $uid)->select(); - // Log::record("腾讯离线推送,房间信息".json_encode($quit_room),"infos"); - if($quit_room) { - foreach ($quit_room as &$v){ - if(isset($v['room_id'])){ - $room_type = db::name('vs_room')->where(['id' => $v['room_id']])->field('step,type_id,label_id')->find(); - // Log::record("腾讯离线推送,房间类型".json_encode($room_type),"infos"); - if($room_type['label_id'] == 1 && ($room_type['type_id'] == 1 || $room_type['type_id'] == 8)){ - // Log::record("腾讯离线推送,我是二卡八","infos"); - Db::name('user')->where('id', $uid)->update(['is_online' => 1, 'updatetime' => time()]); - }else{ - if(isset($room_type) && ($room_type['type_id'] == 7 && ($room_type['step'] == 2 ||$room_type['step'] == 3)) || $room_type == 2){ - $text['text'] = '掉线!'; - $text['user_id'] = $uid; - $text['type'] = 2; - model('Chat')->sendMsg(1058,$v['room_id'],$text); - }else { - //查询是否有切后台的操作 - $bg_room = db::name('vs_user_in_room_bg')->where(['room_id' => $v['room_id'],'user_id' => $v['user_id']])->find(); - if(!$bg_room){ - // Log::record("腾讯离线推送,要踢你","infos"); - model('Room')->quit_room($v['user_id'], $v['room_id'],$v['user_id'],2); - } - } - } - } - $room_type = null; - } - } - } - - - - } elseif ($action == 'Login') { - Db::name('user')->where('id', $uid)->update(['is_online' => 1, 'updatetime' => time()]); - $room = Db::name('vs_room_visitor')->where('user_id', $uid)->order('id desc')->value('room_id'); - - $text['text'] = '重新上线!'; - $text['user_id'] = $uid; - $text['type'] = 1; - model('Chat')->sendMsg(1058,$room,$text); - }elseif ($action == 'Logout'){ -// Db::name('user')->where('id', $uid)->update(['is_online' => 0, 'updatetime' => time()]); +// $uid = substr($info['To_Account'],1); +// $action = $info['Action']; +// +// if($action == 'Disconnect') { +// $is_keep = 1; +// $keep = db::name('vs_xintiao')->where('user_id' , $uid)->find(); +// if(isset($keep)){ +// if(time() - $keep['updatetime'] >= 60){ +// $is_keep = 0; +// } +// } +// +// //判断保活用户是否安卓用户 +// $user_system = db::name('user')->where('id' , $uid)->value('system'); +// if($user_system == 'android'){ +// Db::name('user')->where('id', $uid)->update(['is_online' => 0, 'updatetime' => time()]); +// $quit_room = Db::name('vs_room_visitor')->where('user_id', $uid)->select(); +// Log::record("腾讯离线推送,用户安卓所在房间信息".json_encode($quit_room),"infos"); +// if($quit_room) { +// foreach ($quit_room as &$v){ +// if(isset($v['room_id'])){ +// $room_type = db::name('vs_room')->where(['id' => $v['room_id']])->field('step,type_id,label_id')->find(); +// // Log::record("腾讯离线推送,房间类型".json_encode($room_type),"infos"); +// if($room_type['label_id'] == 1 && ($room_type['type_id'] == 1 || $room_type['type_id'] == 8)){ +// // Log::record("腾讯离线推送,我是二卡八","infos"); +// Db::name('user')->where('id', $uid)->update(['is_online' => 1, 'updatetime' => time()]); +// }else{ +// if(isset($room_type) && ($room_type['type_id'] == 7 && ($room_type['step'] == 2 ||$room_type['step'] == 3)) || $room_type == 2){ +// $text['text'] = '掉线!'; +// $text['user_id'] = $uid; +// $text['type'] = 2; +// model('Chat')->sendMsg(1058,$v['room_id'],$text); +// }else { +// //查询是否有切后台的操作 +// // $bg_room = db::name('vs_user_in_room_bg')->where(['room_id' => $v['room_id'],'user_id' => $v['user_id']])->find(); +// // if(!$bg_room){ +// // // Log::record("腾讯离线推送,要踢你","infos"); +// // model('Room')->quit_room($v['user_id'], $v['room_id'],$v['user_id'],2); +// // } +// Log::record("腾讯离线推送,判断心跳".$is_keep,"infos"); +// if($is_keep == 0){ +// model('Room')->quit_room($v['user_id'], $v['room_id'],$v['user_id'],2); +// } +// } +// } +// } +// $room_type = null; +// } +// } +// }else{ +// Db::name('user')->where('id', $uid)->update(['is_online' => 0, 'updatetime' => time()]); +// $quit_room = Db::name('vs_room_visitor')->where('user_id', $uid)->select(); +// // Log::record("腾讯离线推送,房间信息".json_encode($quit_room),"infos"); +// if($quit_room) { +// foreach ($quit_room as &$v){ +// if(isset($v['room_id'])){ +// $room_type = db::name('vs_room')->where(['id' => $v['room_id']])->field('step,type_id,label_id')->find(); +// // Log::record("腾讯离线推送,房间类型".json_encode($room_type),"infos"); +// if($room_type['label_id'] == 1 && ($room_type['type_id'] == 1 || $room_type['type_id'] == 8)){ +// // Log::record("腾讯离线推送,我是二卡八","infos"); +// Db::name('user')->where('id', $uid)->update(['is_online' => 1, 'updatetime' => time()]); +// }else{ +// if(isset($room_type) && ($room_type['type_id'] == 7 && ($room_type['step'] == 2 ||$room_type['step'] == 3)) || $room_type == 2){ +// $text['text'] = '掉线!'; +// $text['user_id'] = $uid; +// $text['type'] = 2; +// model('Chat')->sendMsg(1058,$v['room_id'],$text); +// }else { +// //查询是否有切后台的操作 +// $bg_room = db::name('vs_user_in_room_bg')->where(['room_id' => $v['room_id'],'user_id' => $v['user_id']])->find(); +// if(!$bg_room){ +// // Log::record("腾讯离线推送,要踢你","infos"); +// model('Room')->quit_room($v['user_id'], $v['room_id'],$v['user_id'],2); +// } +// } +// } +// } +// $room_type = null; +// } +// } +// } +// +// +// +// } elseif ($action == 'Login') { +// Db::name('user')->where('id', $uid)->update(['is_online' => 1, 'updatetime' => time()]); // $room = Db::name('vs_room_visitor')->where('user_id', $uid)->order('id desc')->value('room_id'); -// $text['text'] = '掉线!'; +// +// $text['text'] = '重新上线!'; // $text['user_id'] = $uid; -// $text['type'] = 2; +// $text['type'] = 1; // model('Chat')->sendMsg(1058,$room,$text); - } +// }elseif ($action == 'Logout'){ +//// Db::name('user')->where('id', $uid)->update(['is_online' => 0, 'updatetime' => time()]); +//// $room = Db::name('vs_room_visitor')->where('user_id', $uid)->order('id desc')->value('room_id'); +//// $text['text'] = '掉线!'; +//// $text['user_id'] = $uid; +//// $text['type'] = 2; +//// model('Chat')->sendMsg(1058,$room,$text); +// } return true; } diff --git a/application/cron/controller/FriendEnd.php b/application/cron/controller/FriendEnd.php index 52e4e8b..bfa3f19 100644 --- a/application/cron/controller/FriendEnd.php +++ b/application/cron/controller/FriendEnd.php @@ -2,6 +2,7 @@ namespace app\cron\controller; +use think\Cache; use think\Db; class FriendEnd @@ -18,9 +19,67 @@ class FriendEnd echo "清除私密小屋过期数据开始:\n"; $this->clear_room_end();//清除私密小屋过期数据 echo "清除私密小屋过期数据结束 \n"; + + echo "查询在线状态:\n"; + $this->online_status(); + echo "\n"; } + //查询在线状态 + protected function online_status() + { + $user_list = db::name('vs_xintiao')->select(); + if($user_list){ + foreach ($user_list as &$value){ + if(time() - $value['updatetime'] >= 183){//2秒刷新一次,加上用户多 三分钟补偿3秒 + //断线 + db::name('user')->where('id',$value['user_id'])->update(['is_online'=>0]); + //是否在房间内 + $room_id = db::name('vs_room_visitor')->where('user_id',$value['user_id'])->order('id desc')->value('room_id'); + if($room_id){ + + $text['text'] = '掉线!'; + $text['user_id'] = $value['user_id']; + $text['type'] = 2; + model('Chat')->sendMsg(1058,$room_id,$text); + + //拍卖位,互娱交友过程中1-6号麦位,签约过程中签约麦位不能退出房间 则推送离线 +// $auction_user_id = Cache::get('auction_user_'.$room_id); +// $roomInfoStep = db::name('vs_room')->where(['id' => $room_id])->value('step'); +// $room_pit = db::name('vs_room_pit')->where(['room_id' => $room_id, 'user_id' => $value['user_id']])->find(); +// $vs_room_sign = db::name('vs_room_sign')->where(['room_id' => $room_id, 'sign_user_id' => $value['user_id'],'sign_type'=>1])->find(); +// if($auction_user_id == $value['user_id'] +// || ($roomInfoStep == 2 && in_array($room_pit['pit_number'],[1,2,3,4,5,6])) +// || $vs_room_sign) +// { +// +// }else{//其他退出房间 +// model('api/Room')->quit_room($value['user_id'],$room_id,$value['user_id']); +// } + } + }else{ + $is_online = db::name('user')->where('id',$value['user_id'])->value('is_online'); + if($is_online == 1){ + //在线 + continue; + }else{ + //在线 + db::name('user')->where('id',$value['user_id'])->update(['is_online'=>1]); + //是否在房间内 + $room_id = db::name('vs_room_visitor')->where('user_id',$value['user_id'])->order('id desc')->value('room_id'); + if($room_id){ + $text['text'] = '重新上线!'; + $text['user_id'] = $value['user_id']; + $text['type'] = 1; + model('Chat')->sendMsg(1058,$room_id,$text); + } + } + } + } + } + } + //清除交友房过期未结束数据 public function clearFriendingEndRoom() { diff --git a/application/cron/controller/PerformPerSecond.php b/application/cron/controller/PerformPerSecond.php index 2250218..54369c6 100644 --- a/application/cron/controller/PerformPerSecond.php +++ b/application/cron/controller/PerformPerSecond.php @@ -46,6 +46,7 @@ class PerformPerSecond echo "系统降身价:\n"; $this->system_downgrade(); echo "\n"; + }