package smdl import ( "admin/apps/game/domain/entity" "admin/internal/errcode" "admin/internal/model/dto" "admin/lib/httpclient" "admin/lib/xlog" "math" "net/url" "strconv" "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 } func (items *Items) ChangeRoleItem(projectInfo *entity.Project, serverId, roleId string, itemId int32, itemNum int64) error { alisrvAddr := projectInfo.GetApiAddr() if alisrvAddr == "" { return errcode.New(errcode.ServerError, "项目%v没有配置api服务器地址", projectInfo.Po.Name) } if itemNum == 0 { xlog.Warnf("change role item:%v,%v,%v,%v num invalid", serverId, roleId, itemId, itemNum) return nil } // http://127.0.0.1:12007/GM?cmd_data=addItem&roleid=20007000171&itemsn=14201093&itemnum=1&isbind=true params := &url.Values{} params.Set("cmd_data", "addItem") params.Add("roleid", roleId) params.Add("server", serverId) params.Set("itemsn", strconv.Itoa(int(itemId))) params.Set("itemnum", strconv.FormatInt(int64(math.Abs(float64(itemNum))), 10)) params.Set("isbind", "true") if itemNum < 0 { params.Set("deduct", "true") } rsp := make(map[string]any) err := httpclient.Request(alisrvAddr+"/gm", "get", params, &rsp) if err != nil { } return nil }