Files

60 lines
1.9 KiB
Go

package paymentconfig
import (
"context"
"errors"
"time"
"hfb_sys/backend/internal/model"
"gorm.io/gorm"
)
// IncrementUsage 增加使用统计
func (r *Repository) IncrementUsage(ctx context.Context, id uint64, amountCent int64) error {
now := time.Now()
return r.db.WithContext(ctx).Model(&model.PaymentMerchantConfig{}).Where("id = ?", id).Updates(map[string]any{
"total_transactions": gorm.Expr("total_transactions + ?", 1),
"total_amount_cent": gorm.Expr("total_amount_cent + ?", amountCent),
"last_used_at": now,
}).Error
}
// RecordUsage 记录支付配置命中情况,同一个支付单只记录一次。
// RecordUsage 记录支付配置命中情况,同一个支付单只记录一次。
func (r *Repository) RecordUsage(ctx context.Context, configID uint64, paymentOrderID uint64, provider string, merchantID string, amountCent int64, bizType string) error {
if configID == 0 || paymentOrderID == 0 {
return nil
}
return r.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
var existing model.PaymentConfigUsageLog
err := tx.Where("payment_order_id = ?", paymentOrderID).First(&existing).Error
if err == nil {
return nil
}
if !errors.Is(err, gorm.ErrRecordNotFound) {
return err
}
log := model.PaymentConfigUsageLog{
ConfigID: configID,
PaymentOrderID: paymentOrderID,
Provider: provider,
MerchantID: merchantID,
AmountCent: amountCent,
BizType: bizType,
}
if err := tx.Create(&log).Error; err != nil {
return err
}
now := time.Now()
return tx.Model(&model.PaymentMerchantConfig{}).Where("id = ?", configID).Updates(map[string]any{
"total_transactions": gorm.Expr("total_transactions + ?", 1),
"total_amount_cent": gorm.Expr("total_amount_cent + ?", amountCent),
"last_used_at": now,
}).Error
})
}
// deactivateOtherConfigs 保证全局同一时间只有一个启用配置。