Files
junhong_cmp_fiber/pkg/constants/package_silence.go
邹进 909f4d0ec2
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 8m39s
feat: 实名即生效套餐沉默期、延期办理与资产出库时间
- 迁移 000259~000265:套餐记录沉默期字段与扫描索引、套餐默认沉默期、延期政策/流水/订单/批次/明细 5 张表、默认政策与系统配置(总开关默认关闭)、企微审批白名单、卡与设备出库时间及出库记录
- 沉默期设置(订单发放、自动购包、钱包续费)、后台购买时调整(超默认值按政策免审或企微审批)、统一判定与激活闸门、排队与孤儿扫描跳过过期套餐、过期套餐禁止退款、每 10 分钟扫描
- 总开关专用接口与打开前 4 项检查;延期政策;延期资格与计费;H5 自助与后台二维码在线支付(商户池路由)、支付回调与查单恢复、线下登记、特殊/批量延期、异常重试与原路退款;沉默期审批场景与终态处理
- 换货沉默期流水与出库时间;卡/设备列表、详情、导出与出库记录接口;延期订单与即将过期套餐列表及导出;财务流水纳入延期支付
- 沉默期与出库时间回填工具 cmd/silence-backfill;前端接口变更说明

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 16:32:58 +09:00

321 lines
14 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package constants
import "time"
// 实名即生效套餐沉默期(add-package-silence-period)。
// 套餐记录沉默期状态 silence_status。空表示不适用沉默期。
const (
SilenceStatusWaiting = "waiting" // 待实名(含延期后的"延期待实名")
SilenceStatusExpired = "expired" // 沉默期已过期(status 保持 0,由激活闸门拦截)
SilenceStatusEnded = "ended" // 截止前已实名,沉默期结束
)
// SilenceStatusName 返回沉默期状态展示名。
func SilenceStatusName(status string, extended bool) string {
switch status {
case SilenceStatusWaiting:
if extended {
return "延期待实名"
}
return "待实名"
case SilenceStatusExpired:
return "沉默期已过期"
case SilenceStatusEnded:
return "沉默期已结束"
default:
return ""
}
}
// 沉默期时间口径。
const (
SilenceTimezone = "Asia/Shanghai"
SilenceDaysPerMonth = 30
SilencePackageDaysMin = 1
SilencePackageDaysMax = 90
SilenceDefaultPeriodDays = 30
SilenceDefaultUnitPrice = 500
)
// 沉默期系统配置 Key。
const (
SystemConfigModulePackage = "package"
SystemConfigSilenceEnabled = "package.silence.enabled"
SystemConfigSilenceDefaultDays = "package.silence.default_days"
SystemConfigSilenceExtensionUnitPrice = "package.silence.extension_unit_price"
ApprovalBusinessTypePackageSilence = "package_silence_approval"
PaymentOrderTypeSilenceExtension = "silence_extension"
SilenceExtensionOrderNoPrefix = "SE"
SilenceExtensionBatchNoPrefix = "SB"
SilenceExtensionOrderPayTTL = 30 * time.Minute
SilenceScanBatchSize = 200
SilenceScanMaxBatches = 20
SilenceScanUniqueTTL = 9 * time.Minute
SilenceScanMaxRetry = 3
TaskTypePackageSilenceScan = "package:silence:scan"
TaskTypePackageSilenceOrderRecover = "package:silence:order_recover"
SilenceScanCron = "*/10 * * * *"
SilenceOrderRecoverCron = "*/5 * * * *"
SilenceOrderRecoverBatchSize = 100
SilenceBatchImportMaxRows = 1000
SilenceExtensionReasonMaxLen = 1000
SilenceExtensionVoucherMaxCount = 5
SilenceExtensionEvidenceMaxCount = 10
SilencePolicyNameMaxLen = 100
SilenceExtensionInputDaysMax = 3650
SilencePurchaseAdjustDaysMax = 3650
SilenceExtensionOptionsMax = 24
SilenceBackfillBatchSize = 500
SilenceOutboundBackfillBatchSize = 5000
SilenceSwitchPrecheckUnconfiguredPackages = "unconfigured_packages"
SilenceSwitchPrecheckUnbackfilledUsages = "unbackfilled_usages"
SilenceSwitchPrecheckDefaultPolicyMissing = "default_policy_missing"
SilenceSwitchPrecheckApprovalSceneMissing = "approval_scene_missing"
SilenceExpiringSoonDaysDefault = 7
SilenceExtensionOrderCloseReasonTimeout = "timeout"
SilenceExtensionOrderCloseReasonSuperseded = "superseded"
)
// 延期政策适用范围。
const (
SilencePolicyScopeAll = "all"
SilencePolicyScopeSeries = "series"
SilencePolicyScopePackage = "package"
)
// 延期政策状态。
const (
SilencePolicyStatusDisabled = 0
SilencePolicyStatusEnabled = 1
)
// 延期路径。
const (
SilencePathOnline = "online"
SilencePathOffline = "offline"
SilencePathSpecial = "special"
SilencePathAdjust = "adjust"
)
// 延期类型;除 standard_paid 外同时是政策免审批场景的可选值。
const (
SilenceExtensionTypeStandardPaid = "standard_paid"
SilenceExtensionTypeOfflinePaid = "offline_paid"
SilenceExtensionTypeFree = "free"
SilenceExtensionTypeDiscount = "discount"
SilenceExtensionTypeComplaintCompensation = "complaint_compensation"
SilenceExtensionTypeSystemCompensation = "system_compensation"
SilenceExtensionTypeSpecialCustomer = "special_customer"
SilenceExtensionTypeBatch = "batch"
SilenceExtensionTypePurchaseAdjust = "purchase_adjust"
)
// SilenceApprovalExemptTypes 是政策可勾选的免审批场景(在线付款始终不审批,不在可选项)。
var SilenceApprovalExemptTypes = []string{
SilenceExtensionTypeOfflinePaid, SilenceExtensionTypeFree, SilenceExtensionTypeDiscount,
SilenceExtensionTypeComplaintCompensation, SilenceExtensionTypeSystemCompensation,
SilenceExtensionTypeSpecialCustomer, SilenceExtensionTypeBatch, SilenceExtensionTypePurchaseAdjust,
}
// SilenceSpecialExtensionTypes 是特殊延期可提交的类型。
var SilenceSpecialExtensionTypes = []string{
SilenceExtensionTypeFree, SilenceExtensionTypeDiscount, SilenceExtensionTypeComplaintCompensation,
SilenceExtensionTypeSystemCompensation, SilenceExtensionTypeSpecialCustomer,
}
// 延期批次状态。
const (
SilenceBatchStatusPendingPayment = "pending_payment"
SilenceBatchStatusPendingApproval = "pending_approval"
SilenceBatchStatusExecuting = "executing"
SilenceBatchStatusCompleted = "completed"
SilenceBatchStatusPartiallyCompleted = "partially_completed"
SilenceBatchStatusRejected = "rejected"
SilenceBatchStatusClosed = "closed"
SilenceBatchStatusFailed = "failed"
)
// 审批状态(批次 approval_status)。
const (
SilenceApprovalStatusPending = "pending"
SilenceApprovalStatusApproved = "approved"
SilenceApprovalStatusRejected = "rejected"
SilenceApprovalStatusCanceled = "canceled"
)
// 延期明细状态。
const (
SilenceExtensionStatusPendingPayment = "pending_payment"
SilenceExtensionStatusPendingApproval = "pending_approval"
SilenceExtensionStatusApproved = "approved"
SilenceExtensionStatusExecuting = "executing"
SilenceExtensionStatusCompleted = "completed"
SilenceExtensionStatusException = "exception"
SilenceExtensionStatusFailed = "failed"
SilenceExtensionStatusRejected = "rejected"
SilenceExtensionStatusClosed = "closed"
)
// 延期订单状态。
const (
SilenceOrderStatusPendingPayment = "pending_payment"
SilenceOrderStatusPendingApproval = "pending_approval"
SilenceOrderStatusRejected = "rejected"
SilenceOrderStatusPaid = "paid"
SilenceOrderStatusCompleted = "completed"
SilenceOrderStatusClosed = "closed"
SilenceOrderStatusException = "exception"
SilenceOrderStatusRefunded = "refunded"
)
// 延期订单来源。
const (
SilenceOrderSourceClient = "client"
SilenceOrderSourceAdmin = "admin"
SilenceOrderSourceOffline = "offline"
)
// 沉默期流水事件类型。
const (
SilenceRecordEventSet = "set"
SilenceRecordEventAdjust = "adjust"
SilenceRecordEventExpired = "expired"
SilenceRecordEventEnded = "ended"
SilenceRecordEventExtend = "extend"
SilenceRecordEventExchange = "exchange"
SilenceRecordEventBackfill = "backfill"
SilenceRecordEventRealnameBackfill = "realname_backfill"
)
// 沉默期判定触发来源。
const (
SilenceTriggerOrderPaid = "order_paid"
SilenceTriggerAutoPurchase = "auto_purchase"
SilenceTriggerActivation = "activation"
SilenceTriggerScan = "scan"
SilenceTriggerExtension = "extension"
SilenceTriggerAdjustApproval = "adjust_approval"
SilenceTriggerExchange = "exchange"
SilenceTriggerBackfill = "backfill"
SilenceTriggerEligibilityRead = "eligibility"
)
// 沉默期流水与审计的操作人类型。
const (
SilenceOperatorSystem = "system"
SilenceOperatorAccount = "account"
SilenceOperatorCustomer = "customer"
)
// 延期资格不能付费延期的原因码。
const (
SilenceReasonNotExpired = "not_expired"
SilenceReasonNoSilence = "no_silence"
SilenceReasonExtensionDisabled = "extension_disabled"
SilenceReasonNoPolicy = "no_policy"
SilenceReasonExceedsLimit = "exceeds_limit"
SilenceReasonRefunded = "refunded"
SilenceReasonOrderPending = "order_pending"
SilenceReasonActivated = "activated"
SilenceReasonAdjustPending = "adjust_pending"
)
// 延期执行异常 / 失败原因码。
const (
SilenceFailureNotExpired = "not_expired"
SilenceFailureDeadlineNotAfter = "deadline_not_after_today"
SilenceFailureExceedsLimit = "exceeds_limit"
SilenceFailureFreeUsedUp = "free_used_up"
SilenceFailureUsageInvalid = "usage_invalid"
SilenceFailureAmountMismatch = "amount_mismatch"
SilenceFailureRefundFailed = "refund_failed"
)
// 沉默期权限点(后端统一校验并叠加店铺数据范围)。
const (
PermissionPackageSilenceConfig = "package_silence:config"
PermissionPackageSilenceOverride = "package_silence:override"
PermissionPackageSilenceExtend = "package_silence:extend"
PermissionPackageSilenceExtendBatch = "package_silence:extend_batch"
PermissionPackageSilenceOffline = "package_silence:offline"
PermissionPackageSilencePolicy = "package_silence:policy"
PermissionPackageSilenceException = "package_silence:exception"
)
// 沉默期审计动作(技术方案 §11.2)。
const (
AuditActionPackageSilenceDefaultChanged = "package.silence_default_changed"
AuditActionPackageSilenceSwitchChanged = "package.silence_switch_changed"
AuditActionUsageSilenceSet = "package_usage.silence_set"
AuditActionUsageSilenceAdjustRequested = "package_usage.silence_adjust_requested"
AuditActionUsageSilenceAdjustApproved = "package_usage.silence_adjust_approved"
AuditActionUsageSilenceAdjustRejected = "package_usage.silence_adjust_rejected"
AuditActionUsageSilenceExpired = "package_usage.silence_expired"
AuditActionUsageSilenceEnded = "package_usage.silence_ended"
AuditActionUsageSilenceExtensionRequested = "package_usage.silence_extension_requested"
AuditActionUsageSilenceExtensionApproved = "package_usage.silence_extension_approved"
AuditActionUsageSilenceExtensionRejected = "package_usage.silence_extension_rejected"
AuditActionUsageSilenceExtensionApplied = "package_usage.silence_extension_applied"
AuditActionUsageSilenceExtensionException = "package_usage.silence_extension_exception"
AuditActionUsageSilenceExtensionOrderState = "package_usage.silence_extension_order_changed"
AuditActionUsageSilenceMigratedOnExchange = "package_usage.silence_migrated_on_exchange"
AuditActionUsageSilenceBackfilled = "package_usage.silence_backfilled"
AuditActionSilencePolicyCreated = "package_silence_policy.created"
AuditActionSilencePolicyUpdated = "package_silence_policy.updated"
AuditActionSilencePolicyStatusChanged = "package_silence_policy.status_changed"
AuditActionAssetOutboundRecorded = "asset.outbound_recorded"
AuditActionAssetOutboundEnded = "asset.outbound_ended"
)
// 资产出库记录。
const (
OutboundSourceOrder = "order"
OutboundSourceExchange = "exchange"
OutboundSourceBackfill = "backfill"
OutboundEndReasonExchange = "exchange_return"
OutboundAssetTypeIotCard = "iot_card"
OutboundAssetTypeDevice = "device"
SilenceAssetTypeIotCard = "iot_card"
SilenceAssetTypeDevice = "device"
SilenceAuditResourceUsage = "package_usage"
SilenceAuditResourcePackage = "package"
SilenceAuditResourcePolicy = "package_silence_policy"
SilenceAuditResourceConfig = "system_config"
SilenceAuditResourceAsset = "asset"
)
// 沉默期审批业务字段(企微场景配置把模板控件映射到这些字段)。
const (
ApprovalFieldSilenceApplyType = "apply_type" // 申请类型
ApprovalFieldSilenceBatchNo = "batch_no" // 申请单号
ApprovalFieldSilenceAssetIdentifier = "asset_identifier" // 资产
ApprovalFieldSilencePackageName = "package_name" // 套餐
ApprovalFieldSilenceOrderNo = "order_no" // 订单号
ApprovalFieldSilenceDefaultDays = "default_days" // 默认沉默期天数
ApprovalFieldSilenceRequestedDays = "requested_days" // 申请沉默期天数
ApprovalFieldSilenceOriginalDeadline = "original_deadline" // 原截止日期
ApprovalFieldSilenceInputDays = "input_days" // 延期天数
ApprovalFieldSilenceBilledDays = "billed_days" // 计费天数
ApprovalFieldSilenceNewDeadline = "new_deadline" // 新截止日期
ApprovalFieldSilenceExtensionType = "extension_type" // 延期类型
ApprovalFieldSilenceItemCount = "item_count" // 明细条数
ApprovalFieldSilenceAmount = "amount" // 费用
ApprovalFieldSilenceAmountCent = "amount_cent" // 费用(分)
ApprovalFieldSilenceReason = "reason" // 原因
ApprovalFieldSilenceBasis = "basis" // 依据
ApprovalFieldSilenceEvidenceKeys = "evidence_keys" // 申请依据附件
ApprovalFieldSilencePaymentMethod = "offline_payment_method" // 收款方式
ApprovalFieldSilenceTradeNo = "offline_trade_no" // 交易单号
ApprovalFieldSilenceVoucherKeys = "payment_voucher_keys" // 收款凭证
)
// 沉默期导出场景。
const (
ExportTaskSceneSilenceOrder = "package_silence_order" // 导出场景:沉默期延期订单
ExportTaskSceneSilenceUsage = "package_silence_usage" // 导出场景:即将过期 / 已过期套餐
)
// AuditResourceSilenceExtensionOrder 是财务流水中延期订单的调查引用资源类型。
const AuditResourceSilenceExtensionOrder = "package_silence_extension_order"