ai_scheduler/internal/domain/tools/hyt/supplier_search/client.go

73 lines
1.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package supplier_search
import (
"ai_scheduler/internal/config"
"ai_scheduler/internal/pkg/l_request"
"context"
"encoding/json"
"fmt"
)
type Client struct {
cfg config.ToolConfig
}
func New(cfg config.ToolConfig) *Client {
return &Client{
cfg: cfg,
}
}
func (c *Client) Call(ctx context.Context, name string) (int, error) {
if name == "" {
// 如果没有供应商名返回0不报错由上层业务决定是否允许
return 0, nil
}
reqBody := SearchRequest{
Page: 1,
Limit: 1,
Search: SearchCondition{
Name: name,
},
}
apiReq := make(map[string]interface{})
bytes, _ := json.Marshal(reqBody)
_ = json.Unmarshal(bytes, &apiReq)
req := l_request.Request{
Method: "Post",
Url: c.cfg.BaseURL,
Json: apiReq,
Headers: map[string]string{
"User-Agent": "Apifox/1.0.0 (https://apifox.com)",
"Content-Type": "application/json",
},
}
res, err := req.Send()
if err != nil {
return 0, err
}
if res.StatusCode != 200 {
return 0, fmt.Errorf("supplier search failed with status code: %d", res.StatusCode)
}
var resData SearchResponse
if err := json.Unmarshal([]byte(res.Text), &resData); err != nil {
return 0, fmt.Errorf("failed to parse supplier search response: %w", err)
}
if resData.Code != 200 {
return 0, fmt.Errorf("supplier search business error: %s", resData.Msg)
}
if len(resData.Data.List) == 0 {
return 0, fmt.Errorf("supplier not found: %s", name)
}
return resData.Data.List[0].ID, nil
}