Files
platform/web/tasks/task.go

52 lines
1.1 KiB
Go
Raw Normal View History

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
}