支持后台支付配置管理
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"database/sql/driver"
|
||||
"encoding/json"
|
||||
"time"
|
||||
)
|
||||
|
||||
// PaymentMerchantConfig 支付商户配置
|
||||
type PaymentMerchantConfig struct {
|
||||
ID uint64 `gorm:"primaryKey" json:"id"`
|
||||
Name string `gorm:"size:128;not null" json:"name"`
|
||||
Provider string `gorm:"size:32;not null;index:idx_payment_merchant_configs_provider" json:"provider"`
|
||||
MerchantID string `gorm:"size:128;not null;index:idx_payment_merchant_configs_merchant_id" json:"merchant_id"`
|
||||
GatewayURL string `gorm:"size:512;not null;default:''" json:"gateway_url"`
|
||||
SignKey string `gorm:"size:512;not null;default:''" json:"sign_key"` // 加密存储
|
||||
NotifyKey string `gorm:"size:512;not null;default:''" json:"notify_key"` // 加密存储
|
||||
NotifyURL string `gorm:"size:512;not null;default:''" json:"notify_url"`
|
||||
JumpURL string `gorm:"size:512;not null;default:''" json:"jump_url"`
|
||||
PayWay string `gorm:"size:32;not null;default:'ZFBZF'" json:"pay_way"`
|
||||
JSPayFlag string `gorm:"column:jspay_flag;size:8;not null;default:'2'" json:"jspay_flag"`
|
||||
SignType string `gorm:"size:16;not null;default:'MD5'" json:"sign_type"`
|
||||
ExtraConfig JSONMap `gorm:"type:json" json:"extra_config"`
|
||||
IsDefault bool `gorm:"not null;default:0;index:idx_payment_merchant_configs_default" json:"is_default"`
|
||||
Status string `gorm:"size:32;not null;default:'active';index:idx_payment_merchant_configs_status" json:"status"`
|
||||
Environment string `gorm:"size:16;not null;default:'production'" json:"environment"`
|
||||
BusinessTags JSONArray `gorm:"type:json" json:"business_tags"`
|
||||
|
||||
// 统计信息
|
||||
TotalTransactions int64 `gorm:"not null;default:0" json:"total_transactions"`
|
||||
TotalAmountCent int64 `gorm:"not null;default:0" json:"total_amount_cent"`
|
||||
LastUsedAt *time.Time `json:"last_used_at"`
|
||||
|
||||
// 审计信息
|
||||
CreatedBy *uint64 `json:"created_by"`
|
||||
UpdatedBy *uint64 `json:"updated_by"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
func (PaymentMerchantConfig) TableName() string {
|
||||
return "payment_merchant_configs"
|
||||
}
|
||||
|
||||
// JSONMap 用于 extra_config 字段
|
||||
type JSONMap map[string]any
|
||||
|
||||
func (j JSONMap) Value() (driver.Value, error) {
|
||||
if j == nil {
|
||||
return nil, nil
|
||||
}
|
||||
return json.Marshal(j)
|
||||
}
|
||||
|
||||
func (j *JSONMap) Scan(value any) error {
|
||||
if value == nil {
|
||||
*j = nil
|
||||
return nil
|
||||
}
|
||||
bytes, ok := value.([]byte)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return json.Unmarshal(bytes, j)
|
||||
}
|
||||
|
||||
// JSONArray 用于 business_tags 字段
|
||||
type JSONArray []string
|
||||
|
||||
func (j JSONArray) Value() (driver.Value, error) {
|
||||
if j == nil {
|
||||
return nil, nil
|
||||
}
|
||||
return json.Marshal(j)
|
||||
}
|
||||
|
||||
func (j *JSONArray) Scan(value any) error {
|
||||
if value == nil {
|
||||
*j = nil
|
||||
return nil
|
||||
}
|
||||
bytes, ok := value.([]byte)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return json.Unmarshal(bytes, j)
|
||||
}
|
||||
|
||||
// PaymentConfigUsageLog 支付配置使用日志
|
||||
type PaymentConfigUsageLog struct {
|
||||
ID uint64 `gorm:"primaryKey" json:"id"`
|
||||
ConfigID uint64 `gorm:"not null;index:idx_payment_config_usage_logs_config" json:"config_id"`
|
||||
PaymentOrderID uint64 `gorm:"not null;index:idx_payment_config_usage_logs_payment" json:"payment_order_id"`
|
||||
Provider string `gorm:"size:32;not null" json:"provider"`
|
||||
MerchantID string `gorm:"size:128;not null" json:"merchant_id"`
|
||||
AmountCent int64 `gorm:"not null" json:"amount_cent"`
|
||||
BizType string `gorm:"size:32;not null" json:"biz_type"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
func (PaymentConfigUsageLog) TableName() string {
|
||||
return "payment_config_usage_logs"
|
||||
}
|
||||
Reference in New Issue
Block a user