package profit_ranking import ( "ai_scheduler/internal/config" "ai_scheduler/internal/pkg/l_request" "context" "encoding/json" "fmt" "strings" ) type Client struct { cfg config.ToolConfig } func New(cfg config.ToolConfig) *Client { return &Client{ cfg: cfg, } } // Call 调用利润同比排行榜接口 func (c *Client) Call(ctx context.Context, req ProfitRankingRequest) (*ProfitRankingData, error) { // 构建 URL 参数 var queryParams []string for _, t := range req.Ct { queryParams = append(queryParams, fmt.Sprintf("ct[]=%s", strings.ReplaceAll(t, " ", "+"))) } for _, rid := range req.ResellerIds { queryParams = append(queryParams, fmt.Sprintf("resellerIds[]=%s", rid)) } queryString := strings.Join(queryParams, "&") fullURL := fmt.Sprintf("%s?%s", c.cfg.BaseURL, queryString) headers := map[string]string{ "Authorization": fmt.Sprintf("Bearer %s", c.cfg.APIKey), } reqObj := l_request.Request{ Method: "GET", Url: fullURL, Headers: headers, } res, err := reqObj.Send() if err != nil { return nil, fmt.Errorf("请求失败,err: %v", err) } var resData ProfitRankingResponse if err := json.Unmarshal([]byte(res.Text), &resData); err != nil { return nil, fmt.Errorf("解析响应失败,err: %v, resp: %s", err, res.Text) } if resData.Code != 200 { return nil, fmt.Errorf("业务错误,code: %d, msg: %s", resData.Code, resData.Msg) } return &resData.Data, nil }