package task import ( "fmt" "time" "git.huangwc.com/pig/pig-farm-controller/internal/infra/logs" "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" ) type DelayTaskParams struct { DelayDuration float64 `json:"delay_duration"` } // DelayTask 是一个用于模拟延迟的 Task 实现 type DelayTask struct { executionTask *models.TaskExecutionLog duration time.Duration logger *logs.Logger } func NewDelayTask(logger *logs.Logger, executionTask *models.TaskExecutionLog) Task { return &DelayTask{ executionTask: executionTask, logger: logger, } } // Execute 执行延迟任务,等待指定的时间 func (d *DelayTask) Execute() error { if err := d.parseParameters(); err != nil { return err } d.logger.Infof("任务 %v: 开始延迟 %v...", d.executionTask.TaskID, d.duration) time.Sleep(d.duration) d.logger.Infof("任务 %v: 延迟结束。", d.executionTask.TaskID) return nil } func (d *DelayTask) parseParameters() error { if d.executionTask.Task.Parameters == nil { d.logger.Errorf("任务 %v: 缺少参数", d.executionTask.TaskID) return fmt.Errorf("任务 %v: 参数不全", d.executionTask.TaskID) } var params DelayTaskParams err := d.executionTask.Task.ParseParameters(¶ms) if err != nil { d.logger.Errorf("任务 %v: 解析参数失败: %v", d.executionTask.TaskID, err) return fmt.Errorf("任务 %v: 解析参数失败: %v", d.executionTask.TaskID, err) } if params.DelayDuration <= 0 { d.logger.Errorf("任务 %v: 参数 delay_duration 缺失或无效 (必须大于0)", d.executionTask.TaskID) return fmt.Errorf("任务 %v: 参数 delay_duration 缺失或无效 (必须大于0)", d.executionTask.TaskID) } d.duration = time.Duration(params.DelayDuration) * time.Second return nil } func (d *DelayTask) OnFailure(executeErr error) { d.logger.Errorf("任务 %v: 执行失败: %v", d.executionTask.TaskID, executeErr) }