78 lines
1.7 KiB
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
|
|
}
|