54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package model
|
|
|
|
import (
|
|
"fmt"
|
|
"sort"
|
|
)
|
|
|
|
type Statistics struct {
|
|
AppId int `json:"AppId"`
|
|
ServerList []int `json:"ServerList"`
|
|
}
|
|
|
|
func (s *Statistics) StatisticsLevel() (interface{}, error) {
|
|
AppConfig, err := GetAppConfig(s.AppId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
res := make([]map[string]interface{}, 0)
|
|
res1 := make(map[int]int)
|
|
type dbres struct {
|
|
Sum int `db:"sum"`
|
|
Level int `db:"level"`
|
|
}
|
|
for _, v := range s.ServerList {
|
|
Db := GetMysqlDB(AppConfig.ServerName, AppConfig.MysqlName, v)
|
|
if Db == nil {
|
|
return nil, fmt.Errorf("failed to get mysql database")
|
|
}
|
|
var result []dbres
|
|
err = Db.Select(&result, "select count(*) as sum , `level` from t_player_baseinfo group by `level`")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to get level count: %v", err)
|
|
}
|
|
for r := range result {
|
|
res1[result[r].Level] += result[r].Sum
|
|
}
|
|
}
|
|
keys := make([]int, 0, len(res1))
|
|
for k := range res1 {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Ints(keys)
|
|
for _, k := range keys {
|
|
res = append(res, map[string]interface{}{
|
|
"Level": k,
|
|
"Sum": res1[k],
|
|
})
|
|
}
|
|
return map[string]interface{}{
|
|
"data": res,
|
|
"total": len(res),
|
|
}, nil
|
|
}
|