Goods.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <?php
  2. namespace app\api\controller\mall;
  3. use app\common\controller\Api;
  4. use app\common\model\Category;
  5. use app\common\model\GoodsSku;
  6. use app\common\validate\KillService;
  7. /**
  8. * 商城商品接口
  9. * @inheritdoc
  10. */
  11. class Goods extends Api
  12. {
  13. protected $noNeedLogin = '*';
  14. protected $noNeedRight = '*';
  15. /**
  16. * 商品列表
  17. * @ApiParams (name=name,description=商品名称)
  18. * @ApiParams (name=page,description=分页)
  19. * @ApiParams (name=limit,description=分页)
  20. */
  21. public function index(){
  22. $data=input();
  23. $map=[];
  24. if(!empty($data['name'])){
  25. $map['name']=['like',"%{$data['name']}%"];
  26. }
  27. $query=\app\common\model\Goods::show()
  28. ->where($map)
  29. ->field('content',true)
  30. ->order('id','desc')
  31. ->paginate($data['limit']??20);
  32. $this->success('',$query);
  33. }
  34. /**
  35. * 商品详情
  36. * @ApiParams (name=id,description=商品ID)
  37. */
  38. public function show(){
  39. $data=$this->_validate([
  40. 'id'=>['require','gt:0'],
  41. ]);
  42. $user=$this->auth->getUser();
  43. $killConfig=KillService::getConfig();
  44. $goods=\app\common\model\Goods::with(['sku','detail','service'])->findOrFail($data['id']);
  45. if($goods['is_kill']==1 && !$killConfig['open']){
  46. $goods['is_kill']=0;
  47. }
  48. $goods['kill_endtime']=$killConfig['endtime'];
  49. $fav=[];
  50. if($user){
  51. foreach ($goods['sku'] as $sku){
  52. $fav[$sku['id']]=$user->favourite()->where('fav_id',$goods['id'])->where('goods_sku_id',$sku['id'])->value('id')?true:false;
  53. }
  54. }
  55. $goods['favourite']=$fav;
  56. $this->success('',$goods);
  57. }
  58. /**
  59. * 推荐商品
  60. * @ApiParams (name=id,description=商品ID)
  61. * @ApiParams (name=limit,description=获取几个)
  62. */
  63. public function recommend(){
  64. $data=$this->_validate([
  65. 'id'=>['require','gt:0'],
  66. ]);
  67. $limit=$data['limit']??10;
  68. $goods=\app\common\model\Goods::findOrFail($data['id']);
  69. $recommend=\app\common\model\Goods::where('category_id',$goods['category_id'])->where('id','<>',$data['id'])->limit($limit)->orderRaw('rand()')->select();
  70. $this->success('',$recommend);
  71. }
  72. /**
  73. * 配件推荐
  74. * @ApiParams (name=id,description=商品ID)
  75. * @ApiParams (name=limit,description=获取几个)
  76. */
  77. public function pz_goods(){
  78. $data=$this->_validate([
  79. 'id'=>['require','gt:0'],
  80. ]);
  81. $limit=$data['limit']??10;
  82. $goods=\app\common\model\Goods::findOrFail($data['id']);
  83. $recommend=\app\common\model\Goods::where('category_id',$goods['category_id'])->with(['sku'])->where('id','<>',$data['id'])->limit($limit)->orderRaw('rand()')->select();
  84. $this->success('',$recommend);
  85. }
  86. /**
  87. * 获取组合搭配
  88. * @ApiParams (name=sku_id,description=商品规格ID)
  89. */
  90. public function bind_goods(){
  91. $data=$this->_validate([
  92. 'sku_id'=>['require','gt:0'],
  93. ]);
  94. $sku=GoodsSku::findOrFail($data['sku_id']);
  95. $binds=$sku->binds()->column('bind_goods_id','bind_goods_sku_id');
  96. $info=[
  97. 'goods'=>[],
  98. 'amount_total'=>$sku['amount']
  99. ];
  100. if($binds){
  101. $info['goods']=\app\common\model\Goods::join('goods_sku','goods_sku.goods_id=goods.id')
  102. ->whereIn('goods_sku.id',array_keys($binds))
  103. ->field(['goods.*','goods_sku.id as sku_id'])
  104. ->select()->toArray();
  105. $info['amount_total']=array_sum(array_column($info['goods'],'amount'));
  106. }
  107. $this->success('',$info);
  108. }
  109. /**
  110. * 获取支架商品
  111. * @ApiParams (name=sku_id,description=规格ID)
  112. * @ApiReturnParams (name=sku_id,description=规格ID,如果直接下单需要)
  113. */
  114. public function zj_goods(){
  115. $data=$this->_validate([
  116. 'sku_id'=>['require','gt:0'],
  117. ]);
  118. $sku=GoodsSku::findOrFail($data['sku_id']);
  119. $info=[
  120. 'goods'=>[],
  121. 'amount_total'=>$sku['amount'],
  122. ];
  123. $category=Category::where('name','支架')->value('id',0);
  124. $info['goods']=\app\common\model\Goods::where('category_id',$category)
  125. ->order('id','desc')
  126. ->select();
  127. foreach ($info['goods'] as $good){
  128. $good['sku_id']=$good->sku()->value('id');
  129. }
  130. if($info['goods']) {
  131. $info['amount_total'] = bcadd(array_sum(array_column($info['goods']->toArray(), 'amount')), $info['amount_total']);
  132. }
  133. $this->success('',$info);
  134. }
  135. }