2026-05-22 14:03:24 +08:00

80 lines
2.5 KiB
Go

package dashboard
import (
"context"
"strings"
"github.com/shopspring/decimal"
)
var walletGameEvents = map[string]struct{}{
"GAME_SLOT_MACHINE": {}, "GAME_BARBECUE": {}, "TURNTABLE_GAME": {}, "LUDO_GAME": {},
"GAME_BURST_CRYSTAL": {}, "EGG": {}, "FRUIT_GAME": {}, "DOUBLE_LAYER_FRUIT": {},
"DOUBLE_LAYER_BARBECUE": {}, "GAME_FRUIT_BET": {}, "GAME_FRUIT_AWARD": {}, "GAME_BACK": {},
"GAME_WINNING": {}, "LUDO_VICTORY": {}, "LUDO_REFUND": {}, "GAME_LUDO_REFUND": {},
"USD_GAME_WIN": {}, "USD_GAME_REFUND": {}, "USD_GAME_REFUND_DRAW": {}, "TEEN_PATTI": {},
"BET_TEEN_PATTI": {}, "LOTTERY_NUMBER_BET": {}, "LOTTERY_REWARD": {},
}
func (m *Mapper) mapWalletGame(ctx context.Context, schema string, table string, action string, row Row) ([]Contribution, error) {
eventType := row.String("event_type")
if !isWalletGameEvent(eventType) {
return nil, nil
}
sysOrigin := row.String("sys_origin")
if !m.allowed(sysOrigin) {
return nil, nil
}
user, ok, err := m.user(ctx, row.Int64("user_id"))
if err != nil || !ok || user.IsDeleted {
return nil, err
}
if user.SysOrigin != sysOrigin {
return nil, nil
}
provider, gameID, gameName, err := m.store.ResolveWalletGame(ctx, sysOrigin, eventType, row.String("event_id"))
if err != nil {
return nil, err
}
amount := row.Decimal("penny_amount").Div(decimal.NewFromInt(100))
consume := decimal.Zero
payout := decimal.Zero
if row.Int64("type") == 1 {
consume = amount
} else if row.Int64("type") == 0 {
payout = amount
}
c := m.base(schema, table, action, row, user, row.MillisTime("create_time"))
c.GameTotalFlow = consume
c.GamePayout = payout
c.GameUser = true
c.GameProvider = provider
c.GameID = gameID
c.GameName = gameName
c.GameConsume = consume
c.GamePayoutBy = payout
c.GameProfit = consume.Sub(payout)
c.GameOrder = 1
return []Contribution{c}, nil
}
func isWalletGameEvent(eventType string) bool {
if _, ok := walletGameEvents[eventType]; ok {
return true
}
if eventType == "LUCKY_GIFT" || eventType == "LUCKY_GIFT_GOLD_REWARD" ||
eventType == "LUCKY_BOX_GAME" || eventType == "NEW_LUCKY_BOX_GAME" || eventType == "GAME_RAKE" {
return false
}
if strings.HasPrefix(eventType, "GIVE_GIFT") || strings.HasPrefix(eventType, "ACCEPT_GIFT") {
return false
}
return strings.HasPrefix(eventType, "BAISHUN_GAME") ||
strings.HasPrefix(eventType, "GAME_OPEN_") ||
strings.HasPrefix(eventType, "YOMI_GAME") ||
strings.HasPrefix(eventType, "HKYS_GAME") ||
strings.HasPrefix(eventType, "HOT_GAME")
}