WebsiteData.php 4.0 KB
<?php

namespace App\Console\Commands;

use App\Models\File\DataFile;
use Illuminate\Console\Command;

class WebsiteData extends Command
{
    use CmdSignal;

    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'website_data';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '向AICC推送数据';

    // 最大支持5个进程
    public $maxRunNumber = 50;

    protected $time;

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->time = date('Y-m');
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
//    public function handle()
//    {
//        # 0 - 未推送
//        # 1 - 已推送
//        # 2 - 其他问题
//        $status = 0;
//        $lists  = DataFile::query()->where('status', $status)
//                          ->where('created_at', 'like', $this->time . '%')->first();
//        if (is_null($lists)) {
//            $this->error('没有任务,等待中');
//            sleep(30);
//            return 0;
//        }
//
//        $key   = $this->signature . '-' . $lists->id;
//        $count = redis_get($key);
//        $data  = $lists;
//
//        $url         = env('AICC_URL');
//        $msg         = http_post($url, json_encode(compact('data')));
//        $status_code = $msg['status'];
//        if ($status_code != 200) {
//            if ($count == 2) {
//                $lists->status = 2;
//                $lists->save();
//                $this->error('项目文件数据保存失败! - 其他原因 - ' . $key);
//            } else {
//                redis_add($key, $count + 1);
//                $this->error('项目文件数据保存失败! - ' . $key);
//            }
//        }
//        $lists->status = 1;
//        $lists->save();
//        return 0;
//    }

    public function start(): int
    {
        # 0 - 未推送
        # 1 - 已推送
        # 2 - 其他问题
        $status = 0;
        $lists  = DataFile::query()->where('status', $status)
                          ->where('created_at', 'like', $this->time . '%')->first();
        if (is_null($lists)) {
            $this->debug_echo('没有任务,等待中');
            sleep(30);
            return 0;
        }

        $key         = $this->signature . '-' . $lists->id;
        $count       = redis_get($key);
        $data        = $lists;
        $url         = env('AICC_URL');
        $msg         = http_post($url, json_encode(compact('data')));
        $status_code = $msg['status'];
        if ($status_code != 200) {
            if ($count == 2) {
                $lists->status = 2;
                $lists->save();
                $this->debug_echo('项目文件数据保存失败! - 其他原因 - ' . $key);
            } else {
                redis_add($key, $count + 1);
                $this->debug_echo('项目文件数据保存失败! - ' . $key);
            }
        }
        $lists->status = 1;
        $lists->save();
        $this->info('项目文件数据保存成功!');
        return 0;
    }

    /**
     * Execute the console command.
     *
     * @return int
     */
//    public function handle()
//    {
//        $DataFile = new DataFile();
//        $data     = $DataFile->allData();
//        # 详细数据
//        $items = $data['items'];
//        # 总分页
//        $totalPage = $data['totalPage'];
//        $this->post_data($items);
//        if ($totalPage > 1) {
//            for ($page = 2; $page <= $totalPage; $page++) {
//                $da = $DataFile->allData($page);
//                $this->post_data($da['items']);
//            }
//        }
//        $this->info('项目文件数据推送完成!');
//        return 0;
//    }

    public function post_data($data)
    {
        $url = env('AICC_URL');
        $msg = http_post($url, json_encode(compact('data')));
        print_r($msg);
    }

}