123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- <?php
- namespace app\api\controller\mall;
- use app\admin\model\GoodsViewFavCart;
- use app\common\controller\Api;
- use app\common\model\Coupon;
- use app\common\model\GoodsSku;
- use app\common\service\CouponService;
- use app\common\service\InstallService;
- use app\common\service\OrderService;
- 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=$this->request->post();
- $goods=$data;
- foreach ($goods as $sku=>$good){
- if(!is_numeric($sku)){
- continue;
- }
- $skuModel=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','egt:0'],
- ]);
- }
- Db::startTrans();
- $skus=GoodsSku::whereIn('id',array_keys($goods))->lock(true)->select();
- foreach ($skus as $sku){
- OrderService::checkSku($sku,$goods[$sku['id']]['num']);
- OrderService::checkGoods($sku['goods']);
- $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'],
- ]);
- }
- GoodsViewFavCart::increment($sku['goods_id'],'cart');
- $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="是否使用优惠券使用传1")
- * @ApiParams (name=coupon_id,description=优惠券id)
- * @ApiParams (name=sku_ids,description=规格数组,对选中的规格进行计算)
- * @ApiReturnParams (name=amount_total,description=总金额)
- * @ApiReturnParams (name=amount_coupon,description=优惠券优惠金额)
- * @ApiReturnParams (name=amount_install,description=安装费)
- * @ApiReturnParams (name=num,description=购买件数)
- * @ApiReturnParams (name=num_install,description=安装件数)
- * @ApiReturnParams (name=goods,description=商品列表)
- */
- public function index(){
- $data=$this->_validate([
- 'coupon_id|优惠券'=>['integer','requireIf:coupon_use,1'],
- 'sku_ids|选择的商品'=>['array'],
- ]);
- if(empty($data['sku_ids'])){
- $data['sku_ids']=null;
- }
- $user=$this->auth->getUser();
- $service=new OrderService();
- $service->setUser($user);
- $service->setCartSkuIds($data['sku_ids']);
- $service->setCouponUse($data['coupon_use']??false);
- $service->setCouponId($data['coupon_id']??0);
- $service->setFrm(2);
- $info=$service->calculate();
- $this->success('',$info);
- }
- }
|