审查视图

application/api/controller/Cart.php 9.3 KB
李忠强 authored
1 2 3 4 5 6
<?php


namespace app\api\controller;

7
use app\admin\model\litestore\Litestoregoodsspec;
李忠强 authored
8 9
use app\api\model\GoodsSpec;
use app\api\model\SpecValue;
李忠强 authored
10
use app\common\controller\Api;
李忠强 authored
11
use think\Db;
李忠强 authored
12 13 14 15 16 17

/**
 * 购物车
 */
class Cart extends Api
{
18
    protected $noNeedLogin = [''];
李忠强 authored
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
    protected $noNeedRight = ['*'];

    /**
     * @ApiTitle    (加入购物车)
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="sku_id", type="integer", required=true, description="规格id")
     * @ApiParams   (name="goods_id", type="integer", required=true, description="商品id")
     * @ApiParams   (name="number", type="integer", required=true, description="购买数量")
     * @ApiReturn   ({
    'code':'1',
    'msg':'SUCCESS'
    })
     */
    public function addCart()
    {
SHW\戥岁。。 authored
35 36 37
        $sku_id   = $this->request->param('sku_id');
        $goods_id = $this->request->param('goods_id');
        $number   = $this->request->param('number');
李忠强 authored
38
SHW\戥岁。。 authored
39
//        if (!is_numeric($sku_id) || !is_numeric($goods_id) || !is_numeric($number)) $this->error('参数不合法');
40
        $category_id = (new \app\api\model\Goods())->where('goods_id', $goods_id)->value('category_id');
SHW\戥岁。。 authored
41
        $where       = [
42 43
            'goods_id'    => $goods_id,
            'sku_id'      => $sku_id,
44 45
            'user_id'     => $this->auth->id,
            'category_id' => $category_id,
李忠强 authored
46
        ];
47
李忠强 authored
48
        $model = new \app\api\model\Cart();
49
        $cart  = $model->where($where)->find();
SHW\戥岁。。 authored
50
        if ($number == 0) {
51
            if (empty($cart)) {
SHW\戥岁。。 authored
52 53
                $this->error('购物车不存在');
            }
54
            $model->where('id', $cart['id'])->delete();
SHW\戥岁。。 authored
55
        }
56 57
        $spec_sku  = new Litestoregoodsspec();
        $spec_info = $spec_sku->where('goods_spec_id', $sku_id)->find();
58
        if ($cart) {
59
            if ($number > $spec_info['stock_num']) {
60
                $this->error('库存不足');
61 62
            } else {
                $model->where($where)->update(['number'=>$number]);
63
            }
64
        } else {
SHW\戥岁。。 authored
65
            if ($number > $spec_info['stock_num']) {
66
                $this->error('库存不足');
67
            } else {
SHW\戥岁。。 authored
68 69
                $where['number'] = $number;
                $model->isUpdate(false)->save($where);
70
            }
71
李忠强 authored
72
        }
李忠强 authored
73 74 75
        $this->success('SUCCESS');
    }
李忠强 authored
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90

    /**
     * @ApiTitle    (删除购物车)
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="cart_ids", type="integer", required=true, description="购物车id 逗号隔开")
     * @ApiReturn   ({
    'code':'1',
    'msg':'SUCCESS'
    })
     */
    public function delCart()
    {
        $ids = $this->request->post('cart_ids');
        if (!$ids) $this->error('参数不可为空');
91 92
        $ids = explode(',', $ids);
        foreach ($ids as $key => $value) {
李忠强 authored
93 94 95
            if (!is_numeric($value)) $this->error('参数不合法');
        }
        $model = new \app\api\model\Cart();
96
        $model->whereIn('id', $ids)->delete();
李忠强 authored
97 98 99
        $this->success('SUCCESS');
    }
李忠强 authored
100 101 102 103 104 105 106 107 108 109 110 111 112
    /**
     * @ApiTitle    (增加购物车数量)
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="id", type="integer", required=true, description="购物车id")
     * @ApiParams   (name="number", type="integer", required=true, description="增加数量")
     * @ApiReturn   ({
    'code':'1',
    'msg':'SUCCESS'
    })
     */
    public function addCartNumber()
    {
113
        $id     = $this->request->post('id');
李忠强 authored
114
        $number = $this->request->post('number');
115
        if (!is_numeric($id) || !is_numeric($number)) $this->error('参数不合法');
116
李忠强 authored
117
        $model = new \app\api\model\Cart();
118 119 120
        $order = $model->with('sku')->where('id', $id)->find();
        if ($number + $order['number'] > $order['sku']['stock_num']) $this->error('已达到最大库存,请勿重复提交');
        $model->where('id', $id)->setInc('number', $number);
李忠强 authored
121 122 123 124
        $this->success('SUCCESS');
    }

    /**
李忠强 authored
125 126 127 128 129 130 131 132 133 134 135 136
     * @ApiTitle    (减少购物车数量)
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="id", type="integer", required=true, description="购物车id")
     * @ApiParams   (name="number", type="integer", required=true, description="减少数量")
     * @ApiReturn   ({
    'code':'1',
    'msg':'SUCCESS'
    })
     */
    public function subCartNumber()
    {
137
        $id     = $this->request->post('id');
李忠强 authored
138 139
        $number = $this->request->post('number');
140
        if (!is_numeric($id) || !is_numeric($number)) $this->error('参数不合法');
李忠强 authored
141 142

        $model = new \app\api\model\Cart();
143
        if ($model->where('id', $id)->value('number') == 1) {
李忠强 authored
144
            $this->error('购物车数量不可再减少');
145 146
        } else {
            $model->where('id', $id)->setDec('number', $number);
李忠强 authored
147 148 149 150 151
        }
        $this->success('SUCCESS');
    }

