DelayTask 使用结构体代替map

This commit is contained in:
2025-09-25 11:28:38 +08:00
parent 97c750778a
commit 5a655ffc9e

View File

@@ -9,9 +9,9 @@ import (
"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"
)
const (
ParamsDelayDuration = "delay_duration"
)
type DelayTaskParams struct {
DelayDuration float64 `json:"delay_duration"`
}
// DelayTask 是一个用于模拟延迟的 Task 实现
type DelayTask struct {
@@ -29,32 +29,39 @@ func NewDelayTask(logger *logs.Logger, executionTask *models.TaskExecutionLog) T
// Execute 执行延迟任务,等待指定的时间
func (d *DelayTask) Execute() error {
if d.executionTask.Task.Parameters == nil {
d.logger.Errorf("任务 %v: 缺少参数", d.executionTask.TaskID)
return fmt.Errorf("任务 %v: 参数不全", d.executionTask.TaskID)
if err := d.parseParameters(); err != nil {
return err
}
// TODO 定义成结构体放model包中
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) * time.Second
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 := json.Unmarshal(d.executionTask.Task.Parameters, &params)
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)
}