package tasks import ( "context" "encoding/json" "fmt" "log/slog" "platform/web/events" q "platform/web/queries" s "platform/web/services" "github.com/hibiken/asynq" ) func HandleCompleteTrade(_ context.Context, task *asynq.Task) error { var event events.CloseTradeData if err := json.Unmarshal(task.Payload(), &event); err != nil { return fmt.Errorf("解析任务参数失败: %w", err) } data := s.TradeRef{ TradeNo: event.TradeNo, Method: event.Method, } // 尝试完成交易 user, err := s.User.Get(q.Q, event.UserId) if err != nil { return fmt.Errorf("获取用户失败: %w", err) } if err := s.Trade.CompleteTrade(user, &data); err != nil { slog.Debug("完成交易失败[异步结束订单]", "err", err) // 交易无法完成,关闭交易 if err := s.Trade.CancelTrade(&data); err != nil { return fmt.Errorf("取消交易失败[异步结束订单]: %w", err) } } return nil } func HandleRemoveChannel(_ context.Context, task *asynq.Task) (err error) { batch := string(task.Payload()) err = s.Channel.RemoveChannels(batch) if err != nil { return fmt.Errorf("删除通道失败: %w", err) } return nil }