    /**
李忠强 authored
152 153 154 155 156 157
     * @ApiTitle    (购物车列表)
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiReturn   ({
    'code':'1',
    'msg':'SUCCESS'
李忠强 authored
158
    'data'
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
    {
    "id": 1, 购车id
    "user_id": 0,
    "goods_id": 21, 商品id
    "sku_id": 125, 规格id
    "number": 10, 购买数量
    "createtime": null,
    "goods": {
    "goods_id": 21,
    "goods_name": "小米Mix3",
    "image_text": "http://temporaryfood.qiniu.broing.cn123132", 封面图
    "images_text": [
    "https://her-family.oss-cn-qingdao.aliyuncs.com/addons_store_uploads/20181105/ffc4440df18661948b9c2d4dd4ae419b.jpg",
    "https://her-family.oss-cn-qingdao.aliyuncs.com/addons_store_uploads/20181105/83bf8f141969a9e3e607a768407fc7e0.jpg",
    "https://her-family.oss-cn-qingdao.aliyuncs.com/addons_store_uploads/20181105/c5d85254fc17b1a1b0e2254470881e59.jpg"
    ],
    "down_image_text": "http://temporaryfood.qiniu.broing.cn/uploads/20220114/f8bb72e2ce3e70f0a9f54e6c0b4a6c14.png",
    "four_image_text": []
    },
    "sku": {
    "goods_spec_id": 125,
    "goods_price": "100.00", 价格
    "spec_sku_id": "40_54",
    "sku_name": "黑色 1" 规格名
    }
    }
李忠强 authored
185 186 187 188 189
    })
     */
    public function cartList()
    {
        $model = new \app\api\model\Cart();
190 191 192
        $list  = $model
            ->with(['goods', 'sku'])
            ->where('user_id', $this->auth->id)
何书鹏 authored
193
            ->order('createtime desc')
李忠强 authored
194
            ->select();
195 196 197
        foreach ($list as $key => $value) {
            $value->getRelation('goods')->visible(['goods_name', 'goods_id']);
            $value->getRelation('sku')->visible(['goods_spec_id', 'goods_price', 'spec_sku_id']);
李忠强 authored
198 199
        }
        $list = collection($list)->toArray();
200 201 202 203
        foreach ($list as $k => &$val) {
            $skuids                 = explode('_', $val['sku']['spec_sku_id']);
            $sku                    = Db::name('litestore_spec_value')->where('id', 'in', $skuids)->column('spec_value');
            $skuname                = !empty($sku) ? implode(' ', $sku) : '';
李忠强 authored
204 205
            $val['sku']['sku_name'] = $skuname;
        }
206
        $this->success('SUCCESS', $list);
李忠强 authored
207
    }
李忠强 authored
208 209 210 211 212 213 214 215 216 217 218 219

    /**
     * @ApiTitle    (价格计算)
     * @ApiSummary ([{goods_id:22 goods_sku_id:106 number:2} {goods_id:23 goods_sku_id:66 number:2}])
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=true, description="请求的Token")
     * @ApiParams   (name="data_json", type="string", required=true, description="下单的商品json数据")
     * @ApiParams   (name="goods_id", type="integer", required=false, description="商品id 此值不传 json数组注释用")
     * @ApiParams   (name="goods_sku_id", type="integer", required=false, description="规格id 此值不传 json数组注释用")
     * @ApiParams   (name="number", type="integer", required=false, description="购买数量 此值不传 json数组注释用")
     * @ApiReturn   ({
    'code':'1',
李忠强 authored
220
    'msg':'购物车页面价格'
李忠强 authored
221 222 223 224 225 226
    'data':
    "price": "37574.00" 总价
    })
     */
    public function priceCalculation()
    {
李忠强 authored
227
        $json = $this->request->param('data_json');
李忠强 authored
228
        if (!$json) $this->error('data_json参数不能为空');
李忠强 authored
229
//        $json = '[{"goods_id":22,"goods_sku_id":106,"number":2},{"goods_id":23,"goods_sku_id":66,"number":2}]';
230 231
        $json       = str_replace('&quot;', '"', $json);
        $data       = json_decode($json, true);
李忠强 authored
232
        $goodsmodel = new \app\api\model\Goods();
233 234 235 236
        $skumodel   = new GoodsSpec();
        $sum_price  = 0; //总价格
        foreach ($data as $key => $value) {
            if (!is_numeric($value['goods_id']) || !is_numeric($value['goods_sku_id']) || !is_numeric($value['number'])) {
李忠强 authored
237 238
                $this->error('参数不合法');
            }
239
            $goods = $goodsmodel->where('goods_id', $value['goods_id'])->field('goods_id,goods_name,image,spec_type')->find();
李忠强 authored
240
            if (!$goods) $this->error('商品不存在');
241
            $sku = $skumodel->where('goods_spec_id', $value['goods_sku_id'])
李忠强 authored
242 243 244
                ->field('goods_spec_id,spec_sku_id,goods_price')->find();
            if (!$sku) $this->error('商品规格不存在');
245
            $sum_price = bcadd($sum_price, bcmul($sku['goods_price'], $value['number'], 2), 2);
李忠强 authored
246
        }
247
        $this->success('购物车页面价格', ['price' => $sum_price]);
李忠强 authored
248
    }
李忠强 authored
249
}