46 lines
1.4 KiB
Go
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
|
|
}
|