
package com.tmerclub.cloud.user.mapper;

import com.tmerclub.cloud.user.dto.CostPerPopupDTO;
import com.tmerclub.cloud.user.model.CostPerPopup;
import com.tmerclub.cloud.user.vo.CostPerPopupVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 弹窗广告
 * @author TRACK
 */
public interface CostPerPopupMapper {

    /**
     * 获取弹窗广告列表
     * @param costPerPopupDTO 查询参数
     * @return 弹窗广告列表
     */
    List<CostPerPopupVO> list(@Param("costPerPopup")CostPerPopupDTO costPerPopupDTO);

    /**
     * 获取当前可以推送的商家弹窗
     * @param isShopCustomer
     * @param pageType
     * @param spuId
     * @param shopId
     * @return
     */
    List<CostPerPopup> getShopPopupByCondition(@Param("isShopCustomer")Integer isShopCustomer, @Param("pageType")Integer pageType,
                                         @Param("spuId")Long spuId, @Param("shopId")Long shopId);

    /**
     * 获取当前可以推送的平台弹窗
     * @param userLevelIds
     * @param pageType
     * @return
     */
    List<CostPerPopup> getSysPopupByCondition(@Param("userLevelIds")List<Long> userLevelIds, @Param("pageType")Integer pageType);

    /**
     * 根据弹窗广告id获取弹窗广告
     * @param popupId 弹窗广告id
     * @return 弹窗广告
     */
    CostPerPopup getByPopupId(@Param("popupId") Long popupId);

    /**
     * 保存弹窗广告
     * @param costPerPopup 弹窗广告
     */
    void save(@Param("costPerPopup") CostPerPopup costPerPopup);

    /**
     * 更新弹窗广告
     * @param costPerPopup 弹窗广告
     */
    void update(@Param("costPerPopup") CostPerPopup costPerPopup);

    /**
     * 根据弹窗广告id删除弹窗广告
     * @param popupId id
     */
    void deleteById(@Param("popupId") Long popupId);

    /**
     * 根据弹窗广告id失效弹窗广告
     * @param popupId id
     */
    void invalid(@Param("popupId") Long popupId);

    /**
     * 根据参数获取对应列表
     * @param costPerPopup 参数
     * @return 列表
     */
    List<CostPerPopupVO> listByParam(@Param("costPerPopup") CostPerPopup costPerPopup);

    /**
     * 根据状态获取需要改变成这个状态的广告
     * @param status
     * @return
     */
    List<Long> listPopUpByStatus(@Param("status") Integer status);

    /**
     * 更新状态
     * @param status
     */
    void updateStatus(@Param("status") Integer status);

    /**
     * 根据店铺获取未结束的商品详情页的弹窗广告列表
     * @param shopId
     * @return
     */
    List<CostPerPopup> listNotEndByShopId(@Param("shopId") Long shopId);

    /**
     * 根据店铺获取未结束的弹窗广告列表
     * @param shopIds
     * @return
     */
    List<CostPerPopup> listNotEndLinkByShopId(@Param("shopIds") List<Long> shopIds);

    /**
     * 批量更新弹窗广告为结束
     * @param popupIds
     */
    void updateStatusBatch(@Param("popupIds") List<Long> popupIds);
}
