feat: 添加订单退款处理的异步任务及相关逻辑

This commit is contained in:
2025-12-22 23:03:18 +08:00
parent 56256a6fb8
commit ead821ac2c
7 changed files with 337 additions and 35 deletions

View File

@@ -0,0 +1,58 @@
package jobs
import (
"context"
"time"
jobs_args "quyun/v2/app/jobs/args"
"quyun/v2/app/services"
. "github.com/riverqueue/river"
log "github.com/sirupsen/logrus"
)
var _ Worker[jobs_args.OrderRefundJob] = (*OrderRefundJobWorker)(nil)
// OrderRefundJobWorker 负责执行订单退款的异步处理。
//
// @provider(job)
type OrderRefundJobWorker struct {
WorkerDefaults[jobs_args.OrderRefundJob]
}
func (w *OrderRefundJobWorker) Work(ctx context.Context, job *Job[jobs_args.OrderRefundJob]) error {
args := job.Args
logger := log.WithFields(log.Fields{
"job_kind": args.Kind(),
"tenant_id": args.TenantID,
"order_id": args.OrderID,
"operator_user_id": args.OperatorUserID,
"force": args.Force,
"attempt": job.Attempt,
})
// 只允许在异步 worker 层做执行,不要在这里再次入队其他任务(避免耦合与递归依赖)。
logger.Info("jobs.order_refund.start")
_, err := services.Order.ProcessRefundingOrder(ctx, &services.ProcessRefundingOrderParams{
TenantID: args.TenantID,
OrderID: args.OrderID,
OperatorUserID: args.OperatorUserID,
Force: args.Force,
Reason: args.Reason,
Now: time.Now().UTC(),
})
if err != nil {
// 业务层会返回可识别的“不可重试”错误由它内部完成状态落库failed这里直接 cancel。
if services.IsRefundJobNonRetryableError(err) {
logger.WithError(err).Warn("jobs.order_refund.cancel")
return JobCancel(err)
}
logger.WithError(err).Warn("jobs.order_refund.retry")
return err
}
logger.Info("jobs.order_refund.ok")
return nil
}