<?php namespace app\api\controller; use app\admin\model\litestore\Litestoregoodsspec; use app\api\model\GoodsSpec; use app\api\model\SpecValue; use app\common\controller\Api; use think\Db; /** * 购物车 */ class Cart extends Api { protected $noNeedLogin = ['']; 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() { $sku_id = $this->request->post('sku_id'); $goods_id = $this->request->post('goods_id'); $number = $this->request->post('number'); if (!is_numeric($sku_id) || !is_numeric($goods_id) || !is_numeric($number)) $this->error('参数不合法'); $category_id = (new \app\api\model\Goods())->where('goods_id', $goods_id)->value('category_id'); $where = [ 'goods_id' => $goods_id, 'sku_id' => $sku_id, 'user_id' => $this->auth->id, 'category_id' => $category_id, ]; $model = new \app\api\model\Cart(); $cart = $model->where($where)->find(); if ($number == 0) { if (empty($cart)) { $this->error('购物车不存在'); } $model->where('id', $cart['id'])->delete(); } $spec_sku = new Litestoregoodsspec(); $spec_info = $spec_sku->where('goods_spec_id', $sku_id)->find(); if ($cart) { if ( $number+ $cart['number'] < $spec_info['stock_num']) { $this->error('库存不足'); } $cart->setInc('number', $number); } else { if ($spec_info['stock_num'] < $number) { $this->error('库存不足'); } $data['number'] = $number; $model->isUpdate(false)->save($data); } $this->success('SUCCESS'); } /** * @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('参数不可为空'); $ids = explode(',', $ids); foreach ($ids as $key => $value) { if (!is_numeric($value)) $this->error('参数不合法'); } $model = new \app\api\model\Cart(); $model->whereIn('id', $ids)->delete(); $this->success('SUCCESS'); } /** * @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() { $id = $this->request->post('id'); $number = $this->request->post('number'); if (!is_numeric($id) || !is_numeric($number)) $this->error('参数不合法'); $model = new \app\api\model\Cart(); $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); $this->success('SUCCESS'); } /** * @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() { $id = $this->request->post('id'); $number = $this->request->post('number'); if (!is_numeric($id) || !is_numeric($number)) $this->error('参数不合法'); $model = new \app\api\model\Cart(); if ($model->where('id', $id)->value('number') == 1) { $this->error('购物车数量不可再减少'); } else { $model->where('id', $id)->setDec('number', $number); } $this->success('SUCCESS'); } /** * @ApiTitle (购物车列表) * @ApiMethod (POST) * @ApiHeaders (name=token, type=string, required=true, description="请求的Token") * @ApiReturn ({ 'code':'1', 'msg':'SUCCESS' 'data' { "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" 规格名 } } }) */ public function cartList() { $model = new \app\api\model\Cart(); $list = $model ->with(['goods', 'sku']) ->where('user_id', $this->auth->id) ->order('createtime desc') ->select(); 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']); } $list = collection($list)->toArray(); 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) : ''; $val['sku']['sku_name'] = $skuname; } $this->success('SUCCESS', $list); } /** * @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', 'msg':'购物车页面价格' 'data': "price": "37574.00" 总价 }) */ public function priceCalculation() { $json = $this->request->param('data_json'); if (!$json) $this->error('data_json参数不能为空'); // $json = '[{"goods_id":22,"goods_sku_id":106,"number":2},{"goods_id":23,"goods_sku_id":66,"number":2}]'; $json = str_replace('"', '"', $json); $data = json_decode($json, true); $goodsmodel = new \app\api\model\Goods(); $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'])) { $this->error('参数不合法'); } $goods = $goodsmodel->where('goods_id', $value['goods_id'])->field('goods_id,goods_name,image,spec_type')->find(); if (!$goods) $this->error('商品不存在'); $sku = $skumodel->where('goods_spec_id', $value['goods_sku_id']) ->field('goods_spec_id,spec_sku_id,goods_price')->find(); if (!$sku) $this->error('商品规格不存在'); $sum_price = bcadd($sum_price, bcmul($sku['goods_price'], $value['number'], 2), 2); } $this->success('购物车页面价格', ['price' => $sum_price]); } }