ShopProcess.php 11.4 KB
<?php

namespace Plugin\DataProcess;

use Plugin\Helpers;
use Plugin\Images;

/**
 * 店铺楼层数据处理类
 */
class ShopProcess
{
    private static $shopData = array();
    private static $shopId = 0;
    private static $appVersion = 0;
    //店铺品牌
    private static $brandId;
    //单品店
    private static $single = false;

    /**
     * 修改资源位的链接
     * @param $val
     * @param $shopId
     * @return string
     */
    private static function modifyWapUrl($val, $shopId)
    {
        if (isset($val['linkType']) && $val['linkType'] == 1) {
            return Helpers::url('', array('filter_poolId' => $val['categoryId'],
                'title' => $val['categoryName']), 'search');
        } else {

            if (isset($val['url'])) {
                return $val['url'];
            } else {
                return '';
            }
        }
    }

    /**
     * 修改资源位的链接
     * @param $val
     * @param $shopId
     * @return string
     */
    private static function modifyAppUrl($val, $shopId)
    {
        if (isset($val['linkType']) && $val['linkType'] == 1) {
            return Helpers::url('/search/list') . sprintf('?openby:yohobuy={"action":"go.poollist","params":{"shop_id":"%s","title":"%s","productPool":"%s"}}',
                $shopId . '', $val['categoryName'] . '', $val['categoryId'] . '', '');
        } else {

            if (isset($val['url'])) {
                return $val['url'];
            } else {
                return '';
            }
        }
    }


    /**
     * 组织店铺页面数据
     * @param array $data 接口返回的店铺页所需数据
     * @param int $shopId 店铺id
     * @param int $appVersion app版本
     * @author sefon 2016-4-26 21:56:32
     * @return array
     */
    public static function formShopData($data, $shopId, $appVersion)
    {
        self::$shopData['shopId'] = self::$shopId = $shopId;
        self::$shopData['appVersion'] = self::$appVersion = $appVersion;
        foreach ($data as $key => $val) {
            if (empty($val) || !is_callable("self::$key")) {
                continue;
            }
            self::$key($val, $shopId, $appVersion);
        }
        if (self::$single) {
            self::$shopData['favId'] = self::$shopData['shopId'];
            self::$shopData['shopId'] = '';
        }
        return self::$shopData;
    }

    /**
     * 店铺基本信息
     * @param $data
     * @author sefon 2016-4-29 01:48:50
     */
    private static function shopInfo($data)
    {
        self::$shopData['logoImg'] = Images::getImageUrl($data['data']['shop_logo'], 500, 500, 'shopLogo');
        self::$shopData['storeName'] = $data['data']['is_show_shop_name'] == 'Y' ? $data['data']['shop_name'] : '';
        //用户是否收藏店铺
        self::$shopData['collect'] = $data['data']['is_favorite'] == 'Y' ? true : false;

        //全部商品链接
        $allGoodsParam['title'] = '全部商品';
        //单品店
        if (self::$single) {
            $allGoodsParam['brand'] = self::$brandId;
        } else {
            //店铺id
            self::$shopData['shopId'] = self::$shopId;
            $allGoodsParam['shop_id'] = self::$shopId;
        }
        if (empty(self::$appVersion)) {
            self::$shopData['allGoods'] = Helpers::url('', $allGoodsParam, 'search');
            //店铺简介页地址
            self::$shopData['shopIntroHref'] = Helpers::url('/product/index/intro', array('shop_id' => self::$shopId));
        } else {
            self::$shopData['allGoods'] = Helpers::url('', $allGoodsParam, 'search') . '&openby:yohobuy={"action":"go.list","params":{"title":"全部商品", "actiontype":"0","shop_id":"' . self::$shopId . '","page":"1"}}';
            self::$shopData['shopIntroHref'] = Helpers::url('/product/index/intro', array('shop_id' => self::$shopId, 'app_version' => self::$appVersion));
        }
        //搜索链接
        self::$shopData['url'] = Helpers::url('', array('shop_id' => self::$shopId), 'search');
        //人气单品的链接
        self::$shopData['more_url'] = Helpers::url('', array('shop_id' => self::$shopId, 'order' => 's_n_d', 'title' => '人气单品',), 'search');
        if (self::$appVersion) {
            self::$shopData['more_url'] = 'openby:yohobuy={"action":"go.list","params":{"shop_id":"' . self::$shopId . '","title":"人气单品"}}';
        }
    }

    /**
     * 组织店铺装修
     * @param array $data
     * @author sefon 2016-4-26 22:04:04
     */
    private static function decorator($data, $shopId, $appVersion)
    {
        if (!isset($data['code']) || $data['code'] != 200 || !isset($data['data']['list']) || empty($data['data']['list'])) {
            return;
        }

        if (empty($appVersion)) {
            $modifyUrl = function ($item, $shopid) {
                return self::modifyWapUrl($item, $shopid);
            };
        } else {
            $modifyUrl = function ($item, $shopid) {
                return self::modifyAppUrl($item, $shopid);
            };
        }

        foreach ($data['data']['list'] as $val) {
            if (empty($val['resource_data']) || !is_callable("self::$val[resource_name]")) {
                continue;
            }

            $json = json_decode($val['resource_data'], true);

            foreach ($json as &$val2) {
                $url = $modifyUrl($val2, $shopId);

                if (!empty($url)) {
                    $val2['url'] = $url;
                }

                if (isset($val2['data']) && is_array($val2['data'])) {
                    foreach ($val2['data'] as &$v) {
                        $url2 = $modifyUrl($v, $shopId);
                        if (!empty($url2)) {
                            $v['url'] = $url2;
                        }
                    }
                }

                if (!isset($val2['data']) && is_array($val2)) {
                    foreach ($val2 as $k1 => &$v1) {
                        $url3 = $modifyUrl($v1, $shopId);
                        if (!empty($url3)) {
                            $v1['url'] = $url3;
                        }
                    }
                }
            }

            self::$val['resource_name']($json);
        }
    }

