From 1fc2505b82d0bd7a29078340babb0bfdad640bf0 Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Fri, 17 Mar 2023 22:09:10 +0800 Subject: [PATCH] sku --- app/Admin/Controllers/Store/OrderController.php | 17 +++++++++-------- .../Product/ProductSkuController.php | 13 +++++++++---- .../Api/Http/Controllers/StoreController.php | 14 +++++++++----- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/app/Admin/Controllers/Store/OrderController.php b/app/Admin/Controllers/Store/OrderController.php index b865b014..60a99612 100644 --- a/app/Admin/Controllers/Store/OrderController.php +++ b/app/Admin/Controllers/Store/OrderController.php @@ -33,7 +33,7 @@ class OrderController extends AdminController protected function grid() { - $grid = new Grid(Order::with(['user', 'userInfo', 'inviter', 'inviterInfo', 'store'])); + $grid = new Grid(Order::with(['user', 'userInfo', 'inviter', 'inviterInfo', 'store', 'userCoupon'])); $user = Admin::user(); $canAdmin = $this->canAdmin(); @@ -70,6 +70,7 @@ class OrderController extends AdminController $grid->column('market_price')->display(fn ($value) => bcdiv($value, 100, 2))->prepend('¥'); $grid->column('cost_price')->display(fn ($value) => bcdiv($value, 100, 2))->prepend('¥'); $grid->column('profit_price')->display(fn () => round(($this->total_amount - $this->cost_price) / 100, 2, PHP_ROUND_HALF_DOWN)); + $grid->column('user_coupon_id')->display(fn ($value) => $value ? data_get($this->userCoupon, 'coupon_name') . '(¥'.round($this->coupon_discount_amount/100, 2, PHP_ROUND_HALF_DOWN).')' : ''); $grid->column('sales_value'); $grid->column('order_status')->using($this->statusMap)->dot($this->statusColor); $grid->column('created_at'); @@ -138,6 +139,7 @@ class OrderController extends AdminController OrderStatus::CANCELLED => '已取消' ])->width(3); $filter->between('created_at')->dateTime()->width(6); + $filter->where('user_coupon_id', fn($q) => $this->input ? $q->whereNotNull('user_coupon_id') : $q->whereNull('user_coupon_id'))->select(['未使用', '已使用'])->width(3); $filter->between('completed_at')->dateTime()->width(6); }); @@ -175,25 +177,24 @@ class OrderController extends AdminController protected function detail($id) { - $show = Show::make($id, Order::with(['user', 'inviter'])); + $show = Show::make($id, Order::with(['user', 'inviter', 'userCoupon'])); $show->field('id'); $show->field('sn'); $show->field('user.phone'); $show->field('inviter.phone'); $show->field('products_total_amount')->as(fn($value) => bcdiv($value, 100, 2))->prepend('¥'); - $show->field('total_amount')->as(fn ($value) => bcdiv($value, 100, 2)); $show->field('market_price')->as(fn ($value) => bcdiv($value, 100, 2)); $show->field('cost_price')->as(fn ($value) => bcdiv($value, 100, 2)); $show->field('profit_price')->as(fn () => round(($this->total_amount - $this->cost_price) / 100, 2, PHP_ROUND_HALF_DOWN)); $show->field('vip_discount_amount')->as(fn ($v) => bcdiv($v, 100, 2))->prepend('- ¥'); + + // 优惠券 + $show->field('user_coupon_id')->as(fn() => data_get($this->userCoupon, 'coupon_name')); + $show->field('coupon_discount_amount')->as(fn($value) => bcdiv($value, 100, 2))->prepend('- ¥'); - $userCouponId = $show->model()->user_coupon_id; - if ($userCouponId) { - $show->field('coupon_discount_amount')->as(fn($value) => bcdiv($value, 100, 2))->prepend('- ¥'); - } $show->field('shipping_fee')->as(fn ($v) => bcdiv($v, 100, 2))->prepend('+ ¥'); $show->field('reduced_amount')->as(fn($value) => bcdiv($value, 100, 2))->prepend('- ¥'); - $show->field('total_amount', '支付金额')->as(fn($value) => bcdiv($value, 100, 2))->prepend('¥'); + $show->field('total_amount')->as(fn($value) => bcdiv($value, 100, 2))->prepend('¥'); $show->field('sales_value'); $show->field('order_status')->as(function ($v) { return $this->order_status; diff --git a/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php b/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php index 0a052284..1777326f 100644 --- a/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php +++ b/app/Endpoint/Api/Http/Controllers/Product/ProductSkuController.php @@ -66,7 +66,11 @@ class ProductSkuController extends Controller $user = $request->user(); $spu = ProductSpu::with(['specs', 'features'])->findOrFail($id); - $sku = $spu->skus()->with(['buynote', 'spu'])->online()->first(); + $sku = $spu->skus() + ->with(['buynote', 'spu']) + ->online() + ->when($request->filled('sku_id'), fn($q) => $q->where('id', $request->input('sku_id'))) + ->first(); if (!$sku) { throw new BizException('商品sku未上架'); } @@ -92,12 +96,13 @@ class ProductSkuController extends Controller $key = implode('_', $jSpecs); $mapSku = $mapSkus->get($key); - if ($mapSku) { + $stock = (int) $mapSku?->saleable_stock; + if ($mapSku && $stock > 0) { $spuSpecItems[] = [ 'name' => $value['name'], 'selected' => $sku->is($mapSku), - 'sku_id' => (int) $mapSku?->id, - 'sku_stock' => (int) $mapSku?->saleable_stock, + 'sku_id' => (int) $mapSku->id, + 'sku_stock' => $stock, ]; } diff --git a/app/Endpoint/Api/Http/Controllers/StoreController.php b/app/Endpoint/Api/Http/Controllers/StoreController.php index a1328f7e..5850dcf6 100644 --- a/app/Endpoint/Api/Http/Controllers/StoreController.php +++ b/app/Endpoint/Api/Http/Controllers/StoreController.php @@ -66,7 +66,10 @@ class StoreController extends Controller $user = $request->user(); $spu = $store->productSpus()->with(['specs', 'features'])->findOrFail($id); - $sku = $store->productSkus()->where('product_spu_id', $spu->id)->first(); + $sku = $store->productSkus() + ->where('product_spu_id', $spu->id) + ->when($request->filled('sku_id'), fn($q) => $q->where('product_sku_id', $request->input('sku_id'))) + ->first(); if (!$sku) { throw new BizException('商品sku未上架'); } @@ -74,7 +77,7 @@ class StoreController extends Controller $spuSpecs = []; if (count($original = (array) $sku->specs) > 0) { - $skus = $spu->skus()->get(['id', 'specs', 'stock', 'release_at']); + $skus = $store->productSkus()->where('product_spu_id', $spu->id)->get(); $mapSkus = $skus->mapWithKeys(function ($item) { $key = implode('_', $item->specs) ?: $item->id; @@ -92,12 +95,13 @@ class StoreController extends Controller $key = implode('_', $jSpecs); $mapSku = $mapSkus->get($key); - if ($mapSku) { + $stock = (int) data_get($mapSku?->pivot, 'amount'); + if ($mapSku && $stock > 0) { $spuSpecItems[] = [ 'name' => $value['name'], 'selected' => $sku->is($mapSku), - 'sku_id' => (int) $mapSku?->id, - 'sku_stock' => (int) $mapSku?->saleable_stock, + 'sku_id' => (int) $mapSku->id, + 'sku_stock' => $stock, ]; }