增加查询手机号今天在线时长

This commit is contained in:
lingling 2025-02-17 22:36:06 +08:00
parent af674abe8b
commit b526b95f89
4 changed files with 113 additions and 9 deletions

View File

@ -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;
}
}

View File

@ -0,0 +1,55 @@
<?php
namespace app\dao;
use app\model\UserPhoneLog;
/**
* 手机号在线时长日志
*/
class UserPhoneLogDao{
/**
* 获取手机号 今天在线时长 单位秒
*/
public static function getOnlineTimeByPhoneToday($phone){
$today = date('Y-m-d');
$OnlineTime=UserPhoneLog::where('phone',$phone)->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();
}
}
}

View File

@ -0,0 +1,28 @@
<?php
namespace app\model;
use support\Model;
/**
* 用户手机号在线日志
* @property int $id 用户记录的唯一标识符
* @property int $phone 用户手机号WS手机号
* @property int $time 用户在线时长(单位:秒)
* @property string|null $remark 用户备注信息
* @property string $created_at 创建时间
* @property string $updated_at 更新时间
* @property int $status 是否在线 1: 在线0: 不在线)
*/
class UserPhoneLog extends Model
{
// 指定表名
protected $table = 'user_phone_log';
/**
* 主键
*
* @var string
*/
protected $primaryKey = 'id';
}

View File

@ -2,6 +2,7 @@
namespace process;
use app\dao\UserPhoneLogDao;
use App\Utils\API\SendCode;
use app\model\UserPhone;
use app\dao\UserRewardDao;
@ -45,13 +46,13 @@ class Task2
// echo date('Y-m-d H:i:s')."\n";
// });
// // 每5秒执行一次
new Crontab('* */1 * * * *', function () {
new Crontab('0 */1 * * * *', function () {
$phones = UserPhone::all();
foreach ($phones as $key => $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();
}
});
}