You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
329 lines
16 KiB
329 lines
16 KiB
<?php
|
|
|
|
namespace app\command;
|
|
|
|
use app\common\service\GoodsCateEs;
|
|
use app\common\service\GoodsEs;
|
|
use think\console\Command;
|
|
use think\console\Output;
|
|
use think\console\Input;
|
|
use app\store\model\Category as CategoryModel;
|
|
use app\common\model\Store;
|
|
use think\facade\Db;
|
|
|
|
class SyncCategory extends Command
|
|
{
|
|
|
|
const DEFAULT_STORE_ID = 0;
|
|
protected function configure()
|
|
{
|
|
// 指令配置
|
|
$this->setName('SyncCategory')->setDescription('同步商品数据到ES');
|
|
$this->addArgument("store_id");
|
|
$this->addArgument("is_update_image");
|
|
}
|
|
|
|
|
|
protected function execute(Input $input, Output $output)
|
|
{
|
|
// $store_id = $input->getArgument("store_id");
|
|
$is_update_image = $input->getArgument("is_update_image");
|
|
// $where[] = ['is_sync_cate','=', 1];
|
|
// $where[] = ['is_delete','=', 0];
|
|
// $where[] = ['is_recycle','=', 0];
|
|
// $where[] = ['status','=', 1];
|
|
|
|
// if ($store_id) {
|
|
// $where[] = ['store_id','=', $store_id];
|
|
// } else {
|
|
// $where[] = ['store_id', '<>', self::DEFAULT_STORE_ID];
|
|
// }
|
|
// $stores = Store::where($where)->field('store_id,is_sync,is_recycle,status,is_delete')->select()->toArray();
|
|
// if (!$stores) {
|
|
// echo "没有要同步的商城了";
|
|
// return;
|
|
// }
|
|
// foreach ($stores as $store) {
|
|
$this->copyCategory(0, $is_update_image);
|
|
//}
|
|
}
|
|
|
|
public function copyCategory(int $new_store_id, $is_update_image = 0){
|
|
$store_id = 0;
|
|
$model = new CategoryModel;
|
|
$list = Db::connect("shopMysql")->name('yoshop_category')->where('store_id', 0)->order(['sort', 'create_time'])->select();
|
|
$list = $this->getTreeData($list);
|
|
//$list = $model->getList(['store_id' => self::DEFAULT_STORE_ID]);
|
|
// var_dump($list);
|
|
// exit();
|
|
if (!$list) {
|
|
return;
|
|
}
|
|
foreach ($list as $value) {
|
|
//$value = $value->toArray();
|
|
if ($value['status'] != 1) {
|
|
continue;
|
|
}
|
|
$category = CategoryModel::where('original_category_id', $value['category_id'])->where('store_id', $new_store_id)->find();
|
|
if ($category) {
|
|
//更新分类
|
|
//父类id
|
|
if ($value['parent_id']) {
|
|
$p_category = CategoryModel::where('original_category_id', $value['parent_id'])->where('store_id', $new_store_id)->find();
|
|
}
|
|
$upData = [
|
|
'name' => $value['name'],
|
|
'level' => $value['level'],
|
|
'sort' => $value['sort'],
|
|
'parent_id' => $p_category['category_id'] ?? 0,
|
|
];
|
|
if ($is_update_image) {
|
|
$upData['image_id'] = $value['image_id'] ? $this->copyImage($value['image_id'], $new_store_id) : 0;
|
|
$upData['rank_image_id'] = $value['rank_image_id'] ? $this->copyImage($value['rank_image_id'], $new_store_id) : 0;
|
|
}
|
|
// var_dump($upData);
|
|
// exit();
|
|
$ret = CategoryModel::where('category_id', $category->category_id)->update($upData);
|
|
echo "更新成功".PHP_EOL;
|
|
var_dump($ret);
|
|
$firstid = $category->category_id;
|
|
} else {
|
|
//新增一个分类
|
|
$value['store_id'] = $new_store_id;
|
|
$value['create_time'] = time();
|
|
$value['update_time'] = time();
|
|
$value['image_id'] = $value['image_id'] ? $this->copyImage($value['image_id'], $new_store_id) : 0;
|
|
$value['rank_image_id'] = $value['rank_image_id'] ? $this->copyImage($value['rank_image_id'], $new_store_id) : 0;
|
|
$value['original_category_id'] = $value['category_id'];
|
|
$temp = $value;
|
|
unset($temp['children']);
|
|
unset($temp['rankimage']);
|
|
unset($temp['image']);
|
|
unset($temp['category_id']);
|
|
$firstid = Db::table('yoshop_category')->insertGetId($temp);
|
|
}
|
|
|
|
if (!isset($value['children']) || !$value['children']) {
|
|
continue;
|
|
}
|
|
foreach ($value['children'] as $value1) {
|
|
//$value1 = $value1->toArray();
|
|
if ($value1['status'] != 1) {
|
|
continue;
|
|
}
|
|
$category1 = CategoryModel::where('original_category_id', $value1['category_id'])->where('store_id', $new_store_id)->find();
|
|
//var_dump($category1->toArray());
|
|
if ($category1) {
|
|
//更新分类
|
|
//父类id
|
|
$p_category1 = CategoryModel::where('original_category_id', $value1['parent_id'])->where('store_id', $new_store_id)->find();
|
|
// var_dump($p_category1);
|
|
// exit();
|
|
$upData1 = [
|
|
'name' => $value1['name'],
|
|
'level' => $value1['level'],
|
|
'sort' => $value1['sort'],
|
|
'parent_id' => $p_category1['category_id'] ?? 0,
|
|
];
|
|
if ($is_update_image) {
|
|
$upData1['image_id'] = $value1['image_id'] ? $this->copyImage($value1['image_id'], $new_store_id) : 0;
|
|
$upData1['rank_image_id'] = $value1['rank_image_id'] ? $this->copyImage($value1['rank_image_id'], $new_store_id) : 0;
|
|
}
|
|
$ret = CategoryModel::where('category_id', $category1->category_id)->update($upData1);
|
|
echo "更新成功".PHP_EOL;
|
|
var_dump($ret);
|
|
$secondid = $category1->category_id;
|
|
} else {
|
|
//新增一个分类
|
|
$value1['parent_id'] = $firstid;
|
|
$value1['store_id'] = $new_store_id;
|
|
$value1['create_time'] = time();
|
|
$value1['update_time'] = time();
|
|
$value1['image_id'] = $value1['image_id'] ? $this->copyImage($value1['image_id'], $new_store_id) : 0;
|
|
$value1['rank_image_id'] = $value1['rank_image_id'] ? $this->copyImage($value1['rank_image_id'], $new_store_id) : 0;
|
|
$value1['original_category_id'] = $value1['category_id'];
|
|
$temp1 = $value1;
|
|
unset($temp1['children']);
|
|
unset($temp1['image']);
|
|
unset($temp1['rankimage']);
|
|
unset($temp1['category_id']);
|
|
|
|
$secondid = Db::table('yoshop_category')->insertGetId($temp1);
|
|
}
|
|
|
|
if (!isset($value1['children']) || !$value1['children']) {
|
|
continue;
|
|
}
|
|
foreach ($value1['children'] as $value2) {
|
|
//$value2 = $value2->toArray();
|
|
if ($value2['status'] != 1) {
|
|
continue;
|
|
}
|
|
$category2 = CategoryModel::where('original_category_id', $value2['category_id'])->where('store_id', $new_store_id)->find();
|
|
if ($category2) {
|
|
//更新分类
|
|
//父类id
|
|
$p_category2 = CategoryModel::where('original_category_id', $value2['parent_id'])->where('store_id', $new_store_id)->find();
|
|
$upData2 = [
|
|
'name' => $value2['name'],
|
|
'level' => $value2['level'],
|
|
'sort' => $value2['sort'],
|
|
'parent_id' => $p_category2['category_id'] ?? 0,
|
|
];
|
|
if ($is_update_image) {
|
|
$upData2['image_id'] = $value2['image_id'] ? $this->copyImage($value2['image_id'], $new_store_id) : 0;
|
|
$upData2['rank_image_id'] = $value2['rank_image_id'] ? $this->copyImage($value2['rank_image_id'], $new_store_id) : 0;
|
|
}
|
|
$ret = CategoryModel::where('category_id', $category2->category_id)->update($upData2);
|
|
echo "更新成功".PHP_EOL;
|
|
var_dump($ret);
|
|
$thirdid = $category2->category_id;
|
|
} else {
|
|
//新增一个分类
|
|
$value2['parent_id'] = $secondid;
|
|
$value2['store_id'] = $new_store_id;
|
|
$value2['create_time'] = time();
|
|
$value2['update_time'] = time();
|
|
$value2['image_id'] = $value2['image_id'] ? $this->copyImage($value2['image_id'], $new_store_id) : 0;
|
|
$value2['rank_image_id'] = $value2['rank_image_id'] ? $this->copyImage($value2['rank_image_id'], $new_store_id) : 0;
|
|
$value2['original_category_id'] = $value2['category_id'];
|
|
$temp2 = $value2;
|
|
unset($temp2['children']);
|
|
unset($temp2['image']);
|
|
unset($temp2['rankimage']);
|
|
unset($temp2['category_id']);
|
|
|
|
$thirdid = Db::table('yoshop_category')->insertGetId($temp2);
|
|
}
|
|
|
|
if (!isset($value2['children']) || !$value2['children']) {
|
|
continue;
|
|
}
|
|
foreach ($value2['children'] as $value3) {
|
|
//$value3 = $value3->toArray();
|
|
if ($value3['status'] != 1) {
|
|
continue;
|
|
}
|
|
|
|
$category3 = CategoryModel::where('original_category_id', $value3['category_id'])->where('store_id', $new_store_id)->find();
|
|
if ($category3) {
|
|
//更新分类
|
|
//父类id
|
|
$p_category3 = CategoryModel::where('original_category_id', $value3['parent_id'])->where('store_id', $new_store_id)->find();
|
|
$upData3 = [
|
|
'name' => $value3['name'],
|
|
'level' => $value3['level'],
|
|
'sort' => $value3['sort'],
|
|
'parent_id' => $p_category3['category_id'] ?? 0,
|
|
];
|
|
if ($is_update_image) {
|
|
$upData3['image_id'] = $value3['image_id'] ? $this->copyImage($value3['image_id'], $new_store_id) : 0;
|
|
$upData3['rank_image_id'] = $value3['rank_image_id'] ? $this->copyImage($value3['rank_image_id'], $new_store_id) : 0;
|
|
}
|
|
$ret = CategoryModel::where('category_id', $category3->category_id)->update($upData3);
|
|
echo "更新成功".PHP_EOL;
|
|
var_dump($ret);
|
|
$fourthid = $category3->category_id;
|
|
} else {
|
|
$value3['parent_id'] = $thirdid;
|
|
$value3['store_id'] = $new_store_id;
|
|
$value3['create_time'] = time();
|
|
$value3['update_time'] = time();
|
|
$value3['image_id'] = $value3['image_id'] ? $this->copyImage($value3['image_id'], $new_store_id) : 0;
|
|
$value3['rank_image_id'] = $value3['rank_image_id'] ? $this->copyImage($value3['rank_image_id'], $new_store_id) : 0;
|
|
$value3['original_category_id'] = $value3['category_id'];
|
|
$temp3 = $value3;
|
|
unset($temp3['children']);
|
|
unset($temp3['image']);
|
|
unset($temp3['rankimage']);
|
|
unset($temp3['category_id']);
|
|
|
|
$fourthid = Db::table('yoshop_category')->insertGetId($temp3);
|
|
}
|
|
|
|
|
|
if (!isset($value3['children']) || !$value3['children']) {
|
|
continue;
|
|
}
|
|
foreach ($value3['children'] as $value4) {
|
|
//$value4 = $value4->toArray();
|
|
if ($value4['status'] != 1) {
|
|
continue;
|
|
}
|
|
|
|
$category4 = CategoryModel::where('original_category_id', $value4['category_id'])->where('store_id', $new_store_id)->find();
|
|
if ($category4) {
|
|
//更新分类
|
|
//父类id
|
|
$p_category4 = CategoryModel::where('original_category_id', $value4['parent_id'])->where('store_id', $new_store_id)->find();
|
|
$upData4 = [
|
|
'name' => $value4['name'],
|
|
'level' => $value4['level'],
|
|
'sort' => $value4['sort'],
|
|
'parent_id' => $p_category4['category_id'] ?? 0,
|
|
];
|
|
if ($is_update_image) {
|
|
$upData4['image_id'] = $value4['image_id'] ? $this->copyImage($value4['image_id'], $new_store_id) : 0;
|
|
$upData4['rank_image_id'] = $value4['rank_image_id'] ? $this->copyImage($value4['rank_image_id'], $new_store_id) : 0;
|
|
}
|
|
$ret = CategoryModel::where('category_id', $category4->category_id)->update($upData4);
|
|
echo "更新成功".PHP_EOL;
|
|
var_dump($ret);
|
|
} else {
|
|
$value4['parent_id'] = $fourthid;
|
|
$value4['store_id'] = $new_store_id;
|
|
$value4['create_time'] = time();
|
|
$value4['update_time'] = time();
|
|
$value4['image_id'] = $value4['image_id'] ? $this->copyImage($value4['image_id'], $new_store_id) : 0;
|
|
$value4['rank_image_id'] = $value4['rank_image_id'] ? $this->copyImage($value4['rank_image_id'], $new_store_id) : 0;
|
|
$value4['original_category_id'] = $value4['category_id'];
|
|
$temp4 = $value4;
|
|
unset($temp4['children']);
|
|
unset($temp4['image']);
|
|
unset($temp4['rankimage']);
|
|
unset($temp4['category_id']);
|
|
|
|
Db::table('yoshop_category')->insertGetId($temp4);
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public function copyImage($image_id, $store_id){
|
|
$upload_file = Db::connect("shopMysql")->name('yoshop_upload_file')->where('file_id', $image_id)->find();
|
|
if (!$upload_file) {
|
|
return 0;
|
|
}
|
|
$upload_file['store_id'] = $store_id;
|
|
$upload_file['create_time'] = time();
|
|
unset($upload_file['file_id']);
|
|
$new_image_id = DB::table("yoshop_upload_file")->insertGetId($upload_file);
|
|
return $new_image_id;
|
|
}
|
|
|
|
/**
|
|
* 获取树状列表
|
|
* @param $list
|
|
* @param int $parentId
|
|
* @return array
|
|
*/
|
|
private function getTreeData($list, int $parentId = 0): array
|
|
{
|
|
$data = [];
|
|
foreach ($list as $key => $item) {
|
|
if ($item['parent_id'] == $parentId) {
|
|
$children = $this->getTreeData($list, $item['category_id']);
|
|
!empty($children) && $item['children'] = $children;
|
|
$data[] = $item;
|
|
unset($list[$key]);
|
|
}
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
} |