package com.gyee.frame.util;



import com.gyee.frame.model.auto.WindPowerStationTestingPoint;
import com.gyee.frame.model.auto.WindTurbineTestingPointAi;
import com.gyee.frame.model.custom.DNAStatVal;
import com.gyee.frame.model.custom.DNAVal;
import com.gyee.frame.model.custom.PointData;

import java.util.List;
import java.util.Map;


public interface IRealTimeDataBaseUtil {
    /**
     * 通过风场测点获得测点实时数据
     * @param point 只是用了code字段，作为唯一标识
     * @returns
     * @throws Exception
     */
    public PointData getRealData(WindPowerStationTestingPoint point) throws Exception;

    /**
     * 通过风场测点获得测点历史快照数据
     * @param point 只是用了code字段，作为唯一标识
     * @param beginDate 开始时间（秒级）
     * @param endDate 结束时间（秒级）
     * @param count  点数
     * @param pried  时间间隔
     * @return
     * @throws Exception
     */
    public List<PointData> getHistoryDatasSnap(WindPowerStationTestingPoint point, Long beginDate, Long endDate, Long count, Long pried) throws Exception;

    /**
     * 通过风场测点获得测点历史存储数据，存多少取多少
     * @param point 只是用了code字段，作为唯一标识
     * @param beginDate 开始时间（秒级）
     * @param endDate 结束时间（秒级）
     * @return
     * @throws Exception
     */
    public List<PointData> getHistoryDatasRaw(WindPowerStationTestingPoint point, Long beginDate, Long endDate) throws Exception;

    /**
     * 通过风机测点获得测点实时数据
     * @param point 只是用了id字段，作为唯一标识
     * @return
     * @throws Exception
     */
    public PointData getRealData(WindTurbineTestingPointAi point) throws Exception;

    /**
     * 通过风机测点获得历史快照
     * @param point  只是用了id字段，作为唯一标识
     * @param  beginDate 开始时间（秒级）
     * @param endDate 结束时间（秒级）
     * @param count  点数
     * @param pried  时间间隔
     * @return
     * @throws Exception
     */
    public List<PointData> getHistoryDatasSnap(WindTurbineTestingPointAi point, Long beginDate, Long endDate, Long count, Long pried) throws Exception;

    /**
     * 通过风机测点获得测点历史存储数据，存多少取多少
     * @param point 只是用了id字段，作为唯一标识
     * @param  beginDate 开始时间（秒级）
     * @param endDate 结束时间（秒级）
     * @return
     * @throws Exception
     */
    public List<PointData> getHistoryDatasRaw(WindTurbineTestingPointAi point, Long beginDate, Long endDate) throws Exception;


    /**
     * 通过风机测点获得测点实时数据
     * @param pointid 测点编号
     * @return
     * @throws Exception
     */
    public PointData getRealData(String pointid) throws Exception;

    /**
     * 通过全局点名获得测点实时数据 读取多个点
     * @param pointids 测点的数组
     * @return 列表集合
     * @throws Exception
     */
    public List<PointData> getRealData(String... pointids) throws Exception;
    /**
     * 通过全局点名获得测点实时数据 读取多个点
     * @param pointids 测点的列表
     * @return 列表集合
     * @throws Exception
     */
    public List<PointData> getRealData(List<String> pointids) throws Exception;
    /**
     * 通过全局点名获得测点实时数据 读取多个点
     * @param pointids 测点的数组
     * @return Map集合
     * @throws Exception
     */
    public Map<String, Double> getRealDataMap(String... pointids) throws Exception;

    /**
     * 通过全局点名获得历史数据快照
     * @param pointid  全局点名
     * @param beginDate 开始时间（秒级）
     * @param endDate 结束时间（秒级）
     * @param count  点数
     * @param pried  时间间隔
     * @return
     * @throws Exception
     */
    public List<PointData> getHistoryDatasSnap(String pointid, Long beginDate, Long endDate, Long count, Long pried) throws Exception;

    /**
     * 通过风机测点获得测点历史存储数据，存多少取多少
     * @param pointid 全局点名
     * @param  beginDate 开始时间（秒级）
     * @param endDate 结束时间（秒级）
     * @return
     * @throws Exception
     */
    public List<PointData> getHistoryDatasRaw(String pointid, Long beginDate, Long endDate) throws Exception;


    /**
     * 通过风机测点获得测点指定时间周期的统计数据
     * @param point 只是用了id字段，作为唯一标识
     * @param  beginDate 开始时间（秒级）
     * @param endDate 结束时间（秒级）
     * @param count  点数
     * @param pried  时间间隔
     * @type 0、最大值。1、最小值。、平均值
     * @return
     * @throws Exception
     */
    public List<PointData> getHistStat(WindTurbineTestingPointAi point, Long beginDate, Long endDate, Long count, Long pried, int type) throws Exception;

    /**
     * 通过风场测点获得测点指定时间周期的统计数据
     * @param point 只是用了code字段，作为唯一标识
     * @param  beginDate 开始时间（秒级）
     * @param endDate 结束时间（秒级）
     * @param count  点数
     * @param pried  时间间隔
     * @type 0、最大值。1、最小值。、平均值
     * @return
     * @throws Exception
     */
    public List<PointData> getHistStat(WindPowerStationTestingPoint point, Long beginDate, Long endDate, Long count, Long pried, int type) throws Exception;

    /**
     * 通过全局点名获得测点指定时间周期的统计数据
     * @param pointid 全局点名
     * @param  beginDate 开始时间（秒级）
     * @param endDate 结束时间（秒级）
     * @param count  点数
     * @param pried  时间间隔
     * @type 0、最大值。1、最小值。、平均值
     * @return
     * @throws Exception
     */
    public List<PointData> getHistStat(String pointid, Long beginDate, Long endDate, Long count, Long pried, int type) throws Exception;

    /**
     * 通过全局点名获得测点指定时间周期的统计数据 同时返回max、min、avg数据
     * @param point 全局点名
     * @param  beginDate 开始时间（秒级）
     * @param endDate 结束时间（秒级）
     * @param pried  时间间隔
     * @return
     * @throws Exception
     */
    public DNAStatVal[] getHistStat(String point, Long beginDate, Long endDate, Integer pried) throws Exception;
    /**
     * 补录单点历史数据
     * @param point 测点对象
     * @return
     * @throws Exception
     */
    public void updatePoint(PointData point) throws Exception;

    /**
     * 批量查询实时数据
     * @param tagNames 测点字符串数组
     * @return
     * @throws Exception
     */

    public DNAVal[] getRealtimeTagValues(String... tagNames) throws Exception;

    /**
     * 批量插入历史数据
     * @param pointls 测点对象集合
     * @throws Exception
     */
    public void updatePoint(List<PointData> pointls) throws Exception;

    /**
     *
     * @param nameList 测点名称列表集合
     * @param tTime  时间点（秒级）
     * @return
     * @throws Exception
     */
    public DNAVal[] getHistMatrix(String[] nameList, long tTime) throws Exception;
}
