123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- <?php
- namespace app\api\controller\mall;
- use app\common\controller\Api;
- use app\common\model\Category;
- use app\common\model\GoodsSku;
- use app\common\validate\KillService;
- /**
- * 商城商品接口
- * @inheritdoc
- */
- class Goods extends Api
- {
- protected $noNeedLogin = '*';
- protected $noNeedRight = '*';
- /**
- * 商品列表
- * @ApiParams (name=name,description=商品名称)
- * @ApiParams (name=page,description=分页)
- * @ApiParams (name=limit,description=分页)
- */
- public function index(){
- $data=input();
- $map=[];
- if(!empty($data['name'])){
- $map['name']=['like',"%{$data['name']}%"];
- }
- $query=\app\common\model\Goods::show()
- ->where($map)
- ->field('content',true)
- ->order('id','desc')
- ->paginate($data['limit']??20);
- $this->success('',$query);
- }
- /**
- * 商品详情
- * @ApiParams (name=id,description=商品ID)
- */
- public function show(){
- $data=$this->_validate([
- 'id'=>['require','gt:0'],
- ]);
- $user=$this->auth->getUser();
- $killConfig=KillService::getConfig();
- $goods=\app\common\model\Goods::with(['sku','detail','service'])->findOrFail($data['id']);
- if($goods['is_kill']==1 && !$killConfig['open']){
- $goods['is_kill']=0;
- }
- $goods['kill_endtime']=$killConfig['endtime'];
- $fav=[];
- if($user){
- foreach ($goods['sku'] as $sku){
- $fav[$sku['id']]=$user->favourite()->where('fav_id',$goods['id'])->where('goods_sku_id',$sku['id'])->value('id')?true:false;
- }
- }
- $goods['favourite']=$fav;
- $this->success('',$goods);
- }
- /**
- * 推荐商品
- * @ApiParams (name=id,description=商品ID)
- * @ApiParams (name=limit,description=获取几个)
- */
- public function recommend(){
- $data=$this->_validate([
- 'id'=>['require','gt:0'],
- ]);
- $limit=$data['limit']??10;
- $goods=\app\common\model\Goods::findOrFail($data['id']);
- $recommend=\app\common\model\Goods::where('category_id',$goods['category_id'])->where('id','<>',$data['id'])->limit($limit)->orderRaw('rand()')->select();
- $this->success('',$recommend);
- }
- /**
- * 配件推荐
- * @ApiParams (name=id,description=商品ID)
- * @ApiParams (name=limit,description=获取几个)
- */
- public function pz_goods(){
- $data=$this->_validate([
- 'id'=>['require','gt:0'],
- ]);
- $limit=$data['limit']??10;
- $goods=\app\common\model\Goods::findOrFail($data['id']);
- $recommend=\app\common\model\Goods::where('category_id',$goods['category_id'])->with(['sku'])->where('id','<>',$data['id'])->limit($limit)->orderRaw('rand()')->select();
- $this->success('',$recommend);
- }
- /**
- * 获取组合搭配
- * @ApiParams (name=sku_id,description=商品规格ID)
- */
- public function bind_goods(){
- $data=$this->_validate([
- 'sku_id'=>['require','gt:0'],
- ]);
- $sku=GoodsSku::findOrFail($data['sku_id']);
- $binds=$sku->binds()->column('bind_goods_id','bind_goods_sku_id');
- $info=[
- 'goods'=>[],
- 'amount_total'=>$sku['amount']
- ];
- if($binds){
- $info['goods']=\app\common\model\Goods::join('goods_sku','goods_sku.goods_id=goods.id')
- ->whereIn('goods_sku.id',array_keys($binds))
- ->field(['goods.*','goods_sku.id as sku_id'])
- ->select()->toArray();
- $info['amount_total']=array_sum(array_column($info['goods'],'amount'));
- }
- $this->success('',$info);
- }
- /**
- * 获取支架商品
- * @ApiParams (name=sku_id,description=规格ID)
- * @ApiReturnParams (name=sku_id,description=规格ID,如果直接下单需要)
- */
- public function zj_goods(){
- $data=$this->_validate([
- 'sku_id'=>['require','gt:0'],
- ]);
- $sku=GoodsSku::findOrFail($data['sku_id']);
- $info=[
- 'goods'=>[],
- 'amount_total'=>$sku['amount'],
- ];
- $category=Category::where('name','支架')->value('id',0);
- $info['goods']=\app\common\model\Goods::where('category_id',$category)
- ->order('id','desc')
- ->select();
- foreach ($info['goods'] as $good){
- $good['sku_id']=$good->sku()->value('id');
- }
- if($info['goods']) {
- $info['amount_total'] = bcadd(array_sum(array_column($info['goods']->toArray(), 'amount')), $info['amount_total']);
- }
- $this->success('',$info);
- }
- }
|