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