From fe972dd0c1bfd67da23562b5eaa39e86b3e4d926 Mon Sep 17 00:00:00 2001 From: mofangmin Date: Fri, 21 Jun 2024 17:32:36 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5=E5=8A=9F=E8=83=BD=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- call/user.go | 93 +++++++++++++++++++++++++++++ common/game.go | 12 ++++ modules/web/handler/firstpage.go | 21 ++++++- modules/web/handler/game.go | 9 +++ modules/web/handler/user.go | 25 ++++++++ modules/web/routers/routers_user.go | 1 + modules/web/values/firstpage.go | 7 +++ modules/web/values/protocol.go | 6 ++ 8 files changed, 171 insertions(+), 3 deletions(-) diff --git a/call/user.go b/call/user.go index 765c21f..fe7695c 100644 --- a/call/user.go +++ b/call/user.go @@ -1,6 +1,7 @@ package call import ( + "context" "encoding/json" "errors" "fmt" @@ -13,6 +14,7 @@ import ( "server/pb" "server/util" "strconv" + "strings" "time" "github.com/liangdas/mqant/log" @@ -662,3 +664,94 @@ func UpdateUserNeedBet(uid int, amount int64) { } }) } + +// AddGameRecord 添加玩家游玩记录 +func AddGameRecord(uid int, provider int, gameId int) error { + member := fmt.Sprintf("%v_%v", provider, gameId) + playerGamesSetKey := fmt.Sprintf("player:%v:games:set", uid) + playerGamesListKey := fmt.Sprintf("player:%v:games:list", uid) + ctx := context.Background() + client := db.Redis().GetRedis() + // 检查集合中是否已经存在该游戏记录 + exists, err := client.SIsMember(ctx, playerGamesSetKey, member).Result() + if err != nil { + return err + } + if !exists { + // 将游戏ID添加到集合进行去重 + client.SAdd(ctx, playerGamesSetKey, member) + // 将游戏ID添加到列表的头部 + client.LPush(ctx, playerGamesListKey, member) + // 保持列表中最多50条记录 + client.LTrim(ctx, playerGamesListKey, 0, 49) + } + + return nil +} + +// GetGameRecord 获取游玩记录 +func GetGameRecord(uid int) (gameList []*common.ConfigGameList) { + client := db.Redis().GetRedis() + ctx := context.Background() + playerGamesListKey := fmt.Sprintf("player:%d:games:list", uid) + games, err := client.LRange(ctx, playerGamesListKey, 0, -1).Result() + if err != nil { + log.Error("GetGameRecord LRange uid:%v,err:%v", uid, err) + return nil + } + gameList = make([]*common.ConfigGameList, 0, len(games)) + for _, game := range games { + splitArr := strings.Split(game, "_") + if len(splitArr) == 2 { + provider, _ := strconv.Atoi(splitArr[0]) + gameId, _ := strconv.Atoi(splitArr[1]) + gameConf := GetConfigGameListByID(provider, gameId) + if gameConf != nil { + gameList = append(gameList, gameConf) + } + + } + } + return +} + +func AddPlayerFavorite(uid int, provider int, gameId int) error { + info := &common.PlayerFavorite{Uid: uid, GameId: gameId, Provider: provider} + if db.Mysql().Exist(info) { + log.Error("AddPlayerFavorite uid:%v exist", uid) + return errors.New(" exist") + } + info.CreateAt = time.Now().Unix() + err := db.Mysql().Create(info) + if err != nil { + log.Error("AddPlayerFavorite Create uid:%v,err:%v", uid, err) + return err + } + return nil +} + +func DelPlayerFavorite(uid int, provider int, gameId int) error { + err := db.Mysql().C().Where("uid = ? and provider = ? and game_id = ?", uid, provider, gameId).Delete(&common.PlayerFavorite{}).Error + if err != nil { + log.Error("DelPlayerFavorite Delete uid:%v,err:%v", uid, err) + return err + } + return nil +} + +func GetPlayerFavoriteList(uid int) (gameList []*common.ConfigGameList) { + var ret []*common.PlayerFavorite + _, err := db.Mysql().QueryAll(fmt.Sprintf("uid = %v", uid), "create_at", &common.PlayerFavorite{}, &ret) + if err != nil { + log.Error("GetPlayerFavoriteList Delete uid:%v,err:%v", uid, err) + return + } + gameList = make([]*common.ConfigGameList, 0, len(ret)) + for _, game := range ret { + gameConf := GetConfigGameListByID(game.Provider, game.GameId) + if gameConf != nil { + gameList = append(gameList, gameConf) + } + } + return +} diff --git a/common/game.go b/common/game.go index ff976e1..d71f108 100644 --- a/common/game.go +++ b/common/game.go @@ -77,3 +77,15 @@ const ( GameTypeESport GameTypeSportBook ) + +type PlayerFavorite struct { + Id int `gorm:"column:id;type:int(11) AUTO_INCREMENT;primary_key" json:"id"` + Uid int `gorm:"column:uid;type:int(11);NOT NULL" json:"uid"` + Provider int `gorm:"column:provider;type:int(11);NOT NULL" json:"provider"` + GameId int `gorm:"column:game_id;type:int(11);NOT NULL" json:"game_id"` + CreateAt int64 `gorm:"column:create_at;type:bigint(20);NOT NULL" json:"create_at"` +} + +func (m *PlayerFavorite) TableName() string { + return "player_favorite" +} diff --git a/modules/web/handler/firstpage.go b/modules/web/handler/firstpage.go index f025682..b9318df 100644 --- a/modules/web/handler/firstpage.go +++ b/modules/web/handler/firstpage.go @@ -2,6 +2,7 @@ package handler import ( "fmt" + "math/rand" "server/call" "server/common" "server/db" @@ -51,11 +52,18 @@ func FirstPage(c *gin.Context) { for _, v := range games { one := values.OneFisrtPageGame{ ConfigFirstPageGames: v, + List: make([]*common.ConfigGameList, 0), } - if v.JumpType == 1 { - one.List = call.GetConfigGameList(req.GameNum, v.JumpID) + if v.Name == "Recent" { + one.List = append(one.List, call.GetGameRecord(a.UID)...) + } else if v.Name == "Favorite" { + one.List = append(one.List, call.GetPlayerFavoriteList(a.UID)...) } else { - one.List = call.GetConfigGameList(req.GameNum, 0, v.JumpID) + if v.JumpType == 1 { + one.List = call.GetConfigGameList(req.GameNum, v.JumpID) + } else { + one.List = call.GetConfigGameList(req.GameNum, 0, v.JumpID) + } } resp.Games = append(resp.Games, one) } @@ -73,4 +81,11 @@ func FirstPage(c *gin.Context) { if len(task) > 0 { resp.DownloadAppReward = task[0].Reward } + + resp.ShowData = values.ShowInfo{ + Reward: rand.Int63n(1000000), + AverWithdraw: rand.Int63n(1000000), + MaxBet: rand.Int63n(1000000), + WithdrawCount: rand.Int63n(1000000), + } } diff --git a/modules/web/handler/game.go b/modules/web/handler/game.go index 8683acb..e3cfa40 100644 --- a/modules/web/handler/game.go +++ b/modules/web/handler/game.go @@ -121,7 +121,16 @@ func EnterGame(c *gin.Context) { if resp.URL == "" { a.Code = values.CodeParam a.Msg = "Under Maintenance,please try later." + return } + util.Go(func() { + // 记录玩家的记录 + err := call.AddGameRecord(uid, req.Provider, req.GameID) + if err != nil { + log.Error("AddGameRecord uid:%v, err:%v", uid, err) + return + } + }) } func GameHistory(c *gin.Context) { diff --git a/modules/web/handler/user.go b/modules/web/handler/user.go index 011b698..8767108 100644 --- a/modules/web/handler/user.go +++ b/modules/web/handler/user.go @@ -218,3 +218,28 @@ func Feedback(c *gin.Context) { } } } + +func FavoriteGame(c *gin.Context) { + a := app.NewApp(c) + defer func() { + a.Response() + }() + req := new(values.FavoriteGameReq) + if !a.S(req) { + return + } + if req.Cancel { + err := call.DelPlayerFavorite(a.UID, req.GameProvider, req.GameId) + if err != nil { + a.Code = values.CodeRetry + a.Msg = err.Error() + return + } + } else { + err := call.AddPlayerFavorite(a.UID, req.GameProvider, req.GameId) + if err != nil { + a.Code = values.CodeRetry + a.Msg = err.Error() + } + } +} diff --git a/modules/web/routers/routers_user.go b/modules/web/routers/routers_user.go index 7532b38..27632b6 100644 --- a/modules/web/routers/routers_user.go +++ b/modules/web/routers/routers_user.go @@ -10,4 +10,5 @@ func user(e *gin.RouterGroup) { e.POST("/user/info/get", handler.GetUserInfo) e.POST("/user/info/edit", handler.EditUserInfo) e.POST("/user/feedback", handler.Feedback) + e.POST("/favorite/game", handler.FavoriteGame) } diff --git a/modules/web/values/firstpage.go b/modules/web/values/firstpage.go index 446eefc..edc4d14 100644 --- a/modules/web/values/firstpage.go +++ b/modules/web/values/firstpage.go @@ -16,8 +16,15 @@ type FirstPageResp struct { Games []OneFisrtPageGame Esport *common.ConfigGameList DownloadAppReward int64 + ShowData ShowInfo // 首页头部展示 } +type ShowInfo struct { + Reward int64 // 奖金 + AverWithdraw int64 // 平均提现市场 + MaxBet int64 // 今日最大下注 + WithdrawCount int64 // 今日提现总额 +} type OneCurrency struct { ID common.CurrencyType Name string diff --git a/modules/web/values/protocol.go b/modules/web/values/protocol.go index 8aacaa5..7f975d1 100644 --- a/modules/web/values/protocol.go +++ b/modules/web/values/protocol.go @@ -152,3 +152,9 @@ type OneFeedback struct { Choose []int Context string } + +type FavoriteGameReq struct { + GameProvider int // 游戏供应商 + GameId int // 游戏ID + Cancel bool // 是否取消 +}