调整任务进度跟踪器, 改为从数据库获取执行进度:
提供仓库层api
This commit is contained in:
@@ -36,6 +36,18 @@ type ExecutionLogRepository interface {
|
||||
FailAllIncompletePlanExecutionLogs() error
|
||||
// CancelAllIncompleteTaskExecutionLogs 将所有状态为 ExecutionStatusStarted 和 ExecutionStatusWaiting 的任务状态修改为 ExecutionStatusCancelled
|
||||
CancelAllIncompleteTaskExecutionLogs() error
|
||||
|
||||
// FindPlanExecutionLogByID 根据ID查找计划执行日志
|
||||
FindPlanExecutionLogByID(id uint) (*models.PlanExecutionLog, error)
|
||||
|
||||
// CountIncompleteTasksByPlanLogID 计算一个计划执行中未完成的任务数量
|
||||
CountIncompleteTasksByPlanLogID(planLogID uint) (int64, error)
|
||||
|
||||
// FailPlanExecution 将指定的计划执行标记为失败
|
||||
FailPlanExecution(planLogID uint, errorMessage string) error
|
||||
|
||||
// CancelIncompleteTasksByPlanLogID 取消一个计划执行中的所有未完成任务
|
||||
CancelIncompleteTasksByPlanLogID(planLogID uint, reason string) error
|
||||
}
|
||||
|
||||
// gormExecutionLogRepository 是使用 GORM 的具体实现。
|
||||
@@ -163,3 +175,46 @@ func (r *gormExecutionLogRepository) CancelAllIncompleteTaskExecutionLogs() erro
|
||||
Where("status IN (?, ?)", models.ExecutionStatusStarted, models.ExecutionStatusWaiting).
|
||||
Updates(map[string]interface{}{"status": models.ExecutionStatusCancelled, "ended_at": time.Now(), "output": "系统中断"}).Error
|
||||
}
|
||||
|
||||
// FindPlanExecutionLogByID 根据ID查找计划执行日志
|
||||
func (r *gormExecutionLogRepository) FindPlanExecutionLogByID(id uint) (*models.PlanExecutionLog, error) {
|
||||
var log models.PlanExecutionLog
|
||||
err := r.db.First(&log, id).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &log, nil
|
||||
}
|
||||
|
||||
// CountIncompleteTasksByPlanLogID 计算一个计划执行中未完成的任务数量
|
||||
func (r *gormExecutionLogRepository) CountIncompleteTasksByPlanLogID(planLogID uint) (int64, error) {
|
||||
var count int64
|
||||
err := r.db.Model(&models.TaskExecutionLog{}).
|
||||
Where("plan_execution_log_id = ? AND status IN (?, ?)",
|
||||
planLogID, models.ExecutionStatusWaiting, models.ExecutionStatusStarted).
|
||||
Count(&count).Error
|
||||
return count, err
|
||||
}
|
||||
|
||||
// FailPlanExecution 将指定的计划执行标记为失败
|
||||
func (r *gormExecutionLogRepository) FailPlanExecution(planLogID uint, errorMessage string) error {
|
||||
return r.db.Model(&models.PlanExecutionLog{}).
|
||||
Where("id = ?", planLogID).
|
||||
Updates(map[string]interface{}{
|
||||
"status": models.ExecutionStatusFailed,
|
||||
"error": errorMessage,
|
||||
"ended_at": time.Now(),
|
||||
}).Error
|
||||
}
|
||||
|
||||
// CancelIncompleteTasksByPlanLogID 取消一个计划执行中的所有未完成任务
|
||||
func (r *gormExecutionLogRepository) CancelIncompleteTasksByPlanLogID(planLogID uint, reason string) error {
|
||||
return r.db.Model(&models.TaskExecutionLog{}).
|
||||
Where("plan_execution_log_id = ? AND status IN (?, ?)",
|
||||
planLogID, models.ExecutionStatusWaiting, models.ExecutionStatusStarted).
|
||||
Updates(map[string]interface{}{
|
||||
"status": models.ExecutionStatusCancelled,
|
||||
"output": reason,
|
||||
"ended_at": time.Now(),
|
||||
}).Error
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user