Files
junhong_cmp_fiber/pkg/constants/approval.go
break 575d056f54
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
feat(代理分销提现): 落地扫码注册、提现资料资格与企微终审提现
AUG26-008。

- 迁移 000214–000217:tb_shop 全局唯一且不可修改的随机分销码(含存量回填)、
  tb_agent_distribution_registration 待审批注册记录、tb_withdrawal_qualification 资料版本、
  tb_commission_withdrawal_request_attempt 审批尝试记录,以及提现申请的 latest_*/异常标记列;
  不修改既有迁移,down 在存在本 Change 业务事实或新类型场景行时拒绝破坏性回滚。
- 公开接口 POST /api/c/v1/agent-distribution-registrations:无认证,复用既有短信验证码校验、
  消费与限流;无效分销码、停用上级、验证码无效或已消费统一返回「分销码不可用」且不落库,
  审批通过前不创建店铺、账号或钱包。
- 审批通过才在同一事务内建启用店铺、代理主账号、钱包、上级层级与业务员快照,驳回不建实体,
  重复回调不重复建实体,提交后清理上级下级缓存。
- 提现资料资格按不可变版本保存,替换合同或法人身份证即新增版本并同事务失效旧有效版本;
  超管作废原因必填;代理停用与店铺删除联动失效。
- 提现每次提交或重提新增不可变审批尝试记录并冻结金额;企业微信通过仅一次从冻结扣减、
  保持状态 2 并写 paid_at(不使用状态 4),驳回/cancelled/deleted 仅一次释放,
  通过后撤销不回滚、不重新冻结、只写正交异常标记;加锁顺序统一为申请→尝试→钱包。
- 本地人工终审对已关联审批实例的申请返回状态冲突,approval_instance_id 为空的存量申请保持既有行为,
  不新增任何配置开关。
- 补齐审批业务类型注册点全集:业务类型与场景字段常量、场景 DTO 两处枚举与中文描述、
  场景字段白名单/合法类型/中文名、数据库 CHECK、Worker 决策消费者与装配、审批审计资源映射,
  以及三个新审计资源与 13 个审计动作;失败/拒绝审计改为必达。
- 新增后台路由与 OpenAPI:资格提交/查询/作废、提现申请/重提/详情、店铺详情返回只读分销码。
- 归档本 Change:主 Spec 新增 agent-distribution-withdrawal 能力(5 个 Requirement)。

验证(junhong_cmp_test + Redis DB 6,显式 DB_*,未重置整库):
- 迁移 up → version 217 且 dirty=false → down 3 → up 回 217,fixture 复核残留为 0。
- 受控状态机脚手架 227 项通过 / 0 项失败,覆盖 18 组场景(幂等与乱序回调、资金冻结/释放/重提、
  退款回扣 × 在途提现并发、负向场景拒绝审计与 14 个动作码审计真实落库)。
- gofmt 空、go build/go vet 通过、gendocs 与工作区逐字节一致、context-health 通过、
  openspec validate --strict 通过、doctor healthy;自动化测试按项目决策为 N/A。

运行期前置(未完成,非代码交付物):由超管经 PUT /api/admin/wecom/scenes/{business_type} 为
agent_distribution_approval、withdrawal_qualification_approval、commission_withdrawal_approval
配置启用场景与模板控件映射;未配置时相应提交失败关闭。
2026-09-14 09:45:13 +08:00

