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); } }