RankData.php 3.9 KB
<?php

namespace App\Console\Commands\RankData;


use App\Helper\QuanqiusouApi;
use App\Http\Logic\Bside\RankData\RankDataLogic;
use App\Models\RankData\RankDataLog as RankDataLogModel;
use App\Models\Domain\DomainInfo;
use App\Models\Project\Project;
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('开始-排名数据');

            //所有项目 今日是否达标 重置
            //有失败会重跑任务,导致达标又被重置 加缓存一天只重置一次
            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);
            }

            $list = Project::leftJoin('gl_project_deploy_optimize', 'gl_project.id', '=', 'gl_project_deploy_optimize.project_id')
                ->where('gl_project.extend_type',0)
                ->where('gl_project.delete_status',0)
                ->where('gl_project_deploy_optimize.api_no', '>', 0)
                ->whereIn('gl_project.type',[2,4])
                ->whereRaw("FIND_IN_SET('2', gl_project.level) = 0 AND FIND_IN_SET('3', gl_project.level) = 0")
                ->select(['gl_project_deploy_optimize.api_no as api_no', 'gl_project_deploy_optimize.project_id as project_id'])
                ->orderBy('gl_project.id', 'asc')
                ->get()->toArray();
            //有排名api编号的项目
//            $list = DeployOptimize::where('api_no', '>', 0)->select('api_no', 'project_id')->orderBy('project_id', 'asc')->get()->toArray();
            //特殊项目 一个项目多个apino
            $list[] = ['api_no' => 11201, 'project_id' => 2104];
            $list[] = ['api_no' => 10690, 'project_id' => 2104];

            Log::channel('rank_data')->info('开始-排名数据-' . count($list));
            foreach ($list as $item){
                RankDataLogModel::addTask($item['project_id'], $item['api_no']);
            }
            //小语种
            $api = new QuanqiusouApi();
            $lang_list = $api->getLangList();

            foreach ($list as $item){
                $langs = $lang_list[$item['api_no']] ?? [];
                foreach ($langs as $lang){
                    RankDataLogModel::addTask($item['project_id'], $item['api_no'], $lang);
                }
            }

            //白帽SEO版
            $list = Project::leftJoin('gl_project_deploy_build', 'gl_project.id', '=', 'gl_project_deploy_build.project_id')
                ->where('gl_project.delete_status',0)
                ->where('gl_project_deploy_build.seo_plan', 1)
                ->whereIn('gl_project.type',[2,3,4])
                ->orderBy('gl_project.id', 'asc')
                ->pluck('gl_project.id')->toArray();
            foreach ($list as $project_id){
                $domain = DomainInfo::getCacheInfoByProjectId($project_id);
                $id = RankDataLogic::instance()->getBmSeoProjects($domain['domain']);
                if(!$id){
                    continue;
                }
                RankDataLogModel::addTask($project_id, $id . '_bmseo');
            }
        } catch (\Exception|\Throwable $e) {
            Log::channel('rank_data')->error('排名数据任务失败 ' . $e->getMessage());
        }
        return true;
    }
}