package com.ruoyi.ems.mapper;

import com.ruoyi.ems.model.PvSupplyVO;
import com.ruoyi.ems.model.QueryMeter;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

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

/**
 * 光伏并网计量光伏并网计量-小时Mapper接口
 *
 * @author ruoyi
 * @date 2024-08-02
 */
public interface ElecPvSupplyHMapper {
    /**
     * 查询光伏产能按小时统计列表
     * @param queryMeter 查询参数
     * @return 结果
     */
    List<PvSupplyVO> selectPvSupplyHourlyList(@Param("queryMeter") QueryMeter queryMeter);

    /**
     * 查询光伏产能按日统计列表
     */
    List<PvSupplyVO> selectPvSupplyDailyList(@Param("queryMeter") QueryMeter queryMeter);

    /**
     * 查询光伏产能按月统计列表
     */
    List<PvSupplyVO> selectPvSupplyMonthlyList(@Param("queryMeter") QueryMeter queryMeter);

    /**
     * 查询光伏产能按年统计列表
     */
    List<PvSupplyVO> selectPvSupplyYearlyList(@Param("queryMeter") QueryMeter queryMeter);

    /**
     * 查询光伏产能统计汇总
     */
    PvSupplyVO selectPvSupplySummary(@Param("queryMeter") QueryMeter queryMeter);

    /**
     * 查询光伏产能按区域分布（用于饼图）
     * 当areaCode为空或-1时，返回所有区域的分组数据
     * 当指定areaCode时，只返回该区域的数据
     * @param queryMeter 查询参数
     * @return 按区域分组的产能数据列表
     */
    List<PvSupplyVO> selectPvSupplyDistribution(@Param("queryMeter") QueryMeter queryMeter);

    /**
     * 查询光伏产能分布明细（按区域和日期分组，用于对比柱状图）
     * @param queryMeter 查询参数
     * @return 按区域和日期分组的产能数据列表
     */
    List<PvSupplyVO> selectPvSupplyDistributionDetail(@Param("queryMeter") QueryMeter queryMeter);

    /**
     * 查询光伏产能按区域对比数据（堆叠柱状图）
     * @param queryMeter 查询参数
     * @return 按区域分组的产能对比数据
     */
    List<PvSupplyVO> selectPvSupplyAreaCompare(@Param("queryMeter") QueryMeter queryMeter);

    Map<String, Object> calThisDayPv(@Param("thisDay") String thisDay);

    @MapKey("timeIndex")
    Map<String, Map<String, Object>> calThisDayPvByH(@Param("thisDay") String thisDay);

    /**
     * 新增光伏并网计量光伏并网计量-小时
     *
     * @param pvSupplyVO 光伏并网计量光伏并网计量-小时
     * @return 结果
     */
    int insertPvSupplyH(PvSupplyVO pvSupplyVO);

    /**
     * 修改光伏并网计量光伏并网计量-小时
     *
     * @param pvSupplyVO 光伏并网计量光伏并网计量-小时
     * @return 结果
     */
    int updatePvSupplyH(PvSupplyVO pvSupplyVO);

    /**
     * 删除光伏并网计量光伏并网计量-小时
     *
     * @param id 光伏并网计量光伏并网计量-小时主键
     * @return 结果
     */
    int deletePvSupplyHById(Long id);

    /**
     * 批量删除光伏并网计量光伏并网计量-小时
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deletePvSupplyHByIds(Long[] ids);
}
