2026-05-23 12:27:44 +08:00

46 lines
1.4 KiB
Go

package storage
import (
"context"
"database/sql"
"dashboard-cdc-worker/internal/dashboard"
)
func (r *MySQLRepository) applyRechargeDetail(ctx context.Context, tx *sql.Tx, c dashboard.Contribution) error {
detail := c.RechargeDetail
if detail == nil || detail.RecordID == "" || detail.SourceType == "" {
return nil
}
if c.DeltaSign < 0 {
_, err := tx.ExecContext(ctx, `
DELETE FROM country_dashboard_recharge_detail
WHERE source_type = ? AND record_id = ?
`, detail.SourceType, detail.RecordID)
return err
}
if detail.EventTime.IsZero() {
return nil
}
_, err := tx.ExecContext(ctx, `
INSERT INTO country_dashboard_recharge_detail (
source_type, record_id, source_channel, sys_origin, user_id, country_code, country_name,
amount, coin_quantity, remark, create_time, update_time
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW())
ON DUPLICATE KEY UPDATE
source_channel = VALUES(source_channel),
sys_origin = VALUES(sys_origin),
user_id = VALUES(user_id),
country_code = VALUES(country_code),
country_name = VALUES(country_name),
amount = VALUES(amount),
coin_quantity = VALUES(coin_quantity),
remark = VALUES(remark),
create_time = VALUES(create_time),
update_time = NOW()
`, detail.SourceType, detail.RecordID, detail.SourceChannel, detail.SysOrigin, detail.UserID,
detail.Country.Code, detail.Country.Name, detail.Amount, detail.CoinQuantity,
detail.Remark, detail.EventTime)
return err
}