FavoriteData.php 6.21 KB
<?php

namespace LibModels\Web\Product;

use Api\Yohobuy;
use Api\Sign;

/**
 * FavoriteData
 * 
 * 收藏相关接口
 */
class FavoriteData
{

    const URL_PRODUCT_FAVORITE = 'shops/service/v1/favorite/';

    /**
     * 根据uid和商品的id查询是否被用户收藏
     * @param int $uid
     * @param int $productId
     * @param boolean $isOnlyUrl 是否指返回链接
     * @return boolean 收藏 true 未收藏 false
     */
    public static function getUidProductFav($uid, $productId, $isOnlyUrl = false)
    {
        $param = Yohobuy::param();
        $param['method'] = 'app.favorite.isFavorite';
        $param['id'] = $productId;
        $param['uid'] = $uid;
        $param['type'] = 'product';
        $param['client_secret'] = Sign::getSign($param);
        //只是返回链接
        if($isOnlyUrl) {
            return Yohobuy::httpBuildQuery(Yohobuy::API_URL, $param);
        }
        return Yohobuy::get(Yohobuy::API_URL, $param);
//      return Yohobuy::yarClient(Yohobuy::SERVICE_URL . self::URL_PRODUCT_FAVORITE, 'getUidProductFav', array($uid, $productSkn));
    }

    /**
     * 根据uid和一组商品的skn列表查询是否被用户收藏
     * 
     * @param int $uid 用户ID
     * @param array $productIdList 商品ID列表
     * @return boolean 收藏 true,未收藏 false
     */
    public static function getUidProductFavList($uid, $productIdList)
    {
//        $result = array();
//
//        foreach ($productSknList as $skn) {
//            Yohobuy::yarConcurrentCall(Yohobuy::SERVICE_URL . self::URL_PRODUCT_FAVORITE, 'getUidProductFav', array($uid, $skn), function($retval) use(&$result, $skn) {
//                $result[$skn] = empty($retval['data']) ? false : $retval['data'];
//            });
//        }
//        Yohobuy::yarConcurrentLoop();
//
//        return $result;
        
        $urlList = array();
        $param = array();

        foreach ($productIdList as $productId) {
            $param = Yohobuy::param();
            $param['method'] = 'app.favorite.isFavorite';
            $param['id'] = $productId;
            $param['uid'] = $uid;
            $param['type'] = 'product';
            $param['client_secret'] = Sign::getSign($param);
            $urlList[$productId] = Yohobuy::httpBuildQuery(Yohobuy::API_URL, $param);
        }
        
        return Yohobuy::getMulti($urlList);
    }

    /**
     * 根据uid和商品的skn收藏商品
     * @param $uid
     * @param $productId
     * @return bool
     */
    public static function addUidProductFav($uid, $productId, $isBrand = false)
    {
        $param = Yohobuy::param();
        $param['method'] = 'app.favorite.add';
        $param['id'] = $productId;
        $param['uid'] = $uid;
        $param['type'] = $isBrand ? 'brand' : 'product';
        $param['client_secret'] = Sign::getSign($param);

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

    /**
     * 根据uid和商品的skn取消收藏商品
     * @param $uid
     * @param $productId
     * @return bool
     */
    public static function delUidProductFav($uid, $productId, $isBrand = false)
    {
        $param = Yohobuy::param();
        $param['method'] = 'app.favorite.cancel';
        $param['fav_id'] = $productId;
        $param['uid'] = $uid;
        $param['type'] = $isBrand ? 'brand' : 'product';
        $param['client_secret'] = Sign::getSign($param);

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

    /**
     * 根据uid和商品的skn收藏或取消收藏商品
     * @param $uid
     * @param $productSkn
     * @return bool
     */
    public static function changeFavoriteProduct($uid, $productSkn)
    {
        return Yohobuy::yarClient(Yohobuy::SERVICE_URL . self::URL_PRODUCT_FAVORITE, 'toggleProduct', array($uid, $productSkn));
    }

    /**
     * 根据uid和商品的skn添加或取消收藏品牌
     * @param $uid
     * @param $productSkn
     * @return bool
     */
    public static function changeFavoriteBrand($uid, $productSkn)
    {
        return Yohobuy::yarClient(Yohobuy::SERVICE_URL . self::URL_PRODUCT_FAVORITE, 'toggleBrandFav', array($uid, $productSkn));
    }

    /**
     * 根据uid和品牌id判断品牌是否收藏
     * @param $uid
     * @param $brandId
     * @return bool
     */
    public static function isFavoriteBrand($uid, $brandId)
    {
        return Yohobuy::yarClient(Yohobuy::SERVICE_URL . self::URL_PRODUCT_FAVORITE, 'getUidBrandFav', array($uid, $brandId));
    }

    /**
     * 取用户否喜欢商品和品牌状态
     * 
     * @param string $uid
     * @param string $productSkn
     * @param string $brandId
     * @return array
     */
    public static function getProductAndBrandByUid($uid, $productSkn, $brandId)
    {
        $result = array('product' => false, 'brand' => false);
        if (!empty($uid)) {
            //获取用户是否喜欢商品
            Yohobuy::yarConcurrentCall(Yohobuy::SERVICE_URL . self::URL_PRODUCT_FAVORITE, 'getUidProductFav', array($uid, $productSkn), function($retval) use(&$result) {
                $result['product'] = $retval['code'] == 200 ? true : false;
            });
            //获取用户是否喜欢品牌
            Yohobuy::yarConcurrentCall(Yohobuy::SERVICE_URL . self::URL_PRODUCT_FAVORITE, 'getUidBrandFav', array($uid, $brandId), function($retval) use(&$result) {
                $result['brand'] = $retval['code'] == 200 ? true : false;
            });
            Yohobuy::yarConcurrentLoop();
        }
        return $result;
    }

    /**
     * 收藏的商品数据
     *
     * @param int $uid 用户ID
     * @param int $page 第几页,默认1
     * @param int $limit 限制读取的数目,默认10
     * @return array 收藏的商品接口返回的数据
     */
    public static function favoriteProductData($uid, $page = 1, $limit = 10)
    {
        $param = Yohobuy::param();
        $param['method'] = 'app.favorite.product';
        $param['uid'] = $uid;
        $param['page'] = $page;
        $param['limit'] = $limit;
        $param['client_secret'] = Sign::getSign($param);

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

}