增加查询手机号今天在线时长
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
|
||||
* 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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
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();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue