SearchData.php 9.47 KB
<?php
namespace LibModels\Web\Product;

use Api\Yohobuy;
class SearchData extends \LibModels\Wap\Product\SearchData
{
    /**
     * 获取搜索的服务地址
     *
     * 备注:此处是根据环境来确定使用阿里云内网还是外网的URL
     *
     * @return string
     */
    public static function getUrl($type = 'search')
    {
        defined('APPLICATION_ENV') || define('APPLICATION_ENV', 'developer');
        switch (APPLICATION_ENV) {
            case 'release':
                if ($type == 'sort') {
                    return 'http://100.98.132.63/yohosearch/sortgroup.json';
                }
                elseif ($type == 'discount') {
                    return 'http://100.98.132.63/yohosearch/discount.json';
                }
                elseif ($type == 'recent') {
                    return 'http://100.98.132.63/yohosearch/recent.json';
                }
                elseif ($type == 'suggest') {
                    //return 'http://101.200.31.165/yohosearch/suggest.json';
                    return 'http://100.98.132.63/yohosearch/suggest.json';
                }
                elseif ($type == 'shop') {
                    return 'http://100.98.132.63/yohosearch/shops.json';
                }
                return 'http://100.98.132.63/yohosearch/search.json';
            case 'test':
            case 'preview':
            case 'developer':
            default:
                if ($type == 'sort') {
                    //return 'http://101.200.31.165/yohosearch/sortgroup.json';
                    return 'http://182.92.99.119:8080/yohosearch/sortgroup.json';
                }
                elseif ($type == 'discount') {
                    //return 'http://101.200.31.165/yohosearch/discount.json';
                    return 'http://182.92.99.119:8080/yohosearch/discount.json';
                }
                elseif ($type == 'recent') {
                    //return 'http://101.200.31.165/yohosearch/recent.json';
                    return 'http://182.92.99.119:8080/yohosearch/recent.json';
                }
                elseif ($type == 'suggest') {
//                    return 'http://101.200.31.165/yohosearch/suggest.json';
                    return 'http://182.92.99.119:8080/yohosearch/suggest.json';
                }
                elseif ($type == 'shop') {
                    //return 'http://101.200.31.165/yohosearch/shops.json';
                    return 'http://182.92.99.119:8080/yohosearch/shops.json';
                }
//                return 'http://101.200.31.165/yohosearch/search.json';
                return 'http://182.92.99.119:8080/yohosearch/search-once.json';
        }
    }

    /**
     * 根据给定查询数据搜索数据列表 (新的)
     *
     * @param  string  $query  查询条件, 默认为null
     * @param  string  $brand  品牌,默认为null
     * @param  string  $gender 性别,默认为null,"1,3"表示男, "2,3"表示女, "1,2,3"表示全部
     * @param  integer $color  颜色id
     * @param  integer $size   尺码id
     * @param  integer $price  价格
     * @param  string  $p_d    折扣,默认为null
     * @param  string  $sort  商品所属品类,默认为null
     * @param  string  $order  排序方式,默认为按照时间倒序排列s_t_desc,
     *                        	s_t_asc表示按时间正序排列,
     *                         	s_p_asc表示按价格正序排列,
     *                          s_p_desc表示按价格倒序排列,
     *                          p_d_asc表示按折扣正序排列,
     *                          p_d_desc表示按折扣倒序排列
     * @param  integer $page   指定查询是多少页,默认为第一页
     * @param  integer $limit  指定查询多少个,默认是60个
     * @param  integer $channel表示哪个频道,1表示男生,2表示女生,3表示潮童,4表示创意生活
     * @return array           搜索到的数据
     */
    public static function searchElasticByCondition($condition, $cache = false)
    {
        // 排序数据映射表
        $orderMaps = array(
            's_t_desc' => 'shelve_time:desc',
            's_t_asc' => 'shelve_time:asc',
            's_p_asc' => 'sales_price:asc',
            's_p_desc' => 'sales_price:desc',
            'p_d_desc' => 'discount:desc',
            'p_d_asc' => 'discount:asc',
            'skn_desc' => 'product_skn:desc',
            'skn_asc' => 'product_skn:asc',
            'activities_desc' => 'activities.order_by:desc',
            'activities_asc' => 'activities.order_by:asc',
            's_n_asc' => 'sales_num:asc',
            's_n_desc' => 'sales_num:desc',
            'activities_id_desc' => 'activities.activity_id:desc',
            'activities_id_asc' => 'activities.activity_id:asc',
        );

        $param = array();
        $param['status'] = 1; // 是否上架,1表示在架,2表示不在
        $param['sales'] = 'Y'; // 只搜索销售的产品
        $param['stocknumber'] = 1; // 过滤掉已售罄的商品
        // $param['needFilter'] = 1; // 是否需要返回筛选条件
        if (!isset($condition['order'])) {
            $param['order'] = $orderMaps['s_t_desc'];
        } else {
            $param['order'] = $orderMaps[$condition['order']];
        }
        if (!isset($condition['page'])) {
            $param['page'] = 1;
        }

        if(isset($condition['viewNum'])) {
            $param['viewNum'] = $condition['viewNum'];
        }  else if (!isset($condition['limit'])) {
            $param['viewNum'] = 60;
        } else {
            $param['viewNum'] = $condition['limit'];
            unset($condition['limit']);
        }
        if (!empty($condition)) {
            $param += $condition;
        }

        return Yohobuy::get(self::getUrl('search'), $param, $cache);
    }
    /**
     * 根据分类列表获取商品信息
     *
     * @param array $params
     * @param array $sortList
     * @return array
     */
    public static function getSearchDataBySort(array $params, array $sortList)
    {
        $data = array();
        foreach ($sortList as $v) {
            if(empty($v['viewNum'])){
                continue;
            }
            $searchParams = array_merge($params, $v);
            $list = self::searchElasticByCondition($searchParams, true);
            $productList = empty($list['data']['product_list']) ? array() : $list['data']['product_list'];
            if(count($productList) < $v['viewNum']){
                continue;
            }
            $data = array_merge($data, $productList);
        }
        return $data;
    }

