package com.xzzn.ems.mapper;

import com.xzzn.ems.domain.EmsAmmeterData;
import com.xzzn.ems.domain.vo.AmmeterStatisListVo;
import com.xzzn.ems.domain.vo.DateSearchRequest;
import com.xzzn.ems.domain.vo.MonthlyTimeRange;
import com.xzzn.ems.domain.vo.PowerStatisListVo;
import com.xzzn.ems.domain.vo.SiteMonitorDataVo;
import com.xzzn.ems.domain.vo.StatisAmmeterDateRequest;
import com.xzzn.ems.domain.vo.TimePointQuery;
import com.xzzn.ems.domain.vo.TimePointValue;

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

import org.apache.ibatis.annotations.Param;

/**
 * 总数据Mapper接口
 *
 * @author xzzn
 * @date 2025-07-03
 */
public interface EmsAmmeterDataMapper
{
    /**
     * 查询总数据
     *
     * @param id 总数据主键
     * @return 总数据
     */
    public EmsAmmeterData selectEmsAmmeterDataById(Long id);

    /**
     * 查询总数据列表
     *
     * @param emsAmmeterData 总数据
     * @return 总数据集合
     */
    public List<EmsAmmeterData> selectEmsAmmeterDataList(EmsAmmeterData emsAmmeterData);

    /**
     * 新增总数据
     *
     * @param emsAmmeterData 总数据
     * @return 结果
     */
    public int insertEmsAmmeterData(EmsAmmeterData emsAmmeterData);

    /**
     * 修改总数据
     *
     * @param emsAmmeterData 总数据
     * @return 结果
     */
    public int updateEmsAmmeterData(EmsAmmeterData emsAmmeterData);

    /**
     * 删除总数据
     *
     * @param id 总数据主键
     * @return 结果
     */
    public int deleteEmsAmmeterDataById(Long id);

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

    /**
     * 按小时获取当天电表曲线数据
     * @param requestVo
     * @return
     */
    public List<AmmeterStatisListVo> getLoadDataByHour(StatisAmmeterDateRequest requestVo);

    // 获取昨天最晚数据
    public EmsAmmeterData getYestLatestDate(@Param("siteId")String siteId, @Param("deviceId")String deviceId, @Param("yestData")String yestData);

    // 获取可统计站点每个月的时间范围
    public List<MonthlyTimeRange> getMonthlyTimeRanges();

    // 批量获取站点时间节点的充放电数据
    public List<TimePointValue> batchGetTimePointValues(List<TimePointQuery> timePointQueries);

    // 概率统计-电量指标（按小时）
    public List<SiteMonitorDataVo> getChargeDataByHour(@Param("siteId")String siteId, @Param("deviceId")String deviceId,@Param("startDate")Date startDate);

    // 概率统计-电量指标（按月）
    public List<SiteMonitorDataVo> getChargeDataByMonth(@Param("siteId")String siteId, @Param("deviceId")String deviceId,@Param("startDate")Date startDate,@Param("endDate")Date endDate);

    // 报表统计-功率曲线
    public List<PowerStatisListVo> getPowerDataByHour(DateSearchRequest requestVo);
    public List<PowerStatisListVo> getPowerDataByDay(DateSearchRequest requestVo);
    public List<PowerStatisListVo> getPowerDataByMonth(DateSearchRequest requestVo);
    public List<PowerStatisListVo> getPowerDataByMinutes(DateSearchRequest requestVo);

    // 获取最新数据
    public EmsAmmeterData getLastData(@Param("siteId")String siteId, @Param("deviceId")String deviceId);

    List<AmmeterStatisListVo> selectHourlyAmmeterData(@Param("siteId") String siteId,
                                                     @Param("startTime") String startTime,
                                                     @Param("endTime") String endTime);
    List<AmmeterStatisListVo> selectDailyAmmeterData(@Param("siteId") String siteId,
                                                     @Param("startTime") String startTime,
                                                     @Param("endTime") String endTime);

    List<PowerStatisListVo> getPowerDataByMinute(DateSearchRequest requestVo);
}
