From badabe39cb7902f277a0dcff4761c9b31e18dc4b Mon Sep 17 00:00:00 2001 From: Edward Yang Date: Thu, 28 Jul 2022 11:39:12 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=9D=E5=AD=98totals?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- beike/Models/Order.php | 5 +++ beike/Models/OrderTotal.php | 19 ++++++++++++ beike/Repositories/OrderRepo.php | 11 ++++--- beike/Repositories/OrderTotalRepo.php | 31 +++++++++++++++++++ .../Http/Controllers/CheckoutController.php | 6 ++-- beike/Shop/Services/CheckoutService.php | 11 ++++--- 6 files changed, 71 insertions(+), 12 deletions(-) create mode 100644 beike/Models/OrderTotal.php create mode 100644 beike/Repositories/OrderTotalRepo.php diff --git a/beike/Models/Order.php b/beike/Models/Order.php index 38f7f432..4fdff36f 100644 --- a/beike/Models/Order.php +++ b/beike/Models/Order.php @@ -29,4 +29,9 @@ class Order extends Base { return $this->hasMany(OrderProduct::class); } + + public function orderTotals(): HasMany + { + return $this->hasMany(OrderTotal::class); + } } diff --git a/beike/Models/OrderTotal.php b/beike/Models/OrderTotal.php new file mode 100644 index 00000000..23d93f74 --- /dev/null +++ b/beike/Models/OrderTotal.php @@ -0,0 +1,19 @@ + + * @created 2022-07-28 11:26:47 + * @modified 2022-07-28 11:26:47 + */ + +namespace Beike\Models; + +class OrderTotal extends Base +{ + protected $fillable = [ + 'order_id', 'code', 'value', 'title', 'reference' + ]; +} diff --git a/beike/Repositories/OrderRepo.php b/beike/Repositories/OrderRepo.php index 6db1656a..8df7df73 100644 --- a/beike/Repositories/OrderRepo.php +++ b/beike/Repositories/OrderRepo.php @@ -103,16 +103,18 @@ class OrderRepo public static function create(array $data): Order { $customer = $data['customer'] ?? null; - $current = $data['checkout']['current'] ?? []; - $carts = $data['checkout']['carts'] ?? []; + $current = $data['current'] ?? []; + $carts = $data['carts'] ?? []; + $totals = $data['totals'] ?? []; + $shippingAddressId = $current['shipping_address_id'] ?? 0; $paymentAddressId = $current['payment_address_id'] ?? 0; $shippingAddress = AddressRepo::find($shippingAddressId); $paymentAddress = AddressRepo::find($paymentAddressId); - $shippingMethodCode = $data['shipping_method_code'] ?? ''; - $paymentMethodCode = $data['payment_method_code'] ?? ''; + $shippingMethodCode = $current['shipping_method_code'] ?? ''; + $paymentMethodCode = $current['payment_method_code'] ?? ''; $order = new Order([ 'number' => self::generateOrderNumber(), @@ -155,6 +157,7 @@ class OrderRepo $order->saveOrFail(); OrderProductRepo::create($order, $carts['carts']); + OrderTotalRepo::createTotals($order, $totals); // OrderHistoryRepo::create($order); return $order; diff --git a/beike/Repositories/OrderTotalRepo.php b/beike/Repositories/OrderTotalRepo.php new file mode 100644 index 00000000..14c1bb07 --- /dev/null +++ b/beike/Repositories/OrderTotalRepo.php @@ -0,0 +1,31 @@ + + * @created 2022-07-28 10:30:03 + * @modified 2022-07-28 10:30:03 + */ + +namespace Beike\Repositories; + +use Beike\Models\Order; + +class OrderTotalRepo +{ + public static function createTotals(Order $order, array $totals) + { + $items = []; + foreach ($totals as $total) { + $items[] = [ + 'code' => $total['code'], + 'value' => $total['amount'], + 'title' => $total['title'], + 'reference' => json_encode($total['reference'] ?? ''), + ]; + } + $order->orderTotals()->createMany($items); + } +} diff --git a/beike/Shop/Http/Controllers/CheckoutController.php b/beike/Shop/Http/Controllers/CheckoutController.php index e5c3c7ad..991cc8a6 100644 --- a/beike/Shop/Http/Controllers/CheckoutController.php +++ b/beike/Shop/Http/Controllers/CheckoutController.php @@ -40,13 +40,11 @@ class CheckoutController extends Controller /** * 确认提交订单 * - * @param Request $request * @return Order * @throws \Throwable */ - public function confirm(Request $request): Order + public function confirm(): Order { - $data = $request->all(); - return (new CheckoutService)->confirm($data); + return (new CheckoutService)->confirm(); } } diff --git a/beike/Shop/Services/CheckoutService.php b/beike/Shop/Services/CheckoutService.php index 5afd4ad7..2fb72cf9 100644 --- a/beike/Shop/Services/CheckoutService.php +++ b/beike/Shop/Services/CheckoutService.php @@ -75,13 +75,16 @@ class CheckoutService * 确认提交订单 * @throws \Throwable */ - public function confirm($data): \Beike\Models\Order + public function confirm(): \Beike\Models\Order { $customer = current_customer(); - $data['customer'] = $customer; - $data['checkout'] = self::checkoutData(); - $order = OrderRepo::create($data); + $checkoutData = self::checkoutData(); + $checkoutData['customer'] = $customer; + + $order = OrderRepo::create($checkoutData); + CartRepo::clearSelectedCartProducts($customer); + // Notification::endmail(); // Notification::sendsms(); return $order;