/** * @title 店铺装修--根据分类获取商品列表 * @param source 是 int 来源(1--h5、2--app) * @param type 是 string 店铺类型--首页进去(other)、我的蜂店进去(me) * @param store_id 是 string 店铺id * @param type_id 是 int 分类类型(0-全部、1-平台、2-特色) * @param sort 否 int 排序字段(1销量由高到低、2价格由低到高、3价格由高到低)--不传默认1 * @param keywords 否 string 搜索字段(商品名称) * @param cate_type 是 string 商品所属分类id--格式:13,20,24,16 * @param brand_id 否 string 品牌id--格式:3,4,5,6 * @param page 否 int 页码(不传默认1) * @param pagesize 否 int 每页显示条数(不传默认10) * @example FlagShipShopDecorate.getGoodsListByCate? 调用参数说明:{"method":"FlagShipShopDecorate.getGoodsListByCate","username":"17721355485","check_code":"123456","type_id":"0","sort":"1","keywords":"","cate_type":"1","brand_id":"","page":"1","pagesize":"10","store_id":"115075399495199"} * @return_param_explain 分类入口搜索返回字段说明: select_status:选中状态(1是、2否) img:宫格图片 seascapes:海景图 sell_nums:已卖数量 sku_id:商品属性id sku_no:商品属性编号 title:商品标题 sell_price:零售价 store_id:店铺id is_zero_goods:是否为0元购(1:0元购,0:不是0元购) restriction:限购数量 yuding:是否可预定 market_price:市场价 cost_price:成本价 profit:利润 spec_name:规格名称 activity_info--- activityId:活动编码 activityType:活动类型 productPrice:活动售价 costPrice:成本价 title:活动标题 isAct:是否是活动(true:是、false:不是) >>>foot: current_page:当前页 pagesize:每页显示条数 total_page:总页数 >>>cate_info: id:分类id name:分类名称 list_status:1选中、2未选中 >>>brand_info: id:品牌id brand_name:品牌名称 list_status:1选中、2未选中 * @method POST * @author 邹柯 */ public function getGoodsListByCate($res){ $userId=session('user.user_id'); //商品类型 $type_id=$res['type_id']; if(empty($type_id)){ $type_id=0; } if($type_id !=0 && $type_id !=1 && $type_id !=2){ E('700416'); } $store_id=$res['store_id']; //品牌id $brand_id=$res['brand_id']; //搜索--宝贝名称 $keywords=$res['keywords']; //排序字段(1销量由高到低、2价格由低到高、3价格由高到低) $sort=$res['sort']; if(empty($sort)){ $sort=1; } if(!empty($sort)){ if($sort !=1 && $sort !=2 && $sort !=3){ E('700410'); } } //商品所属分类 $cate_type=$res['cate_type']; if(empty($cate_type)){ $cate_type=0; } //页码 $page = $res['page']; if(empty($page)){ $page=1; } //每页显示条数 $pageSize = $res['pagesize']; if(empty($pageSize)){ $pageSize=10; } $proStoreGoods = new FlagShopCategoryModel(); $list=$proStoreGoods->getGoodsListByCate($userId,$sort,$cate_type,$brand_id,$page,$pageSize,$keywords,$type_id,$store_id); return $list; }
返回结果
{ "status":"0", "errorCode":"0", "msg":"成功", "result":{ "goods_info":[ { "product_id":"P000873", "brand_id":"3", "search_name":null, "seascapes":[ ], "img":"", "sell_nums":"1", "title":"【0元购返399元】斐讯K2 1200M智能双频无线路由器 WIFI穿墙 PSG1218", "sku_id":"8032715893", "soft_text":null, "is_zero_goods":"0", "restriction":null, "yuding":"1", "sku_no":"P0028792", "market_price":null, "sell_price":"0.01", "cost_price":"0.01", "product_num":"1", "profit":"0.00", "spec_name":": : ", "store_id":"115075399495199", "activity_info":{ "productPrice":"00.00", "costPrice":"00.00", "activityId":null, "activityType":null, "title":null, "isAct":false }, "select_status":2 } ], "foot":{ "current_page":"1", "pagesize":"10", "total_page":1 }, "brand_info":[ { "id":"3", "brand_name":"斐讯", "list_status":1 }, { "id":"6", "brand_name":"迅捷", "list_status":2 } ], "cate_info":[ { "id":"109", "name":"斐讯K3C+E1组合套装", "list_status":2 }, { "id":"108", "name":"斐讯N1预售", "list_status":2 } ] } }
//根据分类获取商品列表 public function getGoodsListByCate($userId,$sort,$cate_type,$brand_id,$page,$pageSize,$keywords,$type_id,$store_id){ $store=M('store'); $s_where['id']=$store_id; $store_user_id=$store->field('id')->where($s_where)->getField('user_id'); //排序 switch ($sort) { case 1: //销量由高到低排序 $order = 'sell_nums desc'; break; case 2: //价格从低到高 $order = 'sell_price asc'; break; default: //价格从高到低 $order = 'sell_price desc'; break; } $origin=1; //1搜索、2店铺首页或商品管理 $res2=$this->getGoodsInfoNew($keywords,$cate_type,$page,$pageSize,$order,$brand_id,$store_id,'me',2,$origin,$type_id,$userId,$store_user_id); if(empty($res2['goods_info'])){ $res2=null; } foreach($res2['goods_info'] as $k=>$v){ $arrs[]=array( 'productId'=>$v['product_id'], 'skuNo'=>$v['sku_no'] ); } $home_special_session=new HomeSpecialSessionModel(); $res_info=$home_special_session->getGoodsActInfo($arrs); foreach($res_info as $k=>$v){ unset($res_info[$k]['productId']); unset($res_info[$k]['skuNo']); unset($res_info[$k]['status']); } foreach($res2['goods_info'] as $k=>$v){ $res2['goods_info'][$k]['activity_info']=$res_info[$v['sku_no']]; } $search_info= $res2; $ob=new FlagShipShopDecorateModel(); $sku_ids=array_column($res2['goods_info'],'sku_id'); $tt=$ob->getSelectStatus($userId,$type_id); foreach($sku_ids as $k=>$v){ if(in_array($v,$tt)){ $atr=1; }else{ $atr=2; } $search_info['goods_info'][$k]['select_status']=$atr; } return $search_info; } //组装商品信息--新(修改商品列表sku显示为商品显示) private function getGoodsInfoNew($keywords,$cate_type,$page,$pageSize,$order,$brand_id,$store_id,$store_type,$source,$origin,$type_id,$user_id,$store_user_id){ $img_base=C('img_base'); //获取平台商品的ID $pingtai_goods=C('pingtai_goods'); //获取特色商品的ID $tese_goods=C('tese_goods'); $store_goods=M('store_goods sg'); $ob=new FlagShipShopDecorateModel(); $res=$ob->isParentUserId($user_id,$store_user_id); if($type_id==1){ //平台商品 $where2 ="gs.goods_type=$pingtai_goods"; }elseif($type_id==2){//特色商品 $where2 ="gs.goods_type=$tese_goods"; }else{ $where2 ="1=1"; if($res===false){ $where2 .=" and goods_type=2"; } } if(!empty($keywords)){ $where2 .=" and (gs.title like '%$keywords%' or gd.search_name like '%$keywords%')"; } $where3=$where2; //品牌 if(!empty($brand_id)){ $where2 .=" and gd.brand_id in ($brand_id)"; } if(!empty($cate_type)){ $where ="sgc.id in ($cate_type)"; }else{ $where ="1=1"; } if($type_id==1){ //平台商品 $where .=" and type_id=$pingtai_goods"; }elseif($type_id==2){ //特色商品 $where .=" and sg.store_id='".$store_id."' and type_id=$tese_goods"; }else{ if($res===false){ $where .=" and (sg.store_id='".$store_id."' and type_id=$tese_goods)"; }else{ $where .=" and ((sg.store_id='".$store_id."' and type_id=$tese_goods) or type_id=$pingtai_goods)"; } } $where .=" and sg.is_deleted=1 and sg.is_open=1 "; $store_goods_info=$store_goods->field('sg.sku_id,sg.g_cats,sgc.id') ->join('left join lc_store_goods_category sgc on sg.g_cats=sgc.path') ->where($where) ->select(); $sku_ids =implode(",",array_column($store_goods_info,'sku_id')); $goods_sku_m = M('goods_sku gs'); if(!empty($store_goods_info)){ //根据sku_id查找对应的商品 $sku_ids = "'".str_replace(",","','",$sku_ids)."'"; $where2 .=' and gs.sku_id in ('.$sku_ids.') and gs.status=1 and gs.is_deleted=0 and gd.is_deleted =0 and gd.is_online =1 and gs.is_show=0'; $where4=$where3; $where4 .=' and gs.status=1 and gs.is_deleted=0 and gd.is_deleted =0 and gd.is_online =1 and gs.is_show=0'; $gd_info = $goods_sku_m ->join('left join __GOODS__ gd on gd.product_id=gs.product_id') ->field("gd.brand_id,gs.sku_id") ->where($where4) ->select(); //选中品牌,品牌分类不变 $where3 .=' and gs.sku_id in ('.$sku_ids.') and gs.status=1 and gs.is_deleted=0 and gd.is_deleted =0 and gd.is_online =1 and gs.is_show=0'; $gd_info2 = $goods_sku_m ->join('left join __GOODS__ gd on gd.product_id=gs.product_id') ->field("gd.brand_id,gs.sku_id") ->where($where3) ->select(); if(!empty($gd_info2)){ $brand_ids2=array_unique(array_column($gd_info2,'brand_id')); }else{ $brand_ids2=null; } if(!empty($brand_ids2)){ $brands=implode(',',$brand_ids2); }else{ $brands=null; } $brand_info=$this->getBrandInfo($brands,$brand_id); if(!empty($gd_info2)){ $sku_ids2 =implode(",",array_unique(array_column($gd_info,'sku_id'))); $sku_ids2 = "'".str_replace(",","','",$sku_ids2)."'"; $where5 ="sg.sku_id in ($sku_ids2) and concat(sg.g_cats,'/') like '".$pingtai_goods."/%' and sg.is_deleted=1 and sg.is_open=1"; $store_goods_info5=$store_goods->field('sgc.id,sg.g_cats') ->join('left join lc_store_goods_category sgc on sg.g_cats=sgc.path') ->where($where5) ->select(); $cate_infos=array_unique(array_column($store_goods_info5,'id')); if(!empty($cate_infos)){ foreach($cate_infos as $k=>$v){ if(empty($v)){ unset($cate_infos[$k]); } } $cate_infos=array_merge($cate_infos); }else{ $cate_infos=null; } if(!empty($cate_infos)){ $cate_infos=implode(',',$cate_infos); $cate_info=$this->getCateInfo($cate_type,$cate_infos); } }else{ $cate_info=null; } $count=$goods_sku_m->join('left join __GOODS__ gd on gd.product_id=gs.product_id')->where($where2)->count('DISTINCT gs.product_id'); //组装分页信息 $total_page=ceil($count/$pageSize); if($page > $total_page){ $page=1; } $goods_info = $goods_sku_m ->join('left join __GOODS__ gd on gd.product_id=gs.product_id') ->field("gd.product_id,gd.brand_id,gd.search_name,gd.seascapes,gs.img,sum(gs.sell_nums) as sell_nums,gs.title") ->where($where2) ->group('gs.product_id') ->order($order) ->page($page,$pageSize) ->select(); $product_ids=implode(",",array_unique(array_column($goods_info,'product_id'))); $product_ids = "'".str_replace(",","','",$product_ids)."'"; $sku_where="product_id in ($product_ids) and gs.status=1 and gs.is_deleted=0 and gs.is_show=0"; $sku_info = $goods_sku_m ->field("gs.product_id,gs.properties,gs.sku_id,gs.soft_text,gs.is_zero_goods,gs.restriction,gs.yuding,gs.img,gs.sku_no,gs.market_price,gs.sell_price,gs.cost_price") ->where($sku_where) ->order('sell_price asc,gs.sell_nums desc') ->select(); $sku_info=$this->remove_duplicate($sku_info); foreach($sku_info as $k=>$v){ $sku[$v['product_id']]['properties']=$v['properties']; $sku[$v['product_id']]['sku_id']=$v['sku_id']; $sku[$v['product_id']]['soft_text']=$v['soft_text']; $sku[$v['product_id']]['is_zero_goods']=$v['is_zero_goods']; $sku[$v['product_id']]['restriction']=$v['restriction']; $sku[$v['product_id']]['yuding']=$v['yuding']; $sku[$v['product_id']]['img']=$v['img']; $sku[$v['product_id']]['sku_no']=$v['sku_no']; $sku[$v['product_id']]['market_price']=$v['market_price']; $sku[$v['product_id']]['sell_price']=$v['sell_price']; $sku[$v['product_id']]['cost_price']=$v['cost_price']; } foreach($goods_info as $k=>$v){ $goods_info[$k]['properties']= $sku[$v['product_id']]['properties']; $goods_info[$k]['sku_id']= $sku[$v['product_id']]['sku_id']; $goods_info[$k]['soft_text']= $sku[$v['product_id']]['soft_text']; $goods_info[$k]['is_zero_goods']= $sku[$v['product_id']]['is_zero_goods']; $goods_info[$k]['restriction']= $sku[$v['product_id']]['restriction']; $goods_info[$k]['yuding']= $sku[$v['product_id']]['yuding']; $goods_info[$k]['img']= $sku[$v['product_id']]['img']; $goods_info[$k]['sku_no']= $sku[$v['product_id']]['sku_no']; $goods_info[$k]['market_price']= $sku[$v['product_id']]['market_price']; $goods_info[$k]['sell_price']= $sku[$v['product_id']]['sell_price']; $goods_info[$k]['cost_price']= $sku[$v['product_id']]['cost_price']; } $public = new PublicModel(); //查询商品是否有多个sku if(empty($goods_info)){ foreach ($goods_info as $key=>$value){ $goods_info[$key]['product_num']=''; } }else{ $product_info=$public->isMoreSku(array_column($goods_info,'product_id')); $new_data=[]; foreach ($product_info as $key=>$value){ $new_data[$value['product_id']]=$value['num']; } foreach ($goods_info as $key=>$value){ $goods_info[$key]['product_num']=empty($new_data[$value['product_id']])?'':$new_data[$value['product_id']]; } } if(!empty($goods_info)){ foreach ($goods_info as $k =>$v) { //利润: $profit=$v['sell_price']-$v['cost_price']; $goods_info[$k]['profit']=$profit?number_format($profit, 2, '.', ','):'0.00'; $seascapes=explode(',',$v['seascapes']); if(!empty($seascapes)){ $seascapes_t= array(); foreach($seascapes as $v1){ if(!empty($v1)){ $seascapes_t[]=$img_base.$v1; } } } $goods_info[$k]['seascapes']=$seascapes_t; $goods_info[$k]['img']=empty($v['img'])?'':$img_base.$v['img']; //单个产品相关的规格 $spec = $public->getSkuPropName('',$v['properties']); $goods_info[$k]['spec_name'] = $spec; //app if($source==2){ $inf2=$public->shopDeal($store_id); }else{ //h5 $inf2=$public->shopDealH5($store_id,$store_type); } $inf=$public->getTeSeGoods($v['sku_id']); if(empty($inf)){//平台商品 $store_id=$inf2; }else{ $store_id=$inf['store_id']; } $goods_info[$k]['store_id']=$store_id; unset($goods_info[$k]['properties']); } } }else{ $goods_info=null; if($origin==1){ $brand_info=null; $cate_info=null; } } $foot=array('current_page'=>$page,'pagesize'=>$pageSize,'total_page'=>$total_page); $data['goods_info']=$goods_info; $data['foot']=$foot; if($origin==1){ //组装品牌信息 $data['brand_info']=$brand_info; //组装分类信息 $data['cate_info']=$cate_info; } return $data; } //二维数组去重 public function remove_duplicate($array){ $result=array(); foreach ($array as $key => $value) { $has = false; foreach($result as $val){ if($val['product_id']==$value['product_id']){ $has = true; break; } } if(!$has) $result[]=$value; } return $result; } //获取品牌列表 //$brand_ids为搜索后产品所对应的品牌 $brand_id为选中的品牌列表 public function getBrandInfo($brand_ids,$brand_id){ if(!empty($brand_ids)){ $where="id in ($brand_ids)"; }else{ $where="1=1"; } $brand_info=M('brand')->field('id,brand_name')->where($where)->select(); foreach($brand_info as $k=>$v){ if(empty($brand_id)){ $brand_info[$k]['list_status']=2; //未选中 }else{ if(in_array($v['id'],explode(',',$brand_id))){ $brand_info[$k]['list_status']=1; //选中 }else{ $brand_info[$k]['list_status']=2; //未选中 } } } return $brand_info; } //获取分类列表 //$cate_type选中的分类 $cate_infos搜索出的分类 public function getCateInfo($cate_type,$cate_infos){ //获取平台商品的id $pingtai_goods=C('pingtai_goods'); $where ="id in ($cate_infos)"; $cate_info=M('store_goods_category')->field('id,name,path')->where($where)->order('sort desc')->select(); if(!empty($cate_info)){ foreach($cate_info as $k=>$v){ if(empty($cate_type)){ $cate_info[$k]['list_status']=2; //未选中 }else{ if(in_array($v['id'],explode(',',$cate_type))){ $cate_info[$k]['list_status']=1; //选中 }else{ $cate_info[$k]['list_status']=2; //未选中 } } unset($cate_info[$k]['path']); } $cate_info=array_merge($cate_info); }else{ $cate_info=null; } return $cate_info; }
//根据sku_ids获取分类选中状态 public function getSelectStatus($userId,$type_id){ $user_shop_decorate=M('user_shop_decorate'); $usd_where['flagship_shop']=1; $usd_where['create_id']=$userId; if($type_id==1){ $usd_info=$user_shop_decorate->field('plate_id,plate_content_draft')->where($usd_where)->order('create_time desc')->find(); }else{ $usd_info=$user_shop_decorate->field('plate_id_features plate_id,plate_content_draft_features plate_content_draft')->where($usd_where)->order('create_time desc')->find(); } $shop_decorate_template=M('shop_decorate_template'); $us_where['is_deleted']=0; $us_where['id']=$usd_info['plate_id']; $us_info=$shop_decorate_template->field('goods_nums')->where($usd_where)->find(); if(empty($usd_info)){ $goods_info=$this->getDefaultGoodsInfo($us_info['goods_nums'],"sell_nums desc"); foreach($goods_info as $k=>$v){ $arr[]=$v['sku_id']; } }else{ $plate_content=json_decode($usd_info['plate_content_draft'],true); foreach($plate_content as $k=>$v){ foreach($v['goods'] as $k2=>$v2){ if($v2['operate_type']==1){ $arr[]=$v2['sku_id']; } } } } return $arr; }