package model import "time" // PayMethodGroup 支付方式分组(用于服务费配置) type PayMethodGroup string const ( PayMethodGroupScan PayMethodGroup = "SCAN" // 扫码支付(微信/支付宝) PayMethodGroupTransfer PayMethodGroup = "TRANSFER" // 对公转账 PayMethodGroupBalance PayMethodGroup = "BALANCE" // 余额支付 ) // ServiceFeeConfig 服务费配置 type ServiceFeeConfig struct { ID uint64 `gorm:"column:id;primaryKey;autoIncrement"` AppID string `gorm:"column:app_id;size:32;not null;uniqueIndex:uk_app_method"` PayMethodGroup PayMethodGroup `gorm:"column:pay_method_group;size:20;not null;uniqueIndex:uk_app_method"` FeeRate float64 `gorm:"column:fee_rate;type:decimal(6,4);not null"` // 0.0000 ~ 9.9999% FeeReceiverMerchantID string `gorm:"column:fee_receiver_merchant_id;size:64;not null"` Status int8 `gorm:"column:status;not null;default:1"` CreatedAt time.Time `gorm:"column:created_at;autoCreateTime:milli"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime:milli"` } func (ServiceFeeConfig) TableName() string { return "service_fee_config" } // ServiceFeeLog 服务费流水 type ServiceFeeLog struct { ID uint64 `gorm:"column:id;primaryKey;autoIncrement"` TradeNo string `gorm:"column:trade_no;size:32;not null;uniqueIndex:uk_trade_action"` ConfigID uint64 `gorm:"column:config_id;not null"` FeeAmount int64 `gorm:"column:fee_amount;not null"` FeeRate float64 `gorm:"column:fee_rate;type:decimal(6,4);not null"` ReceiverMerchantID string `gorm:"column:receiver_merchant_id;size:64;not null"` Action string `gorm:"column:action;size:20;not null;uniqueIndex:uk_trade_action"` // CHARGE / ROLLBACK Status string `gorm:"column:status;size:20;not null;default:PENDING"` ChannelSharingNo string `gorm:"column:channel_sharing_no;size:64"` CreatedAt time.Time `gorm:"column:created_at;autoCreateTime:milli"` UpdatedAt time.Time `gorm:"column:updated_at;autoUpdateTime:milli"` } func (ServiceFeeLog) TableName() string { return "service_fee_log" } // PayMethodToGroup 将支付方式映射到服务费分组 func PayMethodToGroup(m PayMethod) PayMethodGroup { switch m { case PayMethodWechatJSAPI, PayMethodWechatH5, PayMethodWechatNative, PayMethodWechatMini, PayMethodAlipay, PayMethodQuickPay: return PayMethodGroupScan case PayMethodTransfer: return PayMethodGroupTransfer default: return PayMethodGroupBalance } }