    /**
     * 根据查询条件查询品类列表
     * 
     * @param  string  $query  关键字
     * @param  bool  $needAllSort 为1时返回全部分类
     * @param  bool  needSmallSort 为1时返回小分类
     * @param  string  $brand  品牌,查多个品牌以逗号分隔
     * @param  string  $mosort 产品产品大分类ID,查多个大类以逗号分隔
     * @param  string  $misort 产品产品中分类ID,查多个中类以逗号分隔
     * @param  string  $sort 产品产品小分类ID,查多个小类以逗号分隔
     * @param  string  $gender 性别,默认为null,"1"表示男, "2"表示女, "3"表示通用
     * @param  integer $color  颜色id
     * @param  integer $size   尺码id
     * @param  integer $price  价格
     * @param  integer $style  风格ID
     * @param  integer $parameter_xxx 属性类型ID与值ID 参数名称格式:parameter_{属性类型ID}={属性值ID},如查询厚度为中“parameter_875=4801”
     * @param  integer $stocknumber 库存量
     * @param  integer $shelve_time 时间区间
     * @param  integer $specialoffer 特价类型
     * @param  bool $sales 是否销售
     * @param  bool $promotion 是否为促销品
     * @param  integer $vdt 是否为促销品
     * @param  bool $vdt 折扣类型
     * @param  integer $p_d 促销浮点值
     * @param  integer $attribute  商品属性  1正常商品 2赠品
     * @param  integer $limited 是否限量 “N”或“Y”
     * @param  integer $new  是否新品 “N”或“Y”
     * @param  integer $status 是否上架
     * @param  integer $sell_channels 销售平台
     * @param  integer $p_d_int  促销折扣 int型如7
     * @param  integer $act_temp 活动模板
     * @param  integer $act_rec    活动模板是否推荐
     * @param  integer $act_status    活动模板商品状态
     * @param  integer $attribute_not    过滤商品属性,attribute_not=2过滤掉赠品
     * @param  integer $not_*    not_字段名,过滤字段
     * @return array           搜索到的数据
     */
    public static function getClassesData($classes = array(), $cache = false)
    {
        $classes['sales'] = 'Y';  //在销售商品分类
        $classes['status'] = 1;   //上架商品分类
        $classes['stocknumber'] = 1;    //过滤掉已售罄
        return Yohobuy::get(self::getUrl('sort'),$classes, $cache);
    }

    /**
     * 获取搜索提示
     * @param $param
     * @param $cache
     * @return array
     */
    public static function getSuggest($param, $cache = false)
    {
        if (empty($param['query'])) {
            return array();
        }
        if (empty($param['size'])) {
            $param['size'] = 10;
        }
        return Yohobuy::get(self::getUrl('suggest'),$param, $cache);
    }
}