UpdateSeoTdk.php 5.4 KB
<?php

namespace App\Console\Commands;

use App\Helper\Common;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;

/**
 * 初始化项目
 * Class InitProject
 * @package App\Console\Commands
 * @author zbj
 * @date 2023/10/8
 */
class UpdateSeoTdk extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'update_seo_tdk';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * @return bool
     */
    public function handle()
    {
        while (true){
            $project_id = Redis::rpop('updateSeoTdk');
            if(!$project_id){
                sleep(2);
                continue;
            }
            echo date('Y-m-d H:i:s') . ' start: ' . $project_id . PHP_EOL;

            try {
                ProjectServer::useProject($project_id);
                $this->updateProduct($project_id);
                $this->updateBlogs($project_id);
                $this->updateNews($project_id);
                DB::disconnect('custom_mysql');
            }catch (\Exception $e){
                echo date('Y-m-d H:i:s') . ' error: ' . $project_id . '->' . $e->getMessage() . PHP_EOL;
            }

            echo date('Y-m-d H:i:s') . ' end: ' . $project_id . PHP_EOL;
        }
    }

    /**
     * @remark :更新产品tdk
     * @name   :updateProduct
     * @author :lyh
     * @method :post
     * @time   :2023/8/19 9:25
     */
    public function updateProduct($project_id){
        $list = DB::connection('custom_mysql')->table('gl_product')->where(['status'=>1,'project_id'=>$project_id])->get()->toArray();
        if(!empty($list)){
            foreach ($list as $v){
                $v = (array)$v;
                $seo_arr = json_decode($v['seo_mate'], true) ?: [];
                //更新seo_title
                if(!isset($seo_arr['title'])){
                    //生成seo_title
                    $seo_arr['title'] = $this->ai_send('product_seo_title',$v['title']);
                }
                //更新seo_keyword
                if(!isset($seo_arr['keyword'])){
                    $seo_arr['keyword'] = $this->ai_send('product_seo_keyword',$v['title']);
                }
                //更新seo_keyword
                if(!isset($seo_arr['description'])){
                    $seo_arr['description'] = $this->ai_send('product_seo_description',$v['title']);
                }
                $ser_str = json_encode($seo_arr,true);
                DB::connection('custom_mysql')->table('gl_product')->where(['id'=>$v['id']])->update(['seo_mate'=>$ser_str]);
            }
        }
        return true;
    }

    /**
     * @remark :更新新闻Tdk
     * @name   :updateNews
     * @author :lyh
     * @method :post
     * @time   :2023/8/19 10:06
     */
    public function updateNews($project_id){
        $list = DB::connection('custom_mysql')->table('gl_news')->where(['status'=>1,'project_id'=>$project_id])->get()->toArray();
        if(!empty($list)){
            foreach ($list as $k => $v){
                $v = (array)$v;
                $data = [];
                if(empty($v['seo_title'])){
                    $data['seo_title'] = $this->ai_send('news_seo_title',$v['name']);
                }
                if(empty($v['seo_keywords'])){
                    $data['seo_keywords'] = $this->ai_send('news_seo_keyword',$v['name']);
                }
                if(empty($v['seo_description'])){
                    $data['seo_description'] = $this->ai_send('news_seo_description',$v['name']);
                }
                DB::connection('custom_mysql')->table('gl_news')->where(['id'=>$v['id']])->update($data);
            }
        }
        return true;
    }

    /**
     * @remark :更新blogTdk
     * @name   :updateBlogs
     * @author :lyh
     * @method :post
     * @time   :2023/8/19 10:07
     */
    public function updateBlogs($project_id){
        $list = DB::connection('custom_mysql')->table('gl_blog')->where(['status'=>1,'project_id'=>$project_id])->get()->toArray();
        if(!empty($list)){
            foreach ($list as $k => $v){
                $v = (array)$v;
                $data = [];
                if(empty($v['seo_title'])){
                    $data['seo_title'] = $this->ai_send('blog_seo_title',$v['name']);
                }
                if(empty($v['seo_keywords'])){
                    $data['seo_keywords'] = $this->ai_send('blog_seo_keyword',$v['name']);
                }
                if(empty($v['seo_description'])){
                    $data['seo_description'] = $this->ai_send('blog_seo_description',$v['name']);
                }
                DB::connection('custom_mysql')->table('gl_blog')->where(['id'=>$v['id']])->update($data);
            }
        }
        return true;
    }

    /**
     * @remark :AI发送
     * @name   :ai_send
     * @author :lyh
     * @method :post
     * @time   :2023/8/19 10:40
     */
    public function ai_send($key,$keywords){
        $chat_url = 'v2/openai_chat';
        $param = [
            'key'=>$key,
            'keywords'=>$keywords,
        ];
        $data = Common::send_openai_msg($chat_url,$param);
        return $data['text'];
    }
}