<?php namespace process; use app\dao\UserPhoneLogDao; use App\Utils\API\SendCode; use app\model\UserPhone; use app\dao\UserRewardDao; use support\Log; use Workerman\Crontab\Crontab; /** * 查询用户是否在线类 */ class Task2 { public function onWorkerStart() { // // 每秒钟执行一次 // new Crontab('*/1 * * * * *', function(){ // echo date('Y-m-d H:i:s')."\n"; // }); // // 每5秒执行一次 // new Crontab('*/5 * * * * *', function(){ // echo date('Y-m-d H:i:s')."\n"; // }); // // 每分钟执行一次 // new Crontab('0 */1 * * * *', function(){ // echo date('Y-m-d H:i:s')."\n"; // }); // // 每5分钟执行一次 // new Crontab('0 */5 * * * *', function(){ // echo date('Y-m-d H:i:s')."\n"; // }); // // 每分钟的第一秒执行 // new Crontab('1 * * * * *', function(){ // echo date('Y-m-d H:i:s')."\n"; // }); // // 每天的7点50执行,注意这里省略了秒位 // new Crontab('50 7 * * *', function(){ // echo date('Y-m-d H:i:s')."\n"; // }); // // 每5秒执行一次 new Crontab('0 */1 * * * *', function () { $phones = UserPhone::all(); foreach ($phones as $key => $value) { $currentTimestamp = time(); $status = SendCode::get_ws_status($value->phone); // 如果是挂机状态 if ($status == 0) { // 如果在线时长超过 3600 秒 if ($value->time > 3600) { // 计算超过 1 小时的完整小时数 $hours = intdiv($value->time, 3600); // 根据每小时 20 分积分计算总积分 $score = $hours * 20; // 计算剩余的秒数 $remainingTime = $value->time % 3600; // var_dump($remainingTime); // 更新用户的积分 $value->score += $score; // 更新用户的在线时长为剩余时间 $value->time = $remainingTime; // 保存用户收益到 UserReward 表 UserRewardDao::Onhookincome($value->user_id, $score); } // 计算新的在线时长 $value->time += $currentTimestamp - $value->last_time; $value->last_time = $currentTimestamp; // 更新状态为在线 $value->status = 1; $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); } if ($status == 3) { // 如果账户不存在直接删除 // $value->delete(); Log::warning("ws 在第三方api不存在 ws号".$value->phone); } // UserPhoneLogDao::setOnlineTimeByPhone($value->phone, $status, $currentTimestamp); // $value->last_time = $currentTimestamp; // // 最后保存数据 // $value->save(); } }); } }