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.
yanzong/app/command/SyncCategoryAdmin.php

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;
}
}