From 2030ffdee48c152489e335a36bf02ba225fb45b0 Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Thu, 9 Jun 2022 09:44:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=93=81=E9=A2=84=E5=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ProductSpuController.php | 3 ++ .../Controllers/Order/OrderPreController.php | 1 + .../Product/ProductSkuController.php | 1 + app/Models/ProductSku.php | 10 +++--- app/Models/ProductSpu.php | 3 +- app/Services/OrderService.php | 14 +++++--- ...092000_add_is_pre_sale_to_product_spus.php | 32 +++++++++++++++++++ resources/lang/zh_CN/product-spu.php | 1 + 8 files changed, 54 insertions(+), 11 deletions(-) create mode 100644 database/migrations/2022_06_09_092000_add_is_pre_sale_to_product_spus.php diff --git a/app/Admin/Controllers/ProductSpuController.php b/app/Admin/Controllers/ProductSpuController.php index d73c3628..a202ff28 100644 --- a/app/Admin/Controllers/ProductSpuController.php +++ b/app/Admin/Controllers/ProductSpuController.php @@ -52,6 +52,7 @@ class ProductSpuController extends AdminController }); $grid->column('weight'); $grid->column('sales_value'); + $grid->column('is_pre_sale')->switch(); $grid->column('created_at')->sortable(); //排序 @@ -213,6 +214,8 @@ class ProductSpuController extends AdminController $form->ignore(['one_category', 'two_category', 'attr_group']); $form->display('created_at'); $form->display('updated_at'); + + $form->hidden('is_pre_sale'); }); } diff --git a/app/Endpoint/Api/Http/Controllers/Order/OrderPreController.php b/app/Endpoint/Api/Http/Controllers/Order/OrderPreController.php index b6e7c39b..af336664 100644 --- a/app/Endpoint/Api/Http/Controllers/Order/OrderPreController.php +++ b/app/Endpoint/Api/Http/Controllers/Order/OrderPreController.php @@ -78,6 +78,7 @@ class OrderPreController extends Controller $scene = http_build_query([ 'order_pre' => $order_pre->id, + 'invite_code' => $user->userInfo->code, ]); $response = $app->app_code->getUnlimit($scene, [ diff --git a/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php b/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php index 43bdf0d8..ddc63e62 100644 --- a/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php +++ b/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php @@ -118,6 +118,7 @@ class ProductSkuController extends Controller 'sku' => ProduckSkuResource::make($sku), 'is_collected' => $isCollected, 'features' => ProductFeatureResource::collection($spu->features), + 'is_pre_sale' => !!$spu->is_pre_sale ]); } diff --git a/app/Models/ProductSku.php b/app/Models/ProductSku.php index 92559908..194b3214 100644 --- a/app/Models/ProductSku.php +++ b/app/Models/ProductSku.php @@ -159,13 +159,11 @@ class ProductSku extends Model */ public function getSaleableStockAttribute(): int { - // 因预售商品功能, 所以这里直接返回 - return 1000000; - // if ($this->isOnline()) { - // return $this->attributes['stock']; - // } + if ($this->isOnline()) { + return $this->attributes['stock']; + } - // return 0; + return 0; } /** diff --git a/app/Models/ProductSpu.php b/app/Models/ProductSpu.php index 63d2edcf..3eb0ba26 100644 --- a/app/Models/ProductSpu.php +++ b/app/Models/ProductSpu.php @@ -57,7 +57,8 @@ class ProductSpu extends Model 'release_at', 'sales_value', 'cover', - 'description' + 'description', + 'is_pre_sale', ]; public function modelFilter() diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 96081571..8de5d3f5 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -114,7 +114,8 @@ class OrderService foreach ($products as $product) { $sku = $product['sku']; - if ($product['quantity'] > $sku->saleable_stock) { + // 商品是否预售 + if (!$sku->spu->is_pre_sale && $product['quantity'] > $sku->saleable_stock) { throw new BizException('商品库存不足'); } } @@ -385,11 +386,16 @@ class OrderService protected function deductProduct(ProductSku $sku, int $qty) { $sku->update([ - 'sales' => DB::Raw("sales + {$qty}"), - // 扣商品库存 - // 'stock' => DB::raw("stock - {$qty}"), + 'sales' => DB::Raw("sales + {$qty}") ]); + // 未开启预售, 扣除商品库存 + if ($sku->spu && !$sku->spu->is_pre_sale) { + $sku->update([ + 'stock' => DB::raw("stock - {$qty}") + ]); + } + $sku->spu?->increment('sales', $qty); // // 如果是因为赠品库存不足引起的异常,则需重试 diff --git a/database/migrations/2022_06_09_092000_add_is_pre_sale_to_product_spus.php b/database/migrations/2022_06_09_092000_add_is_pre_sale_to_product_spus.php new file mode 100644 index 00000000..78558686 --- /dev/null +++ b/database/migrations/2022_06_09_092000_add_is_pre_sale_to_product_spus.php @@ -0,0 +1,32 @@ +unsignedTinyInteger('is_pre_sale')->default(1)->comment('是否预售'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('product_spus', function (Blueprint $table) { + $table->dropColumn(['is_pre_sale']); + }); + } +} diff --git a/resources/lang/zh_CN/product-spu.php b/resources/lang/zh_CN/product-spu.php index bcf6f6e5..27e6c4f4 100644 --- a/resources/lang/zh_CN/product-spu.php +++ b/resources/lang/zh_CN/product-spu.php @@ -39,6 +39,7 @@ return [ 'category'=>[ 'name'=>'商品分类', ], + 'is_pre_sale' => '预售', ], 'options' => [ 'deny' => '删除失败',