SearchData.php 5.89 KB
<?php

namespace LibModels\Wap\Product;

use Api\Yohobuy;
use Api\Sign;

/**
 * 搜索有关数据操作类
 * 
 * @name SearchData
 * @package Library/LibModels/wap/Product
 * @copyright yoho.inc
 * @version 1.0 (2015-10-8)
 * @author gtskk <rocky.zhang@yoho.cn>
 */
class SearchData
{

    /**
     * 阿里云外网
     * 
     * @var string
     */
    protected static $_searchurl = 'http://101.200.31.165/yohosearch/search.json';
    
//    /**
//     * 阿里云内网 
//     * 
//     * @var string
//     */
//    protected static $_searchurl = 'http://100.98.132.63/yohosearch/search.json';

    /**
     * 模糊搜索提供的关键词
     * 
     * @param  string $keyword 关键词
     * @return array          根据给定关键词搜索到的结果,包括数据数目count和提供的关键词keyword
     */
    public static function searchFuzzyDatas($keyword)
    {
        // 构建必传参数
        $param = Yohobuy::param();

        $param['keyword'] = $keyword;
        $param['method'] = 'app.search.fuzzy';
        $param['client_secret'] = Sign::getSign($param);

        return Yohobuy::get(Yohobuy::API_URL, $param);
    }

    /**
     * 根据给定查询数据搜索数据列表
     * 
     * @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 searchLiDatas($query = null, $brand = null, $gender = null, $color = null, $size = null, $price = null, $p_d = null, $sort = null, $order = 's_t_desc', $page = 1, $limit = 60, $channel = null)
    {
        // 排序数据映射表
        $order_map = 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',
            's_d_desc' => 'discount:desc',
            's_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();

        is_null($query) || $param['query'] = $query;
        is_null($brand) || $param['brand'] = $brand;
        is_null($gender) || $param['gender'] = $gender;
        is_null($color) || $param['color'] = $color;
        is_null($size) || $param['size'] = $size;
        is_null($price) || $param['price'] = $price;
        is_null($p_d) || $param['p_d'] = $p_d;
        is_null($sort) || $param['sort'] = $sort;
        // is_null($channel) || $param['channel'] = $channel;
        $param['order'] = $order_map[$order];
        $param['page'] = $page;
        $param['viewNum'] = $limit; // 每页记录数
        $param['status'] = 1; // 是否上架,1表示在架,2表示不在

        return Yohobuy::get(self::$_searchurl, $param);
    }
    
    /**
     * 根据给定查询数据搜索数据列表
     * 
     * @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 searchByCondition($condition, $order = 's_t_desc', $page = 1, $limit = 60)
    {
        $param = Yohobuy::param();
        $param['method'] = 'app.search.li';
        $param['order'] = $order;
        $param['page'] = $page;
        $param['limit'] = $limit;
        if (!empty($condition)) {
            $param += $condition;
        }
        $param['client_secret'] = Sign::getSign($param);

        return Yohobuy::get(Yohobuy::API_URL, $param, 600); // 有缓存10分钟
    }

}