63 lines
1.6 KiB
Go
63 lines
1.6 KiB
Go
package task
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"go.mongodb.org/mongo-driver/mongo/options"
|
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"mongo.games.com/game/common"
|
|
mymongo "mongo.games.com/goserver/core/mongox"
|
|
)
|
|
|
|
type RechargeOfflineData struct {
|
|
Snid int32
|
|
Coin int64
|
|
}
|
|
|
|
func OfflineCoin(plt string, startTime, endTime string) (res []*RechargeOfflineData, err error) {
|
|
s, e := common.StrRFC3339TimeToTime(startTime), common.StrRFC3339TimeToTime(endTime)
|
|
if s.IsZero() || e.IsZero() {
|
|
return nil, fmt.Errorf("time format error")
|
|
}
|
|
c, err := mymongo.GetLogCollection(plt, "log_dbshop")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
cur, err := c.Find(context.TODO(), bson.M{"ts": bson.M{"$gte": s.Unix(), "$lt": e.Unix()}, "consume": 3, "state": 1})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer cur.Close(context.Background())
|
|
|
|
var list []struct{ Snid int32 }
|
|
if err = cur.All(context.Background(), &list); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
snids := map[int32]struct{}{}
|
|
|
|
for _, v := range list {
|
|
if _, ok := snids[v.Snid]; ok {
|
|
continue
|
|
}
|
|
snids[v.Snid] = struct{}{}
|
|
|
|
// 最后金币数量
|
|
c, err := mymongo.GetLogCollection(plt, "log_coinex")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
one := c.FindOne(context.TODO(), bson.M{"snid": v.Snid, "cointype": 0, "ts": bson.M{"$lt": e.Unix()}}, options.FindOne().SetSort(bson.M{"ts": -1}))
|
|
if one.Err() != nil {
|
|
return nil, one.Err()
|
|
}
|
|
var data struct{ Restcount int64 }
|
|
if err = one.Decode(&data); err != nil {
|
|
return nil, err
|
|
}
|
|
res = append(res, &RechargeOfflineData{Snid: v.Snid, Coin: data.Restcount})
|
|
}
|
|
return
|
|
}
|