middleware('auth.api'); // $this->user = \Auth::guard('api')->user(); // $this->uid = \Auth::guard('api')->id(); $this->user = User::find(824); $this->uid = 824; } /** * 小程序,购物车页面数据接口 * * @param * @return array */ public function index() { $lists = Cart::where('user_id', $this->uid)->orderBy('id', 'desc')->get(); $data = []; foreach ($lists as $cart) { if (!isset($carts[$cart->params->goods->seller_id])) { $carts[$cart->params->goods->seller_id] = []; } if ($cart->params->stock < 1) { $cart->delete(); } else { if ($cart->number > $cart->params->stock) { $cart->number = $cart->params->stock; $cart->save(); } array_push($carts[$cart->params->goods->seller_id], $cart); } } foreach ($carts as $key => $seller_item) { $seller_cart = []; $seller_cart['seller'] = new CartSellerResource(Seller::find($key)); foreach ($seller_item as $cart_item) { $seller_cart['goods_list'][] = new CartResource($cart_item); } array_push($data, $seller_cart); } return [ 'data' => $data, 'status' => 'SUCCESS', 'status_code' => 200, ]; } /** * 小程序,商品详情页,点击加入购物车请求接口 * * @param \Illuminate\Http\Request $request * @return array */ public function save(Request $request) { $user_id = $this->uid; $result = Cart::where(['user_id' => $user_id, 'params_id' => $request->params_id])->first(); $params = GoodsParams::find($request->params_id); if ($result) { $result->number += $request->number; $result->save(); } else { $result = Cart::create([ 'user_id' => $this->uid, 'params_id' => $request->params_id, 'goods_id' => $params->goods_id, //保存goods_id是为了下架商品时,删除购物车 'number' => $request->number, ]); } if ($result) { return $this->success(['msg' => '成功加入购物车', 'cartGoodsCount' => Cart::where('user_id', $this->uid)->count()]); } else { return $this->failed('加入失败'); } } /** * 小程序,购物车页,点击增减商品数量请求接口 * * @param \Illuminate\Http\Request $request * @return array */ public function setnum(Request $request) { $cart = Cart::find($request->id); $cart->number = $request->number; if ($cart->save()) { return $this->success(['msg' => '操作成功', 'number' => $cart->number]); } else { return $this->failed('加入失败'); } } /** * 小程序,确认订单页请求的接口 * * @param \Illuminate\Http\Request $request * @return array */ public function sure(Request $request) { $data = array(); $carts = array(); $cart_amount = 0; $cart_score = 0; $cart_freight = 0; $address = $request->addressId ? UserAddress::find($request->addressId) : null; foreach (explode(',', $request->cart_ids) as $key => $value) { $cart = Cart::find($value); if ($cart) { if ($cart->params->stock < 1) { $cart->delete(); } else { if ($cart->number < $cart->params->stock) { if (!isset($carts[$cart->params->goods->seller_id])) { $carts[$cart->params->goods->seller_id] = []; } array_push($carts[$cart->params->goods->seller_id], $cart); } } } } foreach ($carts as $key => $seller_item) { $seller_cart = []; $seller_cart['seller'] = new CartSellerResource(Seller::find($key)); $seller_cart['express'] = ['type1' => 1, 'type2' => 0]; //配送方式,type1-快递,type2-自取 $seller_cart['remark'] = '';//买家留言 //获取店铺运费、金额、积分小计 $seller_total = self::sellerTotal($key, $seller_item, $address); //格式化单店铺小计 foreach ($seller_total as $k => $v) { $seller_cart['total'][$k] = number_format($v, 2); $seller_cart['totalOriginal'][$k] = $v; } //计算全部店铺总和 $cart_amount += $seller_total['amount']; $cart_score += $seller_total['score']; $cart_freight += $seller_total['freightPrice']; foreach ($seller_item as $cart_item) { $seller_cart['goods_list'][] = new CartResource($cart_item); } array_push($data, $seller_cart); } return [ 'data' => [ 'cartData' => $data, 'cartTotal' => [ 'amount' => number_format($cart_amount, 2), 'score' => number_format($cart_score, 2), 'freight' => number_format($cart_freight, 2), 'freightOriginal' => $cart_freight, 'orderPrice' => number_format($cart_amount + $cart_freight, 2), 'orderPriceOriginal' => $cart_amount + $cart_freight ], 'address' => $address ? new AddressResource($address) : [] ], 'status' => 'SUCCESS', 'status_code' => 200, ]; } /** * 计算店铺商品金额、运费金额、积分金额总和 * * @param * @return array */ private function sellerTotal($seller_id, $seller_item, $address = null) { $amount = 0; $freightPrice = \Params::get('default_freight'); $heavy = 0; $score = 0; foreach ($seller_item as $cart_item) { $params = GoodsParams::find($cart_item->params_id); $amount += $cart_item->number * $params->price; if ($params->is_free_freight == 0) { $heavy += $cart_item->number * $params->heavy; } $score += $cart_item->number * $params->score; } if ($heavy === 0) { $freightPrice = 0; //包邮 } else { //计算每个商户订单的运费 if (!empty($address)) { $freight = Freight::where(['seller_id' => $seller_id, 'area_id' => $address->province->id])->first(); if ($freight) { $freightPrice = $freight->basic; if ($freight->heavy < $heavy) { $freightPrice += ceil($heavy - $freight->heavy) * $freight->added; } } } } return [ 'freightPrice' => $freightPrice, 'score' => $score, 'amount' => $amount - $score, ]; } /** * 小程序,购物车页面,点击删除商品请求的接口 * * @param \Illuminate\Http\Request $request * @return array */ public function delete(Cart $cart) { if ($cart->delete()) { return $this->success(['msg' => '操作成功']); } else { return $this->failed('加入失败'); } } }