Newsale.php 9.17 KB
<?php

namespace Product;

use Configs\CacheConfig;
use LibModels\Wap\Product\NewsaleData;
use Plugin\DataProcess\NewSaleProcess;
use Plugin\DataProcess\ListProcess;
use Plugin\Helpers;
use Plugin\Cache;

/**
 * 新品到着相关的模板数据模型
 * 
 * @name NewsaleModel
 * @package models/Product
 * @copyright yoho.inc
 * @version 1.0 (2015-10-22 17:23:51)
 * @author fei.hong <fei.hong@yoho.cn>
 */
class NewsaleModel
{
    /* 男生频道取新品到着及折扣专区数据的位置码 */

    const CODE_TOP_NEW_BOYS = '3cf2c1be5217fbab6009ce83959e1e12';
    const CODE_TOP_SALE_BOYS = '153180b9a88c0b565848850c523bb637';
    /* 女生频道取新品到着及折扣专区数据的位置码 */
    const CODE_TOP_NEW_GIRLS = '1cf7f9f10e2a2670e73d05c568793ad9';
    const CODE_TOP_SALE_GIRLS = '0b2d133419a0f7c381306fd3522365e1';
    /* 潮童频道取新品到着及折扣专区数据的位置码 */
    const CODE_TOP_NEW_KIDS = '57457adececa6c748b29c90cad0ae940';
    const CODE_TOP_SALE_KIDS = 'de23648d28ee1e8a3f087a9dbac506f8';
    /* 创意生活频道取新品到着及折扣专区数据的位置码 */
    const CODE_TOP_NEW_LIFESTYLE = '04953a61cbf1db426a681e55d496d2fe';
    const CODE_TOP_SALE_LIFESTYLE = '01269e498ff5b07756e0733ec0e88c75';

    /**
     * 获取新品到着的焦点图资源数据
     * 
     * @return array
     */
    public static function getNewFocus($channel)
    {
        $result = array();

        /* 根据频道调用接口 */
        switch (intval($channel)) {
            case 1:   // 男生
                $result = self::cacheControl(CacheConfig::KEY_ACTION_PRODUCT_NEWSALE_INDEX_BOYS, self::CODE_TOP_NEW_BOYS);
                break;
            case 2:   // 女生
                $result = self::cacheControl(CacheConfig::KEY_ACTION_PRODUCT_NEWSALE_INDEX_GIRLS, self::CODE_TOP_NEW_GIRLS);
                break;
            case 3:   // 潮童
                $result = self::cacheControl(CacheConfig::KEY_ACTION_PRODUCT_NEWSALE_INDEX_KIDS, self::CODE_TOP_NEW_KIDS);
                break;
            case 4:   // 创意生活
                $result = self::cacheControl(CacheConfig::KEY_ACTION_PRODUCT_NEWSALE_INDEX_LIFESTYLE, self::CODE_TOP_NEW_LIFESTYLE);
                break;
        }

        return $result;
    }

    /**
     * 获取折扣专区的焦点图资源数据
     * 
     * @return array
     */
    public static function getSaleFocus($channel)
    {
        $result = array();

        /* 根据频道调用接口 */
        switch (intval($channel)) {
            case 1:   // 男生
                $result = self::cacheControl(CacheConfig::KEY_ACTION_PRODUCT_NEWSALE_DISCOUNT_BOYS, self::CODE_TOP_SALE_BOYS);
                break;
            case 2:   // 女生
                $result = self::cacheControl(CacheConfig::KEY_ACTION_PRODUCT_NEWSALE_DISCOUNT_GIRLS, self::CODE_TOP_SALE_GIRLS);
                break;
            case 3:   // 潮童
                $result = self::cacheControl(CacheConfig::KEY_ACTION_PRODUCT_NEWSALE_DISCOUNT_KIDS, self::CODE_TOP_SALE_KIDS);
                break;
            case 4:   // 创意生活
                $result = self::cacheControl(CacheConfig::KEY_ACTION_PRODUCT_NEWSALE_DISCOUNT_LIFESTYLE, self::CODE_TOP_SALE_LIFESTYLE);
                break;
        }

        return $result;
    }

    /**
     * 获取新品到着的商品列表
     * 
     * @param int $channel 1:男生,2:女生,3:潮童,4:创意生活
     * @param int $limit 查询的限制数
     * @return array
     */
    public static function getNewProducts($channel, $limit)
    {
        $result = array();
        $products = array();

        /* 根据频道查询商品列表 */
        switch (intval($channel)) {
            case 1: // 男生
                $products = NewsaleData::getNewProducts('1,3', 1, $limit);
                break;
            case 2: // 女生
                $products = NewsaleData::getNewProducts('2,3', 2, $limit);
                break;
            case 3: // 潮童
                $products = NewsaleData::getNewProducts('1,2,3', 3, $limit);
                break;
            case 4: // 创意生活
                $products = NewsaleData::getNewProducts('1,2,3', 4, $limit);
                break;
        }

        /* 格式化商品数据 */
        if (isset($products['code']) && $products['code'] == 200) {
            $result = NewSaleProcess::newSaleData($products['data']);
        }

        return $result;
    }

