package com.jiayue.ipfcst.common.data.repository;

import com.jiayue.ipfcst.common.data.entity.ForecastPowerShortTermOneHis;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import java.util.Date;
import java.util.List;

/**
 * 上报短期预测功率仓储
 *
 * @author zzy
 * @version 1.0
 * @since 2019/8/2 10:57
 */
public interface ForecastPowerShortTermOneHisRepository extends BaseRepository<ForecastPowerShortTermOneHis, Integer> {

//    /**
//     * 根据预测时间段查询预测数据（按预测时间正序）
//     *
//     * @param stTime 开始时间
//     * @param eTime  结束时间
//     * @return @see com.jiayue.ipfcst.core.entity.power.ForecastPowerReverse
//     */
//    List<ForecastPowerShortTermUpload> findByKeyTimeBetweenOrderByKeyTimeAsc(Date stTime, Date eTime);
//
//    /**
//     * 根据预测时间段和预测跨度查询预测数据（按预测时间正序）
//     *
//     * @param stTime 开始时间
//     * @param eTime  结束时间
//     * @param num  预测跨度[前几天预测]
//     * @return @see com.jiayue.ipfcst.core.entity.power.ForecastPowerReverse
//     */
//    List<ForecastPowerShortTermUpload> findByKeyTimeBetweenAndNumOrderByKeyTimeAsc(Date stTime, Date eTime, Integer num);
//
//    /**
//     * 根据上报日期查询预测数据（按预测时间正序）
//     *
//     * @param update 上报日期
//     * @return @see com.jiayue.ipfcst.core.entity.power.ForecastPowerReverse
//     */
//    List<ForecastPowerShortTermUpload> findByKeyUpDateOrderByKeyTimeAsc(Date update);

	/**
	 * 根据时间段删除当日凌晨零点以后生成的短期历史期数据
	 *
	 * @param startTime 开始时间
	 * @param endTime   结束时间
	 */
	@Modifying
	@Query(value = "delete from ForecastPowerShortTermOneHis t where t.genDate >= CURRENT_DATE and t.forecastTime >=?1 and t.forecastTime<=?2")
	void deleteToday(Long startTime, Long endTime);

	/**
	 * 根据提前多久，开始结束时间查询历史短期 yh
	 *
	 * @param startTime 开始时间
	 * @param endTime   结束时间
	 * @param ago       提前多久预测
	 * @return 结果集
	 */
	List<ForecastPowerShortTermOneHis> findByForecastTimeBetweenAndForecastHowLongAgo(Long startTime, Long endTime, Integer ago);

	/**
	 * 根据提前多久，时间查询历史短期 yh
	 *
	 * @param queryTime 时间
	 * @param ago       提前多久预测
	 * @return 结果集
	 */
	ForecastPowerShortTermOneHis findByForecastTimeAndForecastHowLongAgo(Long queryTime, Integer ago);

	/**
	 * 根据时间段删除和提前多久预测删除短期数据
	 *
	 * @param startTime 开始时间
	 * @param endTime   结束时间
	 */
	void deleteByForecastTimeBetweenAndForecastHowLongAgo(Long startTime, Long endTime,int HowLongAgo);


	List<ForecastPowerShortTermOneHis> findByGenDateBetween(Date startTime, Date endTime);
}
