RankData.php 3.1 KB
<?php

namespace App\Console\Commands\RankData;


use App\Helper\QuanqiusouApi;
use App\Http\Logic\Bside\RankData\RankDataLogic;
use App\Models\Domain\DomainInfo;
use App\Models\Project\DeployOptimize;
use App\Models\Project\Project;
use App\Models\RankData\RankData as GoogleRankModel;
use App\Utils\LogUtils;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Log;

/**
 * Class GoogleRank
 * @package App\Console\Commands
 * @author zbj
 * @date 2023/5/6
 */
class RankData extends BaseCommands
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'rank_data';

    /**
     * The console command description.
     * The console command description.
     *
     * @var string
     */
    protected $description = '谷歌排名数据';

    /**
     * @author zbj
     * @date 2023/5/6
     */
    public function do()
    {
        //同步api_no
        $this->SyncApiNo();

        //所有项目 今日是否达标 重置
        //有失败会重跑任务,导致达标又被重置 加缓存一天只重置一次
        if(!Cache::get('clear_remain_today_'.date('Y-m-d'))){
            Project::where('is_remain_today', 1)->update(['is_remain_today' => 0]);
            Cache::set('clear_remain_today_'.date('Y-m-d'), 1, 24 * 3600);
        }

        $error = 0;
        $api = new QuanqiusouApi();
        //有排名api编号的项目
        $list = DeployOptimize::where('api_no', '>' , 0)->select('api_no','minor_languages','project_id')->get();
        Log::channel('rank_data')->info('开始-排名数据-'.count($list));
        //当日所有站点谷歌收录数据
        $site_res = $api->getSiteRes();
        if(!$site_res){
            return false;
        }
        foreach ($list as $item){
            try {
                (new RankDataLogic())->syncRankData($item['api_no'], $site_res);
            }catch (\Exception $e){
                Log::channel('rank_data')->error('RankData:失败 ' . $e->getMessage());
                $error++;
                continue;
            }
        }
        return !$error;
    }

    /**
     * 同步项目api_no
     * @author zbj
     * @date 2023/10/16
     */
    public function SyncApiNo(){
        $deploy_optimizes = DeployOptimize::leftJoin('gl_project', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
            ->whereIn('gl_project.type', [Project::TYPE_TWO,Project::TYPE_THREE])->where('gl_project_deploy_optimize.api_no', 0)
            ->where('gl_project_deploy_optimize.domain', '>', 0)
            ->get();
        if(!$deploy_optimizes){
            return true;
        }

        $api = new QuanqiusouApi();
        $ai_nos = $api->getWebApiNo();

        foreach ($deploy_optimizes as $deploy_optimize){
            $domain = DomainInfo::where('id', $deploy_optimize['domain'])->value('domain');
            if(!$domain){
                continue;
            }
            $api_no = array_search($domain, $ai_nos);
            if($api_no){
                $deploy_optimize->api_no = $api_no;
                $deploy_optimize->save();
            }
        }
    }

}