    /**
     * 获取折扣专区的商品列表
     * 
     * @param int $channel 1:男生,2:女生,3:潮童,4:创意生活
     * @param int $limit 查询的限制数
     * @return array
     */
    public static function getSaleProducts($channel, $limit)
    {
        $result = array();
        $products = array();

        /* 根据频道查询商品列表 */
        switch (intval($channel)) {
            case 1: // 男生
                $products = NewsaleData::getSaleProducts('1,3', 1, $limit);
                break;
            case 2: // 女生
                $products = NewsaleData::getSaleProducts('2,3', 2, $limit);
                break;
            case 3: // 潮童
                $products = NewsaleData::getSaleProducts('1,2,3', 3, $limit);
                break;
            case 4: // 创意生活
                $products = NewsaleData::getSaleProducts('1,2,3', 4, $limit);
                break;
        }

        /* 格式化商品数据 */
        if (isset($products['code']) && $products['code'] == 200) {
            $result = NewSaleProcess::newSaleData($products['data']);
        }

        return $result;
    }

    /**
     * 顶部焦点图缓存控制
     * @param  const $cacheKey  缓存常量值
     * @param  const $codeKey   顶部焦点图位置码 
     * @return array            焦点图数据
     */
    private static function cacheControl($cacheKey, $codeKey)
    {
        $result = array();

        if (USE_CACHE) {
            $key = $cacheKey . $codeKey;
            // 先尝试获取一级缓存(master), 有数据则直接返回.
            $result = Cache::get($key, 'master');
            if (!empty($result)) {
                return $result;
            }
        }
        $newsale = NewsaleData::getNewsaleFocus($codeKey);

        // 调用接口获取数据并封装
        if (isset($newsale['code']) && !empty($newsale['data'])) {
            if(count($newsale['data'][0]['data']) === 1) {
                $result = Helpers::formatBanner($newsale['data'][0]['data'][0], 640, 240);
            } else {
                foreach ($newsale['data'][0]['data'] as $one) {
                    $result['list'][] = Helpers::formatBanner($one, 640, 240);
                }
            }
        }

        if (USE_CACHE) {
            // 接口调用异常时, 不害怕,从我们的二级缓存(slave)里再取数据.
            if (empty($result)) {
                $result = Cache::get($key, 'slave');
            }
            // 接口调用正常,数据封装完成, 则设置一级(master)和二级(slave)数据缓存
            else {
                Cache::set($key, $result);
            }
        }

        return $result;
    }

    /**
     * 筛选出来的商品数据处理
     * 
     * @param  array $data 筛选出来的原数据
     * @return array       处理之后的数据
     */
    public static function selectData($data)
    {
        $result = array();

        if (isset($data['code']) && $data['code'] === 200 && isset($data['data']['product_list'])) {
            foreach ($data['data']['product_list'] as $val) {
                $result['goods'][] = Helpers::formatProduct($val, true, false, false, 235, 314);
            }
        }

        return $result;
    }

    /**
     * 筛选出来的热销排行榜商品数据处理
     *
     * @param  string $gender "1,3"表示男, "2,3"表示女, "1,2,3"表示全部
     * $param integer $channel 1表示男,2表示女,3表示潮童,4表示创意生活
     * @param  string|null $sort 品类ID查询参数
     * @param  integer|null $tab_id Tab的ID
     * @param  boolean $notab 时候返回顶部tab的数据,默认返回
     * @param  integer $limit 查询返回的最大限制数
     * @param  integer $page 分页第几页
     * @return array       处理之后的数据
     */
    public static function selectTopData($gender, $channel, $sort, $tab_id, $notab, $limit, $page)
    {
        $result = array();

        $data = NewsaleData::getTopProducts($gender, $channel, $sort, $tab_id, $limit, $page);

        if (isset($data['code']) && $data['code'] === 200 && isset($data['data']['product_list'])) {
            $result = NewSaleProcess::topData($data['data'], $notab, $limit, $page);
        }

        return $result;
    }

    /**
     * 获取筛选数据
     * @param  array $data 接口返回的数据
     * @param  string $gender 默认选择的性别,默认1,2,3表示所有
     * @return array       处理之后的数据
     */
    public static function filterData($data, $gender = '1,2,3')
    {
        $result = array();

        /* 格式化筛选数据 */
        if (isset($data['code']) && $data['code'] == 200 && isset($data['data']['filter'])) {
            $result['filter'] = ListProcess::getFilterData($data['data']['filter'], $gender);
        }

        return $result;
    }

}