You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

297 lines
7.9 KiB

<?php
namespace app\mall\controller\api;
use app\mall\model\MallCart;
use app\mall\model\MallPool;
use app\mall\model\MallProduct;
class Cart extends Base
{
/**
* 获取购物车种类数量
* @date 2021-03-01
*/
public function getCartNumber()
{
$param = input('post.');
$cart_model = new MallCart();
//获取购物车种类数量
$cart_number = $cart_model->getOneData([
['user_id', '=', USER_ID]
], 'count(id)');
return sendSuccessMessage([
'cart_number' => $cart_number
]);
}
/**
* 获取用户购物车现有有效和无效产品列表
* @date 2021-03-01
*/
public function listUserCartEffectiveAndInvalid()
{
$param = input('post.');
$cart_logic = new \app\mall\logic\Cart();
// 更新购物车产品选中状态
$result = $cart_logic -> listUserCartEffectiveAndInvalid();
return sendSuccessMessage($result);
}
/**
* 更新购物车产品选中状态
* @date 2022-08-25
*/
public function updateCartProductSelectedStatus()
{
$param = input('post.');
$cart_logic = new \app\mall\logic\Cart();
// 更新购物车产品选中状态
$result = $cart_logic -> updateCartProductSelectedStatus($param['cart_id'],$param['is_select']);
// 有报错
if($result['code']){
return json($result);
}
return sendSuccessMessage([
'cart_effective' => $result['data']['cart_effective']
]);
}
/**
* 删除购物车选中商品
* @date 2022-10-27
*/
public function deleteChooseProduct()
{
$param = input('post.');
$cart_logic = new \app\mall\logic\Cart();
// 删除购物车选中商品
$result = $cart_logic->deleteChooseProduct();
return json($result);
}
/**
* 全选/取消全选购物车商品
* @date 2021-03-01
*/
public function chooseAllProduct()
{
$param = input('post.');
$cart_model = new MallCart();
$cart_service = new \app\mall\service\Cart();
if ($param['choose'] == 0) {
$data = [
'is_select' => 0,
'update_time' => time()
];
} else if ($param['choose'] == 1) {
$data = [
'is_select' => 1,
'update_time' => time()
];
}
$number = $cart_model -> getNumber([
['user_id', '=', USER_ID]
]);
if(!empty($number)){
$res = $cart_model->where([
['user_id', '=', USER_ID]
])->update($data);
if (!$res) {
return sendErrorMessage(4001, '更新购物车失败');
}
}
// 更新购物车产品选中状态
list($cart_effective, $cart_invalid) = $cart_service->listUserCartEffectiveAndInvalid();
return sendSuccessMessage([
'cart_effective' => $cart_effective
]);
}
/**
* 购物车页新加或更新购物车
* @date 2021-03-01
*/
public function cartNumberChange()
{
$param = input('post.');
$cart_model = new MallCart();
$product_logic = new \app\mall\logic\Product();
$cart_service = new \app\mall\service\Cart();
//获取购物车详情
$cart = $cart_model->getOneData([
['id', '=', $param['cart_id']]
]);
//判断库存是否足够
if ($param['type'] == 1) {
$number = $cart['number'] + 1;
} else if ($param['type'] == 2) {
$number = $cart['number'] - 1;
} else if ($param['type'] == 3) {
$number = $param['number'];
}
$res = $product_logic->isStockEnough($cart['product_id'], $cart['product_sku'], $number);
if ($res['code'] != 0) {
return json($res);
}
//更新购物车数量
$data['id'] = $param['cart_id'];
$data['number'] = $number;
$res = $cart_model->dataUpdate($data);
if (!$res) {
return sendErrorMessage(4001, '更新购物车失败');
}
//获取购物车商品
list($cart_effective, $cart_invalid) = $cart_service->listUserCartEffectiveAndInvalid();;
return sendSuccessMessage([
'cart_effective' => $cart_effective
]);
}
/**
* 商品详情页新加或更新购物车
* @date 2021-03-01
*/
public function cartUpdate()
{
$param = input('post.');
$cart_model = new MallCart();
$product_model = new MallProduct();
$product_logic = new \app\mall\logic\Product();
//获取商品详情
$product = $product_model->getOneData([
['id', '=', $param['product_id']]
]);
//判断库存是否足够
$cart_number = $cart_model->getOneData([
['user_id', '=', USER_ID],
['product_id', '=', $param['product_id']],
['product_sku', '=', $param['sku']],
], 'number');
$cart_number = $cart_number ?? 0;
$number = $param['number'] + $cart_number;//购物车本身的数量+新增数量
$res = $product_logic->isStockEnough($param['product_id'], $param['sku'], $number);
if ($res['code'] != 0) {
return json($res);
}
//加入购物车
$data = [
'uid' => UID,
'user_agent' => USER_AGENT,
'user_id' => USER_ID,
'product_id' => $param['product_id'],
'is_product_spec_open' => $product['is_spec_open'],
'product_sku' => $param['sku'],
'number' => $param['number']
];
//凑单的商品默认选中
if (!empty($param['is_select']) && $param['is_select'] == 1) {
$data['is_select'] = 1;
}
$res = $cart_model->updateCart($data);
if (!$res) {
return sendErrorMessage(4001, '更新购物车失败');
}
//获取购物车种类数量
$cart_number = $cart_model->getOneData([
['user_id', '=', USER_ID]
], 'count(id)');
return sendSuccessMessage([
'cart_number' => $cart_number
], '加入购物车成功');
}
/**
* 清空失效宝贝
* @date 2021-03-01
*/
public function clearInvalidProduct()
{
$cart_model = new MallCart();
$res = $cart_model->deleteInvalidCart();
if (!$res) {
return sendErrorMessage(4001, '清空失效宝贝失败');
}
return sendSuccessMessage([], '清空失效宝贝成功');
}
/**
* 去凑单
* @date 2021-03-01
*/
public function getPool()
{
$param = input('post.');
$pool_model = new MallPool();
$pool = $pool_model->getAllData([
['uid', '=', UID]
], 'limit', 'limit asc')->toArray();
//组合数组
$index = 0;
foreach ($pool as $k => $v) {
$pool[$k]['name'] = ($k == 0 ? 0 : $pool[$k - 1]['limit']) . '-' . $pool[$k]['limit'] . '元';
$pool[$k]['price_min'] = $k == 0 ? 0 : $pool[$k - 1]['limit'];
$pool[$k]['price_max'] = $pool[$k]['limit'];
if ($param['differ_money'] >= $pool[$k]['price_min'] && $param['differ_money'] < $pool[$k]['price_max']) {
$index = $k;
}
if ($k == count($pool) - 1) {
$pool[$k + 1]['name'] = $pool[$k]['limit'] . '元以上';
$pool[$k + 1]['price_min'] = $pool[$k]['limit'];
$pool[$k + 1]['price_max'] = '';
if ($param['differ_money'] >= $pool[$k + 1]['price_min']) {
$index = $k + 1;
}
}
}
return sendSuccessMessage([
'pool' => $pool,
'index' => $index
]);
}
}