package com.xzzn.ems.mapper;

import com.xzzn.ems.domain.EmsBatteryStack;
import com.xzzn.ems.domain.vo.BatteryAveSOCVo;
import com.xzzn.ems.domain.vo.BatteryAveTempVo;
import com.xzzn.ems.domain.vo.DateSearchRequest;
import com.xzzn.ems.domain.vo.StackPointVo;
import com.xzzn.ems.domain.vo.StackStatisListVo;

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

import org.apache.ibatis.annotations.Param;

/**
 * 电池堆数据Mapper接口
 *
 * @author xzzn
 * @date 2025-06-23
 */
public interface EmsBatteryStackMapper
{
    /**
     * 查询电池堆数据
     *
     * @param id 电池堆数据主键
     * @return 电池堆数据
     */
    public EmsBatteryStack selectEmsBatteryStackById(Long id);

    /**
     * 查询电池堆数据列表
     *
     * @param emsBatteryStack 电池堆数据
     * @return 电池堆数据集合
     */
    public List<EmsBatteryStack> selectEmsBatteryStackList(EmsBatteryStack emsBatteryStack);

    /**
     * 新增电池堆数据
     *
     * @param emsBatteryStack 电池堆数据
     * @return 结果
     */
    public int insertEmsBatteryStack(EmsBatteryStack emsBatteryStack);

    /**
     * 修改电池堆数据
     *
     * @param emsBatteryStack 电池堆数据
     * @return 结果
     */
    public int updateEmsBatteryStack(EmsBatteryStack emsBatteryStack);

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

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

    /**
     * 堆曲线数据-按小时区分
     * @param requestVo
     * @return
     */
    public List<StackStatisListVo> getStackDataByHour(DateSearchRequest requestVo);

    public List<StackStatisListVo> getStackDataByDay(DateSearchRequest requestVo);

    public List<StackStatisListVo> getStackDataByMonth(DateSearchRequest requestVo);

    public EmsBatteryStack getSiteSumStackInfo(String siteId);

    // 点位数据 - soc/soh/temp
    public List<StackPointVo> getStackPointByHour(DateSearchRequest requestVo);
    public List<StackPointVo> getStackPointByDay(DateSearchRequest requestVo);
    public List<StackPointVo> getStackPointByMonth(DateSearchRequest requestVo);


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

    List<StackPointVo> getStackPointByMinute(DateSearchRequest requestVo);

    List<StackStatisListVo> getStackDataByMinute(DateSearchRequest requestVo);
}
