package assetautorenewal import ( "context" "github.com/hibiken/asynq" assetAutoRenewalApp "github.com/break/junhong_cmp_fiber/internal/application/assetautorenewal" "github.com/break/junhong_cmp_fiber/pkg/auditcontext" "github.com/break/junhong_cmp_fiber/pkg/constants" "github.com/break/junhong_cmp_fiber/pkg/errors" ) // DailyScanTaskHandler 执行资产钱包自动续费的每日扫描任务。 // // 审计上下文固定为计划任务来源,使终态收敛、续费成功与失败事实都可按计划任务维度追溯。 type DailyScanTaskHandler struct { service *assetAutoRenewalApp.Service } // NewDailyScanTaskHandler 创建自动续费每日扫描任务处理器。 func NewDailyScanTaskHandler(service *assetAutoRenewalApp.Service) *DailyScanTaskHandler { return &DailyScanTaskHandler{service: service} } // Handle 执行一次每日扫描;只有扫描级失败才返回错误交既有任务重试。 func (h *DailyScanTaskHandler) Handle(ctx context.Context, task *asynq.Task) error { if h == nil || h.service == nil { return errors.New(errors.CodeServiceUnavailable, "自动续费扫描任务未配置") } taskType := constants.TaskTypeAssetAutoRenewalScan if task != nil && task.Type() != "" { taskType = task.Type() } ctx = auditcontext.With(ctx, auditcontext.Context{ ActorKind: constants.AuditActorScheduledJob, ActorID: taskType, ActorName: "资产钱包自动续费每日扫描计划任务", Source: constants.AuditSourceScheduler, }) _, err := h.service.RunDailyScan(ctx) return err } // RecoveryTaskHandler 执行资产钱包自动续费的复机结果恢复扫描任务。 // // 只查询运营商状态回填,绝不重复发起复机调用;只有最终确认失败才按通知契约投递通知。 type RecoveryTaskHandler struct { service *assetAutoRenewalApp.Service } // NewRecoveryTaskHandler 创建自动续费复机结果恢复任务处理器。 func NewRecoveryTaskHandler(service *assetAutoRenewalApp.Service) *RecoveryTaskHandler { return &RecoveryTaskHandler{service: service} } // Handle 扫描未收敛的复机子结果并只查询状态回填。 func (h *RecoveryTaskHandler) Handle(ctx context.Context, task *asynq.Task) error { if h == nil || h.service == nil { return errors.New(errors.CodeServiceUnavailable, "自动续费复机结果恢复任务未配置") } taskType := constants.TaskTypeAssetAutoRenewalRecovery if task != nil && task.Type() != "" { taskType = task.Type() } ctx = auditcontext.With(ctx, auditcontext.Context{ ActorKind: constants.AuditActorScheduledJob, ActorID: taskType, ActorName: "资产钱包自动续费结果恢复计划任务", Source: constants.AuditSourceScheduler, }) _, err := h.service.RecoverResumeResults(ctx) return err }