
package com.tmerclub.cloud.product.service;

import com.tmerclub.cloud.api.product.dto.CategoryShopDTO;
import com.tmerclub.cloud.product.bo.CategoryRateBO;
import com.tmerclub.cloud.product.model.CategoryShop;
import com.tmerclub.cloud.product.vo.CategoryShopVO;

import java.util.List;

/**
 * 店铺签约分类关联信息
 *
 * @Author lth
 * @Date 2021/4/25 14:33
 */
public interface CategoryShopService {

    /**
     * 根据店铺分类关联信息id获取店铺分类关联信息
     *
     * @param categoryShopId 店铺分类关联信息id
     * @return 店铺分类关联信息
     */
    CategoryShop getById(Long categoryShopId);

    /**
     * 签约平台分类
     * @param categoryShopDTOList
     * @param shopId
     * @param sysType
     */
    void signingCategory(List<CategoryShopDTO> categoryShopDTOList, Long shopId, Integer sysType);

    /**
     * 根据店铺id获取签约分类列表
     * @param shopId
     * @param sysType
     * @param lang
     * @return
     */
    List<CategoryShopVO> listByShopId(Long shopId, Integer sysType, Integer lang);

    /**
     * 获取店铺签约的平台三级分类佣金
     * @param shopId 店铺id
     * @param sysType
     * @return 平台佣金
     */
    List<CategoryRateBO> listRateByShopId(Long shopId, Integer sysType);

    /**
     * 根据分类id删除店铺分类关联关系
     * @param categoryId
     */
    void deleteByCategoryId(Long categoryId);

    /**
     * 根据存在变化的分类的id清除缓存
     * @param categoryId
     */
    void removeCacheByChangeCategoryId(Long categoryId);

    /**
     * 根据店铺id批量保存分类签约信息
     * @param categoryShopDTOList
     * @param shopId
     * @param sysType
     */
    void insertBatchByShopId(List<CategoryShopDTO> categoryShopDTOList, Long shopId, Integer sysType);

    /**
     * 根据存在变化的分类的id列表清除缓存
     * @param categoryIds
     * @param sysType
     */
    void removeCacheByChangeCategoryIds(List<Long> categoryIds, Integer sysType);

    /**
     * 根据店铺id获取有相同分类的供应商
     *
     * @param shopId  店铺id
     * @param categoryId
     * @param sysType
     * @return 供应商ids
     */
    CategoryShopVO getByShopIdAndCategoryId(Long shopId, Long categoryId, Integer sysType);

    /**
     * 根据店铺id获取有相同分类的供应商
     * @param shopId 店铺id
     * @return 供应商ids
     */
    List<Long> getSupplierIdsByShopId(Long shopId);

    /**
     * 根据店铺id与分类id统计签约数量
     * @param shopId
     * @param categoryId
     * @param sysType
     * @return
     */
    int countByShopIdAndCategoryId(Long shopId, Long categoryId, Integer sysType);

    /**
     * 删除店铺签约分类关系
     * @param categoryShop

     */
    void deleteSigningCategory(CategoryShop categoryShop);

    /**
     * 根据店铺id获取所有分类ids
     * @param shopId 店铺id
     * @param sysType
     * @return 所有分类ids
     */
    List<Long> getCategoryIdsByShopId(Long shopId, Integer sysType);

    /**
     * 根据分类id获取绑定的供应商id
     * @param categoryIds
     * @return
     */
    List<Long> getSupplyIdByCategoryIds(List<Long> categoryIds);

    /**
     * 新增签约分类
     * @param categoryShopDTOList 分类签约列表
     * @param shopId 店铺id
     * @param sysType 系统类型
     */
    void addSigningCategory(List<CategoryShopDTO> categoryShopDTOList, Long shopId, Integer sysType);
}
