ListProcess.php 9.5 KB
<?php

namespace Plugin\DataProcess;

use Plugin\Helpers;

/**
 * 列表数据处理类
 */
class ListProcess
{

    /**
     * 返回商品和过滤数据
     *
     * @param $data
     * @return array 处理之后的商品数据
     */
    public static function getListData($data, $returnFilter = true, $showTag = true, $tagNew = true, $tagSale = true, $coverChannel = '')
    {
        $result = array();

        if (isset($data['product_list'])) {
            $result['new'] = self::getProductData($data['product_list'], false, $showTag, $tagNew, $tagSale, $coverChannel);
        }
        if ($returnFilter && isset($data['filter'])) {
            $result['filter'] = self::getFilterData($data['filter']);
        }

        return $result;
    }

    /**
     * 处理列表商品数据
     *
     * @param $data
     * @return array 处理之后的商品数据
     */
    public static function getProductData($data, $isApp = false, $showTag = true, $tagNew = true, $tagSale = true, $coverChannel = '')
    {
        // 处理商品
        $products = array();

        foreach ($data as $value) {
            $products[] = Helpers::formatProduct($value, $showTag, $tagNew, $tagSale, 235, 314, true, true, $coverChannel);
        }

        return $products;
    }

    /**
     * 处理筛选数据
     *
     * @param $data
     * @param  string | integer $gender 默认选择的性别,默认1,2,3表示所有
     * @param null|string $exclude 需要排除的字段
     * @return array 处理之后的筛选数据
     */
    public static function getFilterData($data, $gender = '1,2,3', $exclude = null)
    {
        // 过滤条件数据
        $filters = array('classify' => array());

        // tar modified 1606151500 返回数据中没有gender时要添加gender
        if (empty($data['gender'])) {
            switch ($gender) {
                case '1,3':
                    $data['gender'] = array('1,3' => 'BOYS');
                    break;
                case '2,3':
                    $data['gender'] = array('2,3' => 'GIRLS');
                    break;
                default:
                    $data['gender'] = array('1,3' => 'BOYS', '2,3' => 'GIRLS');
                    break;
            }
        }

        $num = 1;
        foreach ($data as $key => $val) {
            if ($key === $exclude || empty($val) || !is_callable("self::$key")) {
                continue;
            }

            $build = self::$key($val, $gender);
            if ($num === 1) {
                $build['active'] = true;
            }

            $num++;
            $filters['classify'][] = $build;
        }

        // 按照指定字段进行排序筛选数据
        self::sortArrByField($filters['classify'], 'sort_col');

        return $filters;
    }

    private static function ageLevel($data)
    {
        $result = array(
            'title' => '人群',
            'name' => '所有人群',
            'sort_col' => 2,
            'dataType' => 'ageLevel',
            'subs' => array(
                array(
                    'chosed' => true,
                    'dataId' => 0,
                    'name' => '所有人群'
                )
            )
        );

        foreach ($data as $key => $one) {
            $discount = array();
            $discount['dataId'] = $one['id'];
            $discount['name'] = $one['name'];

            $result['subs'][] = $discount;
        }

        return $result;
    }

    private static function brand($data)
    {
        $result = array(
            'title' => '品牌',
            'name' => '所有品牌',
            'sort_col' => 1,
            'dataType' => 'brand',
            'subs' => array(
                array(
                    'chosed' => true,
                    'dataId' => 0,
                    'name' => '所有品牌'
                )
            )
        );

        // 对品牌数据按照品牌字母进行排序
        self::sortArrByField($data, 'brand_alif');

        foreach ($data as $one) {
            $brand = array();
            $brand['dataId'] = $one['id'];
            $brand['name'] = $one['brand_name'];

            $result['subs'][] = $brand;
        }

        return $result;
    }

    private static function color($data)
    {
        $result = array(
            'title' => '颜色',
            'name' => '所有颜色',
            'sort_col' => 4,
            'dataType' => 'color',
            'subs' => array(
                array(
                    'chosed' => true,
                    'dataId' => 0,
                    'name' => '所有颜色'
                )
            )
        );

        foreach ($data as $one) {
            $color = array();
            $color['dataId'] = $one['color_id'];
            $color['name'] = $one['color_name'];

            $result['subs'][] = $color;
        }

        return $result;
    }

