예제 #1
0
 public function postOrder()
 {
     $now = new DateTime();
     $token = Input::get('token', '');
     $u_id = Input::get('u_id', 0);
     $amount_origin = Input::get('amount_origin', 0);
     $amount = Input::get('amount', 0);
     $shipping_fee = Input::get('shipping_fee', 0);
     $shipping_name = Input::get('shipping_name', '');
     $shipping_phone = Input::get('shipping_phone', '');
     $shipping_address = Input::get('shipping_address', '');
     $shipping = Input::get('shipping', 1);
     $delivery_time = Input::get('delivery_time', $now->format('Y-m-d H:i:s'));
     $comment = Input::get('comment', '');
     $carts = Input::get('carts', null);
     DB::beginTransaction();
     try {
         if (empty($carts)) {
             throw new Exception("请传入有效的购物车", 1);
         }
         $carts = explode(',', $carts);
         $user = User::chkUserByToken($token, $u_id);
         $list = Cart::whereIn('c_id', $carts)->get();
         $total_amount = 0;
         $total_amount_origin = 0;
         $b_ids = [];
         $amount_origin_sum = 0;
         $amount_sum = 0;
         $groups = [];
         foreach ($list as $key => $cart) {
             if ($cart->u_id != $u_id) {
                 throw new Exception("没有权限操作该购物车", 7001);
             }
             if ($cart->c_status > 1) {
                 throw new Exception("购物车无效", 7005);
             }
             $cart->updateCart($cart->c_quantity);
             if (empty($groups[$cart->b_id]['amount_origin'])) {
                 $groups[$cart->b_id]['amount_origin'] = 0;
                 $groups[$cart->b_id]['amount'] = 0;
                 $groups[$cart->b_id]['carts_ids'] = [];
             }
             $groups[$cart->b_id]['amount_origin'] += $cart->c_amount_origin;
             $groups[$cart->b_id]['amount'] += $cart->c_amount;
             $groups[$cart->b_id]['carts_ids'][] = $cart->c_id;
             $b_ids[] = $cart->b_id;
             $amount_sum += $groups[$cart->b_id]['amount'];
             $amount_origin_sum += $groups[$cart->b_id]['amount_origin'];
         }
         if ($amount_origin_sum != $amount_origin || $amount_sum != $amount) {
             throw new Exception("支付金额已刷新, 请重新提交订单", 9003);
         }
         $order_group_no = Order::generateOrderGroupNo($u_id);
         foreach ($groups as $b_id => $group) {
             $rnd_str = rand(10, 99);
             $order_no = $order_group_no . $b_id . $rnd_str;
             $order = new Order();
             $order->u_id = $u_id;
             $order->b_id = $b_id;
             $order->o_amount_origin = $group['amount_origin'];
             $order->o_amount = $group['amount'];
             $order->o_shipping_fee = $shipping_fee;
             $order->o_shipping_name = $shipping_name;
             $order->o_shipping_phone = $shipping_phone;
             $order->o_shipping_address = $shipping_address;
             $order->o_delivery_time = $delivery_time;
             $order->o_shipping = $shipping;
             $order->o_comment = $comment;
             $order->o_number = $order_no;
             $order->o_group_number = $order_group_no;
             $o_id = $order->addOrder();
             Cart::bindOrder([$order->o_id => $group['carts_ids']]);
         }
         // push msg to seller
         $list = Booth::whereIn('b_id', $b_ids)->get();
         foreach ($list as $key => $booth) {
             $obj = new MessageDispatcher($booth->u_id);
             $obj->fireTextToUser('您有新的订单, 请及时发货');
         }
         $re = Tools::reTrue('提交订单成功', ['order_no' => $order_group_no]);
         DB::commit();
     } catch (Exception $e) {
         $re = Tools::reFalse($e->getCode(), $e->getMessage());
         DB::rollback();
     }
     return Response::json($re);
 }