dggjimai/application/api/controller/CartController.php

201 lines
7.1 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 =1; //$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' =>1, //$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' => 1,//$goods_num,
'item_value' => $item_value,
'create_time' => $time,
];
$res = $cmodel->insert($data);
}
$cart_num=$cmodel->where(array('user_id'=>$user_id))->count();
return $res ? success($cart_num,'添加成功') : 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']?$param['cart_id']:'0';
if($cart_id=='0'){
return client_error('该购物车商品不存在');
}
$cart_id_list=explode(',',$cart_id);
$cart_ids=array();
foreach ($cart_id_list as $k1 => $v1) {
$cart_ids[] = Crypt::decrypt($v1);
}
if(count($cart_ids)==0){
return client_error('该购物车商品不存在');
}
$res = $cmodel->whereIn('id',$cart_ids)->delete();
$cart_num=$cmodel->where(array('user_id'=>$user_id))->count();
return $res ? success($cart_num,'删除成功') : 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);
$cart_num=$cmodel->where(array('user_id'=>$user_id))->count();
return $res ? success($cart_num,'更新成功') : 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()]);
$cart_num=$cmodel->where(array('user_id'=>$user_id))->count();
return $res ? success($cart_num,'更新成功') : 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);
}
}