104 lines
3.6 KiB
Go
104 lines
3.6 KiB
Go
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:"type:text" json:"sign_key"` // 加密存储,拉卡拉使用商户私钥 PEM
|
|
NotifyKey string `gorm:"type:text" json:"notify_key"` // 加密存储,拉卡拉使用通知验签证书 PEM
|
|
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';index:idx_payment_merchant_configs_pay_way" json:"pay_way"`
|
|
JSPayFlag string `gorm:"column:jspay_flag;size:8;not null;default:'2'" json:"jspay_flag"`
|
|
SignType string `gorm:"size:32;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"
|
|
}
|