add:查询平均游戏时长
This commit is contained in:
parent
93792b3e38
commit
30d3ba1cc0
|
@ -1,17 +1,18 @@
|
|||
StartTime: "2024-11-26T00:00:00+08:00"
|
||||
EndTime: "2024-11-27T00:00:00+08:00"
|
||||
StartTime: "2024-12-19T00:00:00+08:00"
|
||||
EndTime: "2024-12-20T00:00:00+08:00"
|
||||
|
||||
Switch: # 1: open, 0: close
|
||||
- 0 # 新用户游戏破产率
|
||||
- 0 # 新用户平均游戏时长
|
||||
- 1 # 用户平均游戏时长
|
||||
- 0 # 新用户平均局数
|
||||
- 0 # 平均倍数
|
||||
- 1 # 活跃破产率
|
||||
- 1 # 控输赢胜率
|
||||
- 1 # 机器人胜率
|
||||
- 1 # 人均获得金币
|
||||
- 1 # 破产后离线
|
||||
- 1 # 充值玩家金币余额
|
||||
- 0 # 活跃破产率
|
||||
- 0 # 控输赢胜率
|
||||
- 0 # 机器人胜率
|
||||
- 0 # 人均获得金币
|
||||
- 0 # 破产后离线
|
||||
- 0 # 充值玩家金币余额
|
||||
|
||||
Gamefreeids:
|
||||
- 2070001
|
||||
|
|
|
@ -18,6 +18,7 @@ import (
|
|||
const (
|
||||
ExcelTypeNewPlayerBankrupt = iota // 新用户游戏破产率
|
||||
ExcelTypeGameTimeAvg // 新用户平均游戏时长
|
||||
ExcelTypeGameTimeAllAvg // 用户平均游戏时长
|
||||
ExcelTypeGameCountAvg // 新用户平均局数
|
||||
ExcelTypeGameRate // 平均倍数
|
||||
ExcelTypeActiveRate // 活跃破产率
|
||||
|
@ -71,6 +72,7 @@ func main() {
|
|||
mgr := NewExcelMgr()
|
||||
mgr.Register(ExcelTypeNewPlayerBankrupt, []string{"日期", "场次id", "破产人数", "参与人数", "破产率"})
|
||||
mgr.Register(ExcelTypeGameTimeAvg, []string{"日期", "场次id", "参与人数", "平均游戏时长"})
|
||||
mgr.Register(ExcelTypeGameTimeAllAvg, []string{"日期", "场次id", "参与人数", "平均游戏时长"})
|
||||
mgr.Register(ExcelTypeGameCountAvg, []string{"日期", "场次id", "参与人数", "平均局数"})
|
||||
mgr.Register(ExcelTypeGameRate, []string{"日期", "场次id", "总局数", "平均倍数", "有炸弹分局数", "炸弹分平均倍数", "2留在手里的局数"})
|
||||
mgr.Register(ExcelTypeActiveRate, []string{"日期", "场次id", "破产人数", "参与人数", "破产率"})
|
||||
|
@ -99,6 +101,10 @@ func main() {
|
|||
// 新用户平均游戏时长
|
||||
mgr.GenNewPlayerGameTimeAvgExcel("1", startTimeStr, endTimeStr)
|
||||
}
|
||||
if switchArr[ExcelTypeGameTimeAllAvg] == 1 {
|
||||
// 用户平均游戏时长
|
||||
mgr.GenPlayerGameTimeAvgExcel("1", startTimeStr, endTimeStr)
|
||||
}
|
||||
if switchArr[ExcelTypeGameCountAvg] == 1 {
|
||||
// 新用户平均局数
|
||||
mgr.GenGameCountExcel("1", startTimeStr, endTimeStr)
|
||||
|
@ -144,7 +150,10 @@ func (e *ExcelMgr) SaveAll(startTime, endTime string) {
|
|||
e.Save(ExcelTypeNewPlayerBankrupt, fmt.Sprintf("新用户破产率_%s_%s.xlsx", startTime, endTime))
|
||||
}
|
||||
if switchArr[ExcelTypeGameTimeAvg] == 1 {
|
||||
e.Save(ExcelTypeGameTimeAvg, fmt.Sprintf("新用户平局游戏时长_%s_%s.xlsx", startTime, endTime))
|
||||
e.Save(ExcelTypeGameTimeAvg, fmt.Sprintf("新用户平均游戏时长_%s_%s.xlsx", startTime, endTime))
|
||||
}
|
||||
if switchArr[ExcelTypeGameTimeAllAvg] == 1 {
|
||||
e.Save(ExcelTypeGameTimeAllAvg, fmt.Sprintf("用户平均游戏时长_%s_%s.xlsx", startTime, endTime))
|
||||
}
|
||||
if switchArr[ExcelTypeGameCountAvg] == 1 {
|
||||
e.Save(ExcelTypeGameCountAvg, fmt.Sprintf("新用户平均局数_%s_%s.xlsx", startTime, endTime))
|
||||
|
@ -223,6 +232,29 @@ func (e *ExcelMgr) GenNewPlayerGameTimeAvgExcel(plt string, startTime, endTime s
|
|||
}
|
||||
}
|
||||
|
||||
func (e *ExcelMgr) GenPlayerGameTimeAvgExcel(plt string, startTime, endTime string) {
|
||||
for _, v := range VP.GetIntSlice("Gamefreeids") {
|
||||
a, b, err := task.PlayerGameTimeAvg(plt, startTime, endTime, v)
|
||||
if err != nil {
|
||||
logger.Logger.Errorf("PlayerGameTimeAvg get StartTime:%v EndTime:%v GameFreeId:%v err: %v", startTime, endTime, v, err)
|
||||
continue
|
||||
}
|
||||
ex := e.Get(ExcelTypeGameTimeAllAvg)
|
||||
ex.NewLine()
|
||||
ex.SetCell(startTime[:10])
|
||||
ex.SetCell(GetGameFreeName(v))
|
||||
ex.SetCell(a)
|
||||
if a > 0 {
|
||||
avg := float64(b) / float64(a)
|
||||
show := fmt.Sprintf("%v", time.Second*time.Duration(avg))
|
||||
ex.SetCell(show)
|
||||
} else {
|
||||
ex.SetCell(0)
|
||||
}
|
||||
logger.Logger.Tracef("PlayerGameTimeAvg GameFreeId: %v avg: %v", v, float64(b)/float64(a))
|
||||
}
|
||||
}
|
||||
|
||||
func (e *ExcelMgr) GenGameCountExcel(plt string, startTime, endTime string) {
|
||||
for _, v := range VP.GetIntSlice("Gamefreeids") {
|
||||
a, b, err := task.NewPlayerGameCountAvg(plt, startTime, endTime, v)
|
||||
|
|
|
@ -45,6 +45,37 @@ func GetNewPayerIds(plt string, startTime, endTime string) ([]int, error) {
|
|||
return ret, nil
|
||||
}
|
||||
|
||||
func GetPayerIds(plt string, startTime, endTime string) ([]int, error) {
|
||||
s, e := common.StrRFC3339TimeToTime(startTime), common.StrRFC3339TimeToTime(endTime)
|
||||
c, err := mymongo.GetLogCollection(plt, mongomodel.LogGamePlayerListLog)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var res []struct{ Snid int }
|
||||
dd, err := c.Aggregate(context.TODO(), bson.A{
|
||||
bson.M{"$match": bson.M{"time": bson.M{"$gte": s, "$lt": e}}},
|
||||
bson.M{"$group": bson.M{"_id": "$snid", "snid": bson.M{"$first": "$snid"}}},
|
||||
})
|
||||
if err != nil {
|
||||
if errors.Is(err, mongo.ErrNoDocuments) {
|
||||
return nil, nil
|
||||
}
|
||||
logger.Logger.Errorf("find game player snid get err: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
if err := dd.All(context.TODO(), &res); err != nil {
|
||||
logger.Logger.Errorf("find game player snid decode err: %v", err)
|
||||
return nil, err
|
||||
}
|
||||
var ret []int
|
||||
for _, v := range res {
|
||||
ret = append(ret, v.Snid)
|
||||
}
|
||||
logger.Logger.Tracef("find game player snid: %v", ret)
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
// 场次破产总人数
|
||||
func GameFreeIdBankruptPlayerCount(plt string, ids []int, startTime, endTime string, gamefreeid int) (int, error) {
|
||||
s, e := common.StrRFC3339TimeToTime(startTime), common.StrRFC3339TimeToTime(endTime)
|
||||
|
|
|
@ -102,3 +102,33 @@ func NewPlayerGameTimeAvg(plt string, startTime, endTime string, gamefreeid int)
|
|||
}
|
||||
return b, a, err
|
||||
}
|
||||
|
||||
func PlayerGameTimeAvg(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")
|
||||
}
|
||||
ids, err := GetPayerIds(plt, startTime, endTime)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
if len(ids) == 0 {
|
||||
return 0, 0, nil
|
||||
}
|
||||
a, _, err := NewPlayerGameTime(plt, ids, startTime, endTime, gamefreeid)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
if len(ids) == 0 {
|
||||
return 0, 0, nil
|
||||
}
|
||||
|
||||
b, err := PlayingGameCount(plt, ids, startTime, endTime, gamefreeid)
|
||||
if err != nil {
|
||||
return 0, 0, err
|
||||
}
|
||||
if b == 0 {
|
||||
return 0, 0, nil
|
||||
}
|
||||
return b, a, err
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue