|
@@ -20,6 +20,8 @@ import java.util.List;
|
|
|
@RequiredArgsConstructor
|
|
@RequiredArgsConstructor
|
|
|
public class WorkflowTaskScheduler {
|
|
public class WorkflowTaskScheduler {
|
|
|
|
|
|
|
|
|
|
+ private static final String TIMEOUT_MESSAGE = "任务执行超时(超过20分钟),系统自动标记失败";
|
|
|
|
|
+
|
|
|
private final TAiOrderV2Service aiOrderV2Service;
|
|
private final TAiOrderV2Service aiOrderV2Service;
|
|
|
private final WorkflowTaskClient workflowTaskClient;
|
|
private final WorkflowTaskClient workflowTaskClient;
|
|
|
private final WorkflowTaskResultHandler resultHandler;
|
|
private final WorkflowTaskResultHandler resultHandler;
|
|
@@ -93,19 +95,48 @@ public class WorkflowTaskScheduler {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
log.info("开始处理超时任务自动失败, 共{}条", timeoutOrders.size());
|
|
log.info("开始处理超时任务自动失败, 共{}条", timeoutOrders.size());
|
|
|
- int success = 0;
|
|
|
|
|
|
|
+ int timeoutFailed = 0;
|
|
|
|
|
+ int resultHandled = 0;
|
|
|
int failed = 0;
|
|
int failed = 0;
|
|
|
|
|
|
|
|
for (TAiOrderV2 order : timeoutOrders) {
|
|
for (TAiOrderV2 order : timeoutOrders) {
|
|
|
try {
|
|
try {
|
|
|
- resultHandler.handleTimeout(order, "任务执行超时(超过20分钟),系统自动标记失败");
|
|
|
|
|
- success++;
|
|
|
|
|
|
|
+ if (handleTimeoutOrderWithLatestResult(order)) {
|
|
|
|
|
+ resultHandled++;
|
|
|
|
|
+ } else {
|
|
|
|
|
+ timeoutFailed++;
|
|
|
|
|
+ }
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
failed++;
|
|
failed++;
|
|
|
log.error("超时任务自动失败处理异常, orderId={}, taskId={}", order.getId(), order.getTaskId(), e);
|
|
log.error("超时任务自动失败处理异常, orderId={}, taskId={}", order.getId(), order.getTaskId(), e);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- log.info("超时任务自动失败处理完成: 总数={}, 成功={}, 异常={}", timeoutOrders.size(), success, failed);
|
|
|
|
|
|
|
+ log.info("超时任务自动失败处理完成: 总数={}, 按结果已处理={}, 仍执行中已超时失败={}, 异常={}",
|
|
|
|
|
+ timeoutOrders.size(), resultHandled, timeoutFailed, failed);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * @return true 已按任务最新结果处理(成功或失败);false 仍执行中并已按超时失败处理
|
|
|
|
|
+ */
|
|
|
|
|
+ private boolean handleTimeoutOrderWithLatestResult(TAiOrderV2 order) {
|
|
|
|
|
+ if (order.getTaskId() == null || order.getTaskId().isBlank()) {
|
|
|
|
|
+ resultHandler.handleTimeout(order, TIMEOUT_MESSAGE);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ WorkflowTaskMessage result = workflowTaskClient.getTaskResult(order.getTaskId());
|
|
|
|
|
+ if (result == null) {
|
|
|
|
|
+ log.warn("超时任务查询结果为空, 按超时失败处理, taskId={}, orderId={}", order.getTaskId(), order.getId());
|
|
|
|
|
+ resultHandler.handleTimeout(order, TIMEOUT_MESSAGE);
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (resultHandler.handlePolledResult(result)) {
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ resultHandler.handleTimeout(order, TIMEOUT_MESSAGE);
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|