diff --git a/configs/confcardholder/config.go b/configs/confcardholder/config.go index ced6585..30bf152 100644 --- a/configs/confcardholder/config.go +++ b/configs/confcardholder/config.go @@ -49,8 +49,8 @@ func (c *ActivityConfig) ConfInfo(suffix string) *confbase.ConfInfo { DbMysql: svconst.DbConfig, TableName: fmt.Sprintf("%s_%s", tableName, suffix), KeyName: "id", - CurrentQuery: "start_time <= ? AND end_time >= ? AND status = ?", - CurrentArgs: []any{timeNow, timeNow, 1}, + CurrentQuery: "status = ? AND start_time <= ? AND end_time >= ?", + CurrentArgs: []any{1, timeNow, timeNow}, CacheKey: fmt.Sprintf("%s:%d", cacheKey, c.Id), CacheCurrent: cacheKey + ":current", CacheTime: 300, diff --git a/configs/confroomrank/config.go b/configs/confroomrank/config.go index b639e9a..7ae77fc 100644 --- a/configs/confroomrank/config.go +++ b/configs/confroomrank/config.go @@ -13,6 +13,7 @@ type ActivityConfig struct { Raw *ActivityConfigRaw `json:"-"` Id int64 // ID + Typ int // 排行榜类型 OpenLevel int // 开启等级 PreviewTime int64 // 预告时间 StartTime int64 // 开始时间 @@ -43,10 +44,10 @@ func (c *ActivityConfig) ConfInfo(suffix string) *confbase.ConfInfo { DbMysql: svconst.DbConfig, TableName: fmt.Sprintf("%s_%s", tableName, suffix), KeyName: "id", - CurrentQuery: "start_time <= ? AND end_time >= ? AND status = ?", - CurrentArgs: []any{timeNow, timeNow, 1}, + CurrentQuery: "typ = ? AND status = ? AND start_time <= ? AND end_time >= ?", + CurrentArgs: []any{c.Typ, 1, timeNow, timeNow}, CacheKey: fmt.Sprintf("%s:%d", cacheKey, c.Id), - CacheCurrent: cacheKey + ":current", + CacheCurrent: fmt.Sprintf("%s:%d:current", cacheKey, c.Typ), CacheTime: 300, } } diff --git a/configs/confroomrank/get.go b/configs/confroomrank/get.go index f6234c9..d273106 100644 --- a/configs/confroomrank/get.go +++ b/configs/confroomrank/get.go @@ -3,8 +3,9 @@ package confroomrank import "apigame/configs/confbase" // GetCurrent 获取 当前配置 -func GetCurrent(gameId string) (conf *ActivityConfig, has bool) { +func GetCurrent(gameId string, topType int) (conf *ActivityConfig, has bool) { conf = new(ActivityConfig) + conf.Typ = topType has = confbase.GetCurrent[*ActivityConfig, ActivityConfigRaw](gameId, conf) return diff --git a/configs/init.go b/configs/init.go index 73c3a79..5d6a4f9 100644 --- a/configs/init.go +++ b/configs/init.go @@ -4,7 +4,6 @@ import ( "apigame/configs/confapi" "apigame/configs/confcardholder" "apigame/configs/confglobal" - "apigame/configs/confroomrank" "apigame/service-common/svconst" ) @@ -22,9 +21,9 @@ func Init() bool { _, _ = confcardholder.GetCurrent(gameId) } - for _, gameId := range svconst.GameListRoomRank { - _, _ = confroomrank.GetCurrent(gameId) - } + //for _, gameId := range svconst.GameListRoomRank { + // _, _ = confroomrank.GetCurrent(gameId) + //} return true } diff --git a/models/roomrank.go b/models/roomrank.go index 9f23c52..4886ae4 100644 --- a/models/roomrank.go +++ b/models/roomrank.go @@ -44,6 +44,7 @@ type RoomRankInfo struct { type ReqRoomRankInfo struct { BaseLoginInfo BaseSign + TopType int `form:"top_type" json:"top_type"` // 排行榜类型 PlayerLevel int `form:"player_level" json:"player_level"` // 玩家等级 PlayerName string `form:"player_name" json:"player_name"` // 玩家名字 PlayerIcon string `form:"player_icon" json:"player_icon"` // 玩家头像 @@ -58,6 +59,7 @@ type RspRoomRankInfo struct { type ReqRoomRankGetSettleAward struct { BaseLoginInfo BaseSign + TopType int `form:"top_type" json:"top_type"` // 排行榜类型 PlayerLevel int `form:"player_level" json:"player_level"` // 玩家等级 PlayerName string `form:"player_name" json:"player_name"` // 玩家名字 PlayerIcon string `form:"player_icon" json:"player_icon"` // 玩家头像 @@ -75,6 +77,7 @@ type RspRoomRankGetSettleAward struct { type ReqRoomRankAddScore struct { BaseLoginInfo BaseSign + TopType int `form:"top_type" json:"top_type"` // 排行榜类型 PlayerLevel int `form:"player_level" json:"player_level"` // 玩家等级 PlayerName string `form:"player_name" json:"player_name"` // 玩家名字 PlayerIcon string `form:"player_icon" json:"player_icon"` // 玩家头像 diff --git a/service/init.go b/service/init.go index b61bb60..a807a18 100644 --- a/service/init.go +++ b/service/init.go @@ -4,7 +4,6 @@ import ( "apigame/service-common/svconst" "apigame/service-common/svmysql" "apigame/service/cardholder" - "apigame/service/roomrank" ) func Init() { @@ -17,11 +16,5 @@ func Init() { svmysql.InitTable(new(cardholder.RecordRewardAlbum), gameId, true) svmysql.InitTable(new(cardholder.RecordRewardRound), gameId, true) } - // 房间排行 - for _, gameId := range svconst.GameListRoomRank { - svmysql.InitTable(new(roomrank.Player), gameId, true) - svmysql.InitTable(new(roomrank.RecordGetSettleAward), gameId, true) - svmysql.InitTable(new(roomrank.RecordAddScore), gameId, true) - } } diff --git a/service/roomrank/dto-player.go b/service/roomrank/dto-player.go index 0a036d2..e5cc591 100644 --- a/service/roomrank/dto-player.go +++ b/service/roomrank/dto-player.go @@ -10,6 +10,7 @@ import ( // Player 房间排行持久数据 type Player struct { Uid int64 `gorm:"column:uid;primaryKey;comment:玩家唯一ID"` + TopType int `gorm:"comment:排行榜类型"` Name string `gorm:"-"` // 玩家名字 Icon string `gorm:"-"` // 玩家头像 ActivityId int64 `gorm:"comment:活动ID"` @@ -34,19 +35,21 @@ func (d *Player) MysqlInfo(suffix string) *svmysql.MysqlInfo { tableName := svconst.MYSQL_TABLE_S_ROOMRANK_PLAYER return &svmysql.MysqlInfo{ DbMysql: svconst.DbCommon, - TableName: fmt.Sprintf("%s_%s", tableName, suffix), + TableName: fmt.Sprintf("%s_%s_%d", tableName, suffix, d.TopType), } } -func NewPlayer(uid int64) *Player { +func NewPlayer(uid int64, topType int) *Player { d := &Player{ - Uid: uid, + Uid: uid, + TopType: topType, } return d } -func (d *Player) Init(uid int64) { +func (d *Player) Init(uid int64, topType int) { d.Uid = uid + d.TopType = topType d.CreateTime = lxtime.NowUninx() } diff --git a/service/roomrank/dto-record.go b/service/roomrank/dto-record.go index b9ed9f7..375caa3 100644 --- a/service/roomrank/dto-record.go +++ b/service/roomrank/dto-record.go @@ -10,17 +10,19 @@ import ( // RecordBase 日志公共 type RecordBase struct { Id int64 `gorm:"primaryKey;comment:日志ID"` + TopType int `gorm:"comment:排行榜类型"` Uid int64 `gorm:"comment:玩家唯一ID"` ActivityId int64 `gorm:"comment:当前活动ID"` CreateTime int64 `gorm:"comment:创建时间戳"` UpdateTime int64 `gorm:"comment:修改时间戳"` } -func NewRecordBase(uid int64, activityId int64) RecordBase { +func NewRecordBase(uid int64, topType int, activityId int64) RecordBase { secNow := lxtime.NowUninx() return RecordBase{ CreateTime: secNow, UpdateTime: secNow, + TopType: topType, Uid: uid, ActivityId: activityId, } @@ -36,7 +38,7 @@ func (d *RecordGetSettleAward) MysqlInfo(suffix string) *svmysql.MysqlInfo { tableName := svconst.MYSQL_TABLE_S_ROOMRANK_RECORD_SETTLEAWARD return &svmysql.MysqlInfo{ DbMysql: svconst.DbCommon, - TableName: fmt.Sprintf("%s_%s", tableName, suffix), + TableName: fmt.Sprintf("%s_%s_%d", tableName, suffix, d.TopType), } } @@ -60,7 +62,7 @@ func (d *RecordAddScore) MysqlInfo(suffix string) *svmysql.MysqlInfo { tableName := svconst.MYSQL_TABLE_S_ROOMRANK_RECORD_ADDSCORE return &svmysql.MysqlInfo{ DbMysql: svconst.DbCommon, - TableName: fmt.Sprintf("%s_%s", tableName, suffix), + TableName: fmt.Sprintf("%s_%s_%d", tableName, suffix, d.TopType), } } diff --git a/service/roomrank/handle.go b/service/roomrank/handle.go index 63a1613..23f0e76 100644 --- a/service/roomrank/handle.go +++ b/service/roomrank/handle.go @@ -3,7 +3,6 @@ package roomrank import ( "apigame/configs/confroomrank" "apigame/models" - "apigame/service-common/svmysql" "apigame/service/code-msg" "apigame/util/zredislock" ) @@ -15,7 +14,7 @@ func HandleGetConfig(req *models.ReqRoomRankGetConfig) (code string, rsp models. gameId := req.GameID // 尝试更新配置 - config, hasConfig := confroomrank.GetCurrent(gameId) + config, hasConfig := confroomrank.GetCurrent(gameId, 1) if !hasConfig { code = code_msg.RECODE_MERGE_ROOMRANK_NOTOPEN_ERROR return @@ -41,7 +40,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan playerLevel := req.PlayerLevel // 尝试更新配置 - config, hasConfig := confroomrank.GetCurrent(gameId) + config, hasConfig := confroomrank.GetCurrent(gameId, req.TopType) if !hasConfig { config = new(confroomrank.ActivityConfig) code = code_msg.RECODE_MERGE_ROOMRANK_NOTOPEN_ERROR @@ -49,7 +48,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan } // 读取游戏数据 - player := LoadPlayer(gameId, playerUid) + player := LoadPlayer(gameId, playerUid, req.TopType) player.Name = req.PlayerName player.Icon = req.PlayerIcon @@ -103,7 +102,7 @@ func HandleGetSettleAward(req *models.ReqRoomRankGetSettleAward) (code string, r playerUid := req.UID // 尝试更新配置 - config, hasConfig := confroomrank.GetCurrent(gameId) + config, hasConfig := confroomrank.GetCurrent(gameId, req.TopType) if !hasConfig { config = new(confroomrank.ActivityConfig) code = code_msg.RECODE_MERGE_ROOMRANK_NOTOPEN_ERROR @@ -111,7 +110,7 @@ func HandleGetSettleAward(req *models.ReqRoomRankGetSettleAward) (code string, r } // 读取游戏数据 - player := LoadPlayer(gameId, playerUid) + player := LoadPlayer(gameId, playerUid, req.TopType) player.Name = req.PlayerName player.Icon = req.PlayerIcon @@ -144,10 +143,8 @@ func HandleGetSettleAward(req *models.ReqRoomRankGetSettleAward) (code string, r SavePlayer(gameId, player) // 记录日志 - recordBase := NewRecordBase(player.Uid, oldActivityId) - _ = svmysql.Create(NewRecordGetSettleAward(recordBase, - rsp.AwardText), - gameId) + recordBase := NewRecordBase(player.Uid, req.TopType, oldActivityId) + SaveRecordGetSettleAward(gameId, NewRecordGetSettleAward(recordBase, rsp.AwardText)) return } @@ -161,7 +158,7 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs playerLevel := req.PlayerLevel // 尝试更新配置 - config, hasConfig := confroomrank.GetCurrent(gameId) + config, hasConfig := confroomrank.GetCurrent(gameId, req.TopType) if !hasConfig { config = new(confroomrank.ActivityConfig) code = code_msg.RECODE_MERGE_ROOMRANK_NOTOPEN_ERROR @@ -169,7 +166,7 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs } // 读取游戏数据 - player := LoadPlayer(gameId, playerUid) + player := LoadPlayer(gameId, playerUid, req.TopType) player.Name = req.PlayerName player.Icon = req.PlayerIcon @@ -218,10 +215,8 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs rsp.RoomRankInfo = GetInfoFromRoom(player, room, config) // 记录日志 - recordBase := NewRecordBase(player.Uid, config.Id) - _ = svmysql.Create(NewRecordAddScore(recordBase, - req.AddScore, oldScore, newScore), - gameId) + recordBase := NewRecordBase(player.Uid, req.TopType, config.Id) + SaveRecordAddScore(gameId, NewRecordAddScore(recordBase, req.AddScore, oldScore, newScore)) return } diff --git a/service/roomrank/player.go b/service/roomrank/player.go index 589edbf..8cc74b0 100644 --- a/service/roomrank/player.go +++ b/service/roomrank/player.go @@ -11,10 +11,15 @@ import ( "math/rand" ) +func tryInitPlayer(gameId string, player *Player) { + svmysql.InitTable(player, gameId, false) +} + // SavePlayer 存储数据 func SavePlayer(gameId string, player *Player) { - player.UpdateTime = lxtime.NowUninx() + tryInitPlayer(gameId, player) + player.UpdateTime = lxtime.NowUninx() err := svmysql.Save(player, gameId) if err != nil { lxalilog.Errors(err, "roomrank.SavePlayer error", gameId, player.Uid, player.ActivityId) @@ -23,12 +28,14 @@ func SavePlayer(gameId string, player *Player) { } // LoadPlayer 获取数据 外部接口 -func LoadPlayer(gameId string, playerUid int64) (player *Player) { - player = NewPlayer(playerUid) +func LoadPlayer(gameId string, playerUid int64, topType int) (player *Player) { + player = NewPlayer(playerUid, topType) + tryInitPlayer(gameId, player) + has, err := svmysql.First(player, gameId) if has { } else { - player.Init(playerUid) + player.Init(playerUid, topType) err = svmysql.Create(player, gameId) if err != nil { lxalilog.Errors(err, "roomrank._LoadPlayer Create error", gameId, player.Uid, player.ActivityId) diff --git a/service/roomrank/record.go b/service/roomrank/record.go new file mode 100644 index 0000000..9c94820 --- /dev/null +++ b/service/roomrank/record.go @@ -0,0 +1,13 @@ +package roomrank + +import "apigame/service-common/svmysql" + +func SaveRecordGetSettleAward(gameId string, record *RecordGetSettleAward) { + svmysql.InitTable(record, gameId, false) + _ = svmysql.Create(record, gameId) +} + +func SaveRecordAddScore(gameId string, record *RecordAddScore) { + svmysql.InitTable(record, gameId, false) + _ = svmysql.Create(record, gameId) +} diff --git a/service/roomrank/room.go b/service/roomrank/room.go index a5c6ebc..53563b9 100644 --- a/service/roomrank/room.go +++ b/service/roomrank/room.go @@ -10,13 +10,13 @@ import ( "sort" ) -func tryInitTable(gameId string, room *Room) { +func tryInitRoom(gameId string, room *Room) { svmysql.InitTable(room, gameId, false) } // SaveRoom 存储数据 func SaveRoom(gameId string, room *Room) { - tryInitTable(gameId, room) + tryInitRoom(gameId, room) room.UpdateTime = lxtime.NowUninx() room.Encode() @@ -35,7 +35,7 @@ func LoadRoom(gameId string, activityId int64, roomUid int64) (room *Room, has b has = false return } - tryInitTable(gameId, room) + tryInitRoom(gameId, room) var err error has, err = svmysql.First(room, gameId) @@ -71,7 +71,7 @@ func CreateRoom(gameId string, activityId int64, roomConfigId int) (room *Room, // FindRoom 查找 func FindRoom(gameId string, activityId int64, roomConfigId int) (rooms []*Room, has bool) { roomDemo := &Room{ActivityId: activityId} - tryInitTable(gameId, roomDemo) + tryInitRoom(gameId, roomDemo) info := roomDemo.MysqlInfo(gameId) info.DbMysql = info.DbMysql.Where("config_id = ? AND closed = false", roomConfigId) -- libgit2 0.21.0