game_sync/statistics/task/task/coin.go

78 lines
1.7 KiB
Go

package task
import (
"context"
"fmt"
"go.mongodb.org/mongo-driver/bson"
"mongo.games.com/game/common"
"mongo.games.com/goserver/core/mongox"
)
var CoinName = map[int]string{
44: "转盘",
57: "轮盘视频",
43: "签到",
58: "签到视频",
83: "累计签到",
91: "累计签到进阶奖励",
47: "vip每日礼包",
105: "vip等级礼包",
74: "集卡活动",
67: "金币存钱罐",
94: "赛季通行证等级奖励",
95: "赛季通行证排行奖励",
52: "排位赛段位奖励",
65: "周卡奖励",
5: "兑换",
49: "礼包码兑换",
38: "救济金",
56: "救济金视频",
}
func CoinHistory(plt string, startTime, endTime string, tp int, f func(data bson.M) error) error {
s, e := common.StrRFC3339TimeToTime(startTime), common.StrRFC3339TimeToTime(endTime)
if s.IsZero() || e.IsZero() {
return fmt.Errorf("time format error")
}
c, err := mongox.GetLogCollection(plt, "log_coinex")
if err != nil {
return err
}
cur, err := c.Find(context.TODO(), bson.M{"time": bson.M{"$gte": s, "$lt": e}, "logtype": tp, "cointype": 0})
if err != nil {
return err
}
defer cur.Close(context.Background())
for cur.TryNext(context.Background()) {
data := bson.M{}
if err := cur.Decode(data); err != nil {
return err
}
if err := f(data); err != nil {
return err
}
}
return nil
}
func CoinAvg(plt string, startTime, endTime string, tp int) (playerNumber int, total int, err error) {
player := make(map[int32]struct{})
err = CoinHistory(plt, startTime, endTime, tp, func(data bson.M) error {
snid := data["snid"].(int32)
count := int(data["count"].(int64))
player[snid] = struct{}{}
if count > 0 {
total += count
}
return nil
})
if err != nil {
return
}
playerNumber = len(player)
return
}