@ -87,58 +87,18 @@ var DateFormat = "2006-01-02"
func ( s * gameRoleImpl ) GetOnlineTopList ( ctx context . Context , req * game . RoleOnlineTopReq ) ( res * game . RoleOnlineTopRes , err error ) {
res = new ( game . RoleOnlineTopRes )
fsql := fmt . Sprintf ( ` select num,server,channel,date from game_online where STR_TO_DATE(date, "%%Y-%%m-%%d")="%s" ` , time . Now ( ) . Format ( DateFormat ) )
fsql := fmt . Sprintf ( ` select max(num) as num,server,channel,date from game_online where STR_TO_DATE(date, "%%Y-%%m-%%d")="%s" ` , time . Now ( ) . Format ( DateFormat ) )
if req . ServerId != 0 {
fsql += fmt . Sprintf ( " and server=%d " , req . ServerId )
fsql += fmt . Sprintf ( "and server=%d " , req . ServerId )
}
data := [ ] game . RoleOnlineTop { }
err = g . Model ( ) . Raw ( fsql ) . Scan ( & data )
//g.Log().Printf(ctx, "res1: %v", gjson.MustEncodeString(data))
res1 := [ ] game . RoleOnlineTop { }
for _ , v := range data {
index := isContain ( res1 , v . Date , v . Server )
if index == - 1 {
v1 := game . RoleOnlineTop {
Server : v . Server ,
Date : v . Date ,
Num : v . Num ,
}
res1 = append ( res1 , v1 )
} else {
res1 [ index ] . Num += v . Num
}
}
//g.Log().Printf(ctx, "res1: %v", gjson.MustEncodeString(res1))
for _ , v := range res1 {
index := isContain ( res . Onlines , "" , v . Server )
if index == - 1 {
v1 := game . RoleOnlineTop {
Server : v . Server ,
Date : "" ,
Num : v . Num ,
}
res . Onlines = append ( res . Onlines , v1 )
} else {
if res . Onlines [ index ] . Num < v . Num {
res . Onlines [ index ] . Num = v . Num
}
//g.Log().Printf(ctx, "v1: %v, v: %v", gjson.MustEncodeString(res.Onlines[index]), gjson.MustEncodeString(v))
}
}
g . Log ( ) . Printf ( ctx , "res.Onlines: %v" , gjson . MustEncodeString ( res . Onlines ) )
fsql += "group by date,server,channel"
sSql := fmt . Sprintf ( ` select sum(b.num) as num,b.server,b.date from (%s) as b group by b.date,b.server ` , fsql )
tsql := fmt . Sprintf ( ` select max(a.num) as num,a.server from (%s) as a group by a.server ORDER BY a.server asc ` , sSql )
err = g . Model ( ) . Raw ( tsql ) . Scan ( & res . Onlines )
//g.Log().Printf(ctx, "res.Onlines: %v", gjson.MustEncodeString(res.Onlines))
return
}
func isContain ( data [ ] game . RoleOnlineTop , date string , server int ) int {
for k , v := range data {
if date == v . Date && server == v . Server {
return k
}
}
return - 1
}
func ( s * gameRoleImpl ) GetAccount ( ctx context . Context , req * game . AccountReq ) ( res * game . AccountRes , err error ) {
res , err = internal . GetAccount ( ctx , req )
return