This commit is contained in:
2025-12-02 19:57:10 +08:00
parent 3440744179
commit 08ff223ff8
188 changed files with 12337 additions and 7212 deletions

View File

@@ -0,0 +1,63 @@
package queue
import (
"context"
"encoding/json"
"errors"
"fmt"
"ycc-server/app/main/api/internal/svc"
"ycc-server/app/main/api/internal/types"
"ycc-server/app/main/model"
"github.com/hibiken/asynq"
"github.com/zeromicro/go-zero/core/logx"
)
type AgentProcessHandler struct {
svcCtx *svc.ServiceContext
}
func NewAgentProcessHandler(svcCtx *svc.ServiceContext) *AgentProcessHandler {
return &AgentProcessHandler{
svcCtx: svcCtx,
}
}
func (l *AgentProcessHandler) ProcessTask(ctx context.Context, t *asynq.Task) error {
var payload types.MsgAgentProcessPayload
if err := json.Unmarshal(t.Payload(), &payload); err != nil {
return fmt.Errorf("解析代理处理任务负载失败: %w", err)
}
// 获取订单信息
order, err := l.svcCtx.OrderModel.FindOne(ctx, payload.OrderID)
if err != nil {
if errors.Is(err, model.ErrNotFound) {
logx.Errorf("代理处理任务失败,订单不存在: orderID=%d", payload.OrderID)
return asynq.SkipRetry // 订单不存在,跳过重试
}
return fmt.Errorf("查询订单失败: orderID=%d, err=%w", payload.OrderID, err)
}
// 检查订单状态
if order.Status != "paid" {
logx.Infof("代理处理任务跳过,订单未支付: orderID=%d, status=%s", payload.OrderID, order.Status)
return nil // 订单未支付,不处理,不重试
}
// 调用代理处理服务
err = l.svcCtx.AgentService.AgentProcess(ctx, order)
if err != nil {
// 记录错误日志,但不阻塞报告流程
logx.Errorf("代理处理失败订单ID: %d, 错误: %v", payload.OrderID, err)
// 返回错误以触发重试机制
return fmt.Errorf("代理处理失败: orderID=%d, err=%w", payload.OrderID, err)
}
// 注意:解冻任务现在通过定时任务扫描处理,不再需要发送延迟任务
// 定时任务每5分钟扫描一次待解冻的任务更加可靠
logx.Infof("代理处理成功订单ID: %d冻结任务如有将由定时任务自动处理", payload.OrderID)
logx.Infof("代理处理成功订单ID: %d", payload.OrderID)
return nil
}