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 }