From 1bcb21f8d71fbb6ed585165cffcb828a859a5213 Mon Sep 17 00:00:00 2001 From: byteblogs168 <598092184@qq.com> Date: Wed, 17 Jan 2024 18:32:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=202.6.0=201.=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=86=B3=E7=AD=96=E8=8A=82=E7=82=B9=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/enums/JobOperationReasonEnum.java | 10 ++++++++++ .../task/support/dispatch/WorkflowExecutorActor.java | 2 +- ...owExecutor.java => DecisionWorkflowExecutor.java} | 12 +++++++----- .../task/support/handler/WorkflowBatchHandler.java | 2 +- .../web/service/impl/WorkflowBatchServiceImpl.java | 2 +- 5 files changed, 20 insertions(+), 8 deletions(-) rename easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/{ConditionWorkflowExecutor.java => DecisionWorkflowExecutor.java} (95%) diff --git a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/enums/JobOperationReasonEnum.java b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/enums/JobOperationReasonEnum.java index 9206f304..17d79eb9 100644 --- a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/enums/JobOperationReasonEnum.java +++ b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/enums/JobOperationReasonEnum.java @@ -4,6 +4,9 @@ import cn.hutool.core.util.StrUtil; import lombok.AllArgsConstructor; import lombok.Getter; +import java.util.Arrays; +import java.util.List; + /** * 标识某个操作的具体原因 * @@ -29,6 +32,7 @@ public enum JobOperationReasonEnum { WORKFLOW_CALLBACK_NODE_EXECUTOR_ERROR(11, "回调节点执行异常"), WORKFLOW_NODE_NO_OPERATION_REQUIRED(12, "无需处理"), WORKFLOW_NODE_EXECUTOR_ERROR_SKIP(13, "节点处理失败并跳过"), + WORKFLOW_DECISION_FOR_FALSE(14, "判定未通过"), ; @@ -36,4 +40,10 @@ public enum JobOperationReasonEnum { private final int reason; private final String desc; + /** + * 工作流后续节点跳过执行配置 + */ + public static final List WORKFLOW_SUCCESSOR_SKIP_EXECUTE = Arrays.asList( + WORKFLOW_NODE_NO_OPERATION_REQUIRED.getReason(), WORKFLOW_DECISION_FOR_FALSE.getReason()); + } diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/WorkflowExecutorActor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/WorkflowExecutorActor.java index 37a60c91..2f77f971 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/WorkflowExecutorActor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/WorkflowExecutorActor.java @@ -108,7 +108,7 @@ public class WorkflowExecutorActor extends AbstractActor { parentJobTaskBatchList.stream() .map(JobTaskBatch::getOperationReason) .filter(Objects::nonNull) - .anyMatch(i -> i == JobOperationReasonEnum.WORKFLOW_NODE_NO_OPERATION_REQUIRED.getReason())) { + .anyMatch(JobOperationReasonEnum.WORKFLOW_SUCCESSOR_SKIP_EXECUTE::contains)) { workflowBatchHandler.complete(taskExecute.getWorkflowTaskBatchId(), workflowTaskBatch); return; } diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/ConditionWorkflowExecutor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/DecisionWorkflowExecutor.java similarity index 95% rename from easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/ConditionWorkflowExecutor.java rename to easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/DecisionWorkflowExecutor.java index 37315e8d..fd8abdbe 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/ConditionWorkflowExecutor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/DecisionWorkflowExecutor.java @@ -1,6 +1,5 @@ package com.aizuda.easy.retry.server.job.task.support.executor.workflow; -import akka.actor.ActorRef; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.StrUtil; import com.aizuda.easy.retry.common.core.constant.SystemConstants; @@ -9,12 +8,10 @@ import com.aizuda.easy.retry.common.core.expression.ExpressionEngine; import com.aizuda.easy.retry.common.core.expression.ExpressionFactory; import com.aizuda.easy.retry.common.core.util.JsonUtil; import com.aizuda.easy.retry.common.log.EasyRetryLog; -import com.aizuda.easy.retry.server.common.akka.ActorGenerator; import com.aizuda.easy.retry.server.common.dto.DecisionConfig; import com.aizuda.easy.retry.server.common.enums.ExpressionTypeEnum; import com.aizuda.easy.retry.server.common.enums.LogicalConditionEnum; import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; -import com.aizuda.easy.retry.server.job.task.dto.JobLogDTO; import com.aizuda.easy.retry.server.job.task.dto.LogMetaDTO; import com.aizuda.easy.retry.server.job.task.support.expression.ExpressionInvocationHandler; import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper; @@ -38,7 +35,7 @@ import java.util.Optional; @Component @RequiredArgsConstructor @Slf4j -public class ConditionWorkflowExecutor extends AbstractWorkflowExecutor { +public class DecisionWorkflowExecutor extends AbstractWorkflowExecutor { private final JobTaskMapper jobTaskMapper; @Override @@ -102,6 +99,9 @@ public class ConditionWorkflowExecutor extends AbstractWorkflowExecutor { context.setTaskResult(JsonUtil.toJsonString(taskResult)); result = Optional.ofNullable(tempResult).orElse(Boolean.FALSE); + if (!result) { + operationReason = JobOperationReasonEnum.WORKFLOW_DECISION_FOR_FALSE.getReason(); + } } catch (Exception e) { log.error("执行条件表达式解析异常. 表达式:[{}],参数: [{}]", decisionConfig.getNodeExpression(), context.getTaskResult(), e); taskBatchStatus = JobTaskBatchStatusEnum.FAIL.getStatus(); @@ -109,10 +109,12 @@ public class ConditionWorkflowExecutor extends AbstractWorkflowExecutor { jobTaskStatus = JobTaskStatusEnum.FAIL.getStatus(); message = e.getMessage(); } + } else { + result = Boolean.TRUE; } } - if (JobTaskBatchStatusEnum.SUCCESS.getStatus() == taskBatchStatus) { + if (JobTaskBatchStatusEnum.SUCCESS.getStatus() == taskBatchStatus && result) { workflowTaskExecutor(context); } diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/WorkflowBatchHandler.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/WorkflowBatchHandler.java index 47a49362..4802f2b3 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/WorkflowBatchHandler.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/WorkflowBatchHandler.java @@ -133,7 +133,7 @@ public class WorkflowBatchHandler { for (JobTaskBatch jobTaskBatch : jobTaskBatchList) { // 只要是无需处理的说明后面的子节点都不需要处理了,isNeedProcess为false - if (JobOperationReasonEnum.WORKFLOW_NODE_NO_OPERATION_REQUIRED.getReason() == jobTaskBatch.getOperationReason()) { + if (JobOperationReasonEnum.WORKFLOW_SUCCESSOR_SKIP_EXECUTE.contains(jobTaskBatch.getOperationReason())) { isNeedProcess = false; continue; } diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowBatchServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowBatchServiceImpl.java index 987d039f..f8970a65 100644 --- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowBatchServiceImpl.java +++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/WorkflowBatchServiceImpl.java @@ -203,7 +203,7 @@ public class WorkflowBatchServiceImpl implements WorkflowBatchService { } private static boolean isNoOperation(JobTaskBatch i) { - return i.getOperationReason() == JobOperationReasonEnum.WORKFLOW_NODE_NO_OPERATION_REQUIRED.getReason() + return JobOperationReasonEnum.WORKFLOW_SUCCESSOR_SKIP_EXECUTE.contains(i.getOperationReason()) || i.getTaskBatchStatus() == JobTaskBatchStatusEnum.STOP.getStatus(); }