go_dreamfactory/modules/viking/model_rank.go

121 lines
3.0 KiB
Go

package viking
import (
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/redis"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type ModelRank struct {
modules.MCompModel
moduleViking *Viking
}
func (this *ModelRank) Init(service core.IService, module core.IModule, comp core.IModuleComp, options core.IModuleOptions) (err error) {
this.TableName = comm.TableVikingRank
err = this.MCompModel.Init(service, module, comp, options)
this.moduleViking = module.(*Viking)
return
}
func (this *ModelRank) AddRank(uId string, data *pb.DBVikingRank) (err error) {
if err = this.Add(uId, data); err != nil {
return
}
return nil
}
func (this *ModelRank) GetUserRandData(uid string) (result *pb.DBVikingRank, err error) {
result = &pb.DBVikingRank{}
if err = this.Get(uid, result); err != nil && redis.RedisNil != err {
return
}
err = nil
return result, err
}
// 更新排行榜数据
func (this *ModelRank) ChangeUserRank(uid string, objId string, value map[string]interface{}) (err error) {
if len(value) == 0 {
return nil
}
return this.ChangeList(uid, objId, value)
}
func (this *ModelRank) GetRankData(bossType int32) (data []*pb.DBVikingRank, err error) {
tmpdata := make([]*pb.DBVikingRank, 0)
data = make([]*pb.DBVikingRank, 0)
err = this.Redis.LRange(comm.TableVikingRankList, 0, -1, &tmpdata)
if err == nil {
for _, v := range tmpdata {
if v.Bosstype == bossType {
data = append(data, v)
}
}
}
return
}
// 获取排行榜数据
func (this *ModelRank) getVikingRankList(uid string) []*pb.DBVikingRank {
ranks := make([]*pb.DBVikingRank, 0)
err := this.GetList(uid, &ranks)
if err != nil {
return nil
}
return ranks
}
func (this *ModelRank) updateVikingRankList(session comm.IUserSession, difficulty int32, boosType int32, Leadpos int32, line []*pb.LineUp) {
// 查询是不是更新数据
ranks := this.getVikingRankList(session.GetUserId())
bfind := false
for _, v := range ranks {
if v.Bosstype == boosType {
mapRankData := make(map[string]interface{}, 0)
mapRankData["difficulty"] = difficulty
mapRankData["bosstype"] = boosType
mapRankData["Leadpos"] = Leadpos
mapRankData["line"] = line
mapRankData["costTime"] = 123
this.ChangeUserRank(session.GetUserId(), v.Id, mapRankData)
bfind = true
break
}
}
if !bfind {
userinfo := this.moduleViking.ModuleUser.GetUser(session.GetUserId())
new := &pb.DBVikingRank{
Id: primitive.NewObjectID().Hex(),
Uid: session.GetUserId(),
Difficulty: difficulty,
Bosstype: boosType,
Nickname: userinfo.Name,
Icon: "",
Lv: userinfo.Lv,
Leadpos: Leadpos,
Line: line,
CostTime: 12,
}
this.AddList(session.GetUserId(), new.Id, new)
}
return
}
func (this *ModelRank) getVikingRankListByBossType(uid string, bossType int32) *pb.DBVikingRank {
ranks := make([]*pb.DBVikingRank, 0)
err := this.GetList(uid, &ranks)
if err != nil {
return nil
}
for _, v := range ranks {
if v.Bosstype == bossType {
return v
}
}
return nil
}