go_dreamfactory/modules/caravan/model_rank.go
2024-01-05 11:33:06 +08:00

142 lines
3.6 KiB
Go

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
}