game_sync/statistics/task/task/gamebankruptcy.go

70 lines
2.0 KiB
Go

package task
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"mongo.games.com/game/common"
"mongo.games.com/goserver/core/logger"
mymongo "mongo.games.com/goserver/core/mongox"
mymysql "mongo.games.com/goserver/core/mysqlx"
)
// 场次破产率
// GameFreeIdBankruptcyTimes 场次破产次数
func GameFreeIdBankruptcyTimes(plt string, startTime, endTime string, gamefreeid int) (int, error) {
s, e := common.StrRFC3339TimeToTime(startTime), common.StrRFC3339TimeToTime(endTime)
db, err := mymysql.GetDatabase("count")
if err != nil {
return 0, err
}
var n int64
if err = db.Table("bankrupt_log").Where("bankrupt_time >= ? AND bankrupt_time < ? AND game_free_id = ?",
s.Unix(), e.Unix(), gamefreeid).Count(&n).Error; err != nil {
logger.Logger.Errorf("find bankrupt count get err: %v", err)
return 0, err
}
return int(n), nil
}
// GameFreeIdTotalTimes 场次总局数
func GameFreeIdTotalTimes(plt string, startTime, endTime string, gamefreeid int) (int, error) {
s, e := common.StrRFC3339TimeToTime(startTime), common.StrRFC3339TimeToTime(endTime)
c, err := mymongo.GetLogCollection(plt, "log_gamedetailed")
if err != nil {
return 0, err
}
n, err := c.CountDocuments(context.TODO(), bson.M{"time": bson.M{"$gte": s, "$lt": e}, "gamefreeid": gamefreeid})
if err != nil {
logger.Logger.Errorf("find game total times get err: %v", err)
return 0, err
}
return int(n), nil
}
// GameBankruptcyRate 场次破产率
// 返回 破产局数, 总局数, 错误
func GameBankruptcyRate(plt string, startTime, endTime string, gamefreeid int) (int, int, error) {
s, e := common.StrRFC3339TimeToTime(startTime), common.StrRFC3339TimeToTime(endTime)
if s.IsZero() || e.IsZero() {
return 0, 0, fmt.Errorf("time format error")
}
b, err := GameFreeIdBankruptcyTimes(plt, startTime, endTime, gamefreeid)
if err != nil {
return 0, 0, err
}
t, err := GameFreeIdTotalTimes(plt, startTime, endTime, gamefreeid)
if err != nil {
return 0, 0, err
}
return b, t, nil
}