From 70f4ba77d7b851d807651f584c0ace655352a735 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Fri, 29 Aug 2025 17:27:49 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=9C=A8=E7=BA=BF=E5=88=97?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/model/Room.php | 128 ++++++++++++++++----------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/application/api/model/Room.php b/application/api/model/Room.php index 414df16..5556223 100644 --- a/application/api/model/Room.php +++ b/application/api/model/Room.php @@ -1303,75 +1303,75 @@ class Room extends Model } //获取在房间的用户 - $in_room_users = db::name('vs_room_visitor')->where(['room_id' => $room_id])->field('user_id')->select(); - if($in_room_users){ - foreach ($in_room_users as $v){ - $userss = db::name('user')->where(['id' => $v['user_id']])->field('is_online,is_robot')->find(); - if($userss['is_online'] == 1 && $userss['is_robot'] == 1){//在线或者机器人都设置为在线 - db::name('vs_room_visitor')->where(['id' => $v['id']])->update(['on_line' => 1]); - }else{ - db::name('vs_room_visitor')->where(['id' => $v['id']])->update(['on_line' => 0]); +// $in_room_users = db::name('vs_room_visitor')->where(['room_id' => $room_id])->field('user_id')->select(); +// if($in_room_users){ +// foreach ($in_room_users as $v){ +// $userss = db::name('user')->where(['id' => $v['user_id']])->field('is_online,is_robot')->find(); +// if($userss['is_online'] == 1 && $userss['is_robot'] == 1){//在线或者机器人都设置为在线 +// db::name('vs_room_visitor')->where(['id' => $v['id']])->update(['on_line' => 1]); +// }else{ +// db::name('vs_room_visitor')->where(['id' => $v['id']])->update(['on_line' => 0]); +// } +// } +// } + + //查找数据库用户 + $dblist = db::name('vs_room_visitor')->where(['room_id' => $room_id])->field('user_id')->select(); + //循环获取在线用户ID 拼接数据 + $user_id_array = []; + //机器人user_id + $robot_user_id = []; + foreach ($dblist as $v) { + //机器人 + if(db::name('user')->where(['id' => $v['user_id']])->value('is_robot')){ + $robot_user_id[] = $v['user_id']; + continue; + } + $user_id_array[] = 'u'.$v['user_id']; + } + //获取腾讯的在线用户 + $online_users = model('Tencent')->query_user_online_status($user_id_array); + $online_user = []; + if(isset($online_users['ActionStatus']) && $online_users['ActionStatus'] == 'OK'){ + if($online_users['QueryResult']){ + foreach ($online_users['QueryResult'] as $v){ + if($v['Status'] == "Online"){ + //截取用户ID前面的 u 并获取用户ID + $user_id = substr($v['To_Account'],1); + $online_user[] = $user_id; + } } } } -// //查找数据库用户 -// $dblist = db::name('vs_room_visitor')->where(['room_id' => $room_id])->field('user_id')->select(); -// //循环获取在线用户ID 拼接数据 -// $user_id_array = []; -// //机器人user_id -// $robot_user_id = []; -// foreach ($dblist as $v) { -// //机器人 -// if(db::name('user')->where(['id' => $v['user_id']])->value('is_robot')){ -// $robot_user_id[] = $v['user_id']; -// continue; -// } -// $user_id_array[] = 'u'.$v['user_id']; -// } -// //获取腾讯的在线用户 -// $online_users = model('Tencent')->query_user_online_status($user_id_array); -// $online_user = []; -// if(isset($online_users['ActionStatus']) && $online_users['ActionStatus'] == 'OK'){ -// if($online_users['QueryResult']){ -// foreach ($online_users['QueryResult'] as $v){ -// if($v['Status'] == "Online"){ -// //截取用户ID前面的 u 并获取用户ID -// $user_id = substr($v['To_Account'],1); -// $online_user[] = $user_id; -// } + if($dblist){ + $onpit = db::name('vs_room_pit')->field('user_id')->where(['room_id' => $room_id])->select(); + //合并数组 + $array = array_merge($online_user,$robot_user_id); +// $array = $online_user; + $arraypit = array_values((array)$onpit); + foreach ($dblist as &$v){ +// if(in_array($v['user_id'],$arraypit)){ +// //跳过本次循环 +// continue; // } -// } -// } -// -// if($dblist){ -// $onpit = db::name('vs_room_pit')->field('user_id')->where(['room_id' => $room_id])->select(); -// //合并数组 -// $array = array_merge($online_user,$robot_user_id); -//// $array = $online_user; -// $arraypit = array_values((array)$onpit); -// foreach ($dblist as &$v){ -//// if(in_array($v['user_id'],$arraypit)){ -//// //跳过本次循环 -//// continue; -//// } -// if(!in_array($v['user_id'],$array)){ -// //修改他的状态 -// db::name('vs_room_visitor')->where(['user_id' => $v['user_id'],'room_id'=>$room_id])->update(['on_line' => 0]); -// //查询他是否在其他房间 -// $room_id_list = db::name('vs_room_visitor')->where(['user_id' => $v['user_id'],'room_id'=>['neq',$room_id]])->find(); -// if($room_id_list){ -// db::name('vs_room_visitor')->where(['user_id' => $v['user_id']])->delete(); -// } -// }else{ -// //修改他的状态 -// db::name('vs_room_visitor')->where(['user_id' => $v['user_id'],'room_id'=>$room_id])->update(['on_line' => 1]); -// } -// } -// }else{ -// $lists = ['on_pit' => [], 'off_pit' => []]; -// return ['code' => 1, 'msg' => '成功', 'data' => $lists]; -// } + if(!in_array($v['user_id'],$array)){ + //修改他的状态 + db::name('vs_room_visitor')->where(['user_id' => $v['user_id'],'room_id'=>$room_id])->update(['on_line' => 0]); + //查询他是否在其他房间 + $room_id_list = db::name('vs_room_visitor')->where(['user_id' => $v['user_id'],'room_id'=>['neq',$room_id]])->find(); + if($room_id_list){ + db::name('vs_room_visitor')->where(['user_id' => $v['user_id']])->delete(); + } + }else{ + //修改他的状态 + db::name('vs_room_visitor')->where(['user_id' => $v['user_id'],'room_id'=>$room_id])->update(['on_line' => 1]); + } + } + }else{ + $lists = ['on_pit' => [], 'off_pit' => []]; + return ['code' => 1, 'msg' => '成功', 'data' => $lists]; + } $list = db::name('vs_room_visitor')->alias('a')