
package com.tmerclub.cloud.combo.mapper;

import com.tmerclub.cloud.combo.model.ComboSpu;
import com.tmerclub.cloud.common.product.vo.ComboSpuVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

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

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

    /**
     * 根据套餐商品项id获取套餐商品项
     *
     * @param comboSpuId 套餐商品项id
     * @return 套餐商品项
     */
    ComboSpuVO getByComboSpuId(@Param("comboSpuId") Long comboSpuId);

    /**
     * 保存套餐商品项
     *
     * @param comboSpu 套餐商品项
     */
    void save(@Param("comboSpu") ComboSpu comboSpu);

    /**
     * 更新套餐商品项
     *
     * @param comboSpu 套餐商品项
     */
    void update(@Param("comboSpu") ComboSpu comboSpu);

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

    /**
     * 改变套餐商品状态
     *
     * @param comboSpu
     */
    void updateStatus(@Param("comboSpu") ComboSpu comboSpu);

    /**
     * 根据套餐ID获取搭配商品信息
     * @param comboId
     * @param status
     * @return
     */
    List<ComboSpuVO> matchingSpuByComboId(@Param("comboId") Long comboId, @Param("status") Integer status);


    /**
     * 根据套餐商品项id获取套餐商品项
     *
     * @param spuId   套餐商品id
     * @param comboId
     * @return 套餐商品项
     */
    ComboSpuVO getBySpuId(@Param("spuId") Long spuId, @Param("comboId") Long comboId);

    /**
     * 根据套餐id获取主商品信息(状态不为删除的)
     *
     * @param comboId
     * @return
     */
    ComboSpuVO getMainSpuByComboId(@Param("comboId") Long comboId);

    /**
     * 根据套餐id获取主商品信息(状态不为删除的)
     *
     * @param comboId
     * @return
     */
    ComboSpuVO getMainComboSpuId(@Param("comboId") Long comboId);

    /**
     * 根据套餐id获取搭配商品信息
     *
     * @param comboId
     * @return
     */
    List<ComboSpuVO> getMatchSpuByComboId(@Param("comboId") Long comboId);

    /**
     * 根据comboSpuIdList批量删除
     *
     * @param comboSpuIdList
     */
    void deleteBatch(@Param("comboSpuIdList") List<Long> comboSpuIdList);

    /**
     * 根据套餐id集合批量将已过期未改变的状态的套餐商品项的状态修改为失效
     *
     * @param comboIdList
     * @param status
     */
    void batchUpdateByComboIdList(@Param("comboIdList") List<Long> comboIdList, @Param("status") Integer status);

    /**
     * 根据套餐id获取套餐商品项信息
     *
     * @param comboIdList
     * @return
     */
    List<ComboSpuVO> comboSpuByComboIds(@Param("comboIdList") List<Long> comboIdList);

    /**
     * 批量把状态为正常的套餐商品修改为失效状态
     *
     * @param spuIdList
     */
    void batchComboSpuStatus(@Param("spuIdList") List<Long> spuIdList);

    /**
     * 获取套餐下的商品和sku信息
     * @param comboId
     * @return
     */
    List<ComboSpuVO> getComboSpuByComboId(@Param("comboId") Long comboId);
}
