Commit 975643cacc0bcb776622ec66be5d4aef26444446

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

feat✨:排行榜功能 报名条件 分数计算

service/code-msg/code-msg.go
@@ -53,6 +53,7 @@ const ( @@ -53,6 +53,7 @@ const (
53 RECODE_MERGE_ROOMRANK_LEVEL_ERROR = "2201" 53 RECODE_MERGE_ROOMRANK_LEVEL_ERROR = "2201"
54 RECODE_MERGE_ROOMRANK_HASSETTLE_ERROR = "2202" 54 RECODE_MERGE_ROOMRANK_HASSETTLE_ERROR = "2202"
55 RECODE_MERGE_ROOMRANK_NOTHASSETTLE_ERROR = "2203" 55 RECODE_MERGE_ROOMRANK_NOTHASSETTLE_ERROR = "2203"
  56 + RECODE_MERGE_ROOMRANK_CANTSIGN_ERROR = "2204"
56 ) 57 )
57 58
58 var recodeText = map[string]string{ 59 var recodeText = map[string]string{
@@ -106,6 +107,7 @@ var recodeText = map[string]string{ @@ -106,6 +107,7 @@ var recodeText = map[string]string{
106 RECODE_MERGE_ROOMRANK_LEVEL_ERROR: "参与等级不足", 107 RECODE_MERGE_ROOMRANK_LEVEL_ERROR: "参与等级不足",
107 RECODE_MERGE_ROOMRANK_HASSETTLE_ERROR: "还有未领取的结算奖励", 108 RECODE_MERGE_ROOMRANK_HASSETTLE_ERROR: "还有未领取的结算奖励",
108 RECODE_MERGE_ROOMRANK_NOTHASSETTLE_ERROR: "没有未领取的结算奖励", 109 RECODE_MERGE_ROOMRANK_NOTHASSETTLE_ERROR: "没有未领取的结算奖励",
  110 + RECODE_MERGE_ROOMRANK_CANTSIGN_ERROR: "活动倒计时不允许报名",
109 } 111 }
110 112
111 func RecodeText(code string) string { 113 func RecodeText(code string) string {
service/roomrank/handle.go
@@ -4,6 +4,7 @@ import ( @@ -4,6 +4,7 @@ import (
4 "apigame/configs/confroomrank" 4 "apigame/configs/confroomrank"
5 "apigame/models" 5 "apigame/models"
6 "apigame/service/code-msg" 6 "apigame/service/code-msg"
  7 + "apigame/util/util-lx/lxtime"
7 "apigame/util/zredislock" 8 "apigame/util/zredislock"
8 ) 9 )
9 10
@@ -70,6 +71,13 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan @@ -70,6 +71,13 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan
70 code = code_msg.RECODE_MERGE_ROOMRANK_LEVEL_ERROR 71 code = code_msg.RECODE_MERGE_ROOMRANK_LEVEL_ERROR
71 return 72 return
72 } 73 }
  74 + // 于此同时,如果活动倒计时 < 关门时间 * 2,则不再允许报名
  75 + secNow := lxtime.NowUninx()
  76 + dtEnd := GetTimeEnd(activityTime, config.ReleaseTime).Unix()
  77 + if secNow > dtEnd-RoomCloseSecond*2 {
  78 + code = code_msg.RECODE_MERGE_ROOMRANK_CANTSIGN_ERROR
  79 + return
  80 + }
73 81
74 needSavePlayer := false 82 needSavePlayer := false
75 defer func() { 83 defer func() {
@@ -218,6 +226,13 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs @@ -218,6 +226,13 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs
218 code = code_msg.RECODE_MERGE_ROOMRANK_LEVEL_ERROR 226 code = code_msg.RECODE_MERGE_ROOMRANK_LEVEL_ERROR
219 return 227 return
220 } 228 }
  229 + // 于此同时,如果活动倒计时 < 关门时间 * 2,则不再允许报名
  230 + secNow := lxtime.NowUninx()
  231 + dtEnd := GetTimeEnd(activityTime, config.ReleaseTime).Unix()
  232 + if secNow > dtEnd-RoomCloseSecond*2 {
  233 + code = code_msg.RECODE_MERGE_ROOMRANK_CANTSIGN_ERROR
  234 + return
  235 + }
221 236
222 needSavePlayer := false 237 needSavePlayer := false
223 defer func() { 238 defer func() {
service/roomrank/room.go
@@ -169,8 +169,7 @@ func TryCloseRoom(gameId string, room *Room, config *confroomrank.ActivityConfig @@ -169,8 +169,7 @@ func TryCloseRoom(gameId string, room *Room, config *confroomrank.ActivityConfig
169 return 169 return
170 } 170 }
171 secNow := lxtime.NowUninx() 171 secNow := lxtime.NowUninx()
172 - dateEnd := GetTimeEnd(room.ActivityTime, config.ReleaseTime)  
173 - if secNow > dateEnd.Unix()-RoomCloseSecond { 172 + if secNow > room.CreateTime+RoomCloseSecond {
174 room.Closed = true 173 room.Closed = true
175 // 根据缺口自动填充机器人 174 // 根据缺口自动填充机器人
176 for i := 0; i < len(roomConfig.PlayerTypeCount); i++ { 175 for i := 0; i < len(roomConfig.PlayerTypeCount); i++ {
@@ -183,6 +182,9 @@ func TryCloseRoom(gameId string, room *Room, config *confroomrank.ActivityConfig @@ -183,6 +182,9 @@ func TryCloseRoom(gameId string, room *Room, config *confroomrank.ActivityConfig
183 room.Details.Players = append(room.Details.Players, roomPlayer) 182 room.Details.Players = append(room.Details.Players, roomPlayer)
184 } 183 }
185 } 184 }
  185 + // 填充完之后要排序计算
  186 + TryReSort(room, config)
  187 +
186 SaveRoom(gameId, room) 188 SaveRoom(gameId, room)
187 } 189 }
188 } 190 }
@@ -214,17 +216,17 @@ func JoinInitRobot(gameId string, room *Room, roomConfig confroomrank.RoomConfig @@ -214,17 +216,17 @@ func JoinInitRobot(gameId string, room *Room, roomConfig confroomrank.RoomConfig
214 } 216 }
215 217
216 // TrySettleRoom 尝试结算房间 218 // TrySettleRoom 尝试结算房间
217 -func TrySettleRoom(gameId string, room *Room, confActivity *confroomrank.ActivityConfig) { 219 +func TrySettleRoom(gameId string, room *Room, config *confroomrank.ActivityConfig) {
218 // 已经结算过的不结算 220 // 已经结算过的不结算
219 if room.HasSettle { 221 if room.HasSettle {
220 return 222 return
221 } 223 }
222 // 活动切换或者时间到 触发结算 224 // 活动切换或者时间到 触发结算
223 needSettle := false 225 needSettle := false
224 - if room.ActivityId != confActivity.Id { 226 + if room.ActivityId != config.Id {
225 needSettle = true 227 needSettle = true
226 } else { 228 } else {
227 - dateEnd := GetTimeEnd(room.ActivityTime, confActivity.ReleaseTime) 229 + dateEnd := GetTimeEnd(room.ActivityTime, config.ReleaseTime)
228 dtNow := lxtime.NowUninx() 230 dtNow := lxtime.NowUninx()
229 if dtNow >= dateEnd.Unix() { 231 if dtNow >= dateEnd.Unix() {
230 needSettle = true 232 needSettle = true
@@ -235,15 +237,28 @@ func TrySettleRoom(gameId string, room *Room, confActivity *confroomrank.Activit @@ -235,15 +237,28 @@ func TrySettleRoom(gameId string, room *Room, confActivity *confroomrank.Activit
235 return 237 return
236 } 238 }
237 239
  240 + percent := float64(0)
  241 + dateEnd := GetTimeEnd(room.ActivityTime, config.ReleaseTime)
  242 + secTotal := 24 * 60 * 60
  243 + dtEnd := dateEnd.Unix()
  244 + if dtEnd > config.EndTime {
  245 + dtEnd = config.EndTime
  246 + }
  247 + dtCreate := room.CreateTime
  248 + if dtEnd <= dtCreate {
  249 + percent = 0
  250 + } else {
  251 + percent = float64(dtEnd-dtCreate) * 100 / float64(secTotal)
  252 + }
238 // 机器人最终算分 253 // 机器人最终算分
239 for i := 0; i < len(room.Details.Players); i++ { 254 for i := 0; i < len(room.Details.Players); i++ {
240 roomPlayer := room.Details.Players[i] 255 roomPlayer := room.Details.Players[i]
241 if roomPlayer.RobotConfigId == 0 { 256 if roomPlayer.RobotConfigId == 0 {
242 continue 257 continue
243 } 258 }
244 - confRobot, hasConfRobot := confActivity.Robot[roomPlayer.RobotConfigId] 259 + confRobot, hasConfRobot := config.Robot[roomPlayer.RobotConfigId]
245 if hasConfRobot { 260 if hasConfRobot {
246 - roomPlayer.Score = GetRobotScoreMax(&confRobot) 261 + roomPlayer.Score = GetRobotScoreCurrent(&confRobot, percent)
247 } 262 }
248 } 263 }
249 264
@@ -262,23 +277,20 @@ func TryResetRobot(room *Room, config *confroomrank.ActivityConfig) { @@ -262,23 +277,20 @@ func TryResetRobot(room *Room, config *confroomrank.ActivityConfig) {
262 277
263 percent := float64(0) 278 percent := float64(0)
264 dateEnd := GetTimeEnd(room.ActivityTime, config.ReleaseTime) 279 dateEnd := GetTimeEnd(room.ActivityTime, config.ReleaseTime)
265 - dateStart := dateEnd.AddDate(0, 0, -1)  
266 - dtStart := dateStart.Unix() 280 + secTotal := 24 * 60 * 60
267 dtEnd := dateEnd.Unix() 281 dtEnd := dateEnd.Unix()
268 - if dtStart < config.StartTime {  
269 - dtStart = config.StartTime  
270 - }  
271 if dtEnd > config.EndTime { 282 if dtEnd > config.EndTime {
272 dtEnd = config.EndTime 283 dtEnd = config.EndTime
273 } 284 }
274 - if dtEnd <= dtStart { 285 + dtCreate := room.CreateTime
  286 + if dtEnd <= dtCreate {
275 percent = 0 287 percent = 0
276 - } else if secNow <= dtStart { 288 + } else if secNow <= dtCreate {
277 percent = 0 289 percent = 0
278 } else if secNow >= dtEnd { 290 } else if secNow >= dtEnd {
279 percent = 100 291 percent = 100
280 } else { 292 } else {
281 - percent = float64(secNow-dtStart) * 100 / float64(dtEnd-dtStart) 293 + percent = float64(secNow-dtCreate) * 100 / float64(secTotal)
282 } 294 }
283 295
284 // 机器人即时算分 296 // 机器人即时算分