From a9e958ce3675c4950ceddd3fd6f939cdf0d2bc5a Mon Sep 17 00:00:00 2001 From: guyue <1721849008@qq.com> Date: 星期五, 25 七月 2025 19:00:20 +0800 Subject: [PATCH] 任务不存在时,更新关键词状态,更新创建订单id逻辑 --- src/main/java/com/linghu/timeTask/ScheduledTasks.java | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/linghu/timeTask/ScheduledTasks.java b/src/main/java/com/linghu/timeTask/ScheduledTasks.java index 4e00c6a..cb6e4a3 100644 --- a/src/main/java/com/linghu/timeTask/ScheduledTasks.java +++ b/src/main/java/com/linghu/timeTask/ScheduledTasks.java @@ -6,8 +6,10 @@ import com.linghu.controller.CollectController; import com.linghu.model.dto.TaskResultResponse; import com.linghu.model.dto.TaskStatusResponse; +import com.linghu.model.entity.Keyword; import com.linghu.model.entity.KeywordTask; import com.linghu.model.entity.Question; +import com.linghu.service.KeywordService; import com.linghu.service.KeywordTaskService; import com.linghu.service.QuestionService; import lombok.extern.slf4j.Slf4j; @@ -40,6 +42,8 @@ private WebClient webClient; // 假设已配置WebClient @Autowired private QuestionService questionService; + @Autowired + private KeywordService keywordService; private volatile boolean isHealthy = true; // 健康状态标识 private volatile boolean initialCheckComplete = false; // 初始检查完成标志 @@ -216,13 +220,17 @@ && !"running".equalsIgnoreCase(statusResponse.getStatus()) && !"Error".equalsIgnoreCase(statusResponse.getStatus())) { task.setStatus("false"); - return Mono.just(task); + // 新增:处理status为false时的关键词状态更新 + return updateKeywordStatusWhenTaskFinished(task) + .then(Mono.just(task)); }else if ( "running".equalsIgnoreCase(statusResponse.getStatus())) { //更新每个提问词的状态 return updateQuestionStatus(task, statusResponse); // 抽取为独立方法 - }else if("ERROR".equalsIgnoreCase(statusResponse.getStatus())&&"任务不存在".equalsIgnoreCase(statusResponse.getMessage())){ + }else if("ERROR".equalsIgnoreCase(statusResponse.getStatus())&&statusResponse.getMessage().contains("Task not found")){ task.setStatus("nonentity"); - return Mono.just(task); + // 更新关键词状态 + return updateKeywordStatusWhenTaskFinished(task) + .then(Mono.just(task)); } else { // 任务仍在进行中,不更新状态 @@ -273,4 +281,33 @@ }) .then(Mono.just(task)); } + /** + * 当任务状态为false/nonentity时,更新关键词状态 + */ + private Mono<Void> updateKeywordStatusWhenTaskFinished(KeywordTask task) { + return Mono.fromSupplier(() -> { + Keyword keyword = keywordService.getById(task.getKeyword_id()); + LambdaQueryWrapper<KeywordTask> keywordTaskWrapper = new LambdaQueryWrapper<>(); + keywordTaskWrapper.eq(KeywordTask::getKeyword_id, keyword.getKeyword_id()); + return keywordTaskService.list(keywordTaskWrapper); + }).flatMap(keywordTasks -> { + // 检查所有关联任务是否都已完成(包括各种结束状态) + boolean allCompleted = keywordTasks.stream().allMatch(t -> + "completed".equals(t.getStatus()) || + "false".equals(t.getStatus()) || + "cancelled".equals(t.getStatus()) || + "canceled".equals(t.getStatus()) || + "nonentity".equals(t.getStatus()) + ); + + if (allCompleted) { + Keyword keyword = keywordService.getById(task.getKeyword_id()); + keyword.setStatus("completed"); + // + return Mono.fromSupplier(() -> keywordService.updateById(keyword)) + .then(); // 转换为Mono<Void> + } + return Mono.empty(); + }); + } } \ No newline at end of file -- Gitblit v1.7.1