189 lines
6.5 KiB
PHP
Executable File
189 lines
6.5 KiB
PHP
Executable File
<?php
|
|
|
|
|
|
namespace app\api\controller;
|
|
|
|
use app\common\model\User;
|
|
use app\common\model\ShopConfig;
|
|
use app\common\model\Cart;
|
|
use app\common\model\Goods;
|
|
use Exception;
|
|
use think\Request;
|
|
use think\response\Json;
|
|
use tools\Crypt;
|
|
|
|
class CartController extends Controller
|
|
{
|
|
/**
|
|
* 添加购物车
|
|
*/
|
|
public function add(Request $request,Cart $cmodel)
|
|
{
|
|
$param = $request->param();
|
|
$user_id = $param['uid']?Crypt::decrypt($param['uid']):'';
|
|
if(!$user_id){
|
|
return unauthorized('请先授权');
|
|
}
|
|
$goods_id = $param['goods_id']?Crypt::decrypt($param['goods_id']):'';
|
|
if(!$goods_id){
|
|
return client_error('该商品不存在');
|
|
}
|
|
$item_value=$param['item_value']??'';
|
|
if(!$item_value){
|
|
return client_error('请选择规格');
|
|
}
|
|
$goods_num=$param['goods_num']??'0';
|
|
if($goods_num=='0'){
|
|
return client_error('购买数量必须大于0');
|
|
}
|
|
$time = time();
|
|
$where = [
|
|
'user_id' => $user_id,
|
|
'goods_id' => $goods_id,
|
|
'item_value' => $item_value,
|
|
];
|
|
$info = Cart::where($where)->find();
|
|
|
|
$cart_num = $param['goods_num'] + (isset($info) ? $info['goods_num'] : 0);
|
|
|
|
if ($cmodel->checkStock($item_value, $cart_num,$goods_id)) {
|
|
return client_error('很抱歉,商品库存不足');
|
|
}
|
|
if ($info) {
|
|
//购物车内已有该商品
|
|
$update_data = [
|
|
'goods_num' => $goods_num + $info['goods_num'],
|
|
'update_time' => $time,
|
|
];
|
|
$res =$cmodel
|
|
->where('id', $info['id'])
|
|
->update($update_data);
|
|
} else {
|
|
//新增购物车记录
|
|
$data = [
|
|
'user_id' => $user_id,
|
|
'goods_id' => $goods_id,
|
|
'goods_num' => $goods_num,
|
|
'item_value' => $item_value,
|
|
'create_time' => $time,
|
|
];
|
|
$res = $cmodel->insert($data);
|
|
}
|
|
return $res ? success('','添加成功') : client_error('添加失败');
|
|
}
|
|
|
|
//删除购物车
|
|
public function del(Request $request,Cart $cmodel)
|
|
{
|
|
$param = $request->param();
|
|
$user_id = $param['uid']?Crypt::decrypt($param['uid']):'';
|
|
if(!$user_id){
|
|
return unauthorized('请先授权');
|
|
}
|
|
$cart_id= $param['cart_id']?Crypt::decrypt($param['cart_id']):'0';
|
|
if($cart_id=='0'){
|
|
return client_error('该购物车商品不存在');
|
|
}
|
|
$res = $cmodel->whereIn('id',$cart_id)->delete();
|
|
return $res ? success('','删除成功') : client_error('删除失败');
|
|
}
|
|
|
|
//变动购物车数量
|
|
public function change(Request $request,Cart $cmodel)
|
|
{
|
|
$param = $request->param();
|
|
$user_id = $param['uid']?Crypt::decrypt($param['uid']):'';
|
|
if(!$user_id){
|
|
return unauthorized('请先授权');
|
|
}
|
|
$cart_id=$param['cart_id']?Crypt::decrypt($param['cart_id']):'0';
|
|
if($cart_id=='0'){
|
|
return client_error('该购物车商品不存在');
|
|
}
|
|
$goods_num=$param['goods_num']??'0';
|
|
if($goods_num=='0'){
|
|
return client_error('购买数量必须大于0');
|
|
}
|
|
$cart = $cmodel->where(['id' => $cart_id])->find();
|
|
if ($cmodel->checkStock($cart['item_value'], $goods_num,$cart['goods_id'])) {
|
|
return client_error('很抱歉,商品库存不足');
|
|
}
|
|
$update = [
|
|
'update_time' => time(),
|
|
'goods_num' => $goods_num,
|
|
];
|
|
$res = $cmodel->where(['id' => $cart_id])->update($update);
|
|
return $res ? success('','更新成功') : client_error('更新失败');
|
|
}
|
|
|
|
//购物车选中状态
|
|
public function selected(Request $request,Cart $cmodel)
|
|
{
|
|
$param = $request->param();
|
|
$user_id = $param['uid']?Crypt::decrypt($param['uid']):'';
|
|
if(!$user_id){
|
|
return unauthorized('请先授权');
|
|
}
|
|
$cart_id=$param['cart_id']?Crypt::decrypt($param['cart_id']):'0';
|
|
if($cart_id=='0'){
|
|
return client_error('该购物车商品不存在');
|
|
}
|
|
$res = $cmodel->where(['id' => $cart_id, 'user_id' => $user_id])
|
|
->update(['selected' => $param['selected'], 'update_time' => time()]);
|
|
return $res ? success('','更新成功') : client_error('更新失败');
|
|
}
|
|
|
|
//列表
|
|
public function lists(Request $request,Cart $cmodel)
|
|
{
|
|
$param = $request->param();
|
|
$user_id = $param['uid']?Crypt::decrypt($param['uid']):'';
|
|
if(!$user_id){
|
|
return unauthorized('请先授权');
|
|
}
|
|
$carts =$cmodel
|
|
->alias('c')
|
|
->field("mi.thumb_image as img,g.name,g.price,g.id as goods_id,gb.name as brand_name,c.goods_num,c.selected,c.id as cart_id,item_value")
|
|
->join('goods g', 'g.id = c.goods_id')
|
|
->join('goods_brand gb', 'gb.id= g.brand_id')
|
|
->join('mall_image mi', 'mi.union_id= c.goods_id and is_cover=1 and mi.type=1', 'LEFT')
|
|
->where('c.user_id', $user_id)
|
|
->order('c.create_time desc')
|
|
->select();
|
|
$goods_num = 0;
|
|
$total = 0;
|
|
$lists = [];
|
|
foreach ($carts as $k1 => $cart) {
|
|
$cart['goods_id'] = Crypt::encrypt($cart['goods_id']);
|
|
$cart['cart_id'] =Crypt::encrypt($cart['cart_id']);
|
|
$cart['img'] = $this->img_url.$cart['img'];
|
|
$cart['sub_price'] = 0;
|
|
if ($cart['selected'] ==1) {
|
|
$goods_num += $cart['goods_num'];
|
|
$total += $cart['price'] * $cart['goods_num'];
|
|
$cart['sub_price'] = round($cart['price'] * $cart['goods_num'], 2);
|
|
}
|
|
$cart['selected'] = intval($cart['selected']);
|
|
$lists[] = $cart;
|
|
}
|
|
$data=[
|
|
'lists' => $lists,
|
|
'total_amount' => round($total, 2),
|
|
'total_num' => $goods_num,
|
|
];
|
|
return success($data);
|
|
}
|
|
|
|
//获取购物车数量
|
|
public function cartnum(Request $request,Cart $cmodel)
|
|
{
|
|
$param = $request->param();
|
|
$user_id = $param['uid']?Crypt::decrypt($param['uid']):'';
|
|
if(!$user_id){
|
|
return unauthorized('请先授权');
|
|
}
|
|
$num = $cmodel->where('user_id', $user_id)->sum('goods_num');
|
|
$data=['num' => $num ?? 0];
|
|
return success($data);
|
|
}
|
|
} |