package com.xzzn.ems.mapper;

import com.xzzn.ems.domain.EmsBatteryCluster;
import com.xzzn.ems.domain.vo.BMSBatteryDataList;
import com.xzzn.ems.domain.vo.BatteryAveTempVo;
import com.xzzn.ems.domain.vo.ClusterStatisListVo;
import com.xzzn.ems.domain.vo.DateSearchRequest;
import com.xzzn.ems.domain.vo.StatisClusterDateRequest;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

/**
 * 电池簇数据Mapper接口
 *
 * @author xzzn
 * @date 2025-06-22
 */
public interface EmsBatteryClusterMapper
{
    /**
     * 查询电池簇数据
     *
     * @param id 电池簇数据主键
     * @return 电池簇数据
     */
    public EmsBatteryCluster selectEmsBatteryClusterById(Long id);

    /**
     * 查询电池簇数据列表
     *
     * @param emsBatteryCluster 电池簇数据
     * @return 电池簇数据集合
     */
    public List<EmsBatteryCluster> selectEmsBatteryClusterList(EmsBatteryCluster emsBatteryCluster);

    /**
     * 新增电池簇数据
     *
     * @param emsBatteryCluster 电池簇数据
     * @return 结果
     */
    public int insertEmsBatteryCluster(EmsBatteryCluster emsBatteryCluster);

    /**
     * 修改电池簇数据
     *
     * @param emsBatteryCluster 电池簇数据
     * @return 结果
     */
    public int updateEmsBatteryCluster(EmsBatteryCluster emsBatteryCluster);

    /**
     * 删除电池簇数据
     *
     * @param id 电池簇数据主键
     * @return 结果
     */
    public int deleteEmsBatteryClusterById(Long id);

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

    /**
     * 根据site_di和堆id获取簇数据和单体数据
     * @param siteId
     * @param stackDeviceId
     * @return
     */
    public List<BMSBatteryDataList> getBmsBatteryData(@Param("siteId")String siteId, @Param("stackDeviceId")String stackDeviceId);

    // 实时运行-FX平均温度
    public List<BatteryAveTempVo> getBatteryAveTempList(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);

    /** 堆电池温度数据-获取当天每小时簇 */
    public List<ClusterStatisListVo> getClusterDataByHour(StatisClusterDateRequest requestVo);

    // 奉贤-电池平均温度
    public List<Map<String, BigDecimal>> getAvgTempByHour(DateSearchRequest requestVo);
    public List<Map<String, BigDecimal>> getAvgTempByDay(DateSearchRequest requestVo);
    public List<Map<String, BigDecimal>> getAvgTempByMonth(DateSearchRequest requestVo);

    List<Map<String, BigDecimal>> getAvgTempByMinute(DateSearchRequest requestVo);
}
