From b526b95f898acc23a8a6649fcc3e129e83b3182c Mon Sep 17 00:00:00 2001 From: lingling <1077478963@qq.com> Date: Mon, 17 Feb 2025 22:36:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9F=A5=E8=AF=A2=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E5=8F=B7=E4=BB=8A=E5=A4=A9=E5=9C=A8=E7=BA=BF=E6=97=B6?= =?UTF-8?q?=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Utils/API/SendCode.php | 13 +++++++-- app/dao/UserPhoneLogDao.php | 55 +++++++++++++++++++++++++++++++++++++ app/model/UserPhoneLog.php | 28 +++++++++++++++++++ process/Task2.php | 26 +++++++++++++----- 4 files changed, 113 insertions(+), 9 deletions(-) create mode 100644 app/dao/UserPhoneLogDao.php create mode 100644 app/model/UserPhoneLog.php diff --git a/app/Utils/API/SendCode.php b/app/Utils/API/SendCode.php index 661dbd8..fe23132 100644 --- a/app/Utils/API/SendCode.php +++ b/app/Utils/API/SendCode.php @@ -59,7 +59,8 @@ class SendCode /** * 检测是否在线 * https://apifox.com/apidoc/shared-c08671dd-4e9d-44dd-a2a1-ec4b8316a81f - * 0 在线 1不在线 + * 0 在线 1不在线 2token无效 3WS号不存在 + * code */ public static function get_ws_status($phone) { @@ -72,9 +73,17 @@ class SendCode $response = $client->get("$url"); $body = $response->getBody(); $responseData = json_decode($body, true); // 如果返回的是 JSON 格式,解析它 - if($responseData['code']==0){ + if ($responseData['code'] == 0) { return $responseData['status']; } + if($responseData['code'] == 1){ + echo('token无效'); + return 2; + } + if($responseData['code'] == 2){ + echo('2WS号不存在'); + return 3; + } return -1; } } diff --git a/app/dao/UserPhoneLogDao.php b/app/dao/UserPhoneLogDao.php new file mode 100644 index 0000000..42d806c --- /dev/null +++ b/app/dao/UserPhoneLogDao.php @@ -0,0 +1,55 @@ +where('created_at', '>=', $today." 00:00:00")->sum('time'); + return $OnlineTime; + } + /** + * 自动处理time + * phone 手机号 + * status — 是否在线 1: 在线,0: 不在线 + * currentTimestamp 考虑到运行性能差别 使用传递过来的时间戳 + */ + public static function setOnlineTimeByPhone($phone,$status,$currentTimestamp){ + //这里因为和api的返回是反的所以需要这样 + $status=$status==0?1:0; + $today = date('Y-m-d'); + // $UserPhoneLog=UserPhoneLog::where('phone',$phone)->where('created_at', '>=', $today." 00:00:00")->limit(2)->orderByDesc('id')->get(); + $UserPhoneLog=UserPhoneLog::where('phone',$phone)->where('created_at', '>=', $today." 00:00:00")->orderBy('id', 'desc')->first(); + if(empty($UserPhoneLog)){ + echo("kong"); + $new_UserPhoneLog=new UserPhoneLog(); + $new_UserPhoneLog->status=$status; + $new_UserPhoneLog->phone=$phone; + $new_UserPhoneLog->time=0; + $new_UserPhoneLog->save(); + return; + } + if($UserPhoneLog->status==1&&$status==1){ + echo("kong1"); + $new_UserPhoneLog=new UserPhoneLog(); + $new_UserPhoneLog->status=$status; + $new_UserPhoneLog->phone=$phone; + $new_UserPhoneLog->time=$currentTimestamp-strtotime($UserPhoneLog->created_at); + $new_UserPhoneLog->save(); + echo($currentTimestamp-strtotime($UserPhoneLog->created_at)); + }else{ + echo("kong2"); + $new_UserPhoneLog=new UserPhoneLog(); + $new_UserPhoneLog->status=$status; + $new_UserPhoneLog->phone=$phone; + $new_UserPhoneLog->time=0; + $new_UserPhoneLog->save(); + } + } +} \ No newline at end of file diff --git a/app/model/UserPhoneLog.php b/app/model/UserPhoneLog.php new file mode 100644 index 0000000..64a856f --- /dev/null +++ b/app/model/UserPhoneLog.php @@ -0,0 +1,28 @@ + $value) { $currentTimestamp = time(); - + $status = SendCode::get_ws_status($value->phone); // 如果是挂机状态 - if (SendCode::get_ws_status($value->phone) == 0) { + if ($status == 0) { // 如果在线时长超过 3600 秒 if ($value->time > 3600) { $div = intdiv($value->time, 3600); @@ -72,13 +73,24 @@ class Task2 // 更新状态为在线 $value->status = 1; - } else { + $value->save(); + UserPhoneLogDao::setOnlineTimeByPhone($value->phone, $status, $currentTimestamp); + } + if ($status == 1) { // 如果不在线,设置状态为 0 $value->status = 0; + $value->last_time = $currentTimestamp; + $value->save(); + UserPhoneLogDao::setOnlineTimeByPhone($value->phone, $status, $currentTimestamp); } - $value->last_time = $currentTimestamp; - // 最后保存数据 - $value->save(); + if ($status == 3) { + // 如果账户不存在直接删除 + $value->delete(); + } + // UserPhoneLogDao::setOnlineTimeByPhone($value->phone, $status, $currentTimestamp); + // $value->last_time = $currentTimestamp; + // // 最后保存数据 + // $value->save(); } }); }