
package com.tmerclub.cloud.api.product.feign;

import com.tmerclub.cloud.common.product.bo.EsProductBO;
import com.tmerclub.cloud.common.product.vo.SpuVO;
import com.tmerclub.cloud.common.response.ServerResponseEntity;

import java.util.List;

/**
 * @author tmerclub
 * @date 2020/11/12
 */
public interface ProductFeignClient {

    /**
     * 通过spuId需要搜索的商品
     *
     * @param spuId spuid
     * @return es保存的商品信息
     */
    ServerResponseEntity<EsProductBO> loadEsProductBO(Long spuId);

    /**
     * 根据平台categoryId，获取spuId列表
     *
     * @param shopCategoryIds
     * @return spuId列表
     */
    ServerResponseEntity<List<Long>> getSpuIdsByShopCategoryIds(List<Long> shopCategoryIds);

    /**
     * 根据categoryId列表，获取spuId列表
     *
     * @param categoryIds
     * @return spuId列表
     */
    ServerResponseEntity<List<Long>> getSpuIdsByCategoryIds(List<Long> categoryIds);

    /**
     * 根据brandId，获取spuId列表
     *
     * @param brandId
     * @return spuId列表
     */
    ServerResponseEntity<List<Long>> getSpuIdsByBrandId(Long brandId);

    /**
     * 根据供应商店铺id，获取spuId列表(仅处于上架状态的商品)
     * @param supplierId
     * @param createTime
     * @param supplierSpuType
     * @return
     */
    ServerResponseEntity<List<SpuVO>> listSpuIdsBySupplierIdAndSupplierSpuType(Long supplierId, String createTime, Integer supplierSpuType);

    /**
     * 根据供应商id批量获取商家代销商品信息(所有商品,不包括删除商品)
     *
     * @param supplierId
     * @return
     */
    List<SpuVO> listMerchantSpuIdsBySupplierId(Long supplierId);

    /**
     * 根据商品id列表获取商品列表
     *
     * @param spuIds
     * @return
     */
    ServerResponseEntity<List<SpuVO>> listSpuBySpuIds(List<Long> spuIds);

    /**
     * 获取spu分组列表
     *
     * @param spuId
     * @return spu分组列表
     */
    ServerResponseEntity<List<Long>> getSpuTagBySpuId(Long spuId);

    /**
     * 商品状态发生改变时，需要处理的事件
     *
     * @param spuId 商品id
     */
    void handleStatusChange(Long spuId);

}
