diff --git a/internal/application/cpdaily/task/sleepcheck.go b/internal/application/cpdaily/task/sleepcheck.go index d8ab7f4..065246d 100644 --- a/internal/application/cpdaily/task/sleepcheck.go +++ b/internal/application/cpdaily/task/sleepcheck.go @@ -544,9 +544,10 @@ func (c *CpdailySleepCheckTask) FillCustomForm(ctx context.Context, form map[str return utils.Catch(func() { ticket = submitCaptchaResolver.GetCaptchaTicket(ctx, captchaInfo) }) - }, retry.MaxDelay(15*time.Second), retry.Attempts(5), retry.Context(ctx)) - utils.OkOrPanic(errors.NewBusinessError(503, "提交验证码识别失败").WithInnerError(e), oops.WithContext(ctx).Wrap) - + }, retry.Delay(15*time.Second), retry.Attempts(5), retry.Context(ctx)) + if e != nil { + utils.OkOrPanic(errors.NewBusinessError(503, "提交验证码识别失败").WithInnerError(e), oops.WithContext(ctx).Wrap) + } resultForm["ticket"] = gvar.New(ticket) } else { resultForm["ticket"] = gvar.New("") diff --git a/internal/framework/schedule/scanner.go b/internal/framework/schedule/scanner.go index 9fdc9f6..7d2df53 100644 --- a/internal/framework/schedule/scanner.go +++ b/internal/framework/schedule/scanner.go @@ -17,6 +17,7 @@ import ( "strings" "time" + "entgo.io/ent/dialect/sql" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/os/gctx" "github.com/hibiken/asynq" @@ -79,7 +80,6 @@ func (ts *TaskScanner) StopScan() { case <-ts.stopSign: } } - func (ts *TaskScanner) scanCpdailyTask() { currentTime := time.Now().In(cst2.TimeZoneShangHai) @@ -87,8 +87,16 @@ func (ts *TaskScanner) scanCpdailyTask() { // 只查询30分钟以内的任务 minExecuteTime := currentTime.Add(-30 * time.Minute).Unix() - allTasks := db.Global.CpTask.Query(). - Where(cptask.NextExecuteTimeLTE(currentTime.Unix()), cptask.NextExecuteTimeNotNil(), cptask.NextExecuteTimeGT(0), cptask.StepEQ(cptask.StepComplete), cptask.TaskStatusEQ(cptask.TaskStatusNotStart)). + allTasks := db.Global.Debug().CpTask.Query(). + Where( + cptask.NextExecuteTimeLTE(currentTime.Unix()), + cptask.NextExecuteTimeNotNil(), + cptask.NextExecuteTimeGT(0), + cptask.StepEQ(cptask.StepComplete), + cptask.TaskStatusEQ(cptask.TaskStatusNotStart), + func(selector *sql.Selector) { + selector.Where(sql.ExprP("success_count < frequency")) + }). Select(cptask.FieldID, cptask.FieldExecuteHour, cptask.FieldExecuteMinute, cptask.FieldNextExecuteTime). AllX(ts.ctx) @@ -117,7 +125,7 @@ func (ts *TaskScanner) scanCpdailyTask() { e = utils.Catch(func() { queue.AddTask(ts.ctx, asynq.NewTask(cst2.TaskCpdaily, payloadWriter.Bytes()), asynq.TaskID(fmt.Sprintf(cst2.TaskCpdailyId, task.ID)), - asynq.MaxRetry(3), + asynq.MaxRetry(4), asynq.Unique(10*time.Second), asynq.ProcessAt(execTime), asynq.Deadline(execTime.Add(12*time.Minute)),