hi-server/queue/logic/order/deferCloseOrderLogic.go
shanshanzhong c582087c0f refactor: 更新项目引用路径从perfect-panel/ppanel-server到perfect-panel/server
feat: 添加版本和构建时间变量
fix: 修正短信队列类型注释错误
style: 清理未使用的代码和测试文件
docs: 更新安装文档中的下载链接
chore: 迁移数据库脚本添加日志和订阅配置
2025-10-13 01:33:03 -07:00

48 lines
1.2 KiB
Go

package orderLogic
import (
"context"
"encoding/json"
"github.com/perfect-panel/server/pkg/logger"
"github.com/hibiken/asynq"
"github.com/perfect-panel/server/internal/logic/public/order"
"github.com/perfect-panel/server/internal/svc"
internal "github.com/perfect-panel/server/internal/types"
"github.com/perfect-panel/server/queue/types"
)
type DeferCloseOrderLogic struct {
svc *svc.ServiceContext
}
func NewDeferCloseOrderLogic(svc *svc.ServiceContext) *DeferCloseOrderLogic {
return &DeferCloseOrderLogic{
svc: svc,
}
}
func (l *DeferCloseOrderLogic) ProcessTask(ctx context.Context, task *asynq.Task) error {
payload := types.DeferCloseOrderPayload{}
if err := json.Unmarshal(task.Payload(), &payload); err != nil {
logger.WithContext(ctx).Error("[DeferCloseOrderLogic] Unmarshal payload failed",
logger.Field("error", err.Error()),
logger.Field("payload", string(task.Payload())),
)
return nil
}
err := order.NewCloseOrderLogic(ctx, l.svc).CloseOrder(&internal.CloseOrderRequest{
OrderNo: payload.OrderNo,
})
count, ok := asynq.GetRetryCount(ctx)
if !ok {
return nil
}
if err != nil && count < 3 {
return err
}
return nil
}