package caravan import ( "context" "fmt" "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/lego/sys/mgo" "go_dreamfactory/modules" "go_dreamfactory/pb" "go_dreamfactory/sys/db" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "go.mongodb.org/mongo-driver/x/bsonx" ) type ModelRank struct { modules.MCompModel module *Caravan } func (this *ModelRank) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) { this.TableName = comm.TableCaravanRank err = this.MCompModel.Init(service, module, comp, options) this.module = module.(*Caravan) //创建uid索引 this.DB.CreateIndex(core.SqlTable(comm.TableCaravanRank), mongo.IndexModel{ Keys: bsonx.Doc{{Key: "uid", Value: bsonx.Int32(1)}}, }) return } func (this *ModelRank) SetUsrRankList(uid string) (result *pb.DBCaravanRank, err error) { var ( user *pb.DBUser model *db.DBModel ) conn_, err := db.Cross() // 获取跨服数据库对象 if err != nil { return } user, err = this.module.ModuleUser.GetUser(uid) if err != nil { return } if model = db.NewDBModelByExpired(db.CrossTag(), comm.TableCaravanRank, conn_); model == nil { err = fmt.Errorf("cand found table :%s,%v", comm.TableCaravanRank, conn_) return } result = &pb.DBCaravanRank{} if err = model.Get(uid, result); err != nil { if mgo.MongodbNil == err { result = &pb.DBCaravanRank{ Id: primitive.NewObjectID().Hex(), Uid: uid, Name: user.Name, Userlv: user.Lv, Avatar: user.Avatar, Merchantmoney: user.Merchantmoney, CaravanLv: user.Caravanlv, Title: user.Curtitle, } err = nil model.Add(uid, result) } return } data := make(map[string]interface{}, 0) data["merchantmoney"] = user.Merchantmoney data["caravanLv"] = user.Caravanlv if err = model.Change(uid, data); err != nil { return } return result, err } func (this *ModelRank) ChangeRankList(uId string, data map[string]interface{}) (err error) { conn_, err := db.Cross() // 获取跨服数据库对象 if err != nil { return } model := db.NewDBModelByExpired(db.CrossTag(), comm.TableCaravanRank, conn_) if model == nil { return } if err = model.Change(uId, data); err != nil { return } return } // 获取排行榜数据 func (this *ModelRank) getRankList(uid string) (list []*pb.CaravanRankInfo, rankid int32) { var ipos int32 min := this.module.ModuleTools.GetGlobalConf().BusinessRankmoney conn_, err := db.Cross() // 获取跨服数据库对象 if err != nil { return } model := db.NewDBModelByExpired(db.CrossTag(), comm.TableCaravanRank, conn_) if model == nil { return } if _data, err := model.DB.Find(comm.TableCaravanRank, bson.M{"merchantmoney": bson.M{"$gte": min}}, options.Find().SetSort(bson.M{"merchantmoney": -1}).SetLimit(int64(comm.MaxRankNum))); err == nil { for _data.Next(context.TODO()) { temp := &pb.DBUser{} if err = _data.Decode(temp); err == nil { if temp.Name == "" { // 容错处理 防止没有创号的玩家入榜 continue } ipos++ list = append(list, &pb.CaravanRankInfo{ Uid: temp.Uid, Name: temp.Name, Userlv: temp.Lv, Avatar: temp.Avatar, Rank: ipos, Merchantmoney: temp.Merchantmoney, CaravanLv: temp.Caravanlv, Title: temp.Curtitle, }) if temp.Uid == uid { rankid = ipos } } } } else { this.module.Errorln(err) return } return }