70 lines
1.6 KiB
Go
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
|
|
}
|