Files
pig-farm-controller/internal/app/service/task/delay_task.go

59 lines
1.8 KiB
Go
Raw Normal View History

2025-09-13 12:25:27 +08:00
package task
import (
2025-09-17 16:17:36 +08:00
"encoding/json"
2025-09-13 12:25:27 +08:00
"fmt"
"time"
2025-09-17 16:17:36 +08:00
"git.huangwc.com/pig/pig-farm-controller/internal/infra/logs"
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
)
const (
ParamsDelayDuration = "delay_duration"
2025-09-13 12:25:27 +08:00
)
// DelayTask 是一个用于模拟延迟的 Task 实现
type DelayTask struct {
2025-09-17 16:17:36 +08:00
executionTask *models.TaskExecutionLog
duration time.Duration
logger *logs.Logger
2025-09-13 12:25:27 +08:00
}
// Execute 执行延迟任务,等待指定的时间
func (d *DelayTask) Execute() error {
2025-09-17 16:17:36 +08:00
d.logger.Infof("任务 %v: 开始延迟 %v...", d.executionTask.TaskID, d.duration)
2025-09-13 12:25:27 +08:00
time.Sleep(d.duration)
2025-09-17 16:17:36 +08:00
d.logger.Infof("任务 %v: 延迟结束。\n", d.executionTask.TaskID)
2025-09-13 12:25:27 +08:00
return nil
}
2025-09-17 16:55:56 +08:00
func (d *DelayTask) ParseParams(logger *logs.Logger, executionTask *models.TaskExecutionLog) error {
d.logger = logger
d.executionTask = executionTask
2025-09-17 16:17:36 +08:00
if d.executionTask.Task.Parameters == nil {
d.logger.Errorf("任务 %v: 缺少参数", d.executionTask.TaskID)
return fmt.Errorf("任务 %v: 参数不全", d.executionTask.TaskID)
}
2025-09-13 12:25:27 +08:00
2025-09-17 16:17:36 +08:00
var params map[string]interface{}
if err := json.Unmarshal(d.executionTask.Task.Parameters, &params); err != nil {
d.logger.Errorf("任务 %v: 解析参数失败: %v", d.executionTask.TaskID, err)
return fmt.Errorf("任务 %v: 解析参数失败: %v", d.executionTask.TaskID, err)
}
duration, ok := params[ParamsDelayDuration].(float64)
if !ok {
d.logger.Errorf("任务 %v: 参数 %v 不是数字或不存在", d.executionTask.TaskID, ParamsDelayDuration)
return fmt.Errorf("任务 %v: 参数 %v 不是数字或不存在", d.executionTask.TaskID, ParamsDelayDuration)
}
d.duration = time.Duration(duration)
return nil
2025-09-13 12:25:27 +08:00
}
2025-09-17 16:17:36 +08:00
func (d *DelayTask) OnFailure(executeErr error) {
d.logger.Errorf("任务 %v: 执行失败: %v", d.executionTask.TaskID, executeErr)
2025-09-13 12:25:27 +08:00
}