using TakeoutSaaS.Domain.Finance.Enums;
using TakeoutSaaS.Domain.Finance.Models;
using TakeoutSaaS.Domain.Orders.Enums;
using TakeoutSaaS.Domain.Payments.Enums;
namespace TakeoutSaaS.Domain.Finance.Repositories;
///
/// 财务交易流水仓储契约。
///
public interface IFinanceTransactionRepository
{
///
/// 查询交易流水分页。
///
Task SearchPageAsync(
long tenantId,
long storeId,
DateTime? startAt,
DateTime? endAt,
FinanceTransactionType? transactionType,
DeliveryType? deliveryType,
PaymentMethod? paymentMethod,
string? keyword,
int page,
int pageSize,
CancellationToken cancellationToken = default);
///
/// 查询交易流水统计。
///
Task GetStatsAsync(
long tenantId,
long storeId,
DateTime? startAt,
DateTime? endAt,
FinanceTransactionType? transactionType,
DeliveryType? deliveryType,
PaymentMethod? paymentMethod,
string? keyword,
CancellationToken cancellationToken = default);
///
/// 查询交易流水详情。
///
Task GetDetailAsync(
long tenantId,
long storeId,
FinanceTransactionSourceType sourceType,
long sourceId,
CancellationToken cancellationToken = default);
///
/// 查询导出数据。
///
Task> ListForExportAsync(
long tenantId,
long storeId,
DateTime? startAt,
DateTime? endAt,
FinanceTransactionType? transactionType,
DeliveryType? deliveryType,
PaymentMethod? paymentMethod,
string? keyword,
CancellationToken cancellationToken = default);
///
/// 查询到账概览统计。
///
Task GetSettlementStatsAsync(
long tenantId,
long storeId,
DateTime currentUtc,
CancellationToken cancellationToken = default);
///
/// 查询到账账户信息。
///
Task GetSettlementAccountAsync(
long tenantId,
CancellationToken cancellationToken = default);
///
/// 查询到账汇总分页。
///
Task SearchSettlementPageAsync(
long tenantId,
long storeId,
DateTime? startAt,
DateTime? endAt,
PaymentMethod? paymentMethod,
int page,
int pageSize,
CancellationToken cancellationToken = default);
///
/// 查询到账明细。
///
Task> GetSettlementDetailsAsync(
long tenantId,
long storeId,
DateTime arrivedDate,
PaymentMethod paymentMethod,
int take,
CancellationToken cancellationToken = default);
///
/// 查询到账导出数据。
///
Task> ListSettlementForExportAsync(
long tenantId,
long storeId,
DateTime? startAt,
DateTime? endAt,
PaymentMethod? paymentMethod,
CancellationToken cancellationToken = default);
}