0
0

更新代码

This commit is contained in:
2020-08-04 10:09:42 +08:00
parent 6118b5b63b
commit c2ac5d964e
478 changed files with 34410 additions and 0 deletions

View File

@@ -0,0 +1,252 @@
<?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('加入失败');
}
}
}