bygdata/service/userdata/stats.go
2026-03-10 14:09:43 +00:00

168 lines
4.3 KiB
Go

package userdata
import (
"bygdata/global"
"bygdata/model/userdata"
"fmt"
"gorm.io/gorm"
"gorm.io/gorm/clause"
"time"
)
type StatsService struct{}
var StatsServiceApp = new(StatsService)
func (statsService *StatsService) AddGameData(data userdata.GameStats) (err error) {
history, year, month, week, day := statsService.formatTimestamp2Dates(data.Ut)
data.Ymd = history
err = statsService.addGameItem(data)
data.Ymd = year
err = statsService.addGameItem(data)
data.Ymd = month
err = statsService.addGameItem(data)
data.Ymd = week
err = statsService.addGameItem(data)
data.Ymd = day
err = statsService.addGameItem(data)
return
}
func (statsService *StatsService) addGameItem(data userdata.GameStats) (err error) {
data.Xid = fmt.Sprintf("%s-%d-%d-%s", data.UserNo, data.GameType, data.GameId, data.Ymd)
err = global.GVA_DB.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "xid"}},
DoUpdates: clause.Assignments(map[string]interface{}{
"bet_coin": gorm.Expr("bet_coin+?", data.BetCoin),
"bet_count": gorm.Expr("bet_count+?", data.BetCount),
"ut": data.Ut,
}),
}).Create(&data).Error
return
}
func (statsService *StatsService) AddPaymentData(data userdata.PaymentStats) (err error) {
history, year, month, week, day := statsService.formatTimestamp2Dates(data.Ut)
data.Ymd = history
err = statsService.addPaymentItem(data)
data.Ymd = year
err = statsService.addPaymentItem(data)
data.Ymd = month
err = statsService.addPaymentItem(data)
data.Ymd = week
err = statsService.addPaymentItem(data)
data.Ymd = day
err = statsService.addPaymentItem(data)
return
}
func (statsService *StatsService) addPaymentItem(data userdata.PaymentStats) (err error) {
data.Xid = fmt.Sprintf("%s-%s", data.UserNo, data.Ymd)
err = global.GVA_DB.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "xid"}},
DoUpdates: clause.Assignments(map[string]interface{}{
"money": gorm.Expr("money+?", data.Money),
"coin": gorm.Expr("coin+?", data.Coin),
"count": gorm.Expr("count+?", data.Count),
"ut": data.Ut,
}),
}).Create(&data).Error
return
}
func (statsService *StatsService) AddWithdrawalData(data userdata.WithdrawalStats) (err error) {
history, year, month, week, day := statsService.formatTimestamp2Dates(data.Ut)
data.Ymd = history
err = statsService.addWithdrawalItem(data)
data.Ymd = year
err = statsService.addWithdrawalItem(data)
data.Ymd = month
err = statsService.addWithdrawalItem(data)
data.Ymd = week
err = statsService.addWithdrawalItem(data)
data.Ymd = day
err = statsService.addWithdrawalItem(data)
return
}
func (statsService *StatsService) addWithdrawalItem(data userdata.WithdrawalStats) (err error) {
data.Xid = fmt.Sprintf("%s-%s", data.UserNo, data.Ymd)
err = global.GVA_DB.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "xid"}},
DoUpdates: clause.Assignments(map[string]interface{}{
"money": gorm.Expr("money+?", data.Money),
"coin": gorm.Expr("coin+?", data.Coin),
"count": gorm.Expr("count+?", data.Count),
"ut": data.Ut,
}),
}).Create(&data).Error
return
}
func (statsService *StatsService) AddBonusData(data userdata.BonusStats) (err error) {
history, year, month, week, day := statsService.formatTimestamp2Dates(data.Ut)
data.Ymd = history
err = statsService.addBonusItem(data)
data.Ymd = year
err = statsService.addBonusItem(data)
data.Ymd = month
err = statsService.addBonusItem(data)
data.Ymd = week
err = statsService.addBonusItem(data)
data.Ymd = day
err = statsService.addBonusItem(data)
return
}
func (statsService *StatsService) addBonusItem(data userdata.BonusStats) (err error) {
data.Xid = fmt.Sprintf("%s-%s-%s", data.UserNo, data.BonusId, data.Ymd)
err = global.GVA_DB.Clauses(clause.OnConflict{
Columns: []clause.Column{{Name: "xid"}},
DoUpdates: clause.Assignments(map[string]interface{}{
"coin": gorm.Expr("coin+?", data.Coin),
"count": gorm.Expr("count+?", data.Count),
"ut": data.Ut,
}),
}).Create(&data).Error
return
}
func (statsService *StatsService) formatTimestamp2Dates(ts int64) (history, year, month, week, day string) {
tt := time.Unix(ts, 0)
y, w := tt.ISOWeek()
history = "0000-00-00"
year = fmt.Sprintf("%d-00-00", y)
month = tt.Format("2006-01") + "-00"
week = fmt.Sprintf("%d-00-%2d", y, w)
day = tt.Format("2006-01-02")
return
}