Files
platform/web/tasks/task.go

77 lines
1.7 KiB
Go
Raw Normal View History

package tasks
import (
"context"
"encoding/json"
"errors"
"fmt"
"log/slog"
"platform/web/events"
m "platform/web/models"
s "platform/web/services"
"github.com/hibiken/asynq"
)
func HandleCompleteTrade(_ context.Context, task *asynq.Task) error {
slog.Info("[event]尝试结束交易")
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,
}
// 关闭交易
err := s.Trade.CancelTrade(&data)
if errors.Is(err, s.ErrTradeStatusIgnored) {
result, err := s.Trade.CheckTrade(&data)
if err != nil {
return fmt.Errorf("检查交易状态失败: %w", err)
}
switch result.Status {
case m.TradeStatusSuccess:
if err := s.Trade.UpdateRemark(data.TradeNo, "已付款"); err != nil {
slog.Error("添加备注失败", "err", err)
}
case m.TradeStatusCanceled:
slog.Debug("交易已取消", "status", result.Status)
default:
return fmt.Errorf("意外交易状态: %v", result.Status)
}
return nil
}
if err != nil {
return fmt.Errorf("结束交易失败:取消交易失败: %w", err)
}
return nil
}
func HandleRemoveChannel(_ context.Context, task *asynq.Task) (err error) {
batch := string(task.Payload())
slog.Info("[event]删除通道", "batch", batch)
2026-05-07 14:58:11 +08:00
err = s.Channel.RemoveChannels(batch)
2026-05-07 14:58:11 +08:00
if err != nil {
return fmt.Errorf("删除通道失败: %w", err)
2026-05-07 14:58:11 +08:00
}
return nil
}
func HandleRefreshEdges(_ context.Context, task *asynq.Task) (err error) {
slog.Info("[event]刷新边缘节点")
// err = s.Channel.RefreshEdges()
// if err != nil {
// return fmt.Errorf("刷新边缘节点失败: %w", err)
// }
return nil
}