2025-04-28 15:56:04 +08:00

67 lines
1.8 KiB
Go

package smdl
import (
"admin/apps/game/domain/entity"
"admin/apps/game/model"
"admin/apps/game/model/dto"
"admin/internal/errcode"
"admin/lib/httpclient"
"admin/lib/utils"
"math"
"strconv"
)
type AccountHook struct {
}
func (hook *AccountHook) List(projectInfo *entity.Project, resource string, pageNo, pageLen int, fields []*dto.CommonDtoFieldDesc, rows []dto.CommonDtoValues, extraQuery string, args ...any) (
[]*dto.CommonDtoFieldDesc, []dto.CommonDtoValues, error) {
alisrvAddr := projectInfo.GetApiAddr()
if alisrvAddr == "" {
return nil, nil, errcode.New(errcode.ServerError, "项目%v没有配置api服务器地址", projectInfo.ProjectPo.Name)
}
type RspData struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data struct {
Data []struct {
Account string `json:"account"`
ServerId int `json:"serverId"`
RoleList []*Role `json:"roleList"`
} `json:"data"`
} `json:"data"`
}
rsp := &RspData{}
err := httpclient.Request(alisrvAddr+"/userlist", "get", nil, rsp)
if err != nil {
return nil, nil, err
}
for _, user := range rsp.Data.Data {
userPo := &model.Account{
Account: user.Account,
ServerConfId: strconv.Itoa(user.ServerId),
}
latestLoginTime := int64(0)
earliestCreateTime := int64(math.MaxInt64)
for _, v := range user.RoleList {
userPo.RoleIds = append(userPo.RoleIds, v.RoleId)
if latestLoginTime < v.LatestLoginTime {
latestLoginTime = v.LatestLoginTime
}
if earliestCreateTime > v.CreateTime {
earliestCreateTime = v.CreateTime
}
}
userPo.LatestLoginTime = utils.ParseUnixTimestamp2LocalTime(latestLoginTime)
userPo.CreateTime = utils.ParseUnixTimestamp2LocalTime(earliestCreateTime)
et := (&entity.CommonResource{}).FromPo(userPo)
rows = append(rows, et.ToCommonDto())
}
return fields, rows, nil
}