package com.xzzn.ems.mapper;

import com.xzzn.ems.domain.EmsPcsData;
import com.xzzn.ems.domain.vo.DateSearchRequest;
import com.xzzn.ems.domain.vo.ElectricIndexList;
import com.xzzn.ems.domain.vo.EnergyStoragePowVo;
import com.xzzn.ems.domain.vo.PcsDetailInfoVo;
import com.xzzn.ems.domain.vo.PcsMaxTempVo;
import com.xzzn.ems.domain.vo.PcsStatisListVo;
import com.xzzn.ems.domain.vo.SiteMonitorDataVo;
import com.xzzn.ems.domain.vo.SiteMonitorRunningHeadInfoVo;

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

import org.apache.ibatis.annotations.Param;

/**
 * PCS数据Mapper接口
 *
 * @author xzzn
 * @date 2025-06-17
 */
public interface EmsPcsDataMapper
{
    /**
     * 查询PCS数据
     *
     * @param id PCS数据主键
     * @return PCS数据
     */
    public EmsPcsData selectEmsPcsDataById(Long id);

    /**
     * 查询PCS数据列表
     *
     * @param emsPcsData PCS数据
     * @return PCS数据集合
     */
    public List<EmsPcsData> selectEmsPcsDataList(EmsPcsData emsPcsData);

    /**
     * 新增PCS数据
     *
     * @param emsPcsData PCS数据
     * @return 结果
     */
    public int insertEmsPcsData(EmsPcsData emsPcsData);

    /**
     * 修改PCS数据
     *
     * @param emsPcsData PCS数据
     * @return 结果
     */
    public int updateEmsPcsData(EmsPcsData emsPcsData);

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

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

    /**
     * 根据site_id获取日期对应的充放电数据
     * @param siteId
     * @return
     */
    public List<SiteMonitorDataVo> getPcsDataBySiteId(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);

    /**
     * 根据站点获取设备监控的实时运行头信息
     * @param siteId
     * @return
     */
    public SiteMonitorRunningHeadInfoVo getSiteRunningHeadInfo(String siteId);

    /**
     * 获取每月的充电量和放电量
     * @return
     */
    public List<ElectricIndexList> getElectDataList();

    /**
     * 根据site_id获取所有pcs最新update的数据
     * @param siteId
     * @return
     */
    public List<PcsDetailInfoVo> getPcsDetailInfoBySiteId(String siteId);

    /**
     * 根据时间按天获取充放电量
     * @param siteId
     * @param startDate
     * @param endDate
     * @return
     */
    public List<SiteMonitorDataVo> getPcsDataByDay(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);

    /**
     * 根据时间按小时获取充放电量
     * @param siteId
     * @param startDate
     * @param endDate
     * @return
     */
    public List<SiteMonitorDataVo> getPcsDataByHour(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);

    /**
     * 获取实时运行-储能功率
     * @param siteId
     * @param startDate
     * @param endDate
     * @return
     */
    public List<EnergyStoragePowVo> getStoragePowerList(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);

    /**
     * pcs曲线运行数据
     * @param requestVo
     * @return
     */
    public List<PcsStatisListVo> getPcsActivePowerByDay(DateSearchRequest requestVo);

    public List<PcsStatisListVo> getPcsActivePowerByHour(DateSearchRequest requestVo);

    public List<PcsStatisListVo> getPcsActivePowerByMonth(DateSearchRequest requestVo);

    public List<PcsStatisListVo> getPcsActivePowerByMinutes(DateSearchRequest requestVo);

    // 实时运行-fx-pcs最高温度
    public List<PcsMaxTempVo> getFXMaxTemp(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);
    // 实时运行-dds-pcs最高温度
    public List<PcsMaxTempVo> getDDSMaxTemp(@Param("siteId")String siteId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);

    List<PcsMaxTempVo> getPcsMaxTemp(@Param("siteId") String siteId, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
}
