优化支付日志和配置删除提示
This commit is contained in:
@@ -66,6 +66,9 @@ func (r *Repository) List(ctx context.Context, query ListQuery) ([]ConfigDTO, in
|
||||
if err := r.applySuccessfulPaymentStats(ctx, dtos); err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
if err := r.applyReferenceCounts(ctx, dtos); err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
return dtos, total, nil
|
||||
}
|
||||
@@ -87,6 +90,9 @@ func (r *Repository) FindByID(ctx context.Context, id uint64, includeSecret bool
|
||||
if err := r.applySuccessfulPaymentStats(ctx, statDTOs); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := r.applyReferenceCounts(ctx, statDTOs); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
dto = statDTOs[0]
|
||||
if includeSecret {
|
||||
if err := appendAuditLog(r.db.WithContext(ctx), actorID, "payment_config.view_secret", item.ID, meta, map[string]any{
|
||||
@@ -145,6 +151,29 @@ func (r *Repository) applySuccessfulPaymentStats(ctx context.Context, dtos []Con
|
||||
return nil
|
||||
}
|
||||
|
||||
// applyReferenceCounts 使用删除保护的同一口径统计配置被支付记录引用的次数。
|
||||
func (r *Repository) applyReferenceCounts(ctx context.Context, dtos []ConfigDTO) error {
|
||||
for idx := range dtos {
|
||||
count, err := r.referenceCount(ctx, dtos[idx])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
dtos[idx].ReferenceCount = count
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *Repository) referenceCount(ctx context.Context, dto ConfigDTO) (int64, error) {
|
||||
var count int64
|
||||
db := r.db.WithContext(ctx).Model(&model.PaymentOrder{}).
|
||||
Where("payment_config_id = ?", dto.ID).
|
||||
Or("(payment_config_id = ? OR payment_config_id IS NULL) AND provider = ? AND merchant_id = ? AND pay_way = ?", 0, dto.Provider, dto.MerchantID, dto.PayWay)
|
||||
if err := db.Count(&count).Error; err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
type nullableTime struct {
|
||||
Time *time.Time
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user