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

import com.ruoyi.ems.domain.ChargingTransaction;
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 ChargingTransactionMapper {

    /**
     * 插入充电交易记录
     *
     * @param record 交易记录
     * @return 影响行数
     */
    int insert(ChargingTransaction record);

    /**
     * 根据交易流水号查询
     *
     * @param transactionNo 交易流水号
     * @return 交易记录
     */
    ChargingTransaction selectByTransactionNo(@Param("transactionNo") String transactionNo);

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

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

    /**
     * 查询需要纳入能耗统计的交易记录
     *
     * @param date 日期
     * @return 交易记录列表
     */
    List<ChargingTransaction> selectIncludedInEms(@Param("date") Date date);

    /**
     * 更新是否纳入能耗统计标识
     *
     * @param transactionNo 交易流水号
     * @param includeInEms  是否纳入
     * @return 影响行数
     */
    int updateIncludeInEms(
        @Param("transactionNo") String transactionNo,
        @Param("includeInEms") Integer includeInEms);

    /**
     * 查询指定日期的统计数据
     *
     * @param areaCode 区域编码
     * @param date     日期
     * @return 汇总数据
     */
    ChargingTransaction selectDailyStat(
        @Param("areaCode") String areaCode,
        @Param("date") Date date);
}
