2025-08-12 14:42:34 +08:00

70 lines
1.6 KiB
Go

package smdl
import (
"admin/apps/game/domain/entity"
"admin/internal/errcode"
"admin/internal/model/dto"
"admin/lib/httpclient"
"time"
)
type itemsCacher struct {
list []*dto.CommonDtoFieldChoice
mapItems map[int]*dto.ItemInfo
getTime time.Time
}
var itemsCache *itemsCacher
type Items struct {
}
func (items *Items) GetItems(projectInfo *entity.Project) ([]*dto.CommonDtoFieldChoice, error) {
//return []*dto.CommonDtoFieldChoice{
// {Desc: "黄金战甲", Value: 123, Type: 1},
// {Desc: "黄金头盔", Value: 234, Type: 1},
// {Desc: "黄金大刀", Value: 346, Type: 1},
// {Desc: "白银大刀", Value: 346, Type: 1},
//}, nil
if itemsCache != nil && time.Now().Sub(itemsCache.getTime) < time.Minute {
// 小于1分钟就不拉了
return itemsCache.list, nil
}
alisrvAddr := projectInfo.GetApiAddr()
if alisrvAddr == "" {
return nil, errcode.New(errcode.ServerError, "项目%v没有配置api服务器地址", projectInfo.Po.Name)
}
type RspData struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data struct {
List []*dto.CommonDtoFieldChoice `json:"list"`
} `json:"data"`
}
rsp := &RspData{}
err := httpclient.Request(alisrvAddr+"/items", "get", nil, rsp)
if err != nil {
return make([]*dto.CommonDtoFieldChoice, 0), nil
}
itemsCache = &itemsCacher{
list: rsp.Data.List,
mapItems: make(map[int]*dto.ItemInfo),
getTime: time.Now(),
}
for _, v := range rsp.Data.List {
itemInfo := &dto.ItemInfo{
ItemID: int(v.Value.(float64)),
ItemNum: 0,
Desc: v.Desc,
}
itemsCache.mapItems[itemInfo.ItemID] = itemInfo
}
return rsp.Data.List, nil
}