From e55a8866b18acd7f88e68de3711f09397251d541 Mon Sep 17 00:00:00 2001 From: sugarBecomer Date: Thu, 13 Nov 2025 23:28:32 +0800 Subject: [PATCH] =?UTF-8?q?:bug:=20schedule=E4=B8=8D=E8=A6=81=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1id=E5=94=AF=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/framework/schedule/cpdaily_handler.go | 4 +++- internal/framework/schedule/scanner.go | 3 +-- internal/service/cpdaily/cptask.go | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/internal/framework/schedule/cpdaily_handler.go b/internal/framework/schedule/cpdaily_handler.go index bf64d17..7907ea3 100644 --- a/internal/framework/schedule/cpdaily_handler.go +++ b/internal/framework/schedule/cpdaily_handler.go @@ -55,7 +55,9 @@ func (c *CpdailyTaskHandler) ProcessTask(ctx context.Context, task *asynq.Task) db.Global.CpTask.UpdateOneID(taskPayload.CpTaskID).SetTaskStatus(cptask.TaskStatusDoing).ExecX(ctx) defer utils.HandleError(func(err error) { - e := db.Global.CpTask.UpdateOneID(taskPayload.CpTaskID).SetTaskStatus(cptask.TaskStatusFail).Exec(ctx) + // 执行失败应该更新下次执行时间 + executeTime := utils.GetCpdailyNextExecuteTime(targetTask) + e := db.Global.CpTask.UpdateOneID(taskPayload.CpTaskID).SetNextExecuteTime(executeTime).SetTaskStatus(cptask.TaskStatusFail).Exec(ctx) utils.LogError(ctx, "设置任务状态失败", oops.With("task_id", taskPayload.CpTaskID).Wrap(e)) var errorMessage string diff --git a/internal/framework/schedule/scanner.go b/internal/framework/schedule/scanner.go index 34d149d..880c6ae 100644 --- a/internal/framework/schedule/scanner.go +++ b/internal/framework/schedule/scanner.go @@ -126,9 +126,8 @@ func (ts *TaskScanner) scanCpdailyTask() { queue.AddTask(ts.ctx, asynq.NewTask(cst2.TaskCpdaily, payloadWriter.Bytes()), asynq.TaskID(fmt.Sprintf(cst2.TaskCpdailyId, task.ID)), asynq.MaxRetry(4), - asynq.Unique(10*time.Second), asynq.ProcessAt(execTime), - asynq.Deadline(execTime.Add(12*time.Minute)), + asynq.Deadline(execTime.Add(10*time.Minute)), asynq.Queue(cst2.TaskQueueCpdaily), ) // 更新未开始的任务状态为队列中 diff --git a/internal/service/cpdaily/cptask.go b/internal/service/cpdaily/cptask.go index bae8050..0446aae 100644 --- a/internal/service/cpdaily/cptask.go +++ b/internal/service/cpdaily/cptask.go @@ -294,6 +294,7 @@ func (v CpTaskServiceV1) PauseTask(ctx context.Context, req *v1.PauseTaskReq) *u return utils.SuccessWithMsg("恢复成功") } else { + go schedule.StopTask(context.Background(), cst2.TaskQueueCpdaily, fmt.Sprintf(cst2.TaskCpdailyId, req.Id)) db2.Global.CpTask.UpdateOne(cpTask).SetTaskStatus(cptask.TaskStatusPause).SetNextExecuteTime(-1).ExecX(ctx) return utils.SuccessWithMsg("暂停成功") }