package com.kexue.skills.mapper;

import com.kexue.skills.entity.AccountTransaction;
import com.kexue.skills.entity.dto.AccountTransactionDto;
import com.kexue.skills.entity.dto.ConsumptionGroupedDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * (AccountTransaction)表数据库访问层
 *
 * @author 王志维
 * @since 2025-02-21 23:01:48
 */
@Mapper
public interface AccountTransactionMapper {
    /**
     * 分页查询
     *
     * @param queryDto 筛选条件
     * @return 查询结果
     */
    List<AccountTransaction> getPageList(AccountTransactionDto queryDto);

    /**
     * 查询列表
     *
     * @param queryDto 筛选条件
     * @return 查询结果
     */
    List<AccountTransaction> getList(AccountTransactionDto queryDto);

    /**
     * 通过主键查询单条数据
     *
     * @param transactionId 主键
     * @return 实例对象
     */
    AccountTransaction queryById(Long transactionId);

    /**
     * 新增数据
     *
     * @param transaction 实例对象
     * @return 影响行数
     */
    int insert(AccountTransaction transaction);

    /**
     * 更新数据
     *
     * @param transaction 实例对象
     * @return 影响行数
     */
    int update(AccountTransaction transaction);

    /**
     * 通过主键逻辑删除
     *
     * @param transactionId 主键
     * @return 影响行数
     */
    int logicDeleteById(@Param("transactionId") Long transactionId, @Param("updateBy") String updateBy);

    /**
     * 通过主键物理删除
     *
     * @param transactionId 主键
     * @return 影响行数
     */
    int deleteById(Long transactionId);
    
    /**
     * 通过用户ID查询交易记录
     *
     * @param userId 用户ID
     * @return 交易记录列表
     */
    List<AccountTransaction> queryByUserId(Long userId);
    
    /**
     * 获取消费原始记录列表（用于内存分组）
     *
     * @param queryDto 筛选条件
     * @return 原始记录列表
     */
    List<AccountTransaction> getConsumptionRawList(AccountTransactionDto queryDto);
    
    /**
     * 分页查询充值记录（transactionType=1）
     *
     * @param queryDto 筛选条件
     * @return 查询结果
     */
    List<AccountTransaction> getRechargePageList(AccountTransactionDto queryDto);
    
    /**
     * 分页查询赠送记录（transactionType=6）
     *
     * @param queryDto 筛选条件
     * @return 查询结果
     */
    List<AccountTransaction> getGiftPageList(AccountTransactionDto queryDto);
    
    /**
     * 分页查询消费记录并按callId分组
     *
     * @param queryDto 筛选条件
     * @return 查询结果
     */
    List<ConsumptionGroupedDto> getConsumptionGroupedPageList(AccountTransactionDto queryDto);
}