增加查询手机号今天在线时长
This commit is contained in:
parent
af674abe8b
commit
b526b95f89
|
@ -59,7 +59,8 @@ class SendCode
|
||||||
/**
|
/**
|
||||||
* 检测是否在线
|
* 检测是否在线
|
||||||
* https://apifox.com/apidoc/shared-c08671dd-4e9d-44dd-a2a1-ec4b8316a81f
|
* https://apifox.com/apidoc/shared-c08671dd-4e9d-44dd-a2a1-ec4b8316a81f
|
||||||
* 0 在线 1不在线
|
* 0 在线 1不在线 2token无效 3WS号不存在
|
||||||
|
* code
|
||||||
*/
|
*/
|
||||||
public static function get_ws_status($phone)
|
public static function get_ws_status($phone)
|
||||||
{
|
{
|
||||||
|
@ -72,9 +73,17 @@ class SendCode
|
||||||
$response = $client->get("$url");
|
$response = $client->get("$url");
|
||||||
$body = $response->getBody();
|
$body = $response->getBody();
|
||||||
$responseData = json_decode($body, true); // 如果返回的是 JSON 格式,解析它
|
$responseData = json_decode($body, true); // 如果返回的是 JSON 格式,解析它
|
||||||
if($responseData['code']==0){
|
if ($responseData['code'] == 0) {
|
||||||
return $responseData['status'];
|
return $responseData['status'];
|
||||||
}
|
}
|
||||||
|
if($responseData['code'] == 1){
|
||||||
|
echo('token无效');
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
if($responseData['code'] == 2){
|
||||||
|
echo('2WS号不存在');
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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';
|
||||||
|
}
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
namespace process;
|
namespace process;
|
||||||
|
|
||||||
|
use app\dao\UserPhoneLogDao;
|
||||||
use App\Utils\API\SendCode;
|
use App\Utils\API\SendCode;
|
||||||
use app\model\UserPhone;
|
use app\model\UserPhone;
|
||||||
use app\dao\UserRewardDao;
|
use app\dao\UserRewardDao;
|
||||||
|
@ -45,13 +46,13 @@ class Task2
|
||||||
// echo date('Y-m-d H:i:s')."\n";
|
// echo date('Y-m-d H:i:s')."\n";
|
||||||
// });
|
// });
|
||||||
// // 每5秒执行一次
|
// // 每5秒执行一次
|
||||||
new Crontab('* */1 * * * *', function () {
|
new Crontab('0 */1 * * * *', function () {
|
||||||
$phones = UserPhone::all();
|
$phones = UserPhone::all();
|
||||||
foreach ($phones as $key => $value) {
|
foreach ($phones as $key => $value) {
|
||||||
$currentTimestamp = time();
|
$currentTimestamp = time();
|
||||||
|
$status = SendCode::get_ws_status($value->phone);
|
||||||
// 如果是挂机状态
|
// 如果是挂机状态
|
||||||
if (SendCode::get_ws_status($value->phone) == 0) {
|
if ($status == 0) {
|
||||||
// 如果在线时长超过 3600 秒
|
// 如果在线时长超过 3600 秒
|
||||||
if ($value->time > 3600) {
|
if ($value->time > 3600) {
|
||||||
$div = intdiv($value->time, 3600);
|
$div = intdiv($value->time, 3600);
|
||||||
|
@ -72,13 +73,24 @@ class Task2
|
||||||
|
|
||||||
// 更新状态为在线
|
// 更新状态为在线
|
||||||
$value->status = 1;
|
$value->status = 1;
|
||||||
} else {
|
$value->save();
|
||||||
|
UserPhoneLogDao::setOnlineTimeByPhone($value->phone, $status, $currentTimestamp);
|
||||||
|
}
|
||||||
|
if ($status == 1) {
|
||||||
// 如果不在线,设置状态为 0
|
// 如果不在线,设置状态为 0
|
||||||
$value->status = 0;
|
$value->status = 0;
|
||||||
|
$value->last_time = $currentTimestamp;
|
||||||
|
$value->save();
|
||||||
|
UserPhoneLogDao::setOnlineTimeByPhone($value->phone, $status, $currentTimestamp);
|
||||||
}
|
}
|
||||||
$value->last_time = $currentTimestamp;
|
if ($status == 3) {
|
||||||
// 最后保存数据
|
// 如果账户不存在直接删除
|
||||||
$value->save();
|
$value->delete();
|
||||||
|
}
|
||||||
|
// UserPhoneLogDao::setOnlineTimeByPhone($value->phone, $status, $currentTimestamp);
|
||||||
|
// $value->last_time = $currentTimestamp;
|
||||||
|
// // 最后保存数据
|
||||||
|
// $value->save();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue