<?php

namespace process;

use App\Utils\API\SendCode;
use app\model\UserPhone;
use app\dao\UserRewardDao;
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('* */1 * * * *', function () {
            $phones = UserPhone::all();
            foreach ($phones as $key => $value) {
                $currentTimestamp = time();

                // 如果是挂机状态
                if (SendCode::get_ws_status($value->phone) == 0) {
                    // 如果在线时长超过 3600 秒
                    if ($value->time > 3600) {
                        $div = intdiv($value->time, 3600);
                        $score = $div * 20;
                        $time_tmp = $value->time - ($div * 3600);

                        // 更新积分
                        $value->score += $score;
                        $value->time = $time_tmp;

                        // 保存用户收益
                        UserRewardDao::Onhookincome($value->user_id, $score);
                    }

                    // 计算新的在线时长
                    $value->time += $currentTimestamp - $value->last_time;
                    $value->last_time = $currentTimestamp;

                    // 更新状态为在线
                    $value->status = 1;
                } else {
                    // 如果不在线，设置状态为 0
                    $value->status = 0;
                }
                $value->last_time = $currentTimestamp;
                // 最后保存数据
                $value->save();
            }
        });
    }
}
