|
...
|
...
|
@@ -17,6 +17,7 @@ use App\Models\Product\Category; |
|
|
|
use App\Models\Product\CategoryRelated;
|
|
|
|
use App\Models\Product\Column;
|
|
|
|
use App\Models\Product\Detail;
|
|
|
|
use App\Models\Product\ExtendInfo;
|
|
|
|
use App\Models\Product\Product;
|
|
|
|
use App\Models\RouteMap\RouteMap;
|
|
|
|
use App\Models\Template\BTemplate;
|
|
...
|
...
|
@@ -51,14 +52,68 @@ class LyhImportTest extends Command |
|
|
|
* @time :2023/11/20 15:13
|
|
|
|
*/
|
|
|
|
public function handle(){
|
|
|
|
// ProjectServer::useProject(3283);
|
|
|
|
// echo date('Y-m-d H:i:s') . 'start' . PHP_EOL;
|
|
|
|
// $this->importProduct('https://ecdn6.globalso.com/upload/p/1/file/2025-03/zy_boss_price_copy1.csv',3283);
|
|
|
|
// DB::disconnect('custom_mysql');
|
|
|
|
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.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
|
|
...
|
...
|
@@ -85,71 +140,166 @@ class LyhImportTest extends Command |
|
|
|
$cateModel = new Category();
|
|
|
|
$productModel = new Product();
|
|
|
|
$detailModel = new Detail();
|
|
|
|
$columnModel = new Column();
|
|
|
|
$extentInfoModel = new ExtendInfo();
|
|
|
|
foreach ($line_of_text as $k => $val){
|
|
|
|
if($k < 2){
|
|
|
|
if($k < 1){
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
$saveData = [];
|
|
|
|
if($val[1] ?? ''){
|
|
|
|
$saveData['title'] = $val[1];
|
|
|
|
if(!empty($val[11])){
|
|
|
|
$saveData['title'] = $val[11];
|
|
|
|
}else{
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if($val[0] ?? ''){
|
|
|
|
$cateInfo = $cateModel->read(['seo_title'=>trim($val[0])]);
|
|
|
|
if(!empty($val[1])){
|
|
|
|
$cateInfo = $cateModel->read(['seo_title'=>trim($val[1])]);
|
|
|
|
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','',$val[6])];
|
|
|
|
$gallery = [['alt'=>'主图','url'=>str_replace('/public','',$val[6])]];
|
|
|
|
$saveData['thumb'] = json_encode($thumb,true);
|
|
|
|
$saveData['gallery'] = json_encode($gallery,true);
|
|
|
|
$saveData['project_id'] = $project_id;
|
|
|
|
$saveData['status'] = 1;
|
|
|
|
$saveData['intro'] = $val[6] ?? '';
|
|
|
|
$seo = ['title'=>$val[11]];
|
|
|
|
$saveData['seo_mate'] = json_encode($seo,JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
|
|
|
$thumb = ['alt'=>'主图','url'=>str_replace('/public','/upload/p/3283',$val[12])];
|
|
|
|
$gallery = [['alt'=>'主图','url'=>str_replace('/public','/upload/p/3283',$val[12])]];
|
|
|
|
$saveData['thumb'] = json_encode($thumb,JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
|
|
|
$saveData['gallery'] = json_encode($gallery,JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
|
|
|
try {
|
|
|
|
$id = $productModel->addReturnId($saveData);
|
|
|
|
echo date('Y-m-d H:i:s') . '新增产品id:'.$id . PHP_EOL;
|
|
|
|
}catch (\Exception $e){
|
|
|
|
@file_put_contents(storage_path('logs/lyh_error.log'), var_export('未导入成功--标题:'.$val[0], true) . PHP_EOL, FILE_APPEND);
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
//设置关联关系
|
|
|
|
if($cateInfo !== false){
|
|
|
|
CategoryRelated::saveRelated($id,[$cateInfo['id']]);
|
|
|
|
}
|
|
|
|
//设置路由
|
|
|
|
$route = RouteMap::setRoute($val[1],RouteMap::SOURCE_PRODUCT,$id,$project_id);
|
|
|
|
$route = RouteMap::setRoute($val[11],RouteMap::SOURCE_PRODUCT,$id,$project_id);
|
|
|
|
$productModel->edit(['route'=>$route],['id'=>$id]);
|
|
|
|
echo date('Y-m-d H:i:s') . '新增产品id:'.$id . PHP_EOL;
|
|
|
|
if(!empty($val[2])){
|
|
|
|
$extent = [
|
|
|
|
'key'=>'pd_extended_field_4',
|
|
|
|
'product_id'=>$id,
|
|
|
|
'project_id'=>$project_id,
|
|
|
|
'values'=>$val[2],
|
|
|
|
];
|
|
|
|
try {
|
|
|
|
$extentInfoModel->addReturnId($extent);
|
|
|
|
}catch (\Exception $e){
|
|
|
|
echo '错误:'.$val[2];
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
if(!empty($val[3])){
|
|
|
|
$extent = [
|
|
|
|
'key'=>'pd_extended_field_1',
|
|
|
|
'product_id'=>$id,
|
|
|
|
'project_id'=>$project_id,
|
|
|
|
'values'=>$val[3],
|
|
|
|
];
|
|
|
|
try {
|
|
|
|
$extentInfoModel->addReturnId($extent);
|
|
|
|
}catch (\Exception $e){
|
|
|
|
echo '错误:'.$val[3];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(!empty($val[4])){
|
|
|
|
$extent = [
|
|
|
|
'key'=>'pd_extended_field_2',
|
|
|
|
'product_id'=>$id,
|
|
|
|
'project_id'=>$project_id,
|
|
|
|
'values'=>$val[4],
|
|
|
|
];
|
|
|
|
try {
|
|
|
|
$extentInfoModel->addReturnId($extent);
|
|
|
|
}catch (\Exception $e){
|
|
|
|
echo '错误:'.$val[4];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(!empty($val[5])){
|
|
|
|
$extent = [
|
|
|
|
'key'=>'pd_extended_field_3',
|
|
|
|
'product_id'=>$id,
|
|
|
|
'project_id'=>$project_id,
|
|
|
|
'values'=>$val[5],
|
|
|
|
];
|
|
|
|
try {
|
|
|
|
$extentInfoModel->addReturnId($extent);
|
|
|
|
}catch (\Exception $e){
|
|
|
|
echo '错误:'.$val[5];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//产品描述
|
|
|
|
if(!empty($val[7])){
|
|
|
|
//设置产品描述
|
|
|
|
$detail = [
|
|
|
|
'title'=>'SEODescription',
|
|
|
|
'product_id'=>$id,
|
|
|
|
'column_id'=>1,
|
|
|
|
'text_type'=>1,
|
|
|
|
'content'=>json_encode(['content'=>$val[7]],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)
|
|
|
|
];
|
|
|
|
$detailModel->addReturnId($detail);
|
|
|
|
}
|
|
|
|
//产品描述
|
|
|
|
if(!empty($val[8])){
|
|
|
|
//设置产品描述
|
|
|
|
$detail = [
|
|
|
|
'title'=>'SEOSpecification',
|
|
|
|
'product_id'=>$id,
|
|
|
|
'column_id'=>1,
|
|
|
|
'text_type'=>1,
|
|
|
|
'content'=>json_encode(['content'=>$val[3]])
|
|
|
|
'content'=>json_encode(['content'=>$val[8]],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)
|
|
|
|
];
|
|
|
|
$detailModel->addReturnId($detail);
|
|
|
|
//扩展描述设置
|
|
|
|
$detailFaq = [
|
|
|
|
'column_name'=>'FAQs',
|
|
|
|
'product_id'=>$id
|
|
|
|
}
|
|
|
|
if(!empty($val[9])){
|
|
|
|
try {
|
|
|
|
$faqsDetail = json_decode($val[9],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
|
|
|
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 = [
|
|
|
|
'title'=>'SEOQandA',
|
|
|
|
'product_id'=>$id,
|
|
|
|
'column_id'=>1,
|
|
|
|
'text_type'=>1,
|
|
|
|
'content'=>json_encode(['content'=>$faqContent],JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)
|
|
|
|
];
|
|
|
|
$faqId = $columnModel->addReturnId($detailFaq);
|
|
|
|
|
|
|
|
$faqsDetail = json_decode($val[4],true);
|
|
|
|
$faqContent = '';
|
|
|
|
$detailModel->addReturnId($detailFaqInfo);
|
|
|
|
}
|
|
|
|
}catch(\Exception $e){
|
|
|
|
echo 'fqs';
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(!empty($val[10])){
|
|
|
|
try {
|
|
|
|
$faqsDetail = json_decode($val[10],true);
|
|
|
|
if(!empty($faqsDetail) && is_array($faqsDetail)){
|
|
|
|
$faqContent = '<div>';
|
|
|
|
foreach ($faqsDetail as $faq_Val){
|
|
|
|
$faqContent .= "question:".$faq_Val['question'] . "<br />" . "answer:".$faq_Val['answer']. "<br />";
|
|
|
|
$faqContent .= "<span>question:".$faq_Val['question'] . "</span><br /><span>" . "answer:".$faq_Val['answer']. "</span><br />";
|
|
|
|
}
|
|
|
|
$faqContent .= '</div>';
|
|
|
|
$detailFaqInfo = [
|
|
|
|
'title'=>'SEOQandA_Product',
|
|
|
|
'product_id'=>$id,
|
|
|
|
'column_id'=>$faqId,
|
|
|
|
'column_id'=>1,
|
|
|
|
'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];
|
|
|
|
}
|
|
|
|
}catch(\Exception $e){
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
...
|
...
|
|