diff --git a/app/Admin/Controllers/ProductSkuController.php b/app/Admin/Controllers/ProductSkuController.php index 3d48c8be..d17e14cd 100644 --- a/app/Admin/Controllers/ProductSkuController.php +++ b/app/Admin/Controllers/ProductSkuController.php @@ -145,6 +145,8 @@ class ProductSkuController extends AdminController $form->ignore(['attr_group']); $form->display('created_at'); $form->display('updated_at'); + + $form->hidden('is_pre_sale'); }); } diff --git a/app/Admin/Renderable/ProductSkuTable.php b/app/Admin/Renderable/ProductSkuTable.php index d4d5e660..2ef4f99e 100644 --- a/app/Admin/Renderable/ProductSkuTable.php +++ b/app/Admin/Renderable/ProductSkuTable.php @@ -76,6 +76,7 @@ class ProductSkuTable extends Grid 2 => 'danger', ]); $grid->column('release_at'); + $grid->column('is_pre_sale', '预售')->switch(); $grid->model()->orderBy('created_at', 'desc'); $grid->model()->orderBy('release_at', 'desc'); $grid->actions(function (Grid\Displayers\Actions $actions) { diff --git a/app/Models/ProductSku.php b/app/Models/ProductSku.php index 194b3214..2c6bf46f 100644 --- a/app/Models/ProductSku.php +++ b/app/Models/ProductSku.php @@ -66,6 +66,7 @@ class ProductSku extends Model 'sales_value', 'buynote_id', 'verify_state', + 'is_pre_sale', ]; /** diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 8de5d3f5..56782999 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -114,8 +114,8 @@ class OrderService foreach ($products as $product) { $sku = $product['sku']; - // 商品是否预售 - if (!$sku->spu->is_pre_sale && $product['quantity'] > $sku->saleable_stock) { + // 商品开启预售, 则不验证库存 + if (!$sku->spu->is_pre_sale && !$sku->is_pre_sale && $product['quantity'] > $sku->saleable_stock) { throw new BizException('商品库存不足'); } } @@ -390,7 +390,7 @@ class OrderService ]); // 未开启预售, 扣除商品库存 - if ($sku->spu && !$sku->spu->is_pre_sale) { + if (!$sku->spu->is_pre_sale && !$sku->is_pre_sale) { $sku->update([ 'stock' => DB::raw("stock - {$qty}") ]); @@ -1205,9 +1205,14 @@ class OrderService if (! $product->isGift()) { $product->spu?->increment('sales', -$product->quantity); $product->sku?->update([ - 'stock' => DB::Raw("stock + {$product->quantity}"), 'sales' => DB::Raw("sales - {$product->quantity}"), ]); + // 商品未开启预售,返还库存 + if (!$product->spu->is_pre_sale && !$product->sku->is_pre_sale) { + $product->sku?->update([ + 'stock' => DB::Raw("stock + {$product->quantity}"), + ]); + } continue; } 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 index 78558686..d1363c25 100644 --- 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 @@ -14,7 +14,11 @@ class AddIsPreSaleToProductSpus extends Migration public function up() { Schema::table('product_spus', function (Blueprint $table) { - $table->unsignedTinyInteger('is_pre_sale')->default(1)->comment('是否预售'); + $table->unsignedTinyInteger('is_pre_sale')->default(0)->comment('是否预售'); + }); + + Schema::table('product_skus', function (Blueprint $table) { + $table->unsignedTinyInteger('is_pre_sale')->default(0)->comment('是否预售'); }); } @@ -28,5 +32,8 @@ class AddIsPreSaleToProductSpus extends Migration Schema::table('product_spus', function (Blueprint $table) { $table->dropColumn(['is_pre_sale']); }); + // Schema::table('product_skus', function (Blueprint $table) { + // $table->dropColumn(['is_pre_sale']); + // }); } } diff --git a/resources/lang/zh_CN/product-sku.php b/resources/lang/zh_CN/product-sku.php index ca9fe826..94ee2587 100644 --- a/resources/lang/zh_CN/product-sku.php +++ b/resources/lang/zh_CN/product-sku.php @@ -40,6 +40,7 @@ return [ 'limit'=>'限量', 'growth_value'=>'成长值', 'sales_value'=>'销售值', + 'is_pre_sale' => '预售', ], 'options' => [ 'deny' => '删除失败',