| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- // 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
- }
|