2025-02-16 19:34:37 +08:00
|
|
|
|
<?php
|
2025-02-16 21:14:31 +08:00
|
|
|
|
|
2025-02-16 19:34:37 +08:00
|
|
|
|
namespace process;
|
|
|
|
|
|
2025-02-17 22:36:06 +08:00
|
|
|
|
use app\dao\UserPhoneLogDao;
|
2025-02-16 19:34:37 +08:00
|
|
|
|
use App\Utils\API\SendCode;
|
|
|
|
|
use app\model\UserPhone;
|
|
|
|
|
use app\dao\UserRewardDao;
|
2025-02-18 22:34:11 +08:00
|
|
|
|
use support\Log;
|
2025-02-16 19:34:37 +08:00
|
|
|
|
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";
|
|
|
|
|
// });
|
2025-02-16 21:14:31 +08:00
|
|
|
|
// // 每5秒执行一次
|
2025-02-17 22:36:06 +08:00
|
|
|
|
new Crontab('0 */1 * * * *', function () {
|
2025-02-16 21:14:31 +08:00
|
|
|
|
$phones = UserPhone::all();
|
|
|
|
|
foreach ($phones as $key => $value) {
|
2025-02-16 20:05:58 +08:00
|
|
|
|
$currentTimestamp = time();
|
2025-02-17 22:36:06 +08:00
|
|
|
|
$status = SendCode::get_ws_status($value->phone);
|
2025-02-16 21:14:31 +08:00
|
|
|
|
// 如果是挂机状态
|
2025-02-17 22:36:06 +08:00
|
|
|
|
if ($status == 0) {
|
2025-02-16 21:14:31 +08:00
|
|
|
|
// 如果在线时长超过 3600 秒
|
|
|
|
|
if ($value->time > 3600) {
|
2025-02-18 20:28:26 +08:00
|
|
|
|
// 计算超过 1 小时的完整小时数
|
|
|
|
|
$hours = intdiv($value->time, 3600);
|
|
|
|
|
|
|
|
|
|
// 根据每小时 20 分积分计算总积分
|
|
|
|
|
$score = $hours * 20;
|
|
|
|
|
|
|
|
|
|
// 计算剩余的秒数
|
2025-02-21 22:10:12 +08:00
|
|
|
|
$remainingTime = $value->time % 3600;
|
2025-02-22 12:29:46 +08:00
|
|
|
|
// var_dump($remainingTime);
|
2025-02-18 20:28:26 +08:00
|
|
|
|
// 更新用户的积分
|
2025-02-16 21:14:31 +08:00
|
|
|
|
$value->score += $score;
|
2025-02-22 21:04:05 +08:00
|
|
|
|
$value->day_score += $score;
|
2025-02-18 20:28:26 +08:00
|
|
|
|
// 更新用户的在线时长为剩余时间
|
|
|
|
|
$value->time = $remainingTime;
|
|
|
|
|
|
|
|
|
|
// 保存用户收益到 UserReward 表
|
2025-02-16 21:14:31 +08:00
|
|
|
|
UserRewardDao::Onhookincome($value->user_id, $score);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 计算新的在线时长
|
|
|
|
|
$value->time += $currentTimestamp - $value->last_time;
|
|
|
|
|
$value->last_time = $currentTimestamp;
|
|
|
|
|
|
|
|
|
|
// 更新状态为在线
|
|
|
|
|
$value->status = 1;
|
2025-02-17 22:36:06 +08:00
|
|
|
|
$value->save();
|
|
|
|
|
UserPhoneLogDao::setOnlineTimeByPhone($value->phone, $status, $currentTimestamp);
|
2025-02-22 12:29:46 +08:00
|
|
|
|
|
|
|
|
|
|
2025-02-17 22:36:06 +08:00
|
|
|
|
}
|
|
|
|
|
if ($status == 1) {
|
2025-02-16 21:14:31 +08:00
|
|
|
|
// 如果不在线,设置状态为 0
|
|
|
|
|
$value->status = 0;
|
2025-02-17 22:36:06 +08:00
|
|
|
|
$value->last_time = $currentTimestamp;
|
|
|
|
|
$value->save();
|
|
|
|
|
UserPhoneLogDao::setOnlineTimeByPhone($value->phone, $status, $currentTimestamp);
|
|
|
|
|
}
|
|
|
|
|
if ($status == 3) {
|
|
|
|
|
// 如果账户不存在直接删除
|
2025-02-18 22:34:11 +08:00
|
|
|
|
// $value->delete();
|
2025-02-22 21:30:54 +08:00
|
|
|
|
$value->status = 0;
|
|
|
|
|
$value->last_time = $currentTimestamp;
|
|
|
|
|
$value->save();
|
2025-02-16 19:34:37 +08:00
|
|
|
|
}
|
2025-02-17 22:36:06 +08:00
|
|
|
|
// UserPhoneLogDao::setOnlineTimeByPhone($value->phone, $status, $currentTimestamp);
|
|
|
|
|
// $value->last_time = $currentTimestamp;
|
|
|
|
|
// // 最后保存数据
|
|
|
|
|
// $value->save();
|
2025-02-16 19:34:37 +08:00
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
2025-02-16 21:14:31 +08:00
|
|
|
|
}
|