283 lines
16 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"
const (
// ApprovalBusinessTypeRefund 表示退款审批业务场景。
ApprovalBusinessTypeRefund = "refund_approval"
// ApprovalBusinessTypeOfflineRecharge 表示员工线下代充值审批业务场景。
ApprovalBusinessTypeOfflineRecharge = "offline_recharge_approval"
// ApprovalBusinessTypeEmployeeCollection 表示员工代收款核销审批业务场景。
// 该场景的业务ID取核销申请的审批尝试记录主键使同一申请每次提交各自持有独立审批实例。
ApprovalBusinessTypeEmployeeCollection = "employee_collection_approval"
// ApprovalBusinessTypeAgentDistribution 表示代理扫码分销注册审批业务场景。
// 该场景的业务ID取待审批注册记录主键审批通过才创建店铺与代理账号。
ApprovalBusinessTypeAgentDistribution = "agent_distribution_approval"
// ApprovalBusinessTypeWithdrawalQualification 表示提现资料资格审批业务场景。
// 该场景的业务ID取资料版本主键替换资料即新版本新实例历史版本不可覆盖。
ApprovalBusinessTypeWithdrawalQualification = "withdrawal_qualification_approval"
// ApprovalBusinessTypeCommissionWithdrawal 表示佣金提现终审审批业务场景。
// 该场景的业务ID取提现申请的审批尝试记录主键使同一申请每次提交或重提各自持有独立审批实例。
ApprovalBusinessTypeCommissionWithdrawal = "commission_withdrawal_approval"
)
const (
// ApprovalFieldRechargeNo 表示线下代充值单号业务字段。
ApprovalFieldRechargeNo = "recharge_no"
// ApprovalFieldShopID 表示线下代充值目标店铺 ID 业务字段。
ApprovalFieldShopID = "shop_id"
// ApprovalFieldShopName 表示线下代充值目标店铺名称业务字段。
ApprovalFieldShopName = "shop_name"
// ApprovalFieldAmount 表示线下代充值元金额展示业务字段。
ApprovalFieldAmount = "amount"
// ApprovalFieldAmountCent 表示线下代充值分金额业务字段。
ApprovalFieldAmountCent = "amount_cent"
// ApprovalFieldPaymentVoucherKey 表示线下代充值凭证对象存储 Key 列表业务字段。
ApprovalFieldPaymentVoucherKey = "payment_voucher_key"
// ApprovalFieldRemark 表示线下代充值运营备注业务字段。
ApprovalFieldRemark = "remark"
// ApprovalFieldSubmitterID 表示真实业务提交人账号 ID 业务字段。
ApprovalFieldSubmitterID = "submitter_id"
// ApprovalFieldSubmitterName 表示真实业务提交人账号名称业务字段。
ApprovalFieldSubmitterName = "submitter_name"
// ApprovalFieldOfflinePaymentMethod 表示线下代充值收款方式名称快照业务字段。
ApprovalFieldOfflinePaymentMethod = "offline_payment_method"
// ApprovalFieldOfflinePaymentMethodCode 表示线下代充值收款方式稳定编码业务字段。
ApprovalFieldOfflinePaymentMethodCode = "offline_payment_method_code"
// ApprovalFieldExternalTransactionNo 表示线下代充值交易流水号业务字段。
ApprovalFieldExternalTransactionNo = "external_transaction_no"
// ApprovalFieldOtherVoucherKey 表示线下代充值其他凭证对象存储 Key 列表业务字段。
ApprovalFieldOtherVoucherKey = "other_voucher_key"
// ApprovalFieldRefundNo 表示退款单号业务字段。
ApprovalFieldRefundNo = "refund_no"
// ApprovalFieldOrderID 表示退款关联订单 ID 业务字段。
ApprovalFieldOrderID = "order_id"
// ApprovalFieldOrderNo 表示退款关联订单号业务字段。
ApprovalFieldOrderNo = "order_no"
// ApprovalFieldAssetIdentifier 表示退款资产标识业务字段。
ApprovalFieldAssetIdentifier = "asset_identifier"
// ApprovalFieldAssetType 表示退款资产类型业务字段。
ApprovalFieldAssetType = "asset_type"
// ApprovalFieldActualReceivedAmount 表示退款实收金额业务字段。
ApprovalFieldActualReceivedAmount = "actual_received_amount"
// ApprovalFieldRequestedRefundAmount 表示申请退款金额业务字段。
ApprovalFieldRequestedRefundAmount = "requested_refund_amount"
// ApprovalFieldRefundVoucherKey 表示退款凭证对象存储 Key 列表业务字段。
ApprovalFieldRefundVoucherKey = "refund_voucher_key"
// ApprovalFieldRefundReason 表示退款原因业务字段。
ApprovalFieldRefundReason = "refund_reason"
// ApprovalFieldPackageUsageID 表示退款指定套餐使用记录 ID 业务字段。
ApprovalFieldPackageUsageID = "package_usage_id"
// ApprovalFieldCollectionApplicationID 表示员工代收款核销申请 ID 业务字段。
ApprovalFieldCollectionApplicationID = "collection_application_id"
// ApprovalFieldCollectionPaymentMethod 表示员工代收款线下收款方式名称业务字段。
ApprovalFieldCollectionPaymentMethod = "collection_payment_method"
// ApprovalFieldCollectionPaidAmount 表示员工代收款付款金额元展示业务字段。
ApprovalFieldCollectionPaidAmount = "collection_paid_amount"
// ApprovalFieldCollectionPaidAmountCent 表示员工代收款付款金额分业务字段。
ApprovalFieldCollectionPaidAmountCent = "collection_paid_amount_cent"
// ApprovalFieldCollectionPayerName 表示员工代收款付款方名称业务字段。
ApprovalFieldCollectionPayerName = "collection_payer_name"
// ApprovalFieldCollectionPaidAt 表示员工代收款付款时间业务字段。
ApprovalFieldCollectionPaidAt = "collection_paid_at"
// ApprovalFieldCollectionExternalTransactionNo 表示员工代收款外部交易流水号业务字段。
ApprovalFieldCollectionExternalTransactionNo = "collection_external_transaction_no"
// ApprovalFieldCollectionBillCount 表示员工代收款分摊账单数量业务字段。
ApprovalFieldCollectionBillCount = "collection_bill_count"
// ApprovalFieldCollectionBillSummary 表示员工代收款分摊账单摘要业务字段。
ApprovalFieldCollectionBillSummary = "collection_bill_summary"
)
const (
// ApprovalFieldDistributionCode 表示扫码注册使用的上级店铺分销码业务字段。
ApprovalFieldDistributionCode = "distribution_code"
// ApprovalFieldDistributionParentShopID 表示扫码注册上级店铺 ID 业务字段。
ApprovalFieldDistributionParentShopID = "distribution_parent_shop_id"
// ApprovalFieldDistributionParentShopName 表示扫码注册上级店铺名称业务字段。
ApprovalFieldDistributionParentShopName = "distribution_parent_shop_name"
// ApprovalFieldDistributionShopName 表示申请店铺名称业务字段。
ApprovalFieldDistributionShopName = "distribution_shop_name"
// ApprovalFieldDistributionShopCode 表示申请店铺编号业务字段。
ApprovalFieldDistributionShopCode = "distribution_shop_code"
// ApprovalFieldDistributionUsername 表示申请代理主账号用户名业务字段。
ApprovalFieldDistributionUsername = "distribution_username"
// ApprovalFieldDistributionPhoneMasked 表示脱敏后的注册手机号业务字段,禁止写入完整手机号。
ApprovalFieldDistributionPhoneMasked = "distribution_phone_masked"
// ApprovalFieldDistributionContactName 表示注册联系人姓名业务字段。
ApprovalFieldDistributionContactName = "distribution_contact_name"
// ApprovalFieldDistributionRegion 表示注册地址摘要业务字段。
ApprovalFieldDistributionRegion = "distribution_region"
// ApprovalFieldQualificationSubjectType 表示提现资格签约主体类型中文名业务字段。
ApprovalFieldQualificationSubjectType = "qualification_subject_type"
// ApprovalFieldQualificationSubjectCodeMasked 表示脱敏后的签约主体代码业务字段。
ApprovalFieldQualificationSubjectCodeMasked = "qualification_subject_code_masked"
// ApprovalFieldQualificationLegalPersonMasked 表示脱敏后的法人身份证号业务字段。
ApprovalFieldQualificationLegalPersonMasked = "qualification_legal_person_id_card_masked"
// ApprovalFieldQualificationShopID 表示提现资格所属店铺 ID 业务字段。
ApprovalFieldQualificationShopID = "qualification_shop_id"
// ApprovalFieldQualificationShopName 表示提现资格所属店铺名称业务字段。
ApprovalFieldQualificationShopName = "qualification_shop_name"
// ApprovalFieldQualificationContractKey 表示合同附件对象存储 Key 业务字段。
ApprovalFieldQualificationContractKey = "qualification_contract_key"
// ApprovalFieldQualificationIDCardFrontKey 表示法人身份证正面附件对象存储 Key 业务字段。
ApprovalFieldQualificationIDCardFrontKey = "qualification_id_card_front_key"
// ApprovalFieldQualificationIDCardBackKey 表示法人身份证反面附件对象存储 Key 业务字段。
ApprovalFieldQualificationIDCardBackKey = "qualification_id_card_back_key"
// ApprovalFieldQualificationBusinessLicenseKey 表示营业执照附件对象存储 Key 业务字段。
ApprovalFieldQualificationBusinessLicenseKey = "qualification_business_license_key"
// ApprovalFieldQualificationShopFrontKey 表示门头照附件对象存储 Key 业务字段。
ApprovalFieldQualificationShopFrontKey = "qualification_shop_front_key"
// ApprovalFieldQualificationInvoiceKey 表示发票附件对象存储 Key 业务字段。
ApprovalFieldQualificationInvoiceKey = "qualification_invoice_key"
// ApprovalFieldQualificationInvoiceTitle 表示发票抬头业务字段。
ApprovalFieldQualificationInvoiceTitle = "qualification_invoice_title"
// ApprovalFieldWithdrawalNo 表示提现单号业务字段。
ApprovalFieldWithdrawalNo = "withdrawal_no"
// ApprovalFieldWithdrawalAttemptNo 表示提现第几次提交业务字段。
ApprovalFieldWithdrawalAttemptNo = "withdrawal_attempt_no"
// ApprovalFieldWithdrawalShopID 表示提现店铺 ID 业务字段。
ApprovalFieldWithdrawalShopID = "withdrawal_shop_id"
// ApprovalFieldWithdrawalShopName 表示提现店铺名称业务字段。
ApprovalFieldWithdrawalShopName = "withdrawal_shop_name"
// ApprovalFieldWithdrawalAmount 表示提现金额元展示业务字段。
ApprovalFieldWithdrawalAmount = "withdrawal_amount"
// ApprovalFieldWithdrawalAmountCent 表示提现金额分业务字段。
ApprovalFieldWithdrawalAmountCent = "withdrawal_amount_cent"
// ApprovalFieldWithdrawalFee 表示提现手续费元展示业务字段。
ApprovalFieldWithdrawalFee = "withdrawal_fee"
// ApprovalFieldWithdrawalActualAmount 表示提现实际到账金额元展示业务字段。
ApprovalFieldWithdrawalActualAmount = "withdrawal_actual_amount"
// ApprovalFieldWithdrawalMethod 表示提现收款方式快照业务字段。
ApprovalFieldWithdrawalMethod = "withdrawal_method"
// ApprovalFieldWithdrawalAccountName 表示提现收款人姓名业务字段。
ApprovalFieldWithdrawalAccountName = "withdrawal_account_name"
// ApprovalFieldWithdrawalAccountNumber 表示提现收款账号业务字段。
ApprovalFieldWithdrawalAccountNumber = "withdrawal_account_number"
// ApprovalFieldWithdrawalInvoiceKey 表示申请级发票附件对象存储 Key 列表业务字段。
ApprovalFieldWithdrawalInvoiceKey = "withdrawal_invoice_key"
)
const (
// ApprovalFieldValueTypeString 表示业务字段值为普通字符串。
ApprovalFieldValueTypeString = "string"
// ApprovalFieldValueTypeInteger 表示业务字段值为整数。
ApprovalFieldValueTypeInteger = "integer"
// ApprovalFieldValueTypeMoney 表示业务字段值为两位小数的元金额字符串。
ApprovalFieldValueTypeMoney = "money"
// ApprovalFieldValueTypeFileList 表示业务字段值为对象存储文件引用列表。
ApprovalFieldValueTypeFileList = "file_list"
)
const (
// ApprovalStatusSubmitting 表示审批申请等待渠道提交。
ApprovalStatusSubmitting = 0
// ApprovalStatusPending 表示审批申请已进入渠道审批。
ApprovalStatusPending = 1
// ApprovalStatusApproved 表示审批已通过。
ApprovalStatusApproved = 2
// ApprovalStatusRejected 表示审批已拒绝。
ApprovalStatusRejected = 3
// ApprovalStatusCancelled 表示审批已撤销。
ApprovalStatusCancelled = 4
// ApprovalStatusRevokedAfterApproved 表示审批通过后被撤销。
ApprovalStatusRevokedAfterApproved = 5
// ApprovalStatusDeleted 表示审批已删除。
ApprovalStatusDeleted = 6
// ApprovalStatusSubmissionFailed 表示渠道明确确认审批提交失败。
ApprovalStatusSubmissionFailed = 7
// ApprovalStatusSubmissionUnknown 表示审批提交请求已发出但结果未知。
ApprovalStatusSubmissionUnknown = 8
)
const (
// ApprovalDecisionApproved 表示标准审批通过决策。
ApprovalDecisionApproved = "approved"
// ApprovalDecisionRejected 表示标准审批拒绝决策。
ApprovalDecisionRejected = "rejected"
// ApprovalDecisionCancelled 表示标准审批撤销决策。
ApprovalDecisionCancelled = "cancelled"
// ApprovalDecisionDeleted 表示标准审批删除决策。
ApprovalDecisionDeleted = "deleted"
// ApprovalDecisionRevokedAfterApproved 表示标准审批通过后撤销决策。
ApprovalDecisionRevokedAfterApproved = "revoked_after_approved"
)
const (
// ApprovalInitialVersion 表示通用审批实例的初始乐观锁版本。
ApprovalInitialVersion = 1
// ApprovalQueryMaxBatchSize 表示通用审批摘要单次批量投影上限。
ApprovalQueryMaxBatchSize = 100
// ApprovalUnknownSubmitterName 表示提交人名称快照无法解析。
ApprovalUnknownSubmitterName = "未知账号"
// ApprovalDecisionDeliveryLeaseDuration 表示标准决策消费者的单次处理租约时长。
ApprovalDecisionDeliveryLeaseDuration = 5 * time.Minute
// ApprovalPreparationTTL 表示事务前审批可用性结果允许复用的最长期限。
ApprovalPreparationTTL = 30 * time.Second
)
const (
// ApprovalAuditActorWeCom 表示企业微信外部审批系统。
ApprovalAuditActorWeCom = "wecom"
// ApprovalAuditActorSubmissionWorker 表示企业微信审批提交 Worker。
ApprovalAuditActorSubmissionWorker = "wecom_approval_submission"
// ApprovalAuditActorRecoveryJob 表示企业微信审批主动恢复计划任务。
ApprovalAuditActorRecoveryJob = "wecom_approval_recovery"
)
const (
// ApprovalDecisionDeliveryPending 表示标准决策等待业务消费。
ApprovalDecisionDeliveryPending = 0
// ApprovalDecisionDeliveryProcessing 表示标准决策已被消费者租约领取。
ApprovalDecisionDeliveryProcessing = 1
// ApprovalDecisionDeliverySucceeded 表示标准决策已被业务幂等处理。
ApprovalDecisionDeliverySucceeded = 2
// ApprovalDecisionDeliveryFailed 表示标准决策消费失败并等待重试。
ApprovalDecisionDeliveryFailed = 3
)
const (
// OutboxEventTypeApprovalTerminalDecision 表示通用审批标准终态已记录。
OutboxEventTypeApprovalTerminalDecision = "approval.terminal_decision.recorded"
// OutboxEventTypeApprovalSubmissionRequested 表示通用审批实例等待渠道提交。
OutboxEventTypeApprovalSubmissionRequested = "approval.submission.requested"
// ApprovalTerminalDecisionPayloadVersionV1 表示标准终态事件载荷第一版。
ApprovalTerminalDecisionPayloadVersionV1 = 1
// ApprovalSubmissionPayloadVersionV1 表示审批申请提交事件载荷第一版。
ApprovalSubmissionPayloadVersionV1 = 1
)
const (
// ApprovalSyncSourceCallback 表示由第三方审批回调触发权威同步。
ApprovalSyncSourceCallback = "callback"
// ApprovalSyncSourcePolling 表示由定时兜底轮询触发权威同步。
ApprovalSyncSourcePolling = "polling"
// ApprovalSyncSourceManual 表示由受控人工动作触发权威同步。
ApprovalSyncSourceManual = "manual"
)
// GetApprovalStatusName 返回通用审批状态的中文名称。
func GetApprovalStatusName(status int) string {
switch status {
case ApprovalStatusSubmitting:
return "提交中"
case ApprovalStatusPending:
return "审批中"
case ApprovalStatusApproved:
return "已通过"
case ApprovalStatusRejected:
return "已拒绝"
case ApprovalStatusCancelled:
return "已撤销"
case ApprovalStatusRevokedAfterApproved:
return "通过后撤销"
case ApprovalStatusDeleted:
return "已删除"
case ApprovalStatusSubmissionFailed:
return "提交失败"
case ApprovalStatusSubmissionUnknown:
return "提交结果未知"
default:
return "未知"
}
}