GoodsCart.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. namespace app\api\controller\mall;
  3. use app\common\controller\Api;
  4. use app\common\model\GoodsSku;
  5. use think\Db;
  6. /**
  7. * 商城购物车
  8. * @inheritdoc
  9. */
  10. class GoodsCart extends Api
  11. {
  12. protected $noNeedRight="*";
  13. /**
  14. * 添加到购物车
  15. * @ApiMethod (POST)
  16. * @ApiSummary ("参数:{sku_id:{num:1,num_install:2}},sku_id规格id,num数量,num_install安装数量")
  17. */
  18. public function add(){
  19. $user=$this->auth->getUser();
  20. $data=input();
  21. $goods=$data['goods']??[];
  22. foreach ($goods as $sku=>$good){
  23. GoodsSku::findOrFail($sku);
  24. $good['sku_id']=$sku;
  25. $this->validate($good,[
  26. 'sku_id|规格'=>['require','integer','gt:0'],
  27. 'num|数量'=>['require','integer','gt:0'],
  28. 'num_install|安装'=>['require','integer','gt:0'],
  29. ]);
  30. }
  31. Db::startTrans();
  32. $skus=GoodsSku::whereIn('id',array_keys($goods))->lock(true)->select();
  33. foreach ($skus as $sku){
  34. if($sku['num_sell']+$goods[$sku['id']]['num']>$sku['num_stock']){
  35. $this->error('库存不足');
  36. }
  37. $cart=$user->cart()->where('goods_sku_id',$sku['id'])->find();
  38. if($cart){
  39. $cart['num']=$cart['num']+$goods[$sku['id']]['num'];
  40. $cart['num_install']=$cart['num_install']+$goods[$sku['id']]['num_install'];
  41. $cart->save();
  42. }else{
  43. $user->cart()->save([
  44. 'goods_sku_id'=>$sku['id'],
  45. 'goods_id'=>$sku['goods_id'],
  46. 'num'=>$goods[$sku['id']]['num'],
  47. 'num_install'=>$goods[$sku['id']]['num_install'],
  48. ]);
  49. }
  50. $sku->save();
  51. }
  52. Db::commit();
  53. $this->success();
  54. }
  55. /**
  56. * 删除
  57. * @ApiParams (name=id,description=购物车id)
  58. */
  59. public function del(){
  60. $data=$this->_validate([
  61. 'id'=>['require'],
  62. ]);
  63. $user=$this->auth->getUser();
  64. $user->cart()->where('id',$data['id'])->delete();
  65. $this->success();
  66. }
  67. /**
  68. * 购物车修改
  69. * @ApiParams (name=id,description=购物车id)
  70. * @ApiParams (name=num,description=购买数量)
  71. * @ApiParams (name=num_install,description=安装数量)
  72. */
  73. public function update(){
  74. $data=$this->_validate([
  75. 'id'=>['require'],
  76. 'num|数量'=>['integer','gt:0'],
  77. 'num_install|数量'=>['integer','gt:0'],
  78. ]);
  79. $user=$this->auth->getUser();
  80. $cart=$user->cart()->findOrFail($data['id']);
  81. if(!empty($data['num'])){
  82. $cart['num']=$data['num'];
  83. }
  84. if(!empty($data['num_install'])){
  85. $cart['num_install']=$data['num_install'];
  86. }
  87. $cart->save();
  88. $this->success();
  89. }
  90. /**
  91. * 购物车列表
  92. * @ApiParams (name=coupon_use,description=是否使用优惠券)
  93. * @ApiParams (name=coupon_id,description=优惠券id)
  94. * @ApiReturnParams (name=amount_total,description=总金额)
  95. * @ApiReturnParams (name=amount_coupon,description=优惠券优惠金额)
  96. * @ApiReturnParams (name=num,description=购买件数)
  97. * @ApiReturnParams (name=num_install,description=安装件数)
  98. * @ApiReturnParams (name=goods,description=商品列表)
  99. */
  100. public function index(){
  101. $user=$this->auth->getUser();
  102. $info=[
  103. 'amount_total'=>0,
  104. 'amount_coupon'=>0,
  105. 'num'=>0,
  106. 'num_install'=>0,
  107. 'goods'=>[]
  108. ];
  109. $info['goods']=$user->cart()
  110. ->with(['goods','sku'])
  111. ->select()->toArray();
  112. $info['num']=array_sum(array_column($info['goods'],'num'));
  113. $info['num_install']=array_sum(array_column($info['goods'],'num_install'));
  114. $this->success('',$info);
  115. }
  116. }