LyhImportTest.php 14.2 KB
<?php
/**
 * @remark :
 * @name   :LyhImportTest.php
 * @author :lyh
 * @method :post
 * @time   :2025/2/24 14:52
 */

namespace App\Console\Commands\LyhTest;

use App\Models\CustomModule\CustomModuleCategory;
use App\Models\CustomModule\CustomModuleContent;
use App\Models\CustomModule\CustomModuleExtentContent;
use App\Models\News\News;
use App\Models\Product\Category;
use App\Models\Product\CategoryRelated;
use App\Models\Product\Column;
use App\Models\Product\Detail;
use App\Models\Product\Product;
use App\Models\RouteMap\RouteMap;
use App\Models\Template\BTemplate;
use App\Models\Template\Template;
use App\Services\ProjectServer;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;

class LyhImportTest extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'lyh_import_test';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '导入数据';



    /**
     * @remark :统一更新路由
     * @name   :handle
     * @author :lyh
     * @method :post
     * @time   :2023/11/20 15:13
     */
    public function handle(){
        ProjectServer::useProject(3283);
        echo date('Y-m-d H:i:s') . 'start' . PHP_EOL;
//        $this->importProductCategory('https://ecdn6.globalso.com/upload/p/3283/file/2025-03/zy_boss_pricelistcat_202503131025.csv','3283');
        $this->importProduct('https://ecdn6.globalso.com/upload/p/3283/file/2025-03/zy_boss_price_copy1_202503121340.csv',3283);
        DB::disconnect('custom_mysql');
        echo date('Y-m-d H:i:s') . 'end' . PHP_EOL;
    }

    /**
     * @remark :导入产品分类
     * @name   :productCategory
     * @author :lyh
     * @method :post
     * @time   :2025/3/13 9:58
     */
    public function importProductCategory($url,$project_id){
        $line_of_text = [];
        $opts = [
            'http' => [
                'method' => 'GET',
                'header' => 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246'
            ],
            'ssl' => [
                'verify_peer' => false,
                'verify_peer_name' => false
            ]
        ];
        $file_handle = fopen($url, 'r', null, stream_context_create($opts));
        while (!feof($file_handle)) {
            $line_of_text[] = fgetcsv($file_handle, 0, ',');
        }
        fclose($file_handle);
        $categoryModel = new Category();
        foreach ($line_of_text as $k => $val){
            if($k < 1){
                continue;
            }
            if(empty($val[1])){
                continue;
            }
            try {
                $id = $categoryModel->addReturnId(['project_id'=>$project_id,'title'=>$val[1],'seo_title'=>$val[0],'seo_keyword'=>$val[2]]);
                $pid = 0;
                if($val[2] != 0){
                    //查询上级id
                    $pidCate = $categoryModel->read(['seo_title'=>$val[2]]);
                    if($pidCate !== false){
                        $pid = $pidCate['id'];
                    }
                }
                $route = RouteMap::setRoute($val[1],RouteMap::SOURCE_PRODUCT_CATE,$id,$project_id);
                $categoryModel->edit(['route'=>$route,'pid'=>$pid],['id'=>$id]);
                echo date('Y-m-d H:i:s') . '产品分类id:'. $id.PHP_EOL;
            }catch (\Exception $e){
                echo date('Y-m-d H:i:s') . '跳过的产品名称:'. $val[1];
                continue;
            }
        }
        return true;
    }

    /**
     * @remark :导入分类
     * @name   :importProductCategory
     * @author :lyh
     * @method :post
     * @time   :2025/3/3 15:59
     */
    public function importProduct($url,$project_id){
        $line_of_text = [];
        $opts = [
            'http' => [
                'method' => 'GET',
                'header' => 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246'
            ],
            'ssl' => [
                'verify_peer' => false,
                'verify_peer_name' => false
            ]
        ];
        $file_handle = fopen($url, 'r', null, stream_context_create($opts));
        while (!feof($file_handle)) {
            $line_of_text[] = fgetcsv($file_handle, 0, ',');
        }
        fclose($file_handle);
        $cateModel = new Category();
        $productModel = new Product();
        $detailModel = new Detail();
        $columnModel = new Column();
        foreach ($line_of_text as $k => $val){
            if($k < 2){
                continue;
            }
            $saveData = [];
            if($val[1] ?? ''){
                $saveData['title'] = $val[1];
            }else{
                continue;
            }
            if($val[0] ?? ''){
                $cateInfo = $cateModel->read(['seo_title'=>trim($val[0])]);
                if($cateInfo !== false){
                    $saveData['category_id']  = ','.$cateInfo['id'].',';
                }
            }
            $saveData['intro'] = $val[2];
            $saveData['content'] = $val[3];
            $seo = ['seo_title'=>$val[5]];
            $saveData['seo_mate'] = json_encode($seo,true);
            $thumb = ['alt'=>'主图','url'=>str_replace('/public','/upload/p/3283',$val[6])];
            $gallery = [['alt'=>'主图','url'=>str_replace('/public','/upload/p/3283',$val[6])]];
            $saveData['thumb'] = json_encode($thumb,true);
            $saveData['gallery'] = json_encode($gallery,true);
            $id = $productModel->addReturnId($saveData);
            echo date('Y-m-d H:i:s') . '新增产品id:'.$id . PHP_EOL;
            //设置关联关系
            if($cateInfo !== false){
                CategoryRelated::saveRelated($id,[$cateInfo['id']]);
            }
            //设置路由
            $route = RouteMap::setRoute($val[1],RouteMap::SOURCE_PRODUCT,$id,$project_id);
            $productModel->edit(['route'=>$route],['id'=>$id]);
            //设置产品描述
            $detail = [
                'product_id'=>$id,
                'column_id'=>1,
                'text_type'=>1,
                'content'=>json_encode(['content'=>$val[3]])
            ];
            $detailModel->addReturnId($detail);
            //扩展描述设置
            $detailFaq = [
                'column_name'=>'FAQs',
                'product_id'=>$id
            ];
            $faqId = $columnModel->addReturnId($detailFaq);

            $faqsDetail = json_decode($val[4],true);
            if(!empty($faqsDetail) && is_array($faqsDetail)){
                $faqContent = '<div>';
                foreach ($faqsDetail as $faq_Val){
                    $faqContent .= "<span>question:".$faq_Val['question'] . "</span><br /><span>" . "answer:".$faq_Val['answer']. "</span><br />";
                }
                $faqContent .= '</div>';
                $detailFaqInfo = [
                    'product_id'=>$id,
                    'column_id'=>$faqId,
                    'text_type'=>1,
                    'content'=>json_encode(['content'=>$faqContent])
                ];
                $detailModel->addReturnId($detailFaqInfo);
            }else{
                @file_put_contents(storage_path('logs/lyh_error.log'), var_export('产品标题:'. $val[1] . PHP_EOL .'faqs数据有问题:' . $val[4], true) . PHP_EOL, FILE_APPEND);
                echo date('Y-m-d H:i:s') . '产品标题:'. $val[1] . PHP_EOL .'faqs数据有问题:' . $val[4];
            }
        }
        return true;
    }

    public function handleCatePid(){
        $cateModel = new Category();
        $list = $cateModel->list([],'id',['*'],'asc');
        foreach ($list as $k => $v){
            if($v['seo_des'] == 0){
                $pid = 0;
            }else{
                $info = $cateModel->read(['seo_title'=>$v['seo_des']],['id']);
                if($info !== false){
                    $pid = $info['id'];
                }else{
                    $pid = 0;
                }
            }
            //更新pid
            $cateModel->edit(['pid'=>$pid],['id'=>$v['id']]);
        }
        return true;
    }

    /**
     * @remark :导入扩展模块数据
     * @name   :importCustomModule
     * @author :lyh
     * @method :post
     * @time   :2025/2/24 14:54
     */
    public function importCustomModule($text,$project_id = 2837){
        $customContentModel = new CustomModuleContent();
        $customCategoryModel = new CustomModuleCategory();;
        $customExtendContentTModel = new CustomModuleExtentContent();
        $data = explode("\n", $text);
        foreach ($data as $k => $item){
            $item = trim($item,',');
            //按照逗号转为数组
            $array = explode(",", $item);
            //添加分类
            if(empty($array[0])){
                continue;
            }
            //添加内容
            $contentId = $customContentModel->addReturnId(['name'=>$array[0],'module_id'=>2,'project_id'=>$project_id]);
            echo date('Y-m-d H:i:s') . '当前扩展数据id:'. $contentId . PHP_EOL;
            //注册路由
            $route = RouteMap::setRoute($array[0], RouteMap::SOURCE_MODULE,
                $contentId, $project_id);
            $customContentModel->edit(['route'=>$route],['id'=>$contentId]);
            if(!empty($array[1])){
                $categoryId = ',';
                $cateArr = explode('/',$array[1]);
                foreach ($cateArr as $cateV){
                    $cateInfo = $customCategoryModel->read(['name'=>$cateV,'module_id'=>2,'project_id'=>$project_id]);
                    if($cateInfo !== false){
                        $categoryId .= $cateInfo['id'].',';
                    }
                }
                $customContentModel->edit(['category_id'=>$categoryId],['id'=>$contentId]);
            }
            $saveData = [
                ['key'=>'pd_extended_field_1', 'type'=>1, 'values'=>$array[2], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
                ['key'=>'pd_extended_field_2', 'type'=>1, 'values'=>$array[4], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
                ['key'=>'pd_extended_field_3', 'type'=>1, 'values'=>$array[5], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
                ['key'=>'pd_extended_field_4', 'type'=>1, 'values'=>$array[3], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
                ['key'=>'pd_extended_field_5', 'type'=>1, 'values'=>$array[8], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
                ['key'=>'pd_extended_field_6', 'type'=>1, 'values'=>$array[6], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
                ['key'=>'pd_extended_field_7', 'type'=>1, 'values'=>$array[9], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
                ['key'=>'pd_extended_field_8', 'type'=>1, 'values'=>$array[10], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
                ['key'=>'pd_extended_field_9', 'type'=>1, 'values'=>$array[11], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
                ['key'=>'pd_extended_field_10', 'type'=>1, 'values'=>$array[12], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
                ['key'=>'pd_extended_field_11', 'type'=>1, 'values'=>$array[13], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
                ['key'=>'pd_extended_field_12', 'type'=>1, 'values'=>$array[14] ?? '', 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
                ['key'=>'pd_extended_field_13', 'type'=>1, 'values'=>$array[7], 'content_id'=>$contentId, 'project_id'=>$project_id, 'module_id'=>2, 'created_at'=>date('Y-m-d H:i:s'), 'updated_at'=>date('Y-m-d H:i:s')],
            ];
            $customExtendContentTModel->insert($saveData);
        }
    }

    /**
     * @remark :新闻导入到扩展模块
     * @name   :newsImportCustom
     * @author :lyh
     * @method :post
     * @time   :2025/2/28 11:04
     */
    public function newsImportCustom($project_id = 2385){
        $newsModel = new News();
        $lists = $newsModel->list(['category_id'=>',3,']);
        foreach ($lists as $k => $v){
            $param = [
                'name'=>$v['name'],
                'content'=>$v['text'],
                'remark'=>$v['remark'],
                'route'=>$v['url'],
                'image'=>$v['image'],
                'seo_title'=>$v['seo_title'],
                'seo_keywords'=>$v['seo_keywords'],
                'seo_description'=>$v['seo_keywords'],
                'project_id'=>$project_id,
                'operator_id'=>$v['operator_id'],
                'release_at'=>$v['release_at'],
                'module_id'=>3,
                'category_id'=>',2,',
            ];
            //删除当前新闻的路由
            RouteMap::delRoute(RouteMap::SOURCE_NEWS,$v['id'],$project_id);
            //删除当前数据
            $newsModel->del(['id'=>$v['id']]);
            $customContentModel = new CustomModuleContent();
            $id = $customContentModel->addReturnId($param);
            $route = RouteMap::setRoute($param['route'],RouteMap::SOURCE_MODULE,$id,$project_id);
            $customContentModel->edit(['route'=>$route],['id'=>$id]);
        }
        return true;
    }
}