From 770c9a0fb81b409d078de60a6bc53f699b53d4fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8D=8E=E6=B8=85?= <18691022700@163.com> Date: Sun, 28 Sep 2025 15:48:36 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E8=BF=9E=E5=90=8E=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/api/controller/Room.php | 9 ++++++ application/api/model/Room.php | 32 ++++++++++++++++++++++ application/api/model/Tencent.php | 6 +++- application/cron/controller/TenSeconds.php | 29 ++++++++++++-------- 4 files changed, 64 insertions(+), 12 deletions(-) diff --git a/application/api/controller/Room.php b/application/api/controller/Room.php index c56e057..dbcac23 100644 --- a/application/api/controller/Room.php +++ b/application/api/controller/Room.php @@ -451,4 +451,13 @@ class Room extends BaseCom $reslut = model('Room')->user_reconnect($this->uid, $room_id); return V($reslut['code'], $reslut['msg'], $reslut['data']); } + + //用户在房间内切后台保留机制 + public function user_in_room_background() + { + $room_id = input('room_id', 0); + $type = input('type', 1);//1-切后台,2-切前台 + $reslut = model('Room')->user_in_room_background($this->uid, $room_id,$type); + return V($reslut['code'], $reslut['msg'], $reslut['data']); + } } \ No newline at end of file diff --git a/application/api/model/Room.php b/application/api/model/Room.php index 42f7389..c5804fb 100644 --- a/application/api/model/Room.php +++ b/application/api/model/Room.php @@ -2548,4 +2548,36 @@ class Room extends Model } return ['code' => 1, 'msg' => '操作成功', 'data' => null]; } + + public function user_in_room_background($user_id,$room_id,$type) + { + if(!$room_id){ + return ['code' => 0, 'msg' => '参数错误', 'data' => null]; + } + if($type == 1){//1-切后台,2-切前台 + $is_bg = db::name('vs_user_in_room_bg')->where(['user_id' => $user_id,'room_id' => $room_id])->find(); + if($is_bg){ + $up_bg = [ + 'updatetime' => time(), + ]; + db::name('vs_user_in_room_bg')->where('id',$is_bg['id'])->update($up_bg); + }else{ + $data = [ + 'user_id' => $user_id, + 'room_id' => $room_id, + 'createtime' => time(), + 'updatetime' => time(), + ]; + $room_background = db::name('vs_user_in_room_bg')->insert($data); + if(!$room_background){ + return ['code' => 0, 'msg' => '操作失败', 'data' => null]; + } + } + + }else{ + db::name('vs_user_in_room_bg')->where(['user_id' => $user_id,'room_id' => $room_id])->delete(); + } + + return ['code' => 1, 'msg' => '操作成功', 'data' => null]; + } } \ No newline at end of file diff --git a/application/api/model/Tencent.php b/application/api/model/Tencent.php index 614df0a..1a5470d 100644 --- a/application/api/model/Tencent.php +++ b/application/api/model/Tencent.php @@ -932,7 +932,11 @@ class Tencent extends Model $text['type'] = 2; model('Chat')->sendMsg(1058,$v['room_id'],$text); }else{ - model('Room')->quit_room($v['user_id'], $v['room_id'],$v['user_id'],2); + //查询是否有切后台的操作 + $bg_room = db::name('vs_user_in_room_bg')->where(['room_id' => $v['room_id'],'user_id' => $v['user_id']])->find(); + if(!$bg_room){ + model('Room')->quit_room($v['user_id'], $v['room_id'],$v['user_id'],2); + } } } } diff --git a/application/cron/controller/TenSeconds.php b/application/cron/controller/TenSeconds.php index c5bd5b4..edb7e10 100644 --- a/application/cron/controller/TenSeconds.php +++ b/application/cron/controller/TenSeconds.php @@ -18,9 +18,14 @@ class TenSeconds echo "房间在线人数:\n"; $this->auction_end_notice();//拍卖房结束提醒 echo "\n"; + //清理切后台超过5分钟的用户 + echo "清理切后台超过5分钟的用户\n"; + $this->clear_offline_user(); + echo "\n"; } + //在线人数 protected function auction_end_notice() { $auction_list = db::name('vs_room')->field('id')->where(['room_status'=>1,'apply_status' => 2,'type_id' =>['<>',6]])->select(); @@ -40,17 +45,6 @@ class TenSeconds $data_number++; } } -// else{ -// if($on_pit_num > 0){ -// $text = [ -// 'online_number' => $on_pit_num, -// 'room_id' => $value['id'],//接受房间id -// ]; -// model('api/Chat')->sendMsg(1036,$value['id'],$text); -// $data_number++; -// } -// } - $data_count++; } } @@ -58,4 +52,17 @@ class TenSeconds echo "房间在线人数>0 的总共" . $data_number . "条数据\n"; } + //清理切后台超过5分钟的用户 + protected function clear_offline_user() + { + $time = time() - 300; + $user_list = db::name('vs_user_in_room_bg')->field('id')->where('updatetime', '<=', $time)->select(); + if($user_list){ + foreach ($user_list as &$value){ + //删除 + db::name('vs_user_in_room_bg')->delete($value['id']); + } + } + } + } \ No newline at end of file