60 lines
1.9 KiB
Go
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 保证全局同一时间只有一个启用配置。
|