RankData.php 4.0 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()
    {
        try {


            Log::channel('rank_data')->info('开始-排名数据');
            //同步api_no
//            try {
//                $this->SyncApiNo();
//            } catch (\Exception $e) {
//                Log::channel('rank_data')->error('同步api_no失败:' . $e->getMessage());
//            }


            //所有项目 今日是否达标 重置
            //有失败会重跑任务,导致达标又被重置 加缓存一天只重置一次
            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', 'project_id')->orderBy('project_id', 'asc')->get();
            Log::channel('rank_data')->info('开始-排名数据-' . count($list));
            //当日所有站点谷歌收录数据
            $site_res = $api->getSiteRes();
            if (!$site_res) {
                Log::channel('rank_data')->error('谷歌收录数据获取失败');
            }
            foreach ($list as $item) {
                Log::channel('rank_data')->info('项目开始:ID' . $item['project_id'] .' - '. $item['api_no']) . '';
                try {
                    (new RankDataLogic())->syncRankData($item['api_no'], $site_res);
                } catch (\Exception $e) {
                    Log::channel('rank_data')->error('RankData:失败 ' . $item['api_no'] . $e->getMessage());
                    $error++;
                    continue;
                }
            }
            return !$error;
        } catch (\Exception $e) {
            Log::channel('rank_data')->error('排名数据任务失败 ' . $e->getMessage());
            throw new \Exception($e->getMessage());
        }
    }

    /**
     * 同步项目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();
        if($ai_nos){
            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();
                }
            }
        }
    }

}