@@ -35,23 +35,39 @@ type CompleteForm struct {
35
35
InitialCoinTotal int `json:"initialCoinTotal"`
36
36
}
37
37
38
+ type CompleteFormRank struct {
39
+ Rank int `json:"rank"`
40
+ School string `json:"school"`
41
+ Team string `json:"team"`
42
+ }
43
+
38
44
var SeasonCompleteFormMap = map [string ][]byte {
39
45
"2024" : static .CompleteFormBytes2024 ,
40
46
}
41
47
48
+ var SeasonCompleteFormRankMap = map [string ][]byte {
49
+ "2024" : {},
50
+ }
51
+
42
52
var SeasonRankScoreMap = map [string ][]byte {
43
53
"2024" : static .RankScoreBytes2024 ,
44
54
}
45
55
46
56
func RankListHandler (c iris.Context ) {
47
57
season := c .URLParam ("season" )
48
58
var completeFormBytes []byte
59
+ var completeFormRankBytes []byte
49
60
var rankScoreBytes []byte
50
61
if data , ok := SeasonCompleteFormMap [season ]; ok {
51
62
completeFormBytes = data
52
63
} else {
53
64
completeFormBytes = static .CompleteFormBytes
54
65
}
66
+ if data , ok := SeasonCompleteFormRankMap [season ]; ok {
67
+ completeFormRankBytes = data
68
+ } else {
69
+ completeFormRankBytes = static .CompleteFormRankBytes
70
+ }
55
71
if data , ok := SeasonRankScoreMap [season ]; ok {
56
72
rankScoreBytes = data
57
73
} else {
@@ -76,15 +92,37 @@ func RankListHandler(c iris.Context) {
76
92
return
77
93
}
78
94
79
- // 并列名次处理
80
- var rank int
81
- var lastCoinTotal int
82
- for i := range completeFormJson {
83
- if completeFormJson [i ].InitialCoinTotal != lastCoinTotal {
84
- rank = i + 1
95
+ if len (completeFormRankBytes ) != 0 {
96
+ // 有完整形态排名
97
+ completeFormRankJson := make ([]CompleteFormRank , 0 )
98
+ err = json .Unmarshal (completeFormRankBytes , & completeFormRankJson )
99
+ if err != nil {
100
+ log .Printf ("Failed to parse complete form rank: %v\n " , err )
101
+ c .StatusCode (500 )
102
+ c .JSON (iris.Map {"code" : - 1 , "msg" : "Failed to parse complete form rank" })
103
+ return
104
+ }
105
+ completeFormRankMap := make (map [string ]CompleteFormRank )
106
+ for _ , item := range completeFormRankJson {
107
+ completeFormRankMap [item .School ] = item
108
+ }
109
+ for i , item := range completeFormJson {
110
+ if rankItem , ok := completeFormRankMap [item .School ]; ok {
111
+ completeFormJson [i ].Rank = rankItem .Rank
112
+ }
113
+ }
114
+ } else {
115
+ // 无完整形态排名 按照金币数量计算
116
+ // 并列名次处理
117
+ var rank int
118
+ var lastCoinTotal int
119
+ for i := range completeFormJson {
120
+ if completeFormJson [i ].InitialCoinTotal != lastCoinTotal {
121
+ rank = i + 1
122
+ }
123
+ completeFormJson [i ].Rank = rank
124
+ lastCoinTotal = completeFormJson [i ].InitialCoinTotal
85
125
}
86
- completeFormJson [i ].Rank = rank
87
- lastCoinTotal = completeFormJson [i ].InitialCoinTotal
88
126
}
89
127
completeFormMap = lo .SliceToMap (completeFormJson , func (item CompleteForm ) (string , CompleteForm ) { return item .School , item })
90
128
svc .Cache .Set ("complete_form" , completeFormMap , cache .NoExpiration )
0 commit comments