    private static function discount($data)
    {
        $result = array(
            'title' => '折扣',
            'name' => '所有商品',
            'sort_col' => 7,
            'dataType' => 'discount',
            'subs' => array(
                array(
                    'chosed' => true,
                    'dataId' => '0.1,0.9',
                    'name' => '所有商品'
                )
            )
        );

        foreach ($data as $key => $one) {
            $discount = array();
            $discount['dataId'] = $key;
            $discount['name'] = $one['name'] . '折商品';

            $result['subs'][] = $discount;
        }

        return $result;
    }

    private static function gender($data, $gender)
    {
        $result = array(
            'title' => '性别',
            'name' => '所有性别',
            'sort_col' => 0,
            'dataType' => 'gender',
            'subs' => array(
                array(
                    'dataId' =>  '1,2,3',
                    'name' => '所有性别'
                )
            )
        );

        foreach ($data as $key => $value) {
            switch ($key) {
                case '1,3':
                case '2,3':
                    array_push($result['subs'], array('dataId' => $key, 'name' => $value));
                    break;
                default:
                    break;
            }
        }

        // 处理选中状态
        foreach ($result['subs'] as &$val) {
            if ($val['dataId'] === $gender) {
                $val['chosed'] = true;

                $result['name'] = $val['name'];
            }
        }

        return $result;
    }

    private static function group_sort($data)
    {
        $result = array(
            'title' => '品类',
            'name' => '所有品类',
            'sort_col' => 3,
            'dataType' => 'sort',
            'subs' => array(
                array(
                    'chosed' => true,
                    'dataId' => 0,
                    'name' => '所有品类'
                )
            )
        );

        $category = array();
        foreach ($data as $one) {

            $category['dataId'] = isset($one['relation_parameter']) ? $one['relation_parameter']['sort'] : 0;
            $category['name'] = $one['category_name'];

            /* // 子品类(目前h5不支持二级)
              if(isset($one['sub']))
              {
              $category['subs'] = array();
              foreach ($one['sub'] as $single) {
              $subitem = array();
              $subitem['dataId'] = $single['category_id'];
              $subitem['name'] = $single['category_name'];

              $category['subs'][] = $subitem;
              }
              } */

            $result['subs'][] = $category;
        }

        return $result;
    }

    private static function priceRange($data)
    {
        // 首先对价格进行排序
        ksort($data, SORT_NUMERIC);

        $result = array(
            'title' => '价格',
            'name' => '所有价格',
            'sort_col' => 6,
            'dataType' => 'price',
            'subs' => array(
                array(
                    'chosed' => true,
                    'dataId' => 0,
                    'name' => '所有价格'
                )
            )
        );

        $price = array();
        foreach ($data as $key => $one) {

            $price['dataId'] = $key;
            $price['name'] = $one;

            $result['subs'][] = $price;
        }

        return $result;
    }

    private static function size($data)
    {
        $result = array(
            'title' => '尺码',
            'name' => '所有尺码',
            'sort_col' => 5,
            'dataType' => 'size',
            'subs' => array(
                array(
                    'chosed' => true,
                    'dataId' => 0,
                    'name' => '所有尺码'
                )
            )
        );

        $size = array();
        foreach ($data as $one) {

            $size['dataId'] = $one['size_id'];
            $size['name'] = $one['size_name'];

            $result['subs'][] = $size;
        }

        return $result;
    }

    /**
     * 按照数组中指定字段排序二维数组
     *
     * @param  array &$array 需要排序的数组
     * @param  string $field 字段名称
     * @param  boolean $desc 时候降序排列,默认为false
     */
    private static function sortArrByField(&$array, $field, $desc = false)
    {
        $fieldArr = array();
        foreach ($array as $k => $v) {
            $fieldArr[$k] = isset($v[$field]) ? $v[$field] : '';
        }
        $sort = $desc == false ? SORT_ASC : SORT_DESC;
        array_multisort($fieldArr, $sort, $array);
    }

}