
package com.tmerclub.cloud.combo.mapper;

import com.tmerclub.cloud.api.combo.vo.ComboSkuVo;
import com.tmerclub.cloud.combo.model.ComboSpuSku;
import com.tmerclub.cloud.common.product.vo.ComboSpuSkuVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * 套餐商品sku项
 *
 * @author tmerclub
 * @date 2022-08-16 09:18:06
 */
public interface ComboSpuSkuMapper {

    /**
     * 获取套餐商品sku项列表
     *
     * @return 套餐商品sku项列表
     */
    List<ComboSpuSkuVO> list();

    /**
     * 保存套餐商品sku项
     *
     * @param comboSpuSkuList 套餐商品sku项
     * @param comboSpuId
     */
    void save(@Param("comboSpuSkuList") List<ComboSpuSku> comboSpuSkuList, @Param("comboSpuId") Long comboSpuId);

    /**
     * 更新套餐商品sku项
     *
     * @param comboSpuSku 套餐商品sku项
     */
    void update(@Param("comboSpuSku") ComboSpuSku comboSpuSku);

    /**
     * 根据套餐商品sku项id删除套餐商品sku项
     *
     * @param comboSpuId
     */
    void delete(@Param("comboSpuId") Long comboSpuId);

    /**
     * 保存套餐商品sku项信息
     *
     * @param skuList
     * @param comboSpuId
     */
    void insertBatch(@Param("skuList") List<ComboSpuSku> skuList, @Param("comboSpuId") Long comboSpuId);

    /**
     * 根据套餐商品项id获取套餐商品sku项(状态为正常的）
     *
     * @param comboSpuId 套餐商品项id
     * @return 套餐商品sku项
     */
    List<ComboSpuSkuVO> getByComboSpuId(@Param("comboSpuId") Long comboSpuId);

    /**
     * 根据套餐商品项id获取套餐商品sku项(全部）
     *
     * @param comboSpuId 套餐商品项id
     * @return 套餐商品sku项
     */
    List<ComboSpuSkuVO> getByComboSpuIdS(@Param("comboSpuId") Long comboSpuId);

    /**
     * 根据套餐商品项id获取套餐商品sku项
     *
     * @param comboSpuIds 套餐商品项id列表
     * @return 套餐商品sku项
     */
    List<ComboSpuSkuVO> batchByComboSpuId(@Param("comboSpuIds") List<Long> comboSpuIds);

    /**
     * 批量更新
     *
     * @param comboSpuSkuList
     */
    void batchUpdate(@Param("comboSpuSkuList") List<ComboSpuSku> comboSpuSkuList);

    /**
     * 根据套餐id列表和sku列表获取套餐信息
     *
     * @param comboIdList
     * @param skuIdList
     * @return
     */
    List<ComboSkuVo> comboVoListComboAndSkuList(@Param("comboIdList") Set<Long> comboIdList, @Param("skuIdList") List<Long> skuIdList);

    /**
     * 根据套餐商品表id获取套餐商品sku信息
     *
     * @param comboSpuId
     * @return
     */
    List<ComboSpuSkuVO> comboVoListByComboSpuId(@Param("comboSpuId") Long comboSpuId);

    /**
     * 根据套餐商品sku项id列表批量删除套餐商品sku项
     *
     * @param comboSpuIdList
     */
    void deleteBatch(@Param("comboSpuIdList") List<Long> comboSpuIdList);

    /**
     * 根据套餐商品表id集合获取套餐商品sku信息
     *
     * @param comboSpuIdList
     * @return
     */
    List<ComboSpuSkuVO> comboSpuSkuList(@Param("comboSpuIdList") List<Long> comboSpuIdList);

    /**
     * 根据套餐id和商品id获取套餐商品sku信息
     *
     * @param comboId
     * @param spuId
     * @return
     */
    List<ComboSpuSkuVO> comboSpuSkuListByComboIdAndSpuId(@Param("comboId") Long comboId, @Param("spuId") Long spuId);

    /**
     * 根据套餐商品项id集合批量修改套餐商品sku项状态
     *
     * @param comboSpuIdList
     * @param status
     */
    void batchUpdateByComboSpuIdList(@Param("comboSpuIdList") List<Long> comboSpuIdList, @Param("status") Integer status);

    /**
     * 根据套餐商品项id删除套餐商品sku项
     * @param comboSpuId
     */
    void deleteById(@Param("comboSpuId") Long comboSpuId);
}
