UpdateRoute.php 9.8 KB
<?php
/**
 * @remark :
 * @name   :UpdateRoute.php
 * @author :lyh
 * @method :post
 * @time   :2023/11/20 15:07
 */

namespace App\Console\Commands;

use App\Helper\Arr;
use App\Helper\Translate;
use App\Models\CustomModule\CustomModuleCategory;
use App\Models\CustomModule\CustomModuleContent;
use App\Models\Product\CategoryRelated;
use App\Models\Product\Keyword;
use App\Models\Product\Product;
use App\Models\Project\Project;
use App\Models\RouteMap\RouteMap;
use App\Models\Template\BTemplate;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

/**
 * @remark :更新所有项目的路由
 * @name   :UpdateRoute
 * @author :lyh
 * @method :post
 * @time   :2023/11/20 15:08
 */
class UpdateRoute extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'update_route';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '更新路由';

    /**
     * @remark :统一更新路由
     * @name   :handle
     * @author :lyh
     * @method :post
     * @time   :2023/11/20 15:13
     */
    public function handle(){
        $projectModel = new Project();
        $list = $projectModel->list(['id'=>206]);
        $data = [];
        foreach ($list as $v){
            echo date('Y-m-d H:i:s') . 'project_id:'.$v['id'] . PHP_EOL;
            ProjectServer::useProject($v['id']);
            $this->setProductKeyword();
            DB::disconnect('custom_mysql');
        }
        echo date('Y-m-d H:i:s') . 'end' . PHP_EOL;
    }

    public function setCustomRoute($project_id){
//        $customModel = new CustomModuleContent();
//        $list = $customModel->list();
//        foreach ($list as $v){
//                $route = RouteMap::setRoute($v['name'], RouteMap::SOURCE_MODULE, $v['id'], $project_id);
//                $customModel->edit(['route'=>$route],['id'=>$v['id']]);
//        }
        $cateModel = new CustomModuleCategory();
        $lists = $cateModel->list();
        foreach ($lists as $v1){
                $route = RouteMap::setRoute($v1['name'], RouteMap::SOURCE_MODULE_CATE, $v1['id'], $project_id);
                $cateModel->edit(['route'=>$route],['id'=>$v1['id']]);

        }
    }

    public function delProductKeyword(){
        $keywordModel = new Keyword();
        $lists = $keywordModel->list(['status'=>1],'id',['id','title']);
        foreach ($lists as $v){
            echo date('Y-m-d H:i:s') . 'id:'.$v['id'] . PHP_EOL;
            $info = $keywordModel->read(['id'=>['!=',$v['id'],'title'=>$v['title']]]);
            if($info !== false){
                $keywordModel->del(['id'=>$v['id']]);
            }
        }
    }

    /**
     * @remark :写入
     * @name   :getProductKeyword
     * @author :lyh
     * @method :post
     * @time   :2023/12/21 14:37
     */
    public function setProductKeyword(){
        $keywordModel = new Keyword();
        $lists = $keywordModel->list();
        if(!empty($lists)){
            foreach ($lists as $v){
                if(!empty($v['route'])){
//                    $tag = "-tag";
//                    if ((substr($v['route'], -strlen($tag)) === $tag)) {
//                        echo date('Y-m-d H:i:s') . '拼接 :'.$v['id'] . PHP_EOL;
////                        $route = Translate::tran($v['route'], 'en').$tag;
//                        // 如果不是以 '-tag' 结尾,则拼接上 '-tag'
//                        $route = trim($v['route'],'-tag');
//                        $route = RouteMap::setRoute($route, RouteMap::SOURCE_PRODUCT_KEYWORD, $v['id'], $v['project_id']);
//                        $keywordModel->edit(['route'=>$route],['id'=>$v['id']]);
//                    }else{
//                        $route = Translate::tran($v['title'], 'en').$tag;
//                        $route = RouteMap::setRoute($route, RouteMap::SOURCE_PRODUCT_KEYWORD, $v['id'], $v['project_id']);
//                        $keywordModel->edit(['route'=>$route],['id'=>$v['id']]);
//                    }
                }else{
                    $route = Translate::tran($v['title'], 'en');
                    echo date('Y-m-d H:i:s') . 'route :'.$route . PHP_EOL;
                    $route = RouteMap::setRoute($route, RouteMap::SOURCE_PRODUCT_KEYWORD, $v['id'], $v['project_id']);
                    $keywordModel->edit(['route'=>$route],['id'=>$v['id']]);
                }
//                echo date('Y-m-d H:i:s') . 'end :' . PHP_EOL;
            }
        }
    }

    /**
     * @remark :产品关键字
     * @name   :getProductKeyword
     * @author :lyh
     * @method :post
     * @time   :2023/12/8 11:13
     */
    public function getProductKeyword(){
        $keywordModel = new Keyword();
        $lists = $keywordModel->list(['status'=>1,'route'=>'']);
        if(!empty($lists)){
            foreach ($lists as $v){
                $tag = "-tag";
                if (!(substr($v['route'], -strlen($tag)) === $tag)) {
                    echo date('Y-m-d H:i:s') . '拼接'.$tag . PHP_EOL;
                    $route = $v['route'].$tag;
                    // 如果不是以 '-tag' 结尾,则拼接上 '-tag'
                    $routeModel = new RouteMap();
                    $routeModel->edit(['route'=>$route],['source'=>RouteMap::SOURCE_PRODUCT_KEYWORD,'source_id'=>$v['id']]);
                    $keywordModel->edit(['route'=>$route],['id'=>$v['id']]);
                    echo date('Y-m-d H:i:s') . 'end'.$v['id'] . PHP_EOL;
                }
            }
        }
    }

    public function getProduct(){
        $productModel = new Product();
        $lists = $productModel->list(['status'=>1]);
        if(!empty($lists)){
            foreach ($lists as $v){
                if(!empty($v['route'])){
                    $tag = "-product";
                    if (!(substr($v['route'], -strlen($tag)) === $tag)) {
                        echo date('Y-m-d H:i:s') . '拼接'.$tag . PHP_EOL;
                        $route = $v['route'].$tag;
                        // 如果不是以 '-product' 结尾,则拼接上 '-product'
                        $route = RouteMap::setRoute($route, RouteMap::SOURCE_PRODUCT, $v['id'], $v['project_id']);
                        $productModel->edit(['route'=>$route],['id'=>$v['id']]);
                    }else{
//                        echo date('Y-m-d H:i:s') . 'id :'.$v['id'] . PHP_EOL;
//                        $route = RouteMap::setRoute($v['title'], RouteMap::SOURCE_PRODUCT, $v['id'], $v['project_id']);
//                        $productModel->edit(['route'=>$route],['id'=>$v['id']]);
                    }
                }else{
                    echo date('Y-m-d H:i:s') . 'id :'.$v['id'] . PHP_EOL;
//                    $v['title'] = Translate::tran($v['title'], 'en');
                    $route = RouteMap::setRoute($v['title'], RouteMap::SOURCE_PRODUCT, $v['id'], $v['project_id']);
                    $productModel->edit(['route'=>$route],['id'=>$v['id']]);
                }
            }
        }
    }

    /**
     * @remark :升级项目同步路由
     * @name   :getRouteMap
     * @author :lyh
     * @method :post
     * @time   :2024/1/4 11:53
     */
    public function getRouteMap(){
        $routeMapModel = new RouteMap();
        $list = $routeMapModel->list(['source'=>'product','project_id'=>627]);
        foreach ($list as $k => $v){
            $product = new Product();
            $product->edit(['route'=>$v['route']],['id'=>$v['source_id']]);
            echo date('Y-m-d H:i:s') . '产品id:'.$v['source_id'] . PHP_EOL;
        }
    }

    /**
     * @remark :更新产品关联表
     * @name   :getProductCategory
     * @author :lyh
     * @method :post
     * @time   :2024/1/4 14:48
     */
    public function getProductCategory(){
        $product = new Product();
        $num = 30;
        while ($num > 0){
            $list = $product->lists(['status'=>1],$num,1000);
            foreach ($list['list'] as $k => $v){
                if(empty($v['category_id'])){
                    continue;
                }
                $category_ids = $v['category_id'];
                //产品分类关联
                echo date('Y-m-d H:i:s') . '产品id--1:'.$v['id'] . PHP_EOL;
                $this->saveRelated($v['id'], $category_ids);
                echo date('Y-m-d H:i:s') . '产品id:'.$v['id'] . PHP_EOL;
            }
            $num--;
        }
    }

    /**
     * 关联产品分类
     * @param $product_id
     * @param $cate_ids
     * @author zbj
     * @date 2023/4/21
     */
    public function saveRelated($product_id, $cate_ids)
    {
        if(!is_array($cate_ids)){
            $cate_ids = array_filter(Arr::splitFilterToArray($cate_ids), 'intval');
        }
        //先删除
        CategoryRelated::where('product_id', $product_id)->delete();
        //批量保存
        $data = [];
        if(!empty($cate_ids)){
            foreach ($cate_ids as $cate_id){
                $data[] = [
                    'product_id' => $product_id,
                    'cate_id' => $cate_id,
                    'created_at'=>date('Y-m-d H:i:s'),
                    'updated_at'=>date('Y-m-d H:i:s')
                ];
            }
            CategoryRelated::insert($data);
        }
        return true;
    }

    /**
     * @remark :删除路由通知C端
     * @name   :curlDelRoute
     * @author :lyh
     * @method :post
     * @time   :2023/11/30 14:43
     */
    public function curlDelRoute($data){
        $data['project_id'] = 75;
        $str = http_build_query($data);
        $url = 'https://www.zrutong.com/api/delHtml/?'.$str;
        curlGet($url);
        return true;
    }

    public function delRouteMap(){
        $productKeywordModel = new Keyword();
        $list = $productKeywordModel->list();
        foreach ($list as $k=>$v){
            RouteMap::setRoute($v['route'],'product_keyword',$v['id'],569);
        }
    }
}