Newsale.php 7.18 KB
<?php

namespace Product;

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

/**
 * 新品到着相关的模板数据模型
 * 
 * @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 = 'a7989369aa86681c678bc40f171b8f1d';
    const CODE_TOP_SALE_BOYS = 'e9c9be32d72e2906d404a72ee24cb523';
    /* 女生频道取新品到着及折扣专区数据的位置码 */
    const CODE_TOP_NEW_GIRLS = 'b0ba12104cfecacdcfd7ad74117a22b8';
    const CODE_TOP_SALE_GIRLS = '785c0e6aab746949073c4ffb9d5106ac';
    /* 潮童频道取新品到着及折扣专区数据的位置码 */
    const CODE_TOP_NEW_KIDS = 'c39607aa21219117976848819cf81a69';
    const CODE_TOP_SALE_KIDS = 'ad1bb67a6007819c86f737d74172fd2e';
    /* 创意生活频道取新品到着及折扣专区数据的位置码 */
    const CODE_TOP_NEW_LIFESTYLE = '7c9ae01071f7a75d3911782feb4caebd';
    const CODE_TOP_SALE_LIFESTYLE = '8132c7db3adbeb7b0d0002de9691c753';

    /**
     * 获取新品到着的焦点图资源数据
     * 
     * @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 (!empty($products)) {
            $result = NewSaleProcess::newSaleData($products);
        }

        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 (!empty($products)) {
            $result = NewSaleProcess::newSaleData($products);
        }

        return $result;
    }


    /**
     * 顶部焦点图缓存控制
     * @param  const $cacheKey  缓存常量值
     * @param  const $codeKey   顶部焦点图位置码 
     * @return array            焦点图数据
     */
    private static function cacheControl($cacheKey, $codeKey)
    {
        if (USE_CACHE) {
            // 先尝试获取一级缓存(master), 有数据则直接返回.
            $result = Cache::get($cacheKey, 'master');
            if (!empty($result)) {
                return $result;
            }
        }
        $newsale = NewsaleData::getNewsaleFocus($codeKey);

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

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

        return $result;
    }

    /**
     * 筛选出来的商品数据处理
     * 
     * @param  array $data 筛选出来的原数据
     * @return array       处理之后的数据
     */
    public static function selectData($data)
    {
        $result = array();
        
        if (isset($data['code']) && $data['code'] === 200) {
            foreach ($data['data']['product_list'] as $val) {
                $result['goods'][] = Helpers::formatProduct($val);
            }
        }

        return $result;
    }
}