455 lines
17 KiB
PHP
455 lines
17 KiB
PHP
<?php
|
|
|
|
namespace app\frontend\modules\member\controllers;
|
|
|
|
use app\common\components\ApiController;
|
|
use app\common\exceptions\AppException;
|
|
use app\framework\Http\Request;
|
|
use app\frontend\models\Member;
|
|
use \app\frontend\models\MemberCart;
|
|
use app\frontend\modules\member\services\MemberCartService;
|
|
use app\frontend\modules\member\services\MemberService;
|
|
use Yunshop\JdSupply\services\JdOrderValidate;
|
|
use Yunshop\YzSupply\services\YzOrderValidate;
|
|
|
|
/**
|
|
* Created by PhpStorm.
|
|
* Author:
|
|
* Date: 2017/2/23
|
|
* Time: 上午10:17
|
|
*/
|
|
class MemberCartController extends ApiController
|
|
{
|
|
public $transactionActions = ['store'];
|
|
|
|
/**
|
|
* @return \Illuminate\Http\JsonResponse
|
|
* @throws AppException
|
|
*/
|
|
public function index(Request $request, $integrated = null)
|
|
{
|
|
|
|
$member_id = Member::current()->uid;
|
|
|
|
$cartList = app('OrderManager')->make('MemberCart')->carts()->where('member_id', Member::current()->uid)
|
|
->pluginId()
|
|
->with(["hasManyAddress" => function ($query) use ($member_id) {
|
|
return $query->where("uid", $member_id)->where("isdefault", 1);
|
|
}])
|
|
->with(["hasManyMemberAddress" => function ($query) use ($member_id) {
|
|
return $query->where("uid", $member_id)->where("isdefault", 1);
|
|
}])
|
|
->orderBy('created_at', 'desc')
|
|
->get()
|
|
->toArray();
|
|
|
|
foreach ($cartList as $key => $cart) {
|
|
$cartList[$key]['option_str'] = '';
|
|
$cartList[$key]['goods']['thumb'] = yz_tomedia($cart['goods']['thumb']);
|
|
$cartList[$key]['goods']['stock_status'] = 0; //正常
|
|
if (!empty($cart['goods_option'])) {
|
|
//规格数据替换商品数据
|
|
if ($cart['goods_option']['title']) {
|
|
$cartList[$key]['option_str'] = $cart['goods_option']['title'];
|
|
}
|
|
if ($cart['goods_option']['thumb']) {
|
|
$cartList[$key]['goods']['thumb'] = yz_tomedia($cart['goods_option']['thumb']);
|
|
}
|
|
if ($cart['goods_option']['market_price']) {
|
|
$cartList[$key]['goods']['price'] = $cart['goods_option']['product_price'];
|
|
}
|
|
if ($cart['goods_option']['market_price']) {
|
|
$cartList[$key]['goods']['market_price'] = $cart['goods_option']['market_price'];
|
|
}
|
|
|
|
if ($cart['goods']['plugin_id'] != 44 && $cart['goods']['plugin_id'] != 45 && $cart['goods_option']['stock'] <= 0) {
|
|
$cartList[$key]['goods']['stock_status'] = 1; //库存不足
|
|
}
|
|
|
|
} else {
|
|
if ($cart['goods']['plugin_id'] != 44 && $cart['goods']['plugin_id'] != 45 && $cart['goods']['stock'] <= 0) {
|
|
$cartList[$key]['goods']['stock_status'] = 1; //库存不足
|
|
}
|
|
}
|
|
|
|
if ($cart['goods']['plugin_id'] != 44 && $cart['goods']['plugin_id'] != 45 && $cart['goods']['status'] != 1) {
|
|
$cartList[$key]['goods']['stock_status'] = 2; //已下架
|
|
}
|
|
|
|
if ($cart['goods']['plugin_id'] != 44 && $cart['goods']['plugin_id'] != 45 && !empty($cart['goods']['deleted_at'])) {
|
|
$cartList[$key]['goods']['stock_status'] = 3; //已删除
|
|
}
|
|
|
|
if ($cart['goods']['plugin_id'] == 44 && app('plugins')->isEnabled('jd-supply')) {
|
|
|
|
if (!empty($cart['goods_option']) && !empty($cart['has_many_address'])) {
|
|
$cart['has_many_address'][0]['street'] = "";
|
|
$is_street = \Setting::get("shop.trade")['is_street'];
|
|
$member_address = ($is_street == 1) ? $cart['has_many_member_address'][0] : $cart['has_many_address'][0];
|
|
$data = [
|
|
"jd_order_goods" => [
|
|
"goods_id" => $cart['goods']['id'],
|
|
"goods_option_id" => $cart['goods_option']['id'],
|
|
"total" => $cart['total']
|
|
],
|
|
"orderAddress" => $member_address
|
|
];
|
|
|
|
$jd_res = JdOrderValidate::orderValidate2($data);
|
|
|
|
if ($jd_res != 1) {
|
|
$cartList[$key]['goods']['stock_status'] = 4; //不存在
|
|
}
|
|
}
|
|
}
|
|
|
|
//芸众供应链
|
|
if ($cart['goods']['plugin_id'] == 120 && app('plugins')->isEnabled('yz-supply')) {
|
|
if (!empty($cart['goods_option']) && !empty($cart['has_many_address'])) {
|
|
$cart['has_many_address'][0]['street'] = "";
|
|
$is_street = \Setting::get("shop.trade")['is_street'];
|
|
$member_address = ($is_street == 1) ? $cart['has_many_member_address'][0] : $cart['has_many_address'][0];
|
|
$data = [
|
|
"yz_order_goods" => [
|
|
"goods_id" => $cart['goods']['id'],
|
|
"goods_option_id" => $cart['goods_option']['id'],
|
|
"total" => $cart['total']
|
|
],
|
|
"orderAddress" => $member_address
|
|
];
|
|
|
|
$yz_res = YzOrderValidate::orderValidate2($data);;
|
|
|
|
if ($yz_res != 1) {
|
|
$cartList[$key]['goods']['stock_status'] = 4; //不存在
|
|
}
|
|
}
|
|
}
|
|
|
|
//unset ($cartList[$key]['goods_option']);
|
|
}
|
|
|
|
//todo 0414 目前先这样改,有人做着购物车优化,优化后在进行修改合并
|
|
if (app('plugins')->isEnabled('point-mall')) {
|
|
$cartList = \Yunshop\PointMall\api\models\PointMallGoodsModel::setCartPointGoods($cartList);
|
|
}
|
|
|
|
if (is_null($integrated)) {
|
|
return $this->successJson('获取列表成功', $cartList);
|
|
} else {
|
|
return show_json(1, $cartList);
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* [batchStore 批量加入购物车]
|
|
* @return [type] [description]
|
|
* @param [type] [goods_id商品id,total添加数量,option_id规格]
|
|
*/
|
|
public function batchStore()
|
|
{
|
|
//商品数据
|
|
$goodsData = request()->input('goods_data');
|
|
|
|
$data = array(
|
|
'member_id' => \YunShop::app()->getMemberId(),
|
|
'uniacid' => \YunShop::app()->uniacid,
|
|
);
|
|
|
|
$errorGoodsId = []; //添加失败的商品id
|
|
$successGoodsId = []; //添加成功的商品id
|
|
|
|
foreach ($goodsData as $key=>$value) {
|
|
|
|
// $this->validate([
|
|
// 'goods_id' => 'required|integer|min:0',
|
|
// 'total' => 'required|integer|min:0',
|
|
// 'option_id' => 'integer|min:0',
|
|
// ]);
|
|
|
|
$data['goods_id'] = $value['goods_id'];
|
|
$data['total'] = $value['total'];
|
|
$data['option_id'] = $value['option_id'];
|
|
|
|
$hasGoodsModel = app('OrderManager')->make('MemberCart')->hasGoodsToMemberCart($data);
|
|
// $cart_id = $hasGoodsModel['id'];
|
|
|
|
if ($hasGoodsModel) {
|
|
$num = intval($value['total']) ?: 1;
|
|
$hasGoodsModel->total = $hasGoodsModel->total + $num;
|
|
$hasGoodsModel->validate();
|
|
|
|
if ($hasGoodsModel->update()) {
|
|
$successGoodsId[] = $value['goods_id'];
|
|
continue;
|
|
}
|
|
$errorGoodsId[] = $value['goods_id'];
|
|
|
|
} else {
|
|
|
|
$cartModel = app('OrderManager')->make('MemberCart', $data);
|
|
$cartModel->validate();
|
|
$validator = $cartModel->validator($cartModel->getAttributes());
|
|
event(new \app\common\events\cart\AddCartEvent($cartModel->getAttributes()));
|
|
|
|
if ($validator->fails()) {
|
|
$errorGoodsId[] = $value['goods_id'];
|
|
} elseif ($cartModel->save()) {
|
|
event(new \app\common\events\cart\AddCartEvent($cartModel));
|
|
$successGoodsId[] = $value['goods_id'];
|
|
} else {
|
|
$errorGoodsId[] = $value['goods_id'];
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $this->successJson("添加成功",['success'=>$successGoodsId,'error'=>$errorGoodsId]);
|
|
}
|
|
|
|
/**
|
|
* Add member cart
|
|
*/
|
|
public function store()
|
|
{
|
|
event(new \app\common\events\cart\BeforeSaveCartVerify(request()->input('goods_id'), request()->input('total'), 'goodsCart'));
|
|
|
|
$this->validate([
|
|
'goods_id' => 'required|integer|min:0',
|
|
'total' => 'required|integer|min:0',
|
|
'option_id' => 'integer|min:0',
|
|
]);
|
|
$data = array(
|
|
'member_id' => \YunShop::app()->getMemberId(),
|
|
'uniacid' => \YunShop::app()->uniacid,
|
|
'goods_id' => request()->input('goods_id'),
|
|
'total' => request()->input('total'),
|
|
'option_id' => (int)request()->input('option_id', 0),
|
|
);
|
|
/**
|
|
* @var MemberCart $cartModel
|
|
*/
|
|
$cartModel = app('OrderManager')->make('MemberCart', $data);
|
|
// dd($cartModel);
|
|
//验证商品是否存在购物车,存在则修改数量
|
|
$hasGoodsModel = app('OrderManager')->make('MemberCart')->hasGoodsToMemberCart($data);
|
|
$cart_id = $hasGoodsModel['id'];
|
|
//dd($cart_id);
|
|
|
|
|
|
//todo 商品权限最低购买数量处理
|
|
$min_buy_limit = 0;
|
|
$goodsPrivilege = $cartModel->goods->hasOnePrivilege;
|
|
//商品有购物权限并且设置了起购数量
|
|
if (isset($goodsPrivilege) && $goodsPrivilege->min_buy_limit) {
|
|
//有设置按规格控制购买权限
|
|
if ($cartModel->isOption() && $goodsPrivilege->option_id_array) {
|
|
//并且该规格再限制里面
|
|
if (in_array($cartModel->option_id, $goodsPrivilege->option_id_array)) {
|
|
$min_buy_limit = $goodsPrivilege->min_buy_limit;
|
|
}
|
|
} else {
|
|
$min_buy_limit = $goodsPrivilege->min_buy_limit;
|
|
}
|
|
$cartModel->total = max( $cartModel->total, $min_buy_limit);
|
|
}
|
|
|
|
|
|
if ($hasGoodsModel) {
|
|
$num = intval(request()->input('total')) ?: 1;
|
|
$hasGoodsModel->total = max($hasGoodsModel->total + $num, $min_buy_limit);
|
|
|
|
$hasGoodsModel->validate();
|
|
|
|
if ($hasGoodsModel->update()) {
|
|
return $this->successJson('添加购物车成功', [
|
|
'cart_id' => $cart_id,
|
|
'cart_num' => \app\frontend\models\MemberCart::getCartNum(\YunShop::app()->getMemberId()),
|
|
]);
|
|
}
|
|
return $this->errorJson('数据更新失败,请重试!');
|
|
}
|
|
$cartModel->validate();
|
|
|
|
$validator = $cartModel->validator($cartModel->getAttributes());
|
|
event(new \app\common\events\cart\AddCartEvent($cartModel->getAttributes()));
|
|
if ($validator->fails()) {
|
|
return $this->errorJson("数据验证失败,添加购物车失败!!!");
|
|
} else {
|
|
if ($cartModel->save()) {
|
|
event(new \app\common\events\cart\AddCartEvent($cartModel));
|
|
return $this->successJson("添加购物车成功", [
|
|
'cart_id' => $cartModel->id,
|
|
'cart_num' => \app\frontend\models\MemberCart::getCartNum(\YunShop::app()->getMemberId()),
|
|
]);
|
|
} else {
|
|
return $this->errorJson("写入出错,添加购物车失败!!!");
|
|
}
|
|
}
|
|
return $this->errorJson("接收数据出错,添加购物车失败!");
|
|
}
|
|
|
|
/*
|
|
* 修改购物车商品数量
|
|
* */
|
|
public function updateNum()
|
|
{
|
|
$cartId = request()->input('id');
|
|
$num = request()->input('num');
|
|
|
|
if (is_null($cartId)) {
|
|
$cartId = $this->getMemberCarId();
|
|
}
|
|
|
|
if ($cartId && $num) {
|
|
/**
|
|
* @var MemberCart $cartModel
|
|
*/
|
|
$cartModel = app('OrderManager')->make('MemberCart')->find($cartId);
|
|
if ($cartModel) {
|
|
|
|
//todo 商品权限最低购买数量处理
|
|
$min_buy_limit = 0;
|
|
$goodsPrivilege = $cartModel->goods->hasOnePrivilege;
|
|
//商品有购物权限并且设置了起购数量
|
|
if (isset($goodsPrivilege) && $goodsPrivilege->min_buy_limit) {
|
|
//有设置按规格控制购买权限
|
|
if ($cartModel->isOption() && $goodsPrivilege->option_id_array) {
|
|
//并且该规格再限制里面
|
|
if (in_array($cartModel->option_id, $goodsPrivilege->option_id_array)) {
|
|
$min_buy_limit = $goodsPrivilege->min_buy_limit;
|
|
}
|
|
} else {
|
|
$min_buy_limit = $goodsPrivilege->min_buy_limit;
|
|
}
|
|
}
|
|
$cartModel->total = $cartModel->total + $num;
|
|
|
|
|
|
if ($cartModel->total < 1 || $cartModel->total < $min_buy_limit) {
|
|
$result = MemberCartService::clearCartByIds([$cartModel->id]);
|
|
if ($result) {
|
|
return $this->successJson('移除购物车成功。');
|
|
}
|
|
}
|
|
$cartModel->validate();
|
|
if ($cartModel->update()) {
|
|
return $this->successJson('修改数量成功');
|
|
}
|
|
}
|
|
}
|
|
|
|
return $this->errorJson('未获取到数据,请重试!');
|
|
}
|
|
|
|
/*
|
|
* 修改购物车商品数量
|
|
* */
|
|
public function updateNumV2()
|
|
{
|
|
$cartId = request()->input('id');
|
|
$num = intval(request()->input('num'));
|
|
|
|
if (is_null($cartId)) {
|
|
$cartId = $this->getMemberCarId();
|
|
}
|
|
|
|
if ($cartId && $num) {
|
|
$cartModel = app('OrderManager')->make('MemberCart')->find($cartId);
|
|
if ($cartModel) {
|
|
|
|
|
|
//todo 商品权限最低购买数量处理
|
|
$min_buy_limit = 0;
|
|
$goodsPrivilege = $cartModel->goods->hasOnePrivilege;
|
|
//商品有购物权限并且设置了起购数量
|
|
if (isset($goodsPrivilege) && $goodsPrivilege->min_buy_limit) {
|
|
//有设置按规格控制购买权限
|
|
if ($cartModel->isOption() && $goodsPrivilege->option_id_array) {
|
|
//并且该规格再限制里面
|
|
if (in_array($cartModel->option_id, $goodsPrivilege->option_id_array)) {
|
|
$min_buy_limit = $goodsPrivilege->min_buy_limit;
|
|
}
|
|
} else {
|
|
$min_buy_limit = $goodsPrivilege->min_buy_limit;
|
|
}
|
|
}
|
|
|
|
$cartModel->total = $num;
|
|
|
|
if ($cartModel->total < 1 || $cartModel->total < $min_buy_limit) {
|
|
$result = MemberCartService::clearCartByIds([$cartModel->id]);
|
|
if ($result) {
|
|
return $this->successJson('移除购物车成功。');
|
|
}
|
|
}
|
|
$cartModel->validate();
|
|
if ($cartModel->update()) {
|
|
return $this->successJson('修改数量成功');
|
|
}
|
|
}
|
|
}
|
|
|
|
return $this->errorJson('未获取到数据,请重试!');
|
|
}
|
|
|
|
/*
|
|
* Delete member cart
|
|
**/
|
|
public function destroy()
|
|
{
|
|
|
|
$ids = explode(',', request()->input('ids'));
|
|
|
|
if (is_null(request()->input('ids'))) {
|
|
$ids = $this->getMemberCarId();
|
|
}
|
|
$result = MemberCartService::clearCartByIds($ids);
|
|
|
|
if ($result) {
|
|
return $this->successJson('移除购物车成功。');
|
|
}
|
|
throw new AppException('写入出错,移除购物车失败!');
|
|
|
|
|
|
}
|
|
|
|
public function getMemberCart()
|
|
{
|
|
$request = Request();
|
|
$this->dataIntegrated($this->index($request, true), 'cart');
|
|
if (app('plugins')->isEnabled('lease-toy')) {
|
|
$this->dataIntegrated((new \Yunshop\LeaseToy\api\LeaseToyController())->whetherEnabled($request, true), 'is_lease');
|
|
$this->dataIntegrated((new \Yunshop\LeaseToy\api\MemberCartController())->index($request, true), 'lease_cart');
|
|
$this->dataIntegrated((new \Yunshop\LeaseToy\api\HeatRentController())->index($request, true), 'hent_rent');
|
|
}
|
|
return $this->successJson('', $this->apiData);
|
|
}
|
|
|
|
private function getMemberCarId()
|
|
{
|
|
$cartId = null;
|
|
$memberId = \YunShop::app()->getMemberId();
|
|
$goods_id = request()->input('goods_id');
|
|
|
|
if (!is_null($memberId) && !is_null($goods_id)) {
|
|
$cartList = app('OrderManager')->make('MemberCart')->carts()->where('member_id', $memberId)
|
|
->orderBy('created_at', 'desc')
|
|
->get();
|
|
|
|
if (!$cartList->isEmpty()) {
|
|
collect($cartList)->map(function ($item, $key) use ($goods_id, &$cartId) {
|
|
|
|
if ($item->goods_id == $goods_id) {
|
|
$cartId = $item->id;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
return $cartId;
|
|
}
|
|
}
|