|
|
@@ -33,12 +33,13 @@ func NewHangguanService(
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func (s *HangguanService) requestSFDataConvert(task models.HgFlightSearchTask) ([]byte, error) {
|
|
|
+func (s *HangguanService) requestSFDataConvert(task models.HgFlightSearchTask, startDate string) ([]byte, error) {
|
|
|
// 将 uint 日期转换为 YYYY-MM-DD 格式字符串)
|
|
|
req := structs.ReqSearchFlightData{
|
|
|
DepCode: task.Dep,
|
|
|
ArrCode: task.Arr,
|
|
|
- Date: utils.TimestampToString(int64(task.Date), "2006-01-02"),
|
|
|
+ Date: startDate,
|
|
|
+ FlyNo: task.FlightNo,
|
|
|
}
|
|
|
|
|
|
// 将结构体转换为 JSON
|
|
|
@@ -54,38 +55,51 @@ func (h *HangguanService) RequestSFlightData(ctx context.Context, task models.Hg
|
|
|
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)
|
|
|
+ //获取起飞时间列表
|
|
|
+ startDateList, err := utils.ParseDateRange(task.DateRange)
|
|
|
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)
|
|
|
+ utils.Logger.WithField("task_id", task.ID).Error("获取起飞日期时间列表错误: ", err)
|
|
|
return
|
|
|
}
|
|
|
+ for _, startDate := range startDateList {
|
|
|
+ // 构建请求数据
|
|
|
+ reqData, _ := h.requestSFDataConvert(task, startDate)
|
|
|
+ // url
|
|
|
+ url := fmt.Sprintf("%s%s?access_token=%s", h.cfg.HgApiUrl, "/distribution/api/search/flight/list", token)
|
|
|
+
|
|
|
+ // 记录请求数据
|
|
|
+ //utils.Logger.WithField("task_id", task.ID).Info("请求数据: ", string(reqData))
|
|
|
+ // 调用第三方接口
|
|
|
+ resp, err := h.httpClient.RequestWithProxy(ctx, "POST", url, reqData, h.cfg.ProxyUrl) //测试使用
|
|
|
+ //resp, err := h.httpClient.RequestJSON(ctx, "POST", url, reqData)
|
|
|
+ // 记录响应数据
|
|
|
+ //utils.Logger.WithField("task_id", task.ID).Info("响应数据: ", string(resp))
|
|
|
+ if err != nil {
|
|
|
+ utils.Logger.WithField("task_id", task.ID).Error("API request failed: ", err)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ //解析数据
|
|
|
+ var srchResp structs.ResSearchFlight
|
|
|
+ if err = json.Unmarshal(resp, &srchResp); err != nil {
|
|
|
+ utils.Logger.WithField("task_id", task.ID).Error("数据解析失败: ", err)
|
|
|
+ continue
|
|
|
+ }
|
|
|
|
|
|
- if !srchResp.Success {
|
|
|
- utils.Logger.WithField("task_id", task.ID).Error("数据请求失败: ", srchResp.Msg)
|
|
|
- return
|
|
|
- }
|
|
|
+ if !srchResp.Success {
|
|
|
+ utils.Logger.WithField("task_id", task.ID).Error("数据请求失败: ", srchResp.Msg)
|
|
|
+ continue
|
|
|
+ }
|
|
|
|
|
|
- // 处理响应数据
|
|
|
- err = h.processResponse(ctx, &task, &srchResp.Data)
|
|
|
- if err != nil {
|
|
|
- utils.Logger.WithField("task_id", task.ID).Error("Response processing failed: ", err)
|
|
|
- return
|
|
|
+ // 处理响应数据
|
|
|
+ err = h.processResponse(ctx, &task, &srchResp.Data, startDate)
|
|
|
+ if err != nil {
|
|
|
+ utils.Logger.WithField("task_id", task.ID).Error("Response processing failed: ", err)
|
|
|
+ continue
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func (h *HangguanService) processResponse(ctx context.Context, task *models.HgFlightSearchTask, response *structs.ResSearchFlightData) error {
|
|
|
+func (h *HangguanService) processResponse(ctx context.Context, task *models.HgFlightSearchTask, response *structs.ResSearchFlightData, startDate string) error {
|
|
|
// 实现具体的响应处理逻辑
|
|
|
if response.Total <= 0 {
|
|
|
return fmt.Errorf("返回数据为空")
|
|
|
@@ -134,6 +148,7 @@ func (h *HangguanService) processResponse(ctx context.Context, task *models.HgFl
|
|
|
PrintPrice: cabinPrice.AdtPrice.Price,
|
|
|
Stock: cabinPrice.Left,
|
|
|
FlightNo: fltData.FlightInfo.FlyNo,
|
|
|
+ Cabin: cabinPrice.BaseCabin,
|
|
|
FlightEndDate: utils.DateFormmat(fltData.FlightInfo.ArrDateTime, "2006-01-02"),
|
|
|
}
|
|
|
}
|
|
|
@@ -150,10 +165,13 @@ func (h *HangguanService) processResponse(ctx context.Context, task *models.HgFl
|
|
|
Query: structs.Query{
|
|
|
DepAir: task.Dep,
|
|
|
ArrAir: task.Arr,
|
|
|
- DepDate: utils.TimestampToString(int64(task.Date), "2006-01-02"),
|
|
|
+ DepDate: startDate,
|
|
|
},
|
|
|
ServiceTag: "hgSpecail",
|
|
|
}
|
|
|
+ // 推送数据打印成 json 格式
|
|
|
+ pushDataJson, _ := json.Marshal(pushData)
|
|
|
+ utils.Logger.WithField("task_id", task.ID).Info("推送数据: ", string(pushDataJson))
|
|
|
// 推送数据
|
|
|
if err := h.PushPolicyData(ctx, pushData); err != nil {
|
|
|
utils.Logger.WithField("task_id", task.ID).Error("推送失败: ", err)
|
|
|
@@ -167,9 +185,6 @@ func (h *HangguanService) PushPolicyData(ctx context.Context, data structs.PushD
|
|
|
if err != nil {
|
|
|
return fmt.Errorf("推送数据JSON 编码失败: %w", err)
|
|
|
}
|
|
|
- if err != nil {
|
|
|
- return fmt.Errorf("推送数据序列化失败: %w", err)
|
|
|
- }
|
|
|
|
|
|
url := h.cfg.PushUrl
|
|
|
resp, err := h.httpClient.RequestJSON(ctx, "POST", url, pushData)
|