Exemple #1
0
 /**
  *
  * @SWG\Api(
  *   path="/orders",
  *   @SWG\Operation(
  *     method="POST", summary="生成订单", notes="生成订单",type="Order",
  *     @SWG\ResponseMessage(code=0, message="成功"),
  *     @SWG\Parameter(
  *         name="order_info",
  *         description="提交的订单信息",
  *         paramType="body",
  *         required=true,
  *         type="newOrderParams"
  *     )
  *   )
  * )
  */
 public function store(Request $request)
 {
     DB::beginTransaction();
     $response = new BaseResponse();
     $content = json_decode($request->getContent(false));
     $accessToken = $content->accessToken;
     $goodsList = $content->goodsList;
     $total_fee = 0;
     $coupon_total = 0;
     foreach ($goodsList as $g) {
         $goods = Goods::find($g->goods_id);
         if ($goods != null) {
             //检查是否购买过新用户福利(0元福利)
             //是否是新用户福利商品
             $homeButtonGoods = HomeButtonGoods::where('goods_id', $goods->id)->first();
             if ($homeButtonGoods != null) {
                 //判断是否购买过
                 $homeButtonGoodsBuyRecords = HomeButtonGoodsBuyRecords::where('home_button_goods_id', $homeButtonGoods->id)->where('user_id', $content->user_id)->first();
                 if ($homeButtonGoodsBuyRecords != null) {
                     $response->Code = BaseResponse::CODE_ERROR_BUSINESS;
                     $response->Message = "商品" . $goods->name . "为新用户福利,只能购买一次,您已经购买过了";
                     DB::rollback();
                     return $response->toJson();
                 } else {
                     $newHomeButtonGoodsRecords = new HomeButtonGoodsBuyRecords();
                     $newHomeButtonGoodsRecords->user_id = $content->user_id;
                     $newHomeButtonGoodsRecords->home_button_goods_id = $homeButtonGoods->id;
                     $newHomeButtonGoodsRecords->save();
                 }
             }
             //如果在约惠列表里,不减去优惠金额 要扣券
             if (ActivityClassificationGoods::where('goods_id', $goods->id)->count() > 0 || FreePostGoods::where('goods_id', $goods->id)->count() > 0 || ConversionGoods::where('goods_id', $goods->id)->count() > 0) {
                 $total_fee = $total_fee + $goods->price * $g->num;
                 $coupon_total = $coupon_total + $goods->coupon_amount * $g->num;
                 $goods->num = $goods->num - $g->num;
                 if ($goods->num < 0) {
                     $response->Code = BaseResponse::CODE_ERROR_BUSINESS;
                     $response->Message = "商品库存不够";
                     DB::rollback();
                     return $response->toJson();
                 }
                 $goods->save();
                 continue;
             }
             if ($g->use_coupon == 1) {
                 $total_fee = $total_fee + $goods->price * $g->num - $goods->coupon_amount * $g->num;
                 $coupon_total = $coupon_total + $goods->coupon_amount * $g->num;
             } else {
                 $total_fee = $total_fee + $goods->price * $g->num;
             }
             $goods->num = $goods->num - $g->num;
             if ($goods->num < 0) {
                 $response->Code = BaseResponse::CODE_ERROR_BUSINESS;
                 $response->Message = "商品库存不够";
                 DB::rollback();
                 return $response->toJson();
             }
             $goods->save();
         } else {
             $response->Code = BaseResponse::CODE_ERROR_BUSINESS;
             $response->Message = "get goods failed!";
             DB::rollback();
             return $response->toJson();
         }
     }
     unset($content->goodsList);
     //        DB::rollback();s
     //        echo $coupon_total;exit;
     //检测礼券充足
     $apiParam = ['accessToken' => $accessToken, 'coupon' => $coupon_total];
     $res = $this->post('/zhmf/member/consumerCoupon/isCouponEnough', $apiParam);
     $res = json_decode($res);
     if ($res->Code == 0 && $res->Data->enough == false) {
         $response->Code = -1;
         $response->Message = "礼券不足";
         DB::rollback();
         return $response->toJson();
     }
     if ($total_fee <= 0) {
         $total_fee = 0;
     }
     $content->total_fee = $total_fee;
     $content->shipping_fee = 10;
     //总运费
     $content->out_trade_no = $this->buildOrderNo();
     if ($total_fee == 0) {
         $content->status = 1;
     }
     $order = Order::create((array) $content);
     $useCouponRecords = new UseCouponRecords();
     $useCouponRecords->user_id = $content->user_id;
     $useCouponRecords->order_id = $order->id;
     $useCouponRecords->access_token = $accessToken;
     $useCouponRecords->coupon = $coupon_total;
     if ($total_fee == 0) {
         $useCouponRecords->status = 2;
         $apiParam = ['accessToken' => $useCouponRecords->access_token, 'coupon' => $useCouponRecords->coupon, 'orderId' => $content->out_trade_no];
         $res = $this->post('/zhmf/member/consumerCoupon/useCoupon', $apiParam);
         $res = json_decode($res);
         if ($res->Code == 0) {
             $useCouponRecords->status = 1;
         }
     } else {
         $useCouponRecords->status = 0;
     }
     $useCouponRecords->save();
     foreach ($goodsList as $v) {
         $orderGoods = new OrderGoods();
         $orderGoods->order_id = $order->id;
         $orderGoods->goods_id = $v->goods_id;
         $orderGoods->num = $v->num;
         $orderGoods->properties = json_encode($v->properties);
         if (isset($v->message)) {
             $orderGoods->message = $v->message;
         }
         $orderGoods->save();
     }
     $response->Data = $order;
     DB::commit();
     return $response->toJson();
     //var_dump($content);
     //echo $this->sign_request(['array'],'../config/rsa_private_key.pem');
 }