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

import com.tmerclub.cloud.common.product.vo.SkuAddrVO;
import com.tmerclub.cloud.common.product.vo.SkuVO;
import com.tmerclub.cloud.common.product.vo.app.SkuAppVO;
import com.tmerclub.cloud.common.product.vo.search.SpuAdminVO;
import com.tmerclub.cloud.common.response.ServerResponseEntity;

import java.util.List;

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

    /**
     * 通过skuId获取sku信息
     * @param skuId skuId
     * @return sku信息
     */
    ServerResponseEntity<SkuVO> getById(Long skuId);

    /**
     * 通过spuId获取sku信息
     * @param spuId spuId
     * @return sku信息
     */
    ServerResponseEntity<List<SkuAppVO>> listBySpuId(Long spuId);

    /**
     * 通过spuIds获取sku信息
     * @param spuIds spuIds
     * @return sku信息
     */
    List<SkuVO> listBySpuIds(List<Long> spuIds);

    /**
     * 获取供应商商品信息（包括供应商库存和商家库存）
     * @param spuIds
     * @param shopId
     * @return
     */
    ServerResponseEntity<List<SkuVO>> listSupplierBySpuIds(List<Long> spuIds, Long shopId);

    /**
     * 根据skuId列表获取商品列表
     * @param skuIds
     * @return
     */
    ServerResponseEntity<List<SkuAddrVO>> listSpuDetailByIds(List<Long> skuIds);


    /**
     * 根据skuId列表获取售价最低的商品的售价
     * @param skuIds
     * @return
     */
    ServerResponseEntity<Long> getMinPriceFeeByIds(List<Long> skuIds);

    /**
     * 通过skuIds获取sku信息
     * @param skuIds skuIds
     * @return sku信息
     */
    ServerResponseEntity<List<SkuVO>> getByIds(List<Long> skuIds);

    /**
     * 获取商品sku保存到商品列表
     * @param spuAdminVOList
     * @return
     */
    ServerResponseEntity<List<SpuAdminVO>> setSpuSku(List<SpuAdminVO> spuAdminVOList);

    /**
     * 处理sku更新
     * @param beforeData 更新之前的数据
     * @param afterData 更新之后的数据
     */
    void processSkuUpdate(SkuVO beforeData, SkuVO afterData);

    /**
     * 获取指定的sku及名称
     * @param skuId
     * @return
     */
    SkuVO getSkuAndNameById(long skuId);

    /**
     * 根据skuIds获取sku信息
     * @param skuIds skuIds
     * @return sku信息
     */
    List<SkuVO> listBySkuIds(List<Long> skuIds);

    /**
     * 根据商品编码集合获取skuVO集合
     * @param partyCodes 商品编码集合
     * @return skuVO集合
     */
    List<SkuVO> listByPartyCodes(List<String> partyCodes);

    /**
     * 获取商家代销商品skuVO集合
     * @param supplierSkuIds 供应商skuId集合
     * @param shopId 店铺id
     * @return 商家代销商品skuVO
     */
    List<SkuVO> listShopSaleSku(List<Long> supplierSkuIds, Long shopId);
}
