118 lines
2.8 KiB
Go
118 lines
2.8 KiB
Go
package entertainment
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"go_dreamfactory/comm"
|
|
"go_dreamfactory/lego/core"
|
|
"go_dreamfactory/lego/sys/redis/pipe"
|
|
"go_dreamfactory/modules"
|
|
"go_dreamfactory/pb"
|
|
"go_dreamfactory/sys/configure"
|
|
cfg "go_dreamfactory/sys/configure/structs"
|
|
|
|
"github.com/go-redis/redis/v8"
|
|
)
|
|
|
|
type modelRank struct {
|
|
modules.MCompModel
|
|
module *Entertainment
|
|
}
|
|
|
|
// 组件初始化接口
|
|
func (this *modelRank) Init(service core.IService, module core.IModule, comp core.IModuleComp, opt core.IModuleOptions) (err error) {
|
|
this.TableName = comm.TableEntertainRank
|
|
this.MCompModel.Init(service, module, comp, opt)
|
|
this.module = module.(*Entertainment)
|
|
|
|
return
|
|
}
|
|
|
|
// 更新排名
|
|
func (this *modelRank) updateXxlRank(users ...*pb.XxlPlayer) (err error) {
|
|
var (
|
|
pipe *pipe.RedisPipe = this.DBModel.Redis.RedisPipe(context.TODO())
|
|
menbers []*redis.Z
|
|
cmd *redis.IntCmd
|
|
|
|
strName string
|
|
)
|
|
strName = fmt.Sprintf("%s-%s", this.DBModel.ServiceId, this.TableName)
|
|
if len(users) == 0 {
|
|
return
|
|
}
|
|
menbers = make([]*redis.Z, len(users))
|
|
for i, v := range users {
|
|
menbers[i] = &redis.Z{Score: float64(v.Consumeexp), Member: v.Uinfo.Uid}
|
|
}
|
|
if cmd = pipe.ZAdd(strName, menbers...); err != nil {
|
|
this.module.Errorln(err)
|
|
}
|
|
if _, err = pipe.Exec(); err != nil {
|
|
this.module.Errorln(err)
|
|
return
|
|
}
|
|
if _, err = cmd.Result(); err != nil {
|
|
this.module.Errorln(err)
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
// 获取排行榜前50的用户名单
|
|
func (this *modelRank) queryRankUser() (ranks []string, err error) {
|
|
var (
|
|
result []string
|
|
strName string
|
|
)
|
|
strName = fmt.Sprintf("%s-%s", this.DBModel.ServiceId, this.TableName)
|
|
if result, err = this.DBModel.Redis.ZRevRange(strName, 0, comm.MaxRankList).Result(); err != nil {
|
|
this.module.Errorln(err)
|
|
return
|
|
}
|
|
ranks = make([]string, 0)
|
|
for i := 0; i < len(result); i += 1 {
|
|
ranks = append(ranks, result[i])
|
|
}
|
|
return
|
|
}
|
|
|
|
// 比赛结算
|
|
func (this *modelRank) raceSettlement() {
|
|
var (
|
|
reward *cfg.GameConsumeRank
|
|
result []string
|
|
Items []*pb.UserAssets
|
|
err error
|
|
)
|
|
if reward, err = this.module.configure.getRankReward(); err != nil {
|
|
this.module.Errorln(err)
|
|
return
|
|
}
|
|
for _, v := range reward.GetDataList() {
|
|
if result, err = this.DBModel.Redis.ZRevRange(fmt.Sprintf("%s-%s", this.DBModel.ServiceId, this.TableName), int64(v.RankLow-1), int64(v.RankUp)).Result(); err != nil {
|
|
this.module.Errorln(err)
|
|
return
|
|
}
|
|
|
|
Items = make([]*pb.UserAssets, len(v.RankReward))
|
|
for i, v := range v.RankReward {
|
|
Items[i] = &pb.UserAssets{
|
|
A: v.A,
|
|
T: v.T,
|
|
N: v.N,
|
|
}
|
|
}
|
|
for i := 0; i < len(result); i += 2 {
|
|
|
|
this.module.mail.SendNewMail(&pb.DBMailData{
|
|
Cid: "XXLRankingReward",
|
|
Param: []string{fmt.Sprintf("%d", v.RankLow+int32(i))},
|
|
CreateTime: uint64(configure.Now().Unix()),
|
|
Items: Items,
|
|
}, result[i])
|
|
}
|
|
}
|
|
|
|
}
|