issue_16 #17
| @@ -9,9 +9,9 @@ import ( | |||||||
| 	"git.huangwc.com/pig/pig-farm-controller/internal/infra/models" | 	"git.huangwc.com/pig/pig-farm-controller/internal/infra/models" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| const ( | type DelayTaskParams struct { | ||||||
| 	ParamsDelayDuration = "delay_duration" | 	DelayDuration float64 `json:"delay_duration"` | ||||||
| ) | } | ||||||
|  |  | ||||||
| // DelayTask 是一个用于模拟延迟的 Task 实现 | // DelayTask 是一个用于模拟延迟的 Task 实现 | ||||||
| type DelayTask struct { | type DelayTask struct { | ||||||
| @@ -29,32 +29,39 @@ func NewDelayTask(logger *logs.Logger, executionTask *models.TaskExecutionLog) T | |||||||
|  |  | ||||||
| // Execute 执行延迟任务,等待指定的时间 | // Execute 执行延迟任务,等待指定的时间 | ||||||
| func (d *DelayTask) Execute() error { | func (d *DelayTask) Execute() error { | ||||||
| 	if d.executionTask.Task.Parameters == nil { | 	if err := d.parseParameters(); err != nil { | ||||||
| 		d.logger.Errorf("任务 %v: 缺少参数", d.executionTask.TaskID) | 		return err | ||||||
| 		return fmt.Errorf("任务 %v: 参数不全", d.executionTask.TaskID) |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// TODO 定义成结构体放model包中 |  | ||||||
| 	var params map[string]interface{} |  | ||||||
| 	if err := json.Unmarshal(d.executionTask.Task.Parameters, ¶ms); 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) | 	d.logger.Infof("任务 %v: 开始延迟 %v...", d.executionTask.TaskID, d.duration) | ||||||
| 	time.Sleep(d.duration) | 	time.Sleep(d.duration) | ||||||
| 	d.logger.Infof("任务 %v: 延迟结束。", d.executionTask.TaskID) | 	d.logger.Infof("任务 %v: 延迟结束。", d.executionTask.TaskID) | ||||||
| 	return nil | 	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, ¶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) { | func (d *DelayTask) OnFailure(executeErr error) { | ||||||
| 	d.logger.Errorf("任务 %v: 执行失败: %v", d.executionTask.TaskID, executeErr) | 	d.logger.Errorf("任务 %v: 执行失败: %v", d.executionTask.TaskID, executeErr) | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user