// services/hangguan.go package services import ( "context" "encoding/json" "fmt" "go-policy-service/config" "go-policy-service/models" "go-policy-service/structs" "go-policy-service/utils" ) type HangguanService struct { cfg *config.Config httpClient utils.HTTPClient tokenMgr *TokenManager } // 更新后的New方法 func NewHangguanService( cfg *config.Config, httpClient utils.HTTPClient, tokenMgr *TokenManager, ) *HangguanService { return &HangguanService{ cfg: cfg, httpClient: httpClient, tokenMgr: tokenMgr, } } func (s *HangguanService) requestSFDataConvert(task models.HgFlightSearchTask) (string, error) { // 将 uint 日期转换为 YYYY-MM-DD 格式字符串) req := structs.ReqSearchFlightData{ DepCode: task.Dep, ArrCode: task.Arr, Date: utils.TimestampToString(int64(task.Date), "2006-01-02"), } // 将结构体转换为 JSON jsonData, err := json.Marshal(req) if err != nil { return "", fmt.Errorf("JSON 编码失败: %w", err) } return string(jsonData), nil } func (h *HangguanService) RequestSFlightData(ctx context.Context, task models.HgFlightSearchTask) { token, err := h.tokenMgr.GetAccessToken() if err != nil { utils.Logger.WithField("task_id", task.ID).Error("Failed to get access token: ", err) } // 构建请求数据 reqData, _ := h.requestSFDataConvert(task) // 调用第三方接口 resp, err := h.httpClient.PostJSON(ctx, h.cfg.HgApiUrl+"distribution/api/shopping/flight/list?token="+token, reqData) if err != nil { utils.Logger.WithField("task_id", task.ID).Error("API request failed: ", err) return } // 处理响应数据 processedData, err := processResponse(resp) if err != nil { utils.Logger.WithField("task_id", task.ID).Error("Response processing failed: ", err) //models.UpdateTaskStatus(ctx, task.ID, "failed", task.Attempts+1) return } // 保存处理后的数据 if err := models.SaveProcessedData(ctx, &models.ProcessedData{ TaskID: task.ID, Data: processedData, }); err != nil { utils.Logger.WithField("task_id", task.ID).Error("Failed to save processed data: ", err) return } // 更新任务状态 // if err := models.UpdateTaskStatus(ctx, task.ID, "completed", task.Attempts+1); err != nil { // utils.Logger.WithField("task_id", task.ID).Error("Failed to update task status: ", err) // } } func processResponse(response []byte) (string, error) { // 实现具体的响应处理逻辑 // 示例:直接返回原始响应 return string(response), nil }