package api import ( "ZhenTuLocalPassiveAdapter/config" "ZhenTuLocalPassiveAdapter/dto" "ZhenTuLocalPassiveAdapter/logger" "bytes" "encoding/json" "fmt" "go.uber.org/zap" "io" "net/http" ) func SyncTask() ([]dto.Task, error) { url := config.Config.Api.BaseUrl + "/sync" requestBody := map[string]interface{}{ "version": "0.0.1", "devices": config.Config.Devices, } jsonData, err := json.Marshal(requestBody) if err != nil { logger.Error("序列化JSON失败", zap.Error(err)) return nil, err } req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData)) if err != nil { logger.Error("创建请求失败", zap.Error(err)) return nil, err } req.Header.Set("Content-Type", "application/json") resp, err := GetAPIClient().Do(req) if err != nil { logger.Error("发送请求失败", zap.Error(err)) return nil, err } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { logger.Error("读取响应体失败", zap.Error(err)) return nil, err } // 解析响应体为 map var response dto.TaskListResponse err = json.Unmarshal(body, &response) if err != nil { logger.Error("解析响应体失败", zap.String("responseBody", string(body)), zap.Error(err)) return nil, err } if response.Code != 200 { logger.Error("响应错误码", zap.Int("code", response.Code)) return nil, fmt.Errorf(response.Msg) } return response.Data, nil }