    /**
     * 店铺Banner
     * @param array $data
     * @author sefon 2016-4-27 08:40:05
     */
    private static function shopTopBanner_APP($data)
    {
        self::$shopData['branerImg'] = Images::getResizeImagesUrl($data[0]['shopSrc'], 640, 200, 1);
    }

    /**
     * 资源位小图 接口返回两组,取每组第一张
     * @param array $data
     * @author sefon 2016-4-27 08:37:30
     */
    private static function oneRowTwoColImages_APP($data)
    {
        foreach ($data as $key => $val) {
            if (empty($val['data'])) {
                continue;
            }
            self::$shopData['spring'][$key] = array(
                'url' => $val['data'][0]['url'],
                'springType' => str_replace('http:', '', $val['data'][0]['src'])
            );
        }
    }

    /**
     * 店铺品牌一览
     * @param array $data
     * @author sefon 2016-4-26 22:04:04
     * @return array
     */
    private static function brandBrowse($data)
    {
        $brandId = '';
        $brandNumber = count($data);
        //少于2个不展示 单品店:单品店根据品牌id查询
        if ($brandNumber < 2) {
            self::$brandId = self::$shopData['brand'] = $data[0]['id'];
            self::$single = true;
            return;
        }
        foreach ($data as $val) {
            if (empty($val['brandDomain'])) {
                continue;
            }
            $brandId .= $val['id'] . ',';
            // tar modified 1606031153 跳转当前店铺下的这个品牌的商品列表
            $appSuffix = 'openby:yohobuy={"action":"go.brand","params":{"shop_id":"' . self::$shopId . '","brand_id":"' . $val['id'] . '"}}';
            //            $appSuffix = 'openby:yohobuy={"action":"go.list","params":{"shop_id":"' . self::$shopId . '","brand":"' . $val['id'] . '","title":"' . $val['brandName'] . '"}}';
            $brand['url'] = Helpers::url('', '', $val['brandDomain']);
//            $brand['url'] = Helpers::url('', array('shop_id' => self::$shopId, 'brand' => $val['id'], 'title' => $val['brandName']), 'list');
            if (!empty(self::$appVersion)) {
                $brand['url'] .= '?' . $appSuffix;
            }
            $brand['img'] = Images::getImageUrl($val['brandIco'], 640, 400);
            $brand['brandName'] = $val['brandName'];
            self::$shopData['brandList']['list'][] = $brand;
        }
        //大于5个返回更多品牌链接
        if ($brandNumber > 5) {
            self::$shopData['brandList']['url'] = Helpers::url('/product/index/allBrand', array('shop_id' => self::$shopId));
        }
    }

    /**
     * 资源位大图幻灯
     * @param $data
     * @author sefon 2016-4-27 16:50:01
     */
    private static function largeSlideImg_APP($data)
    {
        foreach ($data as $slide) {
            if (empty($slide['data'][0])) {
                continue;
            }
            self::$shopData['bannerTop']['list'][] = array('url' => $slide['data'][0]['url'], 'img' => str_replace('http:', '', $slide['data'][0]['src']));
        }
    }

    /**
     * 热门分类
     * @param array $data
     * @author sefon 2016-4-27 08:38:36
     * @return array
     */
    private static function recommend_APP($data)
    {
        self::$shopData['hotCategory']['name'] = '热门品类';
        foreach ($data as $cate) {
            self::$shopData['hotCategory']['list'][] = array('url' => $cate['url'], 'img' => str_replace('http:', '', $cate['src']));
        }
    }

    /**
     * 人气单品
     * @param array $data
     * @author sefon 2016-4-27 08:38:36
     */
    private static function hotProducts_APP($data)
    {
        foreach ($data as $val) {
            $goods = array(
                'url' => Helpers::getUrlBySkc($val['productId'], $val['goodsId'], $val['cnAlphabet']),
                'img' => Helpers::getImageUrl($val['src'], 235, 314),
                'productName' => $val['productName'],
                'salesPrice' => '¥' . $val['salesPrice'],
                'presentPrice' => '¥' . $val['salesPrice']
            );
            if (!empty(self::$appVersion)) {
                $goods['url'] .= '?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":' . $val['productSkn'] . '}}';
            }
            self::$shopData['hotList'][] = $goods;
        }
    }

    /**
     * 店铺下面的所有分类
     * @author sefon 2016-4-27 21:40:28
     */
    private static function shopCategory($data)
    {
        if (isset($data['code']) && $data['code'] == 200 && !empty($data['data'])) {
            $total = count($data['data']);
            if ($total > 6) {
                self::$shopData['shopCategory']['url'] = Helpers::url('/product/index/category', array('shop_id' => self::$shopId));
                return;
            }
            foreach ($data['data'] as $key => $val) {
                self::$shopData['shopCategory']['list'][] = array(
//                    'url' => Helpers::url('', array('shop_id' => self::$shopId, 'brand' => self::$brandId, 'sort' => $val['relation_parameter']['sort']), 'search'),
                    'url' => Helpers::url('', array('shop_id' => self::$shopId, 'sort' => $val['relation_parameter']['sort']), 'search'),
                    'categoryId' => $val['category_id'],
                    'name' => $val['category_name']
                );
            }
        }
    }

}