feat(platform): add CRM SMS and payment settings

This commit is contained in:
2026-07-29 15:41:27 +08:00
parent 6db200a2fc
commit ead7bdc2e2
25 changed files with 23250 additions and 140 deletions

View File

@@ -110,6 +110,30 @@ public sealed class PlatformBillingDunningNotificationEvent : AuditableTenantEnt
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
}
public sealed class PlatformPaymentApp : AuditableEntity
{
public string AppCode { get; set; } = string.Empty;
public string AppName { get; set; } = string.Empty;
public PlatformPaymentAppStatus Status { get; set; } = PlatformPaymentAppStatus.Disabled;
public string SettlementMode { get; set; } = "PlatformCollect";
public string? Description { get; set; }
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
}
public sealed class PlatformPaymentChannel : AuditableEntity
{
public Guid AppId { get; set; }
public string Provider { get; set; } = "manual";
public string Mode { get; set; } = "PlatformCollect";
public PlatformPaymentChannelStatus Status { get; set; } = PlatformPaymentChannelStatus.Disabled;
public string DisplayName { get; set; } = string.Empty;
public string? SecretRef { get; set; }
public string? CallbackPath { get; set; }
public int Priority { get; set; } = 100;
public JsonElement ConfigPublic { get; set; } = JsonDefaults.Object();
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
}
public enum PlatformBillingCycle { Monthly, Quarterly, Yearly, OneTime }
public enum TenantBillingInvoiceTitleType { None, NormalVat, SpecialVat }
public enum PlatformBillingInvoiceReminderType { DueSoon, Overdue, FinalNotice, Manual }
@@ -119,3 +143,5 @@ public enum PlatformAlertSeverity { Low, Medium, High, Critical }
public enum PlatformAuditAlertStatus { Open, Acknowledged, Resolved, Ignored }
public enum PlatformBillingDunningProvider { Generic, Dingtalk, Feishu, Wecom }
public enum PlatformBillingDunningNotificationStatus { Pending, Processing, Sent, Retrying, Failed, Discarded }
public enum PlatformPaymentAppStatus { Active, Disabled, Testing }
public enum PlatformPaymentChannelStatus { Active, Disabled, Testing }

View File

@@ -110,6 +110,54 @@ public sealed class SmsSendRateLimit : ITenantOwned
public DateTimeOffset UpdatedAt { get; set; } = DateTimeOffset.UtcNow;
}
public sealed class SmsChannel : AuditableTenantEntity
{
public string Provider { get; set; } = "generic";
public string Name { get; set; } = string.Empty;
public string Signature { get; set; } = string.Empty;
public string Scene { get; set; } = "login";
public TenantExternalProviderStatus Status { get; set; } = TenantExternalProviderStatus.Disabled;
public string? SecretRef { get; set; }
public int Priority { get; set; } = 100;
public int MonthlyQuota { get; set; }
public JsonElement ConfigPublic { get; set; } = JsonDefaults.Object();
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
}
public sealed class SmsTemplate : AuditableTenantEntity
{
public Guid ChannelId { get; set; }
public string Code { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public SmsTemplateType Type { get; set; } = SmsTemplateType.Notification;
public SmsTemplateAuditStatus AuditStatus { get; set; } = SmsTemplateAuditStatus.Draft;
public SmsTemplateStatus Status { get; set; } = SmsTemplateStatus.Active;
public string? ProviderTemplateCode { get; set; }
public string Content { get; set; } = string.Empty;
public string? Remark { get; set; }
public DateTimeOffset? SubmittedAt { get; set; }
public DateTimeOffset? ApprovedAt { get; set; }
public DateTimeOffset? DisabledAt { get; set; }
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
}
public sealed class SmsSendLog : Entity, ITenantOwned
{
public Guid TenantId { get; set; }
public Guid? ChannelId { get; set; }
public Guid? TemplateId { get; set; }
public string Provider { get; set; } = "generic";
public string Scene { get; set; } = string.Empty;
public string? PhoneMasked { get; set; }
public SmsSendLogStatus Status { get; set; } = SmsSendLogStatus.Pending;
public string? ProviderMessageId { get; set; }
public string? ErrorCode { get; set; }
public string? ErrorMessage { get; set; }
public DateTimeOffset? SentAt { get; set; }
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
}
public sealed class TenantClass : AuditableTenantEntity
{
public Guid? RegionId { get; set; }
@@ -172,6 +220,10 @@ public enum TenantExternalProviderStatus { Active, Disabled, Testing }
public enum TenantSecretStatus { Active, Disabled, Rotating }
public enum SmsPurpose { Login, BindPhone, ResetPassword }
public enum SmsVerificationStatus { Pending, Sent, Verified, Expired, Blocked, Failed }
public enum SmsTemplateType { VerificationCode, Marketing, Notification }
public enum SmsTemplateAuditStatus { Draft, PendingReview, Approved, Rejected }
public enum SmsTemplateStatus { Active, Disabled }
public enum SmsSendLogStatus { Pending, Sent, Failed }
public enum AuthLoginResult { Sent, Success, Failed, Blocked }
public enum SmsRateLimitDimension { Tenant, Phone, Ip, Device }
public enum TenantRecordStatus { Active, Disabled, Archived }