123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- package models
- import (
- "context"
- "fmt"
- jsoniter "github.com/json-iterator/go"
- mhayaTime "github.com/mhaya/extend/time"
- "github.com/mhaya/game/game_cluster/internal/constant"
- "github.com/mhaya/game/game_cluster/internal/data"
- "github.com/mhaya/game/game_cluster/internal/mdb"
- "github.com/mhaya/game/game_cluster/internal/param"
- "github.com/mhaya/game/game_cluster/internal/third"
- mhayaLogger "github.com/mhaya/logger"
- "time"
- )
- type RankBase struct {
- ID int `json:"id" bson:"id"`
- Rank int `json:"rank" bson:"rank"`
- score int `json:"score" bson:"score"`
- Status int `json:"status" bson:"status"` //0无奖励1未领取2已领取
- ClaimTime int64 `json:"claimTime" bson:"claimTime"`
- Reward []data.ItemReward `json:"reward" bson:"reward"`
- }
- type RankReward map[int]*RankBase
- func NewRankReward() map[int]*RankBase {
- return make(map[int]*RankBase)
- }
- func (r RankReward) InitRank(uid string, tp int) {
- ret := data.RankConfig.GetAll()
- for _, v := range ret {
- if v.Type == tp {
- ID := v.ID
- key := GetRankKey(ID, 1, false)
- rank := GetPlayerRank(key, uid)
- score := GetPlayerRankScore(key, uid)
- r[ID] = &RankBase{
- ID: ID,
- Rank: rank,
- score: score,
- Status: 0,
- ClaimTime: 0,
- Reward: data.RankRewardConfig.GetRewardByRank(v.ID, rank),
- }
- if len(r[ID].Reward) > 0 {
- r[ID].Status = 1
- }
- }
- }
- }
- func GetPlayBaseKey(uid string) string {
- return fmt.Sprintf("%v:%v", constant.PlayerBaseKey, uid)
- }
- func GetRankKey(id, tp int, yesterday bool) string {
- ret, ok := data.RankConfig.Get(id)
- if !ok {
- return ""
- }
- key := fmt.Sprintf("%s", constant.RankKey)
- if ret.StartTime != "" && ret.EndTime != "" {
- stime, err := time.Parse(ret.StartTime, mhayaTime.DateTimeFormat)
- if err != nil {
- return ""
- }
- sTime := mhayaTime.CreateFromTimestamp(stime.Unix())
- if sTime.After(time.Now()) {
- return ""
- }
- etime, err := time.Parse(ret.EndTime, mhayaTime.DateTimeFormat)
- if err != nil {
- return ""
- }
- eTime := mhayaTime.CreateFromTimestamp(etime.Unix())
- if eTime.Before(time.Now()) {
- return ""
- }
- }
- switch ret.Type {
- case 1:
- if tp == 0 {
- key = fmt.Sprintf("%s:%v:%v", key, id, mhayaTime.Now().Format(mhayaTime.DateFormat))
- } else {
- if yesterday {
- key = fmt.Sprintf("%s:%v:%v", key, id, mhayaTime.Now().Add(-24*time.Hour).Format(mhayaTime.DateFormat))
- } else {
- key = fmt.Sprintf("%s:%v:%v", key, id, mhayaTime.Now().Format(mhayaTime.DateFormat))
- }
- }
- /* //临时修改为小时榜
- if tp == 0 {
- key = fmt.Sprintf("%s:%v:%v", key, id, mhayaTime.CreateFromTime(mhayaTime.Now().Hour(), 0, 0).ToDateTimeFormat())
- } else {
- key = fmt.Sprintf("%s:%v:%v", key, id, mhayaTime.CreateFromTime(mhayaTime.Now().Add(-1*time.Hour).Hour(), 0, 0).ToDateTimeFormat())
- }*/
- case 2:
- if tp == 0 {
- key = fmt.Sprintf("%s:%v:%v", key, id, mhayaTime.Now().StartOfWeek().Format(mhayaTime.DateFormat))
- } else {
- key = fmt.Sprintf("%s:%v:%v", key, id, mhayaTime.Now().StartOfWeek().Add(-7*24*time.Hour).Format(mhayaTime.DateFormat))
- }
- }
- return key
- }
- func SetRank(source, isRobot int, uid string, score int) error {
- ret := data.RankConfig.GetAll()
- ctx := context.Background()
- i := float64(2*1e12-time.Now().UnixMilli()) / 1e13
- for _, v := range ret {
- if v.Source == source {
- if v.IsBot == 0 && isRobot == 1 {
- continue
- }
- key := GetRankKey(v.ID, 0, false)
- err := mdb.RDB.ZIncrBy(ctx, key, float64(score)+i, uid).Err()
- if err != nil {
- return err
- }
- }
- }
- return nil
- }
- func GetPlayerRank(key, uid string) int {
- ctx := context.Background()
- rank, err := mdb.RDB.ZRevRank(ctx, key, uid).Result()
- if err != nil {
- return -1
- }
- return int(rank) + 1
- }
- func GetCountryRank(key, uid string) int {
- ctx := context.Background()
- rank, err := mdb.RDB.ZRevRank(ctx, key, uid).Result()
- if err != nil {
- return -1
- }
- return int(rank) + 1
- }
- func GetCountryRankScore(key, uid string) int64 {
- ctx := context.Background()
- score, err := mdb.RDB.ZScore(ctx, key, uid).Result()
- if err != nil {
- return 0
- }
- return int64(score)
- }
- func GetPlayerRankScore(key, uid string) int {
- ctx := context.Background()
- score, err := mdb.RDB.ZScore(ctx, key, uid).Result()
- if err != nil {
- return 0
- }
- return int(score)
- }
- func GetRankList(id, tp int) map[int]*param.PlayerBase {
- ret, ok := data.RankConfig.Get(id)
- if !ok {
- return nil
- }
- ctx := context.Background()
- key := GetRankKey(id, tp, false)
- ranks, err := mdb.RDB.ZRevRangeWithScores(ctx, key, 0, int64(ret.ShowTotal)-1).Result()
- if err != nil {
- return nil
- }
- rankList := make(map[int]*param.PlayerBase)
- for k, v := range ranks {
- uid := v.Member.(string)
- info := mdb.RDB.HGet(ctx, constant.PlayerBaseKey, uid).Val()
- var playerBase param.PlayerBase
- jsoniter.Unmarshal([]byte(info), &playerBase)
- rankList[k+1] = ¶m.PlayerBase{
- UserName: playerBase.UserName,
- UserNameMaybe: playerBase.UserNameMaybe,
- Avatar: playerBase.Avatar,
- OpenId: playerBase.OpenId,
- NickName: playerBase.NickName,
- Rank: k + 1,
- Score: int(v.Score),
- Reward: data.RankRewardConfig.GetRewardByRank(id, k+1),
- }
- }
- return rankList
- }
- func SetCountryRank(ip string, item *data.ItemReward) {
- country, err := third.GetCountryByIP(ip)
- countryConfig := data.ContryConfig.GetAll()
- all := data.RankConfig.GetAll()
- fmt.Println(all)
- countryMap := make(map[string]*data.ContryConfigRow, 0)
- for _, row := range countryConfig {
- countryMap[row.NameI] = row
- }
- if _, ok := countryMap[country]; !ok {
- country = "UN"
- }
- if err != nil {
- mhayaLogger.Warnf("Login SetCountryRank error:%v", err)
- return
- }
- key := fmt.Sprintf("%s", constant.CountryRankKey)
- ctx := context.Background()
- i := float64(2*1e12-time.Now().UnixMilli()) / 1e13
- score := item.Amount
- mdb.RDB.ZIncrBy(ctx, key, float64(score)+i, country)
- }
- func GetCountryRankList(countryMap map[string]*data.ContryConfigRow) map[int]*param.CountryBase {
- ctx := context.Background()
- key := fmt.Sprintf("%s", constant.CountryRankKey)
- ranks, err := mdb.RDB.ZRevRangeWithScores(ctx, key, 0, int64(50)-1).Result()
- if err != nil {
- return nil
- }
- rankList := make(map[int]*param.CountryBase)
- //for _, value := range countryMap {
- // mhayaLogger.Debugf("value", value)
- //}
- for k, v := range ranks {
- uid := v.Member.(string)
- mhayaLogger.Debugf("GetCountryRankList => uid:%s", uid)
- var cName string
- var icon_flag string
- if country, ok := countryMap[uid]; ok {
- cName = country.NameII
- icon_flag = country.Icon_flag
- } else {
- cName = "UN"
- icon_flag = countryMap[cName].Icon_flag
- }
- rankList[k+1] = ¶m.CountryBase{
- Country: cName,
- Score: int64(v.Score),
- Rank: k + 1,
- Icon: icon_flag,
- }
- }
- return rankList
- }
|