package cn.gyee.tamplate.util.golden;




import cn.gyee.tamplate.model.WindPowerStationTestingPoint2;
import cn.gyee.tamplate.model.WindTurbineTestingPointAi2;
import cn.gyee.tamplate.model.custom.DNAStatVal;
import cn.gyee.tamplate.model.custom.DNAVal;
import cn.gyee.tamplate.model.custom.PointData;

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


public interface IEdosUtil {

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

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

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

    /**
     * 通过风机测点获得历史快照
     * @param point  只是用了id字段，作为唯一标识
     * @param  beginDate 开始时间（秒级）
     * @param endDate 结束时间（秒级）
     * @param count  点数
     * @param pried  时间间隔
     * @return
     * @throws Exception
     */
    public List<PointData> getHistoryDatasSnap(WindTurbineTestingPointAi2 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(WindTurbineTestingPointAi2 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(WindTurbineTestingPointAi2 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(WindPowerStationTestingPoint2 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 point 测点对象
     * @throws Exception
     */
    public void sendSinglePoint(PointData point) throws Exception ;
    /**
     * 批量写入实时数据
     * @param pointls 测点对象列表
     * @throws Exception
     */
    public void sendMultiPoint(List<PointData> pointls) throws Exception ;

    /**
     * 通过两个字符串数组对象批量写入实时数据
     * @param realvalue 插入值字符串数组
     * @param pointls 存储对象数组对象
     * @throws Exception
     */
    
    public void sendMultiPoint(String[] realvalue,DNAVal[] pointls) throws Exception;
    /**
     *  
     * @param nameList 测点名称列表集合
     * @param tTime  时间点（秒级）
     * @return
     * @throws Exception
     */
    public DNAVal[] getHistMatrix(String[] nameList, int tTime) throws Exception;
    
}
