From 560910dd7a7765fbab8b0c07af86368c284164a1 Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Thu, 8 Sep 2022 16:41:07 +0800 Subject: [PATCH] order --- .../Controllers/Order/OrderController.php | 64 +++++++++---------- .../Order/OrderVerifyController.php | 14 ++++ app/Services/OrderService.php | 6 +- 3 files changed, 49 insertions(+), 35 deletions(-) diff --git a/app/Endpoint/Api/Http/Controllers/Order/OrderController.php b/app/Endpoint/Api/Http/Controllers/Order/OrderController.php index 87d9a044..679fc886 100644 --- a/app/Endpoint/Api/Http/Controllers/Order/OrderController.php +++ b/app/Endpoint/Api/Http/Controllers/Order/OrderController.php @@ -46,22 +46,22 @@ class OrderController extends Controller */ public function store(Request $request) { - $isQuick = $request->filled('product'); - - $rules = $isQuick ? [ - 'product.sku_id' => ['bail', 'required', 'int'], - 'product.quantity' => ['bail', 'required', 'int', 'min:1'], + $validated = $request->validate(array_merge([ 'shipping_address_id' => ['bail', 'nullable', 'int'], 'coupon_id' => ['bail', 'nullable', 'int'], 'note' => ['bail', 'nullable', 'string', 'max:255'], - ] : [ - 'shopping_cart' => ['bail', 'required', 'array'], - 'shipping_address_id' => ['bail', 'required', 'int'], - 'coupon_id' => ['bail', 'nullable', 'int'], - 'note' => ['bail', 'nullable', 'string', 'max:255'], - ]; - - $input = $request->validate($rules, [], [ + ], match (true) { + $request->filled('order_pre') => [ + 'order_pre' => ['bail','required', 'int'], + ], + $request->filled('product') => [ + 'product.sku_id' => ['bail', 'required', 'int'], + 'product.quantity' => ['bail', 'required', 'int', 'min:1'], + ], + default => [ + 'shopping_cart' => ['bail', 'required', 'array'], + ] + }), [], [ 'product.sku_id' => '商品', 'product.quantity' => '数量', 'shopping_cart' => '购物车商品', @@ -69,31 +69,31 @@ class OrderController extends Controller 'coupon_id' => '优惠券', 'note' => '订单备注', ]); - + $user = $request->user(); try { - $order = DB::transaction(function () use ($isQuick, $user, $input) { + $order = DB::transaction(function () use ($user, $validated, $request) { $orderService = new OrderService(); - if ($isQuick) { - return $orderService->createQuickOrder( + return match (true) { + $request->filled('order_pre') => $orderService->createOrderByPre($user, OrderPre::findOrFail($request->input('order_pre')), $request->input('coupon_id')), + $request->filled('product') => $orderService->createQuickOrder( $user, - $input['product']['sku_id'], - $input['product']['quantity'], - $input['shipping_address_id'] ?? null, - $input['coupon_id'] ?? null, - $input['note'] ?? null, - ); - } - - return $orderService->createShoppingCartOrder( - $user, - $input['shopping_cart'], - $input['shipping_address_id'] ?? null, - $input['coupon_id'] ?? null, - $input['note'] ?? null, - ); + $validated['product']['sku_id'], + $validated['product']['quantity'], + $validated['shipping_address_id'] ?? null, + $validated['coupon_id'] ?? null, + $validated['note'] ?? null, + ), + default => $orderService->createShoppingCartOrder( + $user, + $validated['shopping_cart'], + $validated['shipping_address_id'] ?? null, + $validated['coupon_id'] ?? null, + $validated['note'] ?? null, + ), + }; }); } catch (QueryException $e) { if (strpos($e->getMessage(), 'Numeric value out of range') !== false) { diff --git a/app/Endpoint/Api/Http/Controllers/Order/OrderVerifyController.php b/app/Endpoint/Api/Http/Controllers/Order/OrderVerifyController.php index 5da8b8ed..02b4bca4 100644 --- a/app/Endpoint/Api/Http/Controllers/Order/OrderVerifyController.php +++ b/app/Endpoint/Api/Http/Controllers/Order/OrderVerifyController.php @@ -3,6 +3,8 @@ namespace App\Endpoint\Api\Http\Controllers\Order; use App\Endpoint\Api\Http\Controllers\Controller; +use App\Models\OrderPre; +use App\Models\ProductSku; use App\Services\OrderService; use Illuminate\Http\Request; @@ -46,6 +48,18 @@ class OrderVerifyController extends Controller $user = $request->user(); + if ($request->filled('order_pre')) { + $pre = OrderPre::find($request->input('order_pre')); + $products = []; + foreach($pre->products as $item) { + array_push($products, [ + 'sku' => ProductSku::findOrFail($item['sku_id']), + 'quantity' => $item['quantity'] + ]); + } + return response()->json($orderService->verifyOrder($user, $products, $request->input('shipping_address_id'), $request->input('coupon_id'), null)); + } + return response()->json( $isQuick ? $orderService->verifyQuickOrder( diff --git a/app/Services/OrderService.php b/app/Services/OrderService.php index 393dd082..4cf5afb3 100644 --- a/app/Services/OrderService.php +++ b/app/Services/OrderService.php @@ -174,7 +174,7 @@ class OrderService * 添加店铺订单 * */ - public function createOrderByPre(User $user, OrderPre $order_pre) + public function createOrderByPre(User $user, OrderPre $order_pre, $coupon_id = null) { $products = []; foreach($order_pre->products as $item) { @@ -184,7 +184,7 @@ class OrderService ]); } - $coupon_id = data_get($order_pre, 'others.coupon_id'); + $coupon_id = $coupon_id ?: data_get($order_pre, 'others.coupon_id'); $note = data_get($order_pre, 'others.note'); // 优惠券 @@ -653,7 +653,7 @@ class OrderService * @param int|null $bargainOrderId * @return array */ - protected function verifyOrder(User $user, array $products, ?int $shippingAddressId = null, ?int $couponId = null, ?int $bargainOrderId = null): array + public function verifyOrder(User $user, array $products, ?int $shippingAddressId = null, ?int $couponId = null, ?int $bargainOrderId = null): array { // 获取收货地址 $shippingAddress = $this->getShippingAddress($user, $shippingAddressId);