
package com.tmerclub.cloud.combo.mapper;

import com.tmerclub.cloud.combo.model.Combo;
import com.tmerclub.cloud.common.product.dto.ComboDTO;
import com.tmerclub.cloud.common.product.vo.ComboVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 套餐
 *
 * @author tmerclub
 * @date 2022-08-16 09:18:06
 */
public interface ComboMapper {

    /**
     * 获取套餐列表
     *
     * @param comboDTO
     * @return 套餐列表
     */
    List<ComboVO> list(@Param("comboDTO") ComboDTO comboDTO);

    /**
     * 根据套餐id获取套餐
     *
     * @param comboId 套餐id
     * @return 套餐
     */
    ComboVO getByComboId(@Param("comboId") Long comboId);

    /**
     * 保存套餐
     *
     * @param combo 套餐
     */
    void save(@Param("combo") Combo combo);

    /**
     * 更新套餐
     *
     * @param combo 套餐
     */
    void update(@Param("combo") Combo combo);

    /**
     * 修改商品套餐状态
     *
     * @param comboId
     * @param status
     */
    void updateComboStatus(@Param("comboId") Long comboId, @Param("status") Integer status);

    /**
     * 批量修改套餐状态
     *
     * @param comboIdList
     * @param status
     */
    void batchUpdateComboStatus(@Param("comboIdList") List<Long> comboIdList, @Param("status") Integer status);

    /**
     * 根据spuId获取相关的套餐信息
     *
     * @param spuId
     * @param shopId
     * @return
     */
    List<ComboVO> listComboInfoBySpuId(@Param("shopId") Long shopId, @Param("spuId") Long spuId);

    /**
     * 根据商品id获取套餐信息
     *
     * @param spuId
     * @return
     */
    List<ComboVO> comboVoListBySpuId(@Param("spuId") Long spuId);

    /**
     * 获取应该结束但是没有结束的套餐列表
     *
     * @return 应该结束但是没有结束的秒杀列表
     */
    List<ComboVO> listUnEndButNeedEndActivity();

    /**
     * 批量 套餐销量增加
     *
     * @param comboList
     */
    void comboSoldNumAdd(@Param("comboList") List<ComboDTO> comboList);

    /**
     * 根据主商品id获取指定状态的套餐
     *
     * @param spuId
     * @param status
     * @return
     */
    List<ComboVO> comboIdByMainSpuId(@Param("spuId") Long spuId, @Param("status") Integer status);

    /**
     * 查看商品是否参与了正在进行的套餐
     *
     * @param spuId 商品id
     * @param shopId 店铺id
     * @return
     */
    Integer checkComboSpu(@Param("spuId") Long spuId, @Param("shopId") Long shopId);

    /**
     * 获取本该开始的而未开始的套餐id
     *
     * @return
     */
    List<ComboVO> notStartComboIdButStart();


    /**
     * 根据套餐id集合检查套餐是否全部可用
     *
     * @param comboIdList
     * @return 返回不可用套餐数量 0代表全部可用，其它数据代表有不可用的套餐
     */
    Integer checkComboIsUsable(@Param("comboIdList") List<Long> comboIdList);

    /**
     * 根据搭配商品id获取主商品id
     * @param spuId
     * @return
     */
    List<Long> getComboMainSpuIdBySpuId(@Param("spuId") Long spuId);

    /**
     * 根据套餐id集合获取套餐信息
     * @param comboIdList
     * @return
     */
    List<ComboVO> getComboByComboIdList(@Param("comboIdList") List<Long> comboIdList);
}
