feat: complete phase six backoffice operations

This commit is contained in:
2026-07-28 14:31:43 +08:00
parent 747ff59d76
commit 99e4e43122
31 changed files with 23504 additions and 26 deletions

View File

@@ -334,6 +334,111 @@ public sealed class UpdateReconciliationIssueDto
}
}
public sealed class PreviewReconciliationImportDto
{
[Required]
[StringLength(50)]
public string Provider { get; set; } = string.Empty;
public DateOnly BillDate { get; set; }
public ReconciliationBillType BillType { get; set; } = ReconciliationBillType.Combined;
[Required]
[StringLength(300)]
public string SourceName { get; set; } = string.Empty;
public JsonElement Rows { get; set; } = JsonDefaults.Array();
public PreviewReconciliationImportCommand ToPreviewCommand() => new(Provider, BillDate, BillType, SourceName, Rows);
public ImportReconciliationCommand ToImportCommand() => new(Provider, BillDate, BillType, SourceName, Rows);
}
public sealed class CreateAdjustmentVoucherDto
{
public Guid? IssueId { get; set; }
public Guid? BatchId { get; set; }
public Guid? ItemId { get; set; }
public Guid? OrderId { get; set; }
public Guid? PaymentId { get; set; }
public Guid? RefundRequestId { get; set; }
public CommerceAdjustmentDirection Direction { get; set; } = CommerceAdjustmentDirection.IncreaseRevenue;
[Range(1, int.MaxValue)]
public int AmountCents { get; set; }
[StringLength(10)]
public string? Currency { get; set; }
[Required]
[StringLength(1000)]
public string Reason { get; set; } = string.Empty;
[StringLength(500)]
public string? ProofAssetKey { get; set; }
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
public CreateAdjustmentVoucherCommand ToCommand() => new(
IssueId,
BatchId,
ItemId,
OrderId,
PaymentId,
RefundRequestId,
Direction,
AmountCents,
Currency,
Reason,
ProofAssetKey,
Metadata);
}
public sealed class UpdateAdjustmentVoucherStatusDto
{
[Required]
public Guid VoucherId { get; set; }
public CommerceAdjustmentVoucherStatus Status { get; set; } = CommerceAdjustmentVoucherStatus.PendingReview;
[StringLength(1000)]
public string? Note { get; set; }
public UpdateAdjustmentVoucherStatusCommand ToCommand() => new(VoucherId, Status, Note);
}
public sealed class RequestProviderBillJobDto
{
[Required]
[StringLength(50)]
public string Provider { get; set; } = string.Empty;
public DateOnly BillDate { get; set; }
public ReconciliationBillType BillType { get; set; } = ReconciliationBillType.Combined;
public DateTimeOffset? RunAfter { get; set; }
public RequestProviderBillJobCommand ToCommand() => new(Provider, BillDate, BillType, RunAfter);
}
public sealed class RefundNotificationDto
{
[Required]
[StringLength(100)]
public string RefundNo { get; set; } = string.Empty;
[StringLength(200)]
public string? ProviderRefundNo { get; set; }
public CommerceRefundStatus Status { get; set; } = CommerceRefundStatus.Succeeded;
[StringLength(200)]
public string? EventId { get; set; }
public JsonElement Payload { get; set; } = JsonDefaults.Object();
public RefundNotificationCommand ToCommand(string provider) => new(provider, RefundNo, ProviderRefundNo, Status, EventId, Payload);
}
public sealed class UpdatePointExchangeOrderStatusDto
{
[Required]