public function store(OrderCreationRequest $request, Address $address, $seller, StockValidator $stockValidator)
 {
     $cartItems = $this->cartManager->getItemsForOrderCreation($this->user(), $seller);
     if ($cartItems->isEmpty()) {
         $this->error(trans('cart::messages.no_items_by_seller'));
     }
     // check stock
     foreach ($cartItems as $cartItem) {
         $stockValidator->validate($cartItem->getProduct(), $cartItem->getVariant(), $cartItem->quantity);
     }
     // optional route paramter 'address' will be injected regardless
     // need to check if it's route model binding or dependency injection
     $address = $address->exists ? $address : null;
     $paymentMethod = $request->input('payment');
     // validate shipping options
     $shippingOptions = $this->validateShippingOptions($request, $address, $seller, $cartItems);
     $order = DB::transaction(function () use($seller, $cartItems, $address, $paymentMethod, $shippingOptions) {
         return app(OrderManager::class)->createOrder($this->user(), $seller, $cartItems, $address, $paymentMethod, $shippingOptions);
     });
     if ($order) {
         event(new OrderCreated($order));
     }
     $this->flashSuccessOverlay('订单已提交给卖家');
     return redirect()->route('account::purchases.show', $order->id);
 }
 public function update(UpdateCartItemRequest $request, CartItem $cartItem, StockValidator $stockValidator)
 {
     $stockValidator->validate($cartItem->getProduct(), $cartItem->getVariant(), $request->input('quantity'));
     $this->cartManager->updateItem($cartItem, $request->all());
     return $this->success('update');
 }