package task import ( "context" "github.com/hibiken/asynq" "go.uber.org/zap" packagetrafficalertapp "github.com/break/junhong_cmp_fiber/internal/application/packagetrafficalert" "github.com/break/junhong_cmp_fiber/pkg/auditcontext" "github.com/break/junhong_cmp_fiber/pkg/constants" ) // PackageTrafficAlertScanHandler 处理每日套餐真流量达量预警扫描任务。 // 扫描按资产汇总当前有效套餐的真流量,命中主套餐规则阈值时原子创建预警与通知事件; // 任务可重复执行,唯一冲突视为已处理,不重复投递通知。 type PackageTrafficAlertScanHandler struct { service *packagetrafficalertapp.ScanService logger *zap.Logger } // NewPackageTrafficAlertScanHandler 创建每日套餐真流量达量预警扫描任务处理器。 func NewPackageTrafficAlertScanHandler(service *packagetrafficalertapp.ScanService, logger *zap.Logger) *PackageTrafficAlertScanHandler { return &PackageTrafficAlertScanHandler{service: service, logger: logger} } // Handle 执行一次套餐真流量达量扫描。 // 审计上下文固定为系统任务与 Worker 入口,与审计注册表中该动作声明的操作者和来源一致。 func (h *PackageTrafficAlertScanHandler) Handle(ctx context.Context, _ *asynq.Task) error { h.logger.Info("开始执行套餐真流量达量预警扫描") ctx = auditcontext.With(ctx, auditcontext.Context{ ActorKind: constants.AuditActorSystemTask, ActorID: constants.TaskTypePackageTrafficAlertScan, ActorName: "套餐真流量达量预警扫描任务", Source: constants.AuditSourceWorker, }) if err := h.service.Run(ctx); err != nil { h.logger.Error("套餐真流量达量预警扫描失败", zap.Error(err)) return err } return nil }