| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // 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) ([]byte, 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 := utils.StringJsonConvert(req)
- if err != nil {
- return []byte{}, fmt.Errorf("SF 请求数据转化失败: %w", err)
- }
- return 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)
- // url
- url := fmt.Sprintf("%s%s?access_token=%s", h.cfg.HgApiUrl, "/distribution/api/search/flight/list", token)
- // 调用第三方接口
- resp, err := h.httpClient.RequestWithProxy(ctx, "POST", url, reqData, h.cfg.ProxyUrl) //测试使用
- //resp, err := h.httpClient.RequestJSON(ctx, "POST", url, reqData)
- if err != nil {
- utils.Logger.WithField("task_id", task.ID).Error("API request failed: ", err)
- return
- }
- //解析数据
- var srchResp structs.ResSearchFlight
- if err = json.Unmarshal(resp, &srchResp); err != nil {
- utils.Logger.WithField("task_id", task.ID).Error("数据解析失败: ", err)
- return
- }
- if !srchResp.Success {
- utils.Logger.WithField("task_id", task.ID).Error("数据请求失败: ", srchResp.Msg)
- return
- }
- // 处理响应数据
- err = processResponse(srchResp.Data)
- if err != nil {
- utils.Logger.WithField("task_id", task.ID).Error("Response processing failed: ", err)
- return
- }
- }
- func processResponse(response structs.ResSearchFlightData) error {
- // 实现具体的响应处理逻辑
- if response.Total <= 0 {
- return fmt.Errorf("返回数据为空")
- }
-
- return nil
- }
|