verify_sign(); // 验证参数 $request->scene('get_list')->validate(); // 检查登录 $uid = $this->getUid(); // 获取客户信息 $custom = $uid ? $Custom->getOne($uid) : []; // 接收参数 $name = request('name',''); $limit = request('limit',10); $cityId = empty($custom['city_id']) ? 0 : $custom['city_id']; // 显示 $map = [['status','=','0'],['stock','>',0]]; // 分类ID if( $name ) $map[] = ['name','like','%'.$name.'%']; // 是否有城市 $wherIn = empty($custom['city_id']) ? [1] : [1,$custom['city_id']]; // 获取分页信息 $Paginator = $Model->query() ->join('product_city','product_city.product_id','=','product.id') ->where($map) ->whereIn('product_city.city_id',$wherIn) ->groupBy('product_id') ->orderBy('product.sort') ->orderBy('product.id') ->paginate($limit,['product.id','product.sort','product.name','product.tag_scope','product.tag_exclude','product.thumb','product.spec','product.price','product.market_price','product.stock']); // 获取数据 $data['total'] = $Paginator->total(); $data['current_page'] = $Paginator->currentPage(); $data['per_page'] = $Paginator->perPage(); $data['last_page'] = $Paginator->lastPage(); $data['data'] = $Paginator->items(); //产品促销活动 $productIds = array_column($Paginator->items(),'id'); $time = time(); $where = [ ['promo.status','=','0'], ['promo.start_time','<=',$time], ['promo.end_time','>=',$time], ['promo_product.status','=',0], ]; // 查询促销活动 $promoList = PromoProduct::query() ->join('promo','promo.id','=','promo_product.promo_id') ->where($where) ->whereIn('promo_product.product_id',$productIds) ->select('promo.*','promo_product.product_id','promo_product.id as promo_product_id') ->get() ->toArray(); // 查询促销活动 if ($promoList) $promoList = array_column($promoList,NULL,'product_id'); // 查询用户标签 $tags = $custom ? $WeiBanTags->getListByWeibanExtid($custom['weiban_extid']) : []; $tagsList = array_column($tags,'name'); // 处理请求 foreach ( $data['data'] as $key => $value ) { // 判断是不是可以参与 if( $value['tag_scope'] ) { // 解析数组 $value['tag_scope'] = explode(',',$value['tag_scope']); // 如果没有交集,不在参与范围内 if( !array_intersect($value['tag_scope'],$tagsList) ) { unset($data['data'][$key]); continue; } } // 判断是不是可以参与 if( $value['tag_exclude'] ) { // 解析数组 $value['tag_exclude'] = explode(',',$value['tag_exclude']); // 如果有交集,在排除范围内 if( array_intersect($value['tag_exclude'],$tagsList) ) { unset($data['data'][$key]); continue; } } // 处理数据 $value['thumb'] = path_compat($value['thumb']); $value['regiment_active_id'] = null; $value['regiment_title'] = ''; // 查询产品拼团信息 $regiment = $RegimentActive::query()->where([['status','=',1],['start_time','<=',$time],['end_time','>=',$time],['product_id','=',$value['id']]])->first(['id as active_id','number','automatic']); // 如果有拼团信息 if ( $regiment ) { $value['regiment_active_id']= $regiment['id']; $value['regiment_title'] = $regiment['automatic'] == 1 ? '多人团' : $regiment['number'].'人团'; } if ($promoList && $cityId){ if (isset($promoList[$value['id']])){ $promoInfo = $promoList[$value['id']]; $promoTitle = ''; if ($promoInfo['rebate_type'] == 1){ $promoTitle = "满减"; }elseif ($promoInfo['rebate_type'] == 2){ $promoTitle .= "满折"; }elseif ($promoInfo['rebate_type'] == 3){ $promoTitle .= "满赠"; } $promoInfoCity = []; if ($promoInfo['city_ids']){ $promoInfoCity = explode(',',$promoInfo['city_ids']); } // 判断是不是可以参与 if (!$promoInfoCity || in_array($cityId,$promoInfoCity)){ if( $promoInfo['tag_scope']) { // 解析数组 $promoInfo['tag_scope'] = explode(',',$promoInfo['tag_scope']); // 标签范围限定时,默认不能参与 $allowJoin = 0; // 判断标签是不是存在 if ($tags){ foreach ($tags as $v) { // 标签范围内,允许参加 if( in_array($v['name'],$promoInfo['tag_scope']) ) $allowJoin = 1; } // 在范围 if( $allowJoin ) { $value['promo_title'] = $promoTitle; } } }else{ $value['promo_title'] = $promoTitle; } } } } // 重组数据 $data['data'][$key] = $value; } // 数据重组 $data['data'] = array_values($data['data']); // 返回结果 return json_send(['code'=>'success','msg'=>'获取成功','data'=>$data]); } /** * 获取产品列表 /api/product/get_detail * * @param int $id 产品id * * */ public function get_detail(Request $request, Model $Model, ProductPhoto $ProductPhoto, Business $Business, ProductAttr $ProductAttr, ProductSpec $ProductSpec, ProductSkus $ProductSkus, RegimentActive $RegimentActive, Regiment $Regiment, Custom $Custom, WeiBanTags $WeiBanTags, PromoProduct $PromoProduct){ // 接口验签 // $this->verify_sign(); // 验证参数 $request->scene('get_detail')->validate(); // 检查登录 $uid = $this->checkLogin(); // 获取客户信息 $custom = $uid ? $Custom->getOne($uid) : []; // 接收参数 $id = request('id',0); // 显示 $map[] = ['status','=','0']; // 查询 $data = $Model->query()->where($map)->find($id,['id','name','thumb','stock','spec','poster','price','business_id','market_price']); // 如果没有数据 if( !$data ) return json_send(['code'=>'error','msg'=>'产品已下架','data'=>['error'=>'产品已下架或不存在']]); // 转数组 $data = $data->toArray(); // 处理数据 $data['thumb'] = path_compat($data['thumb']); $data['poster'] = $data['poster'] ? path_compat($data['poster']) : ''; $data['description'] = $Model->getDesc($id); $data['business_info'] = $Business->getOne($data['business_id']); $data['photo_list'] = $ProductPhoto->getListByProductId($id); // 缩略图处理 foreach ($data['photo_list'] as $key => $value) { $value['thumb'] = path_compat($value['thumb']); $data['photo_list'][$key] = $value; } // 主图追加进去 if( $data['photo_list'] ) array_unshift($data['photo_list'],['id'=>0,'sort'=>0,'thumb'=>$data['thumb']]); // 获取产品属性 $attr = $ProductAttr->getListByProductId($id); // 规格属性 $specAttr = []; // 获取数据 foreach ($attr as $value) { // 默认未选中 $value['active'] = 0; $specAttr[$value['spec_id']]['spec_id'] = $value['spec_id']; $specAttr[$value['spec_id']]['spec_name'] = $ProductSpec->getOne($value['spec_id'],'name'); $specAttr[$value['spec_id']]['attr_list'][] = $value; } // 获取规格详情数据 $data['product_attr'] = array_values($specAttr); // 获取SKU数据 $data['product_sku'] = $ProductSkus->getListByProductId($id); // 获取数据 foreach ($data['product_sku'] as $key=>$value) { // 默认未选中 $value['sku_thumb'] = $value['sku_thumb'] ? path_compat($value['sku_thumb']) : ''; $data['product_sku'][$key]= $value; } // 手机号 if( isset($data['business_info']['phone']) ) unset($data['business_info']['phone']); if( isset($data['business_info']['logopic']) ) $data['business_info']['logopic'] = path_compat($data['business_info']['logopic']); //拼团数据 $time = time(); $regimentWhere = [ ['status','=',1], ['start_time','<=',$time], ['end_time','>=',$time], ['product_id','=',$data['id']] ]; $regimentActive = $RegimentActive::query() ->where($regimentWhere) ->first(); $data['regiment_list'] = []; $data['automatic_info'] = []; if ( $regimentActive ){ $data['regiment_number'] = $regimentActive['number']; $data['regiment_active_id'] = $regimentActive['id']; $data['regiment_price'] = $regimentActive['regiment_price']; $data['regiment_quota'] = $regimentActive['quota']; $data['regiment_active'] = $regimentActive; $data['automatic_info'] = []; if ($regimentActive['automatic'] == 1){ $automaticInfo = $Regiment::query()->where([['status','=',0],['active_id','=',$regimentActive['id']],['start_time','<=',$time],['end_time','>=',$time]])->first(); if ($automaticInfo){ $data['automatic_info'] = $automaticInfo; $data['regiment_type'] = 1; }else{ $data['regiment_type'] = 2; } $data['regiment_title'] = '多人团'; }else{ $data['regiment_title'] = $regimentActive['number'].'人团'; $data['regiment_type'] = 2; $regiment = $Regiment::query() ->join('custom','custom.uid','=','regiment.custom_uid') ->where([['regiment.active_id','=',$data['regiment_active_id']],['regiment.product_id','=',$data['id']],['regiment.status','=',0],['regiment.start_time','<=',$time],['regiment.end_time','>=',$time]]) ->select(['regiment.*','custom.username','custom.userpic']) ->get(); if ($regiment){ foreach ($regiment as &$value) { $value['userpic'] = $value['userpic'] ? path_compat($value['userpic']) : ''; $surplusNumber = $data['regiment_number'] - $value['people_number']; if ($surplusNumber > 0){ $value['surplus_number'] = $surplusNumber; }else{ $value['surplus_number'] = 0; } } $data['regiment_list'] = $regiment; } } }else{ $data['regiment_active_id'] = null; $data['regiment_type'] = 0; } // 查询用户标签 $tags = []; $cityId = ''; if ($custom){ $tags = $WeiBanTags->getListByWeibanExtid($custom['weiban_extid']); $cityId = $custom['city_id']; } //促销活动信息 $promoInfo = $PromoProduct->getListById($data['id']); if ($promoInfo && $cityId){ $promoTitle = "满". $promoInfo['std_pay']. "元"; if ($promoInfo['rebate_type'] == 1){ $promoTitle .= "减". $promoInfo['rebate']. "元"; }elseif ($promoInfo['rebate_type'] == 2){ $promoTitle .= "打". $promoInfo['rebate']. "折"; }elseif ($promoInfo['rebate_type'] == 3){ $rebate = (string) PromoRebate::query()->join('product','promo_rebate.product_id','=','product.id')->where([['promo_id','=',$promoInfo['id']]])->value('product.name'); $promoTitle .= "赠送". $rebate; } $promoInfoCity = []; if ($promoInfo['city_ids']){ $promoInfoCity = explode(',',$promoInfo['city_ids']); } // 判断是不是可以参与 if (!$promoInfoCity || in_array($cityId,$promoInfoCity)){ if( $promoInfo['tag_scope']) { // 解析数组 $promoInfo['tag_scope'] = explode(',',$promoInfo['tag_scope']); // 标签范围限定时,默认不能参与 $allowJoin = 0; // 判断标签是不是存在 if ($tags){ foreach ($tags as $v) { // 标签范围内,允许参加 if( in_array($v['name'],$promoInfo['tag_scope']) ) $allowJoin = 1; } // 在范围 if( $allowJoin ) { $data['promo_title'] = $promoTitle; } } }else{ $data['promo_title'] = $promoTitle; } } } // 返回结果 return json_send(['code'=>'success','msg'=>'获取成功','data'=>$data]); } /** * 获取产品列表 /api/product/get_sku * * @param int $id 产品id * * */ public function get_sku(Request $request,ProductAttr $ProductAttr,ProductSpec $ProductSpec,ProductSkus $ProductSkus ){ // 接口验签 // $this->verify_sign(); // 验证参数 $request->scene('get_sku')->validate(); // 检查登录 $uid = $this->checkLogin(); // 接收参数 $id = request('id',0); // 获取产品属性 $attr = $ProductAttr->getListByProductId($id); // 规格属性 $specAttr = []; // 获取数据 foreach ($attr as $value) { // 默认未选中 $value['active'] = 0; $specAttr[$value['spec_id']]['spec_id'] = $value['spec_id']; $specAttr[$value['spec_id']]['spec_name'] = $ProductSpec->getOne($value['spec_id'],'name'); $specAttr[$value['spec_id']]['attr_list'][] = $value; } // 获取规格详情数据 $data['product_attr'] = $specAttr; // 获取SKU数据 $data['product_sku'] = $ProductSkus->getListByProductId($id); // 返回结果 return json_send(['code'=>'success','msg'=>'获取成功','data'=>$data]); } }