From 4e872a2d500475b59c0b6d43a1f4c3e7e3c8de67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=B8=96=E7=95=8C?= <642747453@qq.com> Date: Tue, 18 Apr 2023 11:22:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20#10000=20=E4=BC=98=E5=8C=96=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Events/BusinessOrdersUpdate.php | 1 + app/Exports/GoodsSkusExport.php | 1 + app/Filters/GoodsSkuLocationFilter.php | 6 +-- .../Goods/GoodsCombinationController.php | 40 +++++++++++++++++++ .../Controllers/Goods/GoodsSkusController.php | 3 ++ app/Http/Controllers/Shop/ShopsController.php | 1 + app/Imports/InventoryImport.php | 1 + app/Listeners/UpdateBusinessGoodsStock.php | 4 +- app/Models/CombinationGood.php | 13 ++++++ app/Models/GoodsSku.php | 5 +++ ...2_07_26_090150_create_goods_skus_table.php | 6 +-- .../2022_07_28_095523_create_menus_table.php | 2 - ...3658_create_business_order_items_table.php | 2 +- ...dd_external_sku_id_to_goods_skus_table.php | 4 +- ..._203657_create_combination_goods_table.php | 37 +++++++++++++++++ database/seeds/MenusTableSeeder.php | 16 ++++++++ database/seeds/PermissionsTableSeeder.php | 4 +- resources/lang/zh-CN/permission.php | 30 ++++++++++++++ 18 files changed, 160 insertions(+), 16 deletions(-) create mode 100644 app/Http/Controllers/Goods/GoodsCombinationController.php create mode 100644 app/Models/CombinationGood.php create mode 100644 database/migrations/2023_04_17_203657_create_combination_goods_table.php diff --git a/app/Events/BusinessOrdersUpdate.php b/app/Events/BusinessOrdersUpdate.php index 38f7bff..b44823c 100644 --- a/app/Events/BusinessOrdersUpdate.php +++ b/app/Events/BusinessOrdersUpdate.php @@ -19,6 +19,7 @@ class BusinessOrdersUpdate public $num; public $businessGoods; public $goodsSku; + public $goodsSkus; /** * Create a new event instance. diff --git a/app/Exports/GoodsSkusExport.php b/app/Exports/GoodsSkusExport.php index cc5a781..6e15186 100644 --- a/app/Exports/GoodsSkusExport.php +++ b/app/Exports/GoodsSkusExport.php @@ -59,6 +59,7 @@ class GoodsSkusExport implements FromCollection, ShouldAutoSize ->when($ids, function ($query, $ids) { return $query->whereIn('id', $ids); }) + ->where('is_combination', 0) ->with(['goods' => function ($query) { $query->with(['type:id,name', 'brand:id,name']) ->orderBy('type_id') diff --git a/app/Filters/GoodsSkuLocationFilter.php b/app/Filters/GoodsSkuLocationFilter.php index e44ee23..fd5f73f 100644 --- a/app/Filters/GoodsSkuLocationFilter.php +++ b/app/Filters/GoodsSkuLocationFilter.php @@ -28,11 +28,7 @@ class GoodsSkuLocationFilter extends Filters public function externalSkuId($value) { - [$goodsCode, $skuCode] = explode('_', $value); - $goodsId = Goods::query()->where('goods_code', $goodsCode)->value('id'); - $skuId = GoodsSku::query()->where('sku_code', $skuCode)->value('id'); - - return $this->builder->where('goods_sku_id', $skuId)->where('goods_id', $goodsId); + return $this->builder->where('external_sku_id', $value); } public function location($value) diff --git a/app/Http/Controllers/Goods/GoodsCombinationController.php b/app/Http/Controllers/Goods/GoodsCombinationController.php new file mode 100644 index 0000000..0ad58fb --- /dev/null +++ b/app/Http/Controllers/Goods/GoodsCombinationController.php @@ -0,0 +1,40 @@ +where('is_combination', 1) + ->with([ + 'combinationItems:goods_sku_id,item_id,item_num', + 'combinationItems.goodsSkuItem:id,goods_id,title,stock,external_sku_id', + 'combinationItems.goodsSkuItem.goods:id,title', + ]) + ->paginate($request->get('per_page')); + + return GoodsSkuResource::collection($skus); + } + + public function store(Request $request) + { + + } + + public function show(Request $request, $id) + { + + } + + public function update(Request $request, $id) + { + + } +} diff --git a/app/Http/Controllers/Goods/GoodsSkusController.php b/app/Http/Controllers/Goods/GoodsSkusController.php index b66022c..393666a 100644 --- a/app/Http/Controllers/Goods/GoodsSkusController.php +++ b/app/Http/Controllers/Goods/GoodsSkusController.php @@ -51,6 +51,7 @@ class GoodsSkusController extends Controller ->with(['daily' => function ($query) use ($day) { $query->where('day', $day); }]) + ->where('is_combination', 0) ->orderByDesc('updated_at') ->paginate(10); $fields = implode(',', [ @@ -509,9 +510,11 @@ class GoodsSkusController extends Controller { $roseTypeId = GoodsType::query()->where('name', '玫瑰')->value('id'); $totalNum = GoodsSku::query() + ->where('is_combination', 0) ->where('status', '>', 0) ->sum('stock'); $roseNum = GoodsSku::query() + ->where('is_combination', 0) ->whereHas('goods', function (Builder $query) use ($roseTypeId) { $query->where('type_id', $roseTypeId); }) diff --git a/app/Http/Controllers/Shop/ShopsController.php b/app/Http/Controllers/Shop/ShopsController.php index 858f3b2..2b93ed7 100644 --- a/app/Http/Controllers/Shop/ShopsController.php +++ b/app/Http/Controllers/Shop/ShopsController.php @@ -191,6 +191,7 @@ class ShopsController extends Controller { $shopId = $request->get('shop_id'); $skus = GoodsSku::query() + ->where('is_combination', 0) ->where('status', '>', 0) ->whereNotNull('external_sku_id') ->pluck('stock', 'external_sku_id') diff --git a/app/Imports/InventoryImport.php b/app/Imports/InventoryImport.php index c514f80..29d97bb 100644 --- a/app/Imports/InventoryImport.php +++ b/app/Imports/InventoryImport.php @@ -78,6 +78,7 @@ class InventoryImport implements ToCollection, SkipsEmptyRows } sleep(2); $onSkuIds = GoodsSku::query() + ->where('is_combination', 0) ->where('status', '>', 0) ->pluck('id') ->toArray(); diff --git a/app/Listeners/UpdateBusinessGoodsStock.php b/app/Listeners/UpdateBusinessGoodsStock.php index 7efb6a5..a8f436f 100644 --- a/app/Listeners/UpdateBusinessGoodsStock.php +++ b/app/Listeners/UpdateBusinessGoodsStock.php @@ -44,7 +44,7 @@ class UpdateBusinessGoodsStock implements ShouldQueue $log->message = '未找到' . json_encode($event->businessGoods, 256); $log->save(); - return; + return false; } $builder = Shop::query()->whereNotIn('status', [Shop::$STATUS_UNAUTHORIZED, Shop::$STATUS_STOP]); // 非订单影响库存变更,只更新本店铺下商品 @@ -54,7 +54,7 @@ class UpdateBusinessGoodsStock implements ShouldQueue $shops = $builder->get(['id', 'plat_id']); if (empty($shops)) { LogFile::info('可操作店铺为空'); - return; + return false; } foreach ($shops as $shop) { diff --git a/app/Models/CombinationGood.php b/app/Models/CombinationGood.php new file mode 100644 index 0000000..579128f --- /dev/null +++ b/app/Models/CombinationGood.php @@ -0,0 +1,13 @@ +belongsTo(GoodsSku::class, 'id', 'item_id'); + } +} diff --git a/app/Models/GoodsSku.php b/app/Models/GoodsSku.php index 75ef0a3..654e911 100644 --- a/app/Models/GoodsSku.php +++ b/app/Models/GoodsSku.php @@ -76,4 +76,9 @@ class GoodsSku extends Model { return $this->hasOne(DailyStockRecord::class, 'sku_id', 'id'); } + + public function combinationItems() + { + return $this->hasMany(CombinationGood::class, 'goods_sku_id', 'id'); + } } diff --git a/database/migrations/2022_07_26_090150_create_goods_skus_table.php b/database/migrations/2022_07_26_090150_create_goods_skus_table.php index 34f1684..061826e 100644 --- a/database/migrations/2022_07_26_090150_create_goods_skus_table.php +++ b/database/migrations/2022_07_26_090150_create_goods_skus_table.php @@ -19,9 +19,9 @@ class CreateGoodsSkusTable extends Migration Schema::defaultStringLength(191); Schema::create('goods_skus', function (Blueprint $table) { $table->bigIncrements('id'); - $table->unsignedBigInteger('goods_id')->comment('商品id'); - $table->string('title')->comment('商品规格'); - $table->string('sku_code', 32)->comment('规格编码'); + $table->unsignedBigInteger('goods_id')->default(0)->comment('商品id'); + $table->string('title')->default('')->comment('商品规格'); + $table->string('sku_code', 32)->default('')->comment('规格编码'); $table->unsignedTinyInteger('status')->default(0)->comment('规格状态(0-下架,1在售,2预警)'); $table->unsignedInteger('num')->default(0)->comment('总量'); $table->integer('stock')->default(0)->comment('库存'); diff --git a/database/migrations/2022_07_28_095523_create_menus_table.php b/database/migrations/2022_07_28_095523_create_menus_table.php index fcea8e0..02f5a73 100644 --- a/database/migrations/2022_07_28_095523_create_menus_table.php +++ b/database/migrations/2022_07_28_095523_create_menus_table.php @@ -23,8 +23,6 @@ class CreateMenusTable extends Migration $table->string('name', 32)->comment('菜单名称'); $table->unsignedBigInteger('parent_id')->default(0); $table->unsignedInteger('seq')->default(0)->comment('排序序号'); - $table->softDeletes(); - $table->timestamps(); // 索引 }); } diff --git a/database/migrations/2022_08_05_093658_create_business_order_items_table.php b/database/migrations/2022_08_05_093658_create_business_order_items_table.php index e98b050..16c3e19 100644 --- a/database/migrations/2022_08_05_093658_create_business_order_items_table.php +++ b/database/migrations/2022_08_05_093658_create_business_order_items_table.php @@ -43,7 +43,7 @@ class CreateBusinessOrderItemsTable extends Migration $table->integer('verification_number')->nullable(); $table->timestamps(); // 索引 - $table->index(['shop_id', 'business_order_id', 'goods_id', 'sku_id']); +// $table->index(['shop_id', 'business_order_id', 'goods_id', 'sku_id']); }); } diff --git a/database/migrations/2023_04_17_160609_add_external_sku_id_to_goods_skus_table.php b/database/migrations/2023_04_17_160609_add_external_sku_id_to_goods_skus_table.php index e111579..63283cb 100644 --- a/database/migrations/2023_04_17_160609_add_external_sku_id_to_goods_skus_table.php +++ b/database/migrations/2023_04_17_160609_add_external_sku_id_to_goods_skus_table.php @@ -18,8 +18,10 @@ class AddExternalSkuIdToGoodsSkusTable extends Migration } Schema::defaultStringLength(191); Schema::table('goods_skus', function (Blueprint $table) { - $table->string('external_sku_id')->nullable(); + $table->string('external_sku_id')->default('')->nullable(); + $table->tinyInteger('is_combination')->default(0); $table->index('external_sku_id'); + $table->index('is_combination'); }); } diff --git a/database/migrations/2023_04_17_203657_create_combination_goods_table.php b/database/migrations/2023_04_17_203657_create_combination_goods_table.php new file mode 100644 index 0000000..39dec15 --- /dev/null +++ b/database/migrations/2023_04_17_203657_create_combination_goods_table.php @@ -0,0 +1,37 @@ +bigIncrements('id'); + $table->unsignedBigInteger('goods_sku_id'); + $table->unsignedBigInteger('item_id'); + $table->unsignedInteger('item_num'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('combination_goods'); + } +} diff --git a/database/seeds/MenusTableSeeder.php b/database/seeds/MenusTableSeeder.php index 8449e7c..5ae0163 100644 --- a/database/seeds/MenusTableSeeder.php +++ b/database/seeds/MenusTableSeeder.php @@ -2,6 +2,7 @@ use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; +use App\Models\Menu; class MenusTableSeeder extends Seeder { @@ -12,6 +13,7 @@ class MenusTableSeeder extends Seeder */ public function run() { + return $this->update(); // 商品管理-(商品列表,商品种类,商品品牌) $id = DB::table('menus')->insertGetId(['parent_id' => 0, 'code' => 'GOODS_MANAGE', 'name' => '商品管理', 'seq' => 0]); DB::table('menus')->insert([ @@ -19,6 +21,7 @@ class MenusTableSeeder extends Seeder ['parent_id' => $id, 'code' => 'GOODS_TYPE', 'name' => '商品种类', 'seq' => 1], ['parent_id' => $id, 'code' => 'GOODS_BRAND', 'name' => '商品品牌', 'seq' => 2], ['parent_id' => $id, 'code' => 'GOODS_SKU_LOCATION', 'name' => '商品货架', 'seq' => 3], + ['parent_id' => $id, 'code' => 'GOODS_COMBINATION', 'name' => '组合商品', 'seq' => 4], ]); // 店铺管理 DB::table('menus')->insertGetId(['parent_id' => 0, 'code' => 'SHOP_MANAGE', 'name' => '店铺管理', 'seq' => 10]); @@ -40,4 +43,17 @@ class MenusTableSeeder extends Seeder // 团购 DB::table('menus')->insertGetId(['parent_id' => 0, 'code' => 'GROUP_MANAGEMENT', 'name' => '团购管理', 'seq' => 1]); } + + public function update() + { + $routes = include(resource_path('lang/zh-CN/permission.php')); + foreach ($routes as $code => $route) { + if (false === strpos($code, '.')) { + DB::table('menus')->updateOrInsert( + ['id' => $route['id'], 'parent_id' => $route['parent_id'], 'code' => $code], + ['name' => $route['name']] + ); + } + } + } } diff --git a/database/seeds/PermissionsTableSeeder.php b/database/seeds/PermissionsTableSeeder.php index 92ecb71..7f12761 100644 --- a/database/seeds/PermissionsTableSeeder.php +++ b/database/seeds/PermissionsTableSeeder.php @@ -14,8 +14,8 @@ class PermissionsTableSeeder extends Seeder public function run() { $routes = include(resource_path('lang/zh-CN/permission.php')); - foreach ($routes as $key => $route) { - $data = ['id' => $route['id'], 'name' => $key, 'guard_name' => 'api']; + foreach ($routes as $code => $route) { + $data = ['id' => $route['id'], 'name' => $code, 'guard_name' => 'api']; Permission::firstOrCreate($data); } } diff --git a/resources/lang/zh-CN/permission.php b/resources/lang/zh-CN/permission.php index 8b821bd..b0e6f31 100644 --- a/resources/lang/zh-CN/permission.php +++ b/resources/lang/zh-CN/permission.php @@ -147,6 +147,36 @@ return [ 'name' => '删除', 'parent_id' => 15, ], + 'GOODS_COMBINATION' => [ + 'id' => 16, + 'name' => '组合商品', + 'parent_id' => 1, + ], + 'goods_combination.index' => [ + 'id' => 160, + 'name' => '列表', + 'parent_id' => 16, + ], + 'goods_combination.store' => [ + 'id' => 161, + 'name' => '新增', + 'parent_id' => 16, + ], + 'goods_combination.show' => [ + 'id' => 162, + 'name' => '查看', + 'parent_id' => 16, + ], + 'goods_combination.update' => [ + 'id' => 163, + 'name' => '更新', + 'parent_id' => 16, + ], + 'goods_combination.destroy' => [ + 'id' => 164, + 'name' => '删除', + 'parent_id' => 16, + ], // 店铺管理 'SHOP_MANAGE' => [ 'id' => 5,