package svc import ( "errors" "github.com/globalsign/mgo" "github.com/globalsign/mgo/bson" "mongo.games.com/game/dbproxy/mongo" "mongo.games.com/game/model" "mongo.games.com/goserver/core/logger" "net/rpc" ) var ( RankNianDBName = "log" RankNianCollName = "log_ranknian" RankNianColError = errors.New("RankNian collection open failed") ) func RankNianCollection(plt string) *mongo.Collection { s := mongo.MgoSessionMgrSington.GetPltMgoSession(plt, RankNianDBName) if s != nil { c, first := s.DB().C(RankNianCollName) if first { c.EnsureIndex(mgo.Index{Key: []string{"snid"}, Background: true, Sparse: true}) c.EnsureIndex(mgo.Index{Key: []string{"-luck"}, Background: true, Sparse: true}) c.EnsureIndex(mgo.Index{Key: []string{"-damage"}, Background: true, Sparse: true}) } return c } return nil } func RankNianUpsert(args *model.NianInfo) error { cc := RankNianCollection(args.Platform) if cc == nil { return RankNianColError } update := bson.M{ "$set": bson.M{ "platform": args.Platform, "name": args.Name, "damage": args.Damage, "modid": args.ModId, "ts": args.Ts, }, } if args.Luck != 0 { update["$set"].(bson.M)["luck"] = args.Luck } if args.LuckTime != 0 { update["$set"].(bson.M)["lucktime"] = args.LuckTime } _, err := cc.Upsert( bson.M{"snid": args.SnId}, update, ) if err != nil && !errors.Is(err, mgo.ErrNotFound) { logger.Logger.Error("RankNianSvc.Upsert is err: ", err) return err } return nil } type RankNianSvc struct { } func (svc *RankNianSvc) Upsert(args *model.NianInfo, ret *bool) error { err := RankNianUpsert(args) if err != nil { return err } *ret = true return nil } // 幸运榜 func (svc *RankNianSvc) LuckFind(args *model.FindNianListArgs, ret *model.FindNianListReply) error { fc := RankNianCollection(args.Platform) if fc == nil { return RankNianColError } err := fc.Find(bson.M{"luck": bson.M{"$gt": 0}}).Sort("-luck").Limit(40).All(&ret.List) if err != nil && !errors.Is(err, mgo.ErrNotFound) { logger.Logger.Error("QueryMatchSeason is err: ", err) return err } return nil } // 伤害榜 func (svc *RankNianSvc) DamageFind(args *model.FindNianListArgs, ret *model.FindNianListReply) error { fc := RankNianCollection(args.Platform) if fc == nil { return RankNianColError } err := fc.Find(bson.M{"damage": bson.M{"$gt": 0}}).Sort("-damage").Limit(40).All(&ret.List) if err != nil && !errors.Is(err, mgo.ErrNotFound) { logger.Logger.Error("QueryMatchSeason is err: ", err) return err } return nil } func (svc *RankNianSvc) UpdateAll(args *model.FindNianListArgs, ret *model.FindNianListReply) error { fc := RankNianCollection(args.Platform) if fc == nil { return RankNianColError } // 根据 args 中的条件构建查询 query := bson.M{"platform": args.Platform} update := bson.M{ "$set": bson.M{ "luck": 0, "lucktime": 0, }, } _, err := fc.UpdateAll(query, update) if err != nil { logger.Logger.Error("RankNianSvc.UpdateAll is err: ", err) return err } return nil } func (svc *RankNianSvc) DelAll(args *model.FindNianListArgs, ret *model.FindNianListReply) error { fc := RankNianCollection(args.Platform) if fc == nil { return RankNianColError } query := bson.M{"platform": args.Platform} _, err := fc.RemoveAll(query) if err != nil { logger.Logger.Error("RankNianSvc.RemoveAll is err: ", err) return err } return nil } func init() { rpc.Register(new(RankNianSvc)) }