/*
 * 文 件 名:  ChargingMeterHMapper
 * 版    权:  华设设计集团股份有限公司
 * 描    述:  充电计量明细Mapper
 * 修 改 人:  lvwenbin
 * 修改时间:  2026/01/08
 */
package com.ruoyi.ems.mapper;

import com.ruoyi.ems.domain.ChargingMeterH;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * 充电计量明细Mapper
 *
 * @author lvwenbin
 * @version [版本号, 2026/01/08]
 */
@Mapper
public interface ChargingMeterHMapper {

    /**
     * 插入计量记录
     *
     * @param record 计量记录
     * @return 影响行数
     */
    int insert(ChargingMeterH record);

    /**
     * 批量插入计量记录
     *
     * @param list 计量记录列表
     * @return 影响行数
     */
    int insertBatch(@Param("list") List<ChargingMeterH> list);

    /**
     * 根据交易流水号查询
     *
     * @param transactionNo 交易流水号
     * @return 计量记录列表
     */
    List<ChargingMeterH> selectByTransactionNo(@Param("transactionNo") String transactionNo);

    /**
     * 根据设备编码和日期范围查询
     *
     * @param deviceCode 设备编码
     * @param startDate  开始日期
     * @param endDate    结束日期
     * @return 计量记录列表
     */
    List<ChargingMeterH> selectByDeviceAndDateRange(
        @Param("deviceCode") String deviceCode,
        @Param("startDate") Date startDate,
        @Param("endDate") Date endDate);

    /**
     * 根据区域编码和日期查询
     *
     * @param areaCode 区域编码
     * @param date     日期
     * @return 计量记录列表
     */
    List<ChargingMeterH> selectByAreaAndDate(
        @Param("areaCode") String areaCode,
        @Param("date") Date date);

    /**
     * 统计指定区域日期的分时电量
     *
     * @param areaCode 区域编码
     * @param date     日期
     * @return 按 meter_type 分组的汇总数据
     */
    List<ChargingMeterH> selectDailyStatByMeterType(
        @Param("areaCode") String areaCode,
        @Param("date") Date date);

    /**
     * 查询指定设备的最近一条记录
     *
     * @param deviceCode 设备编码
     * @return 最近的计量记录
     */
    ChargingMeterH selectLatestByDevice(@Param("deviceCode") String deviceCode);
}
