package com.ruoyi.ems.mapper;

import com.ruoyi.ems.domain.ElecMeterH;
import com.ruoyi.ems.domain.EnergyMeter;
import com.ruoyi.ems.model.ElecConsumptionVO;
import com.ruoyi.ems.model.QueryMeter;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * 用电统计Mapper接口
 *
 * 重构说明：
 * 1. 新增小时粒度查询方法
 * 2. 统一使用 ElecConsumptionVO 和 ElecMeterH，不依赖 EnergyMeter
 */
public interface ElecConsumptionMapper {

    // ==================== 查询分时类型 ====================

    /**
     * 查询支持的分时电价类型
     */
    List<String> selectElecHourSupportTypes(@Param("queryMeter") QueryMeter queryMeter,
        @Param("meterDevices") Set<String> meterDevices);

    // ==================== 电表计量统计方法 ====================

    /**
     * 计量设备抄表数据查询
     */
    List<ElecMeterH> selectMDevElecConsumptionList(QueryMeter queryMeter);

    /**
     * 计量设备抄表数据统计
     */
    ElecConsumptionVO selectMDevElecConsumptionSummary(QueryMeter queryMeter);

    // ==================== 区域用电统计方法 ====================

    /**
     * 根据设备代码列表查询区域日用电统计
     */
    List<ElecConsumptionVO> selectAreaDailyElecConsumptionByDevices(@Param("queryMeter") QueryMeter queryMeter,
        @Param("meterDevices") Set<String> meterDevices);

    /**
     * 根据设备代码列表查询区域月用电统计
     */
    List<ElecConsumptionVO> selectAreaMonthlyElecConsumptionByDevices(@Param("queryMeter") QueryMeter queryMeter,
        @Param("meterDevices") Set<String> meterDevices);

    /**
     * 根据设备代码列表查询区域年用电统计
     */
    List<ElecConsumptionVO> selectAreaYearlyElecConsumptionByDevices(@Param("queryMeter") QueryMeter queryMeter,
        @Param("meterDevices") Set<String> meterDevices);

    /**
     * 根据设备代码列表查询区域用电汇总
     */
    ElecConsumptionVO selectAreaElecConsumptionSummaryByDevices(@Param("queryMeter") QueryMeter queryMeter,
        @Param("meterDevices") Set<String> meterDevices);

    // ==================== 设施用电统计方法 ====================

    /**
     * 查询设施日用电统计
     */
    List<ElecConsumptionVO> selectFacsDailyElecConsumption(QueryMeter queryMeter);

    /**
     * 查询设施月用电统计
     */
    List<ElecConsumptionVO> selectFacsMonthlyElecConsumption(QueryMeter queryMeter);

    /**
     * 查询设施年用电统计
     */
    List<ElecConsumptionVO> selectFacsYearlyElecConsumption(QueryMeter queryMeter);

    /**
     * 查询设施用电统计汇总
     */
    ElecConsumptionVO selectFacsElecConsumptionSummary(QueryMeter queryMeter);

    // ==================== 小时粒度查询方法 ====================

    /**
     * 根据设备代码列表查询区域小时用电明细
     * 替代原: IElecMeterHService.selectByMeterDevs (区域场景)
     */
    List<ElecMeterH> selectAreaHourlyElecConsumptionByDevices(@Param("queryMeter") QueryMeter queryMeter,
        @Param("meterDevices") Set<String> meterDevices);

    /**
     * 查询设施小时用电明细
     * 替代原: IElecMeterHService.selectByMeterDevs (设施场景)
     */
    List<ElecMeterH> selectFacsHourlyElecConsumption(QueryMeter queryMeter);

    /**
     * 查询设施小时用电汇总统计
     * 替代原: IElecMeterHService.staByMeterDev
     * 返回 ElecConsumptionVO 统一对象
     */
    List<ElecConsumptionVO> selectFacsHourlyElecSummary(QueryMeter queryMeter);

    /**
     * 查询日平均用电
     * 兼容老接口: selectElecDayAvg
     */
    EnergyMeter selectElecDayAvg(QueryMeter queryMeter);

    /**
     * 按设备类型查询日用电
     * 兼容老接口: qryDeviceDay
     */
    List<EnergyMeter> selectDeviceElecByDay(QueryMeter queryMeter);
}