Files
junhong_cmp_fiber/pkg/constants/wallet.go
邹进 6298a9061f fix: 第1批 M8、M13、M14 审批提交失败终态与退款关闭类终态定位
- 审批核心在实例进入提交失败的同一事务内写 submission_failed 决策投递与终态事件,消费入口单独放行
- 核销(4)、退款(7)、扫码注册(3)、资料资格(4)、线下充值(7)、佣金提现(5)新增“审批提交失败”终态并释放预占/冻结
- 三处恢复入口不再重放提交失败;退款关闭类终态按审批尝试定位退款单(M13)
- 核销列表与详情批量返回审批提交状态;筛选、字段说明、状态名称、退款导出加入新状态
- 迁移 000239 放宽五张业务表状态约束与决策投递取值约束(测试库已执行 up/down/up)
- OpenSpec Change fix-approval-submission-failure-terminal:18/26,测试部署后端到端验证与存量补数据待完成
2026-10-12 00:03:46 +09:00

215 lines
8.0 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 "fmt"
// ========================================
// 钱包系统常量定义
// ========================================
// ========== 代理钱包常量 ==========
// 代理钱包类型
const (
AgentWalletTypeMain = "main" // 主钱包
AgentWalletTypeCommission = "commission" // 分佣钱包
// AgentMainWalletLowBalanceThreshold 表示主钱包低余额提醒阈值,单位为分(100 元)。
AgentMainWalletLowBalanceThreshold int64 = 10000
)
// 代理主钱包信用管理权限
const (
PermissionRoleDefaultCreditManage = "role:default-credit:manage" // 配置客户角色的新建代理默认信用模板
PermissionShopCreditLimitManage = "shop:credit-limit:manage" // 前端控制店铺实际信用额度按钮显示
)
// AgentFundManagementForbiddenMessage 是企业账号访问代理资金功能时的统一拒绝提示。
const AgentFundManagementForbiddenMessage = "企业账号无权访问代理资金功能"
// 代理钱包状态
const (
AgentWalletStatusNormal = 1 // 正常
AgentWalletStatusFrozen = 2 // 冻结
AgentWalletStatusClosed = 3 // 关闭
)
// 代理钱包交易类型
const (
AgentTransactionTypeRecharge = "recharge" // 充值
AgentTransactionTypeDeduct = "deduct" // 扣款
AgentTransactionTypeRefund = "refund" // 退款
AgentTransactionTypeCommission = "commission" // 分佣
AgentTransactionTypeWithdrawal = "withdrawal" // 提现
AgentTransactionTypeCommissionDeduct = "commission_deduct" // 退款佣金回扣
AgentTransactionTypeAdjustment = "adjustment" // 人工余额调整
)
// 代理钱包交易子类型(当 transaction_type = "deduct" 用于订单支付时)
const (
WalletTransactionSubtypeSelfPurchase = "self_purchase" // 自购
WalletTransactionSubtypePurchaseForSubordinate = "purchase_for_subordinate" // 给下级代理购买
// OutboxEventTypeAgentMainWalletDebited 表示代理主钱包订单扣款已提交。
OutboxEventTypeAgentMainWalletDebited = "wallet.agent_main.debited"
// AgentMainWalletDebitedPayloadVersionV1 是代理主钱包扣款事件载荷版本。
AgentMainWalletDebitedPayloadVersionV1 = 1
// OutboxEventTypeAgentMainWalletReservationChanged 表示代理主钱包预占状态已变化。
OutboxEventTypeAgentMainWalletReservationChanged = "wallet.agent_main.reservation.changed"
// AgentMainWalletReservationPayloadVersionV1 是代理主钱包预占事件载荷版本。
AgentMainWalletReservationPayloadVersionV1 = 1
// OutboxEventTypeAgentMainWalletCredited 表示代理主钱包正向入账已提交。
OutboxEventTypeAgentMainWalletCredited = "wallet.agent_main.credited"
// AgentMainWalletCreditedPayloadVersionV1 是代理主钱包入账事件载荷版本。
AgentMainWalletCreditedPayloadVersionV1 = 1
// OutboxEventTypeAgentMainWalletRefunded 表示代理主钱包订单退款回充已提交。
OutboxEventTypeAgentMainWalletRefunded = "wallet.agent_main.refunded"
// AgentMainWalletRefundedPayloadVersionV1 是代理主钱包退款回充事件载荷版本。
AgentMainWalletRefundedPayloadVersionV1 = 1
)
// 代理主钱包预占状态
const (
AgentWalletReservationStatusFrozen = 1 // 已冻结
AgentWalletReservationStatusReleased = 2 // 已释放
AgentWalletReservationStatusCompleted = 3 // 已完成扣除
)
// 代理充值订单号前缀
const (
AgentRechargeOrderPrefix = "ARCH" // 代理充值订单号前缀
)
// 代理充值金额限制(单位:分)
const (
AgentRechargeMinAmount = 1 // 线下最小充值金额(1分)
AgentOnlineRechargeMinAmount = 10000 // 在线扫码最小充值金额(100元)
AgentRechargeMaxAmount = 100000000 // 最大充值金额(1000000元)
)
// ========== 资产钱包常量 ==========
// 资产钱包资源类型
const (
AssetWalletResourceTypeIotCard = "iot_card" // 物联网卡钱包
AssetWalletResourceTypeDevice = "device" // 设备钱包(多卡共享)
)
// 资产钱包状态
const (
AssetWalletStatusNormal = 1 // 正常
AssetWalletStatusFrozen = 2 // 冻结
AssetWalletStatusClosed = 3 // 关闭
)
// 资产钱包交易类型
const (
AssetTransactionTypeRecharge = "recharge" // 充值
AssetTransactionTypeDeduct = "deduct" // 扣款
AssetTransactionTypeRefund = "refund" // 退款
AssetTransactionTypeExchange = "exchange" // 换货迁移
)
// 资产充值订单号前缀
const (
AssetRechargeOrderPrefix = "CRCH" // 资产充值订单号前缀
)
// 资产充值金额限制(单位:分)
const (
AssetRechargeMinAmount = 100 // 最小充值金额(1元)
AssetRechargeMaxAmount = 10000000 // 最大充值金额(100000元)
)
// ========== 通用常量 ==========
// 交易状态(代理钱包和卡钱包通用)
const (
TransactionStatusSuccess = 1 // 成功
TransactionStatusFailed = 2 // 失败
TransactionStatusProcessing = 3 // 处理中
)
// 充值状态(代理钱包和卡钱包通用)
const (
RechargeStatusPending = 1 // 待支付
RechargeStatusPaid = 2 // 已支付
RechargeStatusCompleted = 3 // 已完成
RechargeStatusClosed = 4 // 已关闭
RechargeStatusRefunded = 5 // 已退款
RechargeStatusRejected = 6 // 已驳回
// RechargeStatusSubmissionFailed 线下代理充值提交企业微信审批被明确拒绝,充值终止且不入账。
RechargeStatusSubmissionFailed = 7
)
// 充值支付方式
const (
RechargeMethodAlipay = "alipay" // 支付宝
RechargeMethodWechat = "wechat" // 微信
RechargeMethodBank = "bank" // 银行转账(仅代理钱包支持)
RechargeMethodOffline = "offline" // 线下(仅代理钱包支持)
)
// 关联业务类型
const (
ReferenceTypeOrder = "order" // 订单
ReferenceTypeCommission = "commission" // 分佣
ReferenceTypeWithdrawal = "withdrawal" // 提现
ReferenceTypeTopup = "topup" // 充值
ReferenceTypeRecharge = "recharge" // 个人资产充值支付
ReferenceTypeRefund = "refund" // 退款
ReferenceTypeExchange = "exchange" // 换货
ReferenceTypeManualAdjustment = "manual_adjustment" // 人工余额调整
)
// ========== Redis Key 生成函数 ==========
// GetRechargeStatusName 获取充值状态名称
// 对应 RechargeStatus* 常量:1=待支付, 2=已支付, 3=已完成, 4=已关闭, 5=已退款, 6=已驳回, 7=审批提交失败
func GetRechargeStatusName(status int) string {
switch status {
case RechargeStatusPending:
return "待支付"
case RechargeStatusPaid:
return "已支付"
case RechargeStatusCompleted:
return "已完成"
case RechargeStatusClosed:
return "已关闭"
case RechargeStatusRefunded:
return "已退款"
case RechargeStatusRejected:
return "已驳回"
case RechargeStatusSubmissionFailed:
return ApprovalSubmissionFailedStatusName
default:
return "未知"
}
}
// RedisAgentWalletBalanceKey 代理钱包余额缓存 Key
// 格式:agent_wallet:balance:{shop_id}:{wallet_type}
// TTL:300 秒(5 分钟)
func RedisAgentWalletBalanceKey(shopID uint, walletType string) string {
return fmt.Sprintf("agent_wallet:balance:%d:%s", shopID, walletType)
}
// RedisAgentWalletLockKey 代理钱包分布式锁 Key
// 格式:agent_wallet:lock:{shop_id}:{wallet_type}
// TTL:10 秒
func RedisAgentWalletLockKey(shopID uint, walletType string) string {
return fmt.Sprintf("agent_wallet:lock:%d:%s", shopID, walletType)
}
// RedisAssetWalletBalanceKey 资产钱包余额缓存 Key
// 格式:asset_wallet:balance:{resource_type}:{resource_id}
// TTL:180 秒(3 分钟)
func RedisAssetWalletBalanceKey(resourceType string, resourceID uint) string {
return fmt.Sprintf("asset_wallet:balance:%s:%d", resourceType, resourceID)
}
// RedisAssetWalletLockKey 资产钱包分布式锁 Key
// 格式:asset_wallet:lock:{resource_type}:{resource_id}
// TTL:10 秒
func RedisAssetWalletLockKey(resourceType string, resourceID uint) string {
return fmt.Sprintf("asset_wallet:lock:%s:%d", resourceType, resourceID)
}