121 lines
3.0 KiB
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
|
|
}
|