0
0
Files
Babyclass/app/Api/Controllers/CartController.php
2020-08-04 10:09:42 +08:00

253 lines
8.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Api\Controllers;
use App\Api\Resources\AddressResource;
use App\Api\Resources\CartResource;
use App\Models\Cart;
use App\Models\Freight;
use App\Models\GoodsParams;
use App\User;
use Illuminate\Http\Request;
use App\Api\Resources\CartSellerResource;
use App\Models\Seller;
use RuLong\Area\Models\UserAddress;
class CartController extends Controller
{
public function __construct()
{
// $this->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('加入失败');
}
}
}