123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- <?php
- namespace app\api\controller\mall;
- use app\common\controller\Api;
- use app\common\model\GoodsSku;
- use think\Db;
- /**
- * 商城购物车
- * @inheritdoc
- */
- class GoodsCart extends Api
- {
- protected $noNeedRight="*";
- /**
- * 添加到购物车
- * @ApiMethod (POST)
- * @ApiSummary ("参数:{sku_id:{num:1,num_install:2}},sku_id规格id,num数量,num_install安装数量")
- */
- public function add(){
- $user=$this->auth->getUser();
- $data=input();
- $goods=$data['goods']??[];
- foreach ($goods as $sku=>$good){
- GoodsSku::findOrFail($sku);
- $good['sku_id']=$sku;
- $this->validate($good,[
- 'sku_id|规格'=>['require','integer','gt:0'],
- 'num|数量'=>['require','integer','gt:0'],
- 'num_install|安装'=>['require','integer','gt:0'],
- ]);
- }
- Db::startTrans();
- $skus=GoodsSku::whereIn('id',array_keys($goods))->lock(true)->select();
- foreach ($skus as $sku){
- if($sku['num_sell']+$goods[$sku['id']]['num']>$sku['num_stock']){
- $this->error('库存不足');
- }
- $cart=$user->cart()->where('goods_sku_id',$sku['id'])->find();
- if($cart){
- $cart['num']=$cart['num']+$goods[$sku['id']]['num'];
- $cart['num_install']=$cart['num_install']+$goods[$sku['id']]['num_install'];
- $cart->save();
- }else{
- $user->cart()->save([
- 'goods_sku_id'=>$sku['id'],
- 'goods_id'=>$sku['goods_id'],
- 'num'=>$goods[$sku['id']]['num'],
- 'num_install'=>$goods[$sku['id']]['num_install'],
- ]);
- }
- $sku->save();
- }
- Db::commit();
- $this->success();
- }
- /**
- * 删除
- * @ApiParams (name=id,description=购物车id)
- */
- public function del(){
- $data=$this->_validate([
- 'id'=>['require'],
- ]);
- $user=$this->auth->getUser();
- $user->cart()->where('id',$data['id'])->delete();
- $this->success();
- }
- /**
- * 购物车修改
- * @ApiParams (name=id,description=购物车id)
- * @ApiParams (name=num,description=购买数量)
- * @ApiParams (name=num_install,description=安装数量)
- */
- public function update(){
- $data=$this->_validate([
- 'id'=>['require'],
- 'num|数量'=>['integer','gt:0'],
- 'num_install|数量'=>['integer','gt:0'],
- ]);
- $user=$this->auth->getUser();
- $cart=$user->cart()->findOrFail($data['id']);
- if(!empty($data['num'])){
- $cart['num']=$data['num'];
- }
- if(!empty($data['num_install'])){
- $cart['num_install']=$data['num_install'];
- }
- $cart->save();
- $this->success();
- }
- /**
- * 购物车列表
- * @ApiParams (name=coupon_use,description=是否使用优惠券)
- * @ApiParams (name=coupon_id,description=优惠券id)
- * @ApiReturnParams (name=amount_total,description=总金额)
- * @ApiReturnParams (name=amount_coupon,description=优惠券优惠金额)
- * @ApiReturnParams (name=num,description=购买件数)
- * @ApiReturnParams (name=num_install,description=安装件数)
- * @ApiReturnParams (name=goods,description=商品列表)
- */
- public function index(){
- $user=$this->auth->getUser();
- $info=[
- 'amount_total'=>0,
- 'amount_coupon'=>0,
- 'num'=>0,
- 'num_install'=>0,
- 'goods'=>[]
- ];
- $info['goods']=$user->cart()
- ->with(['goods','sku'])
- ->select()->toArray();
- $info['num']=array_sum(array_column($info['goods'],'num'));
- $info['num_install']=array_sum(array_column($info['goods'],'num_install'));
- $this->success('',$info);
- }
- }
|