Commit 2799b096b961e3f9daab7a91920361d474f7c5a6

Authored by 王家文
1 parent 60c545c8
Exists in master and in 1 other branch dev-wjw

feat✨:房间排行榜改为支持多个排行榜

service/roomrank/dto-record.go
@@ -38,7 +38,7 @@ func (d *RecordGetSettleAward) MysqlInfo(suffix string) *svmysql.MysqlInfo { @@ -38,7 +38,7 @@ func (d *RecordGetSettleAward) MysqlInfo(suffix string) *svmysql.MysqlInfo {
38 tableName := svconst.MYSQL_TABLE_S_ROOMRANK_RECORD_SETTLEAWARD 38 tableName := svconst.MYSQL_TABLE_S_ROOMRANK_RECORD_SETTLEAWARD
39 return &svmysql.MysqlInfo{ 39 return &svmysql.MysqlInfo{
40 DbMysql: svconst.DbCommon, 40 DbMysql: svconst.DbCommon,
41 - TableName: fmt.Sprintf("%s_%s_%d", tableName, suffix, d.TopType), 41 + TableName: fmt.Sprintf("%s_%s_%d_%d", tableName, suffix, d.TopType, d.ActivityId),
42 } 42 }
43 } 43 }
44 44
@@ -62,7 +62,7 @@ func (d *RecordAddScore) MysqlInfo(suffix string) *svmysql.MysqlInfo { @@ -62,7 +62,7 @@ func (d *RecordAddScore) MysqlInfo(suffix string) *svmysql.MysqlInfo {
62 tableName := svconst.MYSQL_TABLE_S_ROOMRANK_RECORD_ADDSCORE 62 tableName := svconst.MYSQL_TABLE_S_ROOMRANK_RECORD_ADDSCORE
63 return &svmysql.MysqlInfo{ 63 return &svmysql.MysqlInfo{
64 DbMysql: svconst.DbCommon, 64 DbMysql: svconst.DbCommon,
65 - TableName: fmt.Sprintf("%s_%s_%d", tableName, suffix, d.TopType), 65 + TableName: fmt.Sprintf("%s_%s_%d_%d", tableName, suffix, d.TopType, d.ActivityId),
66 } 66 }
67 } 67 }
68 68
service/roomrank/dto-room.go
@@ -12,6 +12,7 @@ import ( @@ -12,6 +12,7 @@ import (
12 // Room 房间排行持久数据 12 // Room 房间排行持久数据
13 type Room struct { 13 type Room struct {
14 Id int64 `gorm:"column:id;primaryKey;comment:房间唯一ID"` 14 Id int64 `gorm:"column:id;primaryKey;comment:房间唯一ID"`
  15 + TopType int `gorm:"comment:排行榜类型"`
15 ActivityId int64 `gorm:"comment:活动ID"` 16 ActivityId int64 `gorm:"comment:活动ID"`
16 ConfigId int `gorm:"comment:房间配置ID"` 17 ConfigId int `gorm:"comment:房间配置ID"`
17 18
@@ -30,7 +31,7 @@ func (d *Room) MysqlInfo(suffix string) *svmysql.MysqlInfo { @@ -30,7 +31,7 @@ func (d *Room) MysqlInfo(suffix string) *svmysql.MysqlInfo {
30 tableName := svconst.MYSQL_TABLE_S_ROOMRANK_ROOM 31 tableName := svconst.MYSQL_TABLE_S_ROOMRANK_ROOM
31 return &svmysql.MysqlInfo{ 32 return &svmysql.MysqlInfo{
32 DbMysql: svconst.DbCommon, 33 DbMysql: svconst.DbCommon,
33 - TableName: fmt.Sprintf("%s_%s_%d", tableName, suffix, d.ActivityId), 34 + TableName: fmt.Sprintf("%s_%s_%d_%d", tableName, suffix, d.TopType, d.ActivityId),
34 } 35 }
35 } 36 }
36 37
service/roomrank/handle.go
@@ -53,7 +53,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan @@ -53,7 +53,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan
53 player.Icon = req.PlayerIcon 53 player.Icon = req.PlayerIcon
54 54
55 // 采用分布式锁 55 // 采用分布式锁
56 - lockKey := getLockKey(gameId, config.Id) 56 + lockKey := getLockKey(gameId, req.TopType, config.Id)
57 opt := zredislock.GetOptionLimitRetry(RoomLockLinearBackoff, RoomLockMaxCount) 57 opt := zredislock.GetOptionLimitRetry(RoomLockLinearBackoff, RoomLockMaxCount)
58 lock := zredislock.Obtain(lockKey, RoomLockMillisecond, opt) 58 lock := zredislock.Obtain(lockKey, RoomLockMillisecond, opt)
59 if lock.Err != nil { 59 if lock.Err != nil {
@@ -63,7 +63,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan @@ -63,7 +63,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan
63 defer lock.Release() 63 defer lock.Release()
64 64
65 // 尝试判断结算 65 // 尝试判断结算
66 - hasSettleChange := TrySettle(gameId, player, config) 66 + hasSettleChange := TrySettle(gameId, req.TopType, player, config)
67 67
68 if hasSettleChange { 68 if hasSettleChange {
69 SavePlayer(gameId, player) 69 SavePlayer(gameId, player)
@@ -80,7 +80,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan @@ -80,7 +80,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan
80 } 80 }
81 81
82 // 尝试加入房间 82 // 尝试加入房间
83 - room, hasRoom := TryGetRoom(gameId, player, config, playerLevel) 83 + room, hasRoom := TryGetRoom(gameId, req.TopType, player, config, playerLevel)
84 84
85 if !hasRoom { 85 if !hasRoom {
86 code = code_msg.RECODE_MERGE_CONFIG_ERROR 86 code = code_msg.RECODE_MERGE_CONFIG_ERROR
@@ -115,7 +115,7 @@ func HandleGetSettleAward(req *models.ReqRoomRankGetSettleAward) (code string, r @@ -115,7 +115,7 @@ func HandleGetSettleAward(req *models.ReqRoomRankGetSettleAward) (code string, r
115 player.Icon = req.PlayerIcon 115 player.Icon = req.PlayerIcon
116 116
117 // 采用分布式锁 117 // 采用分布式锁
118 - lockKey := getLockKey(gameId, config.Id) 118 + lockKey := getLockKey(gameId, req.TopType, config.Id)
119 opt := zredislock.GetOptionLimitRetry(RoomLockLinearBackoff, RoomLockMaxCount) 119 opt := zredislock.GetOptionLimitRetry(RoomLockLinearBackoff, RoomLockMaxCount)
120 lock := zredislock.Obtain(lockKey, RoomLockMillisecond, opt) 120 lock := zredislock.Obtain(lockKey, RoomLockMillisecond, opt)
121 if lock.Err != nil { 121 if lock.Err != nil {
@@ -125,7 +125,7 @@ func HandleGetSettleAward(req *models.ReqRoomRankGetSettleAward) (code string, r @@ -125,7 +125,7 @@ func HandleGetSettleAward(req *models.ReqRoomRankGetSettleAward) (code string, r
125 defer lock.Release() 125 defer lock.Release()
126 126
127 // 尝试判断结算 127 // 尝试判断结算
128 - _ = TrySettle(gameId, player, config) 128 + _ = TrySettle(gameId, req.TopType, player, config)
129 if !player.SettleHas() { 129 if !player.SettleHas() {
130 code = code_msg.RECODE_MERGE_ROOMRANK_NOTHASSETTLE_ERROR 130 code = code_msg.RECODE_MERGE_ROOMRANK_NOTHASSETTLE_ERROR
131 return 131 return
@@ -171,7 +171,7 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs @@ -171,7 +171,7 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs
171 player.Icon = req.PlayerIcon 171 player.Icon = req.PlayerIcon
172 172
173 // 采用分布式锁 173 // 采用分布式锁
174 - lockKey := getLockKey(gameId, config.Id) 174 + lockKey := getLockKey(gameId, req.TopType, config.Id)
175 opt := zredislock.GetOptionLimitRetry(RoomLockLinearBackoff, RoomLockMaxCount) 175 opt := zredislock.GetOptionLimitRetry(RoomLockLinearBackoff, RoomLockMaxCount)
176 lock := zredislock.Obtain(lockKey, RoomLockMillisecond, opt) 176 lock := zredislock.Obtain(lockKey, RoomLockMillisecond, opt)
177 if lock.Err != nil { 177 if lock.Err != nil {
@@ -181,7 +181,7 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs @@ -181,7 +181,7 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs
181 defer lock.Release() 181 defer lock.Release()
182 182
183 // 尝试判断结算 183 // 尝试判断结算
184 - hasSettleChange := TrySettle(gameId, player, config) 184 + hasSettleChange := TrySettle(gameId, req.TopType, player, config)
185 if hasSettleChange { 185 if hasSettleChange {
186 SavePlayer(gameId, player) 186 SavePlayer(gameId, player)
187 } 187 }
@@ -199,7 +199,7 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs @@ -199,7 +199,7 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs
199 } 199 }
200 200
201 // 尝试加入房间 201 // 尝试加入房间
202 - room, hasRoom := TryGetRoom(gameId, player, config, playerLevel) 202 + room, hasRoom := TryGetRoom(gameId, req.TopType, player, config, playerLevel)
203 203
204 // 房间排行增加积分 204 // 房间排行增加积分
205 oldScore, newScore := ChangePlayerScore(room, player, req.AddScore) 205 oldScore, newScore := ChangePlayerScore(room, player, req.AddScore)
service/roomrank/logic.go
@@ -8,12 +8,12 @@ import ( @@ -8,12 +8,12 @@ import (
8 "fmt" 8 "fmt"
9 ) 9 )
10 10
11 -func getLockKey(gameId string, activityId int64) string {  
12 - return fmt.Sprintf("%s:lock:roomrank:%s:%d", svconst.REDIS_CACHEP_REFIX, gameId, activityId) 11 +func getLockKey(gameId string, topType int, activityId int64) string {
  12 + return fmt.Sprintf("%s:lock:roomrank:%s:%d:%d", svconst.REDIS_CACHEP_REFIX, gameId, topType, activityId)
13 } 13 }
14 14
15 // TrySettle 尝试判断结算 15 // TrySettle 尝试判断结算
16 -func TrySettle(gameId string, player *Player, config *confroomrank.ActivityConfig) (hasChange bool) { 16 +func TrySettle(gameId string, topType int, player *Player, config *confroomrank.ActivityConfig) (hasChange bool) {
17 hasChange = false 17 hasChange = false
18 if player.SettleActivityId == config.Id { 18 if player.SettleActivityId == config.Id {
19 return 19 return
@@ -26,7 +26,7 @@ func TrySettle(gameId string, player *Player, config *confroomrank.ActivityConfi @@ -26,7 +26,7 @@ func TrySettle(gameId string, player *Player, config *confroomrank.ActivityConfi
26 } 26 }
27 fmt.Println(zjson.Str(player)) 27 fmt.Println(zjson.Str(player))
28 // 查找玩家所在的房间 28 // 查找玩家所在的房间
29 - room, hasRoom := LoadRoom(gameId, player.ActivityId, player.RoomUid) 29 + room, hasRoom := LoadRoom(gameId, topType, player.ActivityId, player.RoomUid)
30 if !hasRoom { 30 if !hasRoom {
31 return 31 return
32 } 32 }
service/roomrank/room.go
@@ -29,8 +29,8 @@ func SaveRoom(gameId string, room *Room) { @@ -29,8 +29,8 @@ func SaveRoom(gameId string, room *Room) {
29 } 29 }
30 30
31 // LoadRoom 获取数据 31 // LoadRoom 获取数据
32 -func LoadRoom(gameId string, activityId int64, roomUid int64) (room *Room, has bool) {  
33 - room = &Room{Id: roomUid, ActivityId: activityId} 32 +func LoadRoom(gameId string, topType int, activityId int64, roomUid int64) (room *Room, has bool) {
  33 + room = &Room{Id: roomUid, TopType: topType, ActivityId: activityId}
34 if roomUid == 0 { 34 if roomUid == 0 {
35 has = false 35 has = false
36 return 36 return
@@ -48,8 +48,9 @@ func LoadRoom(gameId string, activityId int64, roomUid int64) (room *Room, has b @@ -48,8 +48,9 @@ func LoadRoom(gameId string, activityId int64, roomUid int64) (room *Room, has b
48 return 48 return
49 } 49 }
50 50
51 -func CreateRoom(gameId string, activityId int64, roomConfigId int) (room *Room, has bool) { 51 +func CreateRoom(gameId string, topType int, activityId int64, roomConfigId int) (room *Room, has bool) {
52 room = new(Room) 52 room = new(Room)
  53 + room.TopType = topType
53 room.ActivityId = activityId 54 room.ActivityId = activityId
54 room.ConfigId = roomConfigId 55 room.ConfigId = roomConfigId
55 room.Closed = false 56 room.Closed = false
@@ -69,8 +70,8 @@ func CreateRoom(gameId string, activityId int64, roomConfigId int) (room *Room, @@ -69,8 +70,8 @@ func CreateRoom(gameId string, activityId int64, roomConfigId int) (room *Room,
69 } 70 }
70 71
71 // FindRoom 查找 72 // FindRoom 查找
72 -func FindRoom(gameId string, activityId int64, roomConfigId int) (rooms []*Room, has bool) {  
73 - roomDemo := &Room{ActivityId: activityId} 73 +func FindRoom(gameId string, topType int, activityId int64, roomConfigId int) (rooms []*Room, has bool) {
  74 + roomDemo := &Room{TopType: topType, ActivityId: activityId}
74 tryInitRoom(gameId, roomDemo) 75 tryInitRoom(gameId, roomDemo)
75 info := roomDemo.MysqlInfo(gameId) 76 info := roomDemo.MysqlInfo(gameId)
76 77
@@ -84,14 +85,14 @@ func FindRoom(gameId string, activityId int64, roomConfigId int) (rooms []*Room, @@ -84,14 +85,14 @@ func FindRoom(gameId string, activityId int64, roomConfigId int) (rooms []*Room,
84 } 85 }
85 86
86 // TryGetRoom 尝试获取房间 87 // TryGetRoom 尝试获取房间
87 -func TryGetRoom(gameId string, player *Player, config *confroomrank.ActivityConfig, playerLevel int) (room *Room, hasRoom bool) { 88 +func TryGetRoom(gameId string, topType int, player *Player, config *confroomrank.ActivityConfig, playerLevel int) (room *Room, hasRoom bool) {
88 hasRoom = false 89 hasRoom = false
89 if player.ActivityId != config.Id { 90 if player.ActivityId != config.Id {
90 player.ActivityId = config.Id 91 player.ActivityId = config.Id
91 player.RoomUid = 0 92 player.RoomUid = 0
92 } 93 }
93 // 查找玩家所在的房间 94 // 查找玩家所在的房间
94 - room, hasRoom = LoadRoom(gameId, config.Id, player.RoomUid) 95 + room, hasRoom = LoadRoom(gameId, topType, config.Id, player.RoomUid)
95 if hasRoom { 96 if hasRoom {
96 if confRoom, hasConfRoom := config.Room[room.ConfigId]; hasConfRoom { 97 if confRoom, hasConfRoom := config.Room[room.ConfigId]; hasConfRoom {
97 TryCloseRoom(gameId, room, confRoom) 98 TryCloseRoom(gameId, room, confRoom)
@@ -115,7 +116,7 @@ func TryGetRoom(gameId string, player *Player, config *confroomrank.ActivityConf @@ -115,7 +116,7 @@ func TryGetRoom(gameId string, player *Player, config *confroomrank.ActivityConf
115 return 116 return
116 } 117 }
117 // 数据库查找合适条件的房间列表 118 // 数据库查找合适条件的房间列表
118 - rooms, has := FindRoom(gameId, config.Id, roomConfigId) 119 + rooms, has := FindRoom(gameId, topType, config.Id, roomConfigId)
119 if has { 120 if has {
120 for i := 0; i < len(rooms); i++ { 121 for i := 0; i < len(rooms); i++ {
121 roomTemp := rooms[i] 122 roomTemp := rooms[i]
@@ -137,7 +138,7 @@ func TryGetRoom(gameId string, player *Player, config *confroomrank.ActivityConf @@ -137,7 +138,7 @@ func TryGetRoom(gameId string, player *Player, config *confroomrank.ActivityConf
137 PlayerJoinRoom(room, player) 138 PlayerJoinRoom(room, player)
138 } else { 139 } else {
139 // 如果没有合适条件的房间 创建一个 140 // 如果没有合适条件的房间 创建一个
140 - roomCreate, hasCreate := CreateRoom(gameId, config.Id, roomConfigId) 141 + roomCreate, hasCreate := CreateRoom(gameId, topType, config.Id, roomConfigId)
141 if hasCreate { 142 if hasCreate {
142 room = roomCreate 143 room = roomCreate
143 144