package com.ruoyi.payment.mapper;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.payment.domain.TransactionLog;

/**
 * 交易日志Mapper接口
 * 
 * @author ruoyi
 * @date 2025-12-17
 */
public interface TransactionLogMapper 
{
    /**
     * 查询交易日志
     * 
     * @param logId 交易日志主键
     * @return 交易日志
     */
    public TransactionLog selectTransactionLogByLogId(Long logId);

    /**
     * 根据交易ID查询交易日志
     * 
     * @param transactionId 交易ID
     * @return 交易日志集合
     */
    public List<TransactionLog> selectTransactionLogByTransactionId(Long transactionId);

    /**
     * 查询交易日志列表
     * 
     * @param transactionLog 交易日志
     * @return 交易日志集合
     */
    public List<TransactionLog> selectTransactionLogList(TransactionLog transactionLog);

    /**
     * 根据账户ID查询交易日志
     * 
     * @param accountId 账户ID
     * @return 交易日志集合
     */
    public List<TransactionLog> selectTransactionLogByAccountId(Long accountId);

    /**
     * 根据交易类型查询交易日志
     * 
     * @param transactionType 交易类型
     * @return 交易日志集合
     */
    public List<TransactionLog> selectTransactionLogByType(String transactionType);

    /**
     * 根据交易状态查询交易日志
     * 
     * @param transactionStatus 交易状态
     * @return 交易日志集合
     */
    public List<TransactionLog> selectTransactionLogByStatus(String transactionStatus);

    /**
     * 根据操作员ID查询交易日志
     * 
     * @param operatorId 操作员ID
     * @return 交易日志集合
     */
    public List<TransactionLog> selectTransactionLogByOperatorId(Long operatorId);

    /**
     * 根据时间范围查询交易日志
     * 
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 交易日志集合
     */
    public List<TransactionLog> selectTransactionLogByDateRange(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

    /**
     * 根据金额范围查询交易日志
     * 
     * @param minAmount 最小金额
     * @param maxAmount 最大金额
     * @return 交易日志集合
     */
    public List<TransactionLog> selectTransactionLogByAmountRange(@Param("minAmount") BigDecimal minAmount, @Param("maxAmount") BigDecimal maxAmount);

    /**
     * 统计交易数量按类型分组
     * 
     * @return 统计结果
     */
    public List<java.util.Map<String, Object>> selectTransactionCountByType();

    /**
     * 统计交易数量按状态分组
     * 
     * @return 统计结果
     */
    public List<java.util.Map<String, Object>> selectTransactionCountByStatus();

    /**
     * 统计总交易金额
     * 
     * @return 总金额
     */
    public BigDecimal selectTotalTransactionAmount();

    /**
     * 统计指定账户的交易金额
     * 
     * @param accountId 账户ID
     * @return 交易金额
     */
    public BigDecimal selectTransactionAmountByAccountId(Long accountId);

    /**
     * 统计指定类型的交易金额
     * 
     * @param transactionType 交易类型
     * @return 交易金额
     */
    public BigDecimal selectTransactionAmountByType(String transactionType);

    /**
     * 新增交易日志
     * 
     * @param transactionLog 交易日志
     * @return 结果
     */
    public int insertTransactionLog(TransactionLog transactionLog);

    /**
     * 修改交易日志
     * 
     * @param transactionLog 交易日志
     * @return 结果
     */
    public int updateTransactionLog(TransactionLog transactionLog);

    /**
     * 更新交易状态
     * 
     * @param logId 日志ID
     * @param transactionStatus 交易状态
     * @return 结果
     */
    public int updateTransactionStatus(@Param("logId") Long logId, @Param("transactionStatus") String transactionStatus);

    /**
     * 删除交易日志
     * 
     * @param logId 交易日志主键
     * @return 结果
     */
    public int deleteTransactionLogByLogId(Long logId);

    /**
     * 根据交易ID删除交易日志
     * 
     * @param transactionId 交易ID
     * @return 结果
     */
    public int deleteTransactionLogByTransactionId(Long transactionId);

    /**
     * 批量删除交易日志
     * 
     * @param logIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteTransactionLogByLogIds(Long[] logIds);

    /**
     * 清理指定日期之前的交易日志
     * 
     * @param beforeDate 指定日期
     * @return 结果
     */
    public int cleanupTransactionLogBeforeDate(@Param("beforeDate") Date beforeDate);
}