using MediatR; using TakeoutSaaS.Application.App.Tenants.Commands; using TakeoutSaaS.Application.App.Tenants.Dto; using TakeoutSaaS.Domain.Tenants.Enums; using TakeoutSaaS.Domain.Tenants.Repositories; namespace TakeoutSaaS.Application.App.Tenants.Handlers; /// /// 标记账单支付处理器。 /// public sealed class MarkTenantBillingPaidCommandHandler(ITenantBillingRepository billingRepository) : IRequestHandler { /// /// 标记账单支付。 /// /// 标记命令。 /// 取消标记。 /// 账单 DTO 或 null。 public async Task Handle(MarkTenantBillingPaidCommand request, CancellationToken cancellationToken) { // 1. 查询账单 var bill = await billingRepository.FindByIdAsync(request.TenantId, request.BillingId, cancellationToken); if (bill == null) { return null; } // 2. 更新支付状态 bill.AmountPaid = request.AmountPaid; bill.Status = TenantBillingStatus.Paid; bill.DueDate = bill.DueDate; // 3. 持久化变更 await billingRepository.UpdateAsync(bill, cancellationToken); await billingRepository.SaveChangesAsync(cancellationToken); // 4. 返回 DTO return bill.ToDto(); } }