package com.xzzn.ems.mapper;

import com.xzzn.ems.domain.EmsStrategyTimeConfig;
import com.xzzn.ems.domain.vo.StrategyTimeConfigVo;

import java.util.List;

import org.apache.ibatis.annotations.Param;

/**
 * 时间配置Mapper接口
 *
 * @author xzzn
 * @date 2025-07-11
 */
public interface EmsStrategyTimeConfigMapper
{
    /**
     * 查询时间配置
     *
     * @param id 时间配置主键
     * @return 时间配置
     */
    public EmsStrategyTimeConfig selectEmsStrategyTimeConfigById(Long id);

    /**
     * 查询时间配置列表
     *
     * @param emsStrategyTimeConfig 时间配置
     * @return 时间配置集合
     */
    public List<EmsStrategyTimeConfig> selectEmsStrategyTimeConfigList(EmsStrategyTimeConfig emsStrategyTimeConfig);

    /**
     * 新增时间配置
     *
     * @param emsStrategyTimeConfig 时间配置
     * @return 结果
     */
    public int insertEmsStrategyTimeConfig(EmsStrategyTimeConfig emsStrategyTimeConfig);

    /**
     * 修改时间配置
     *
     * @param emsStrategyTimeConfig 时间配置
     * @return 结果
     */
    public int updateEmsStrategyTimeConfig(EmsStrategyTimeConfig emsStrategyTimeConfig);

    /**
     * 删除时间配置
     *
     * @param id 时间配置主键
     * @return 结果
     */
    public int deleteEmsStrategyTimeConfigById(Long id);

    /**
     * 批量删除时间配置
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteEmsStrategyTimeConfigByIds(Long[] ids);

    // 获取该策略下的时间配置
    public List<StrategyTimeConfigVo> getStrategyTimeList(EmsStrategyTimeConfig emsStrategyTimeConfig);

    // 清空该月的模板信息
    public void cleanTemplateId(String templateId);

    // 获取该策略下的时间配置
    List<EmsStrategyTimeConfig> getAllTimeConfigByTempId(String templateId);

    // 获取指定月份和策略下的时间配置
    List<EmsStrategyTimeConfig> getTimeConfigByTempIdAndMonth(@Param("templateId") String templateId, @Param("month") int month);

    // 设置该模版的时间配置为待下发
    public void updateTimeConfigWaitingPost(String templateId);

    // 判断时间配置是否存在
    public EmsStrategyTimeConfig getExistTimeConfig(@Param("siteId")String siteId,
                                                    @Param("strategyId")Long strategyId,
                                                    @Param("month")Long month);
}
