From 1852f7ab4ca1d396f3b7619bb463d7be3001f56c Mon Sep 17 00:00:00 2001 From: liuzhihang1 <1625167628@qq.com> Date: Thu, 13 Feb 2025 11:16:02 +0800 Subject: [PATCH] task bug fix --- internal/app/logic/task.go | 2 ++ internal/app/logic/task_logic.go | 24 +++++++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/internal/app/logic/task.go b/internal/app/logic/task.go index 30ace74..c50f435 100644 --- a/internal/app/logic/task.go +++ b/internal/app/logic/task.go @@ -141,6 +141,7 @@ var OperationHandle = map[constants.TaskOperation]operationFunc{ return false } log.Logger.Debugw("异步停止任务") + proc.State.manualStopFlag = true go proc.Kill() return true }, @@ -151,6 +152,7 @@ var OperationHandle = map[constants.TaskOperation]operationFunc{ return false } log.Logger.Debugw("停止任务并等待结束") + proc.State.manualStopFlag = true return proc.Kill() == nil }, } diff --git a/internal/app/logic/task_logic.go b/internal/app/logic/task_logic.go index 053d321..b8c4228 100644 --- a/internal/app/logic/task_logic.go +++ b/internal/app/logic/task_logic.go @@ -133,17 +133,31 @@ func (t *taskLogic) CreateTask(data model.Task) error { } func (t *taskLogic) EditTask(data model.Task) error { - if data.Cron != nil { - if _, err := cron.ParseStandard(*data.Cron); err != nil { - return err - } - } v, ok := t.taskJobMap.Load(data.Id) if !ok { return errors.New("don't exist this task id") } tj := v.(*model.TaskJob) + if tj.Running { + return errors.New("can't edit when task is running") + } + tj.Cron.Stop() tj.Task = &data + if tj.Task.Cron != nil { + if _, err := cron.ParseStandard(*tj.Task.Cron); err != nil { + return err + } + c := cron.New() + _, err := c.AddFunc(*data.Cron, t.cronHandle(tj)) + if err != nil { + log.Logger.Errorw("定时任务创建失败", "err", err, "id", data.Id) + return err + } + if data.Enable { + c.Start() + } + tj.Cron = c + } return repository.TaskRepository.EditTask(data) }