diff --git a/doc/sql/easy_retry_mysql.sql b/doc/sql/easy_retry_mysql.sql index 39d1fb48..31ab73fd 100644 --- a/doc/sql/easy_retry_mysql.sql +++ b/doc/sql/easy_retry_mysql.sql @@ -483,7 +483,7 @@ CREATE TABLE `workflow_node` `workflow_id` bigint(20) NOT NULL COMMENT '工作流ID', `node_type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '1、任务节点 2、条件节点', `expression_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '1、SpEl、2、Aviator 3、QL', - `fail_strategy` tinyint(4) NOT NULL DEFAULT 0 COMMENT '失败策略 1、跳过 2、阻塞', + `fail_strategy` tinyint(4) NOT NULL DEFAULT 1 COMMENT '失败策略 1、跳过 2、阻塞', `workflow_node_status` tinyint(4) NOT NULL DEFAULT 1 COMMENT '工作流节点状态 0、关闭、1、开启', `priority_level` int(11) NOT NULL DEFAULT 1 COMMENT '优先级', `node_info` text DEFAULT NULL COMMENT '节点信息 ', diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/CallbackWorkflowExecutor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/CallbackWorkflowExecutor.java index 40898ca0..c6f1b24c 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/CallbackWorkflowExecutor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/executor/workflow/CallbackWorkflowExecutor.java @@ -111,9 +111,7 @@ public class CallbackWorkflowExecutor extends AbstractWorkflowExecutor { message = throwable.getMessage(); } - if (JobTaskBatchStatusEnum.SUCCESS.getStatus() == taskBatchStatus) { - workflowTaskExecutor(context); - } + workflowTaskExecutor(context); context.setTaskBatchStatus(taskBatchStatus); context.setOperationReason(operationReason); 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/ConditionWorkflowExecutor.java index e3e9e5ae..37315e8d 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/ConditionWorkflowExecutor.java @@ -66,8 +66,6 @@ public class ConditionWorkflowExecutor extends AbstractWorkflowExecutor { jobTaskStatus = JobTaskStatusEnum.CANCEL.getStatus(); operationReason = JobOperationReasonEnum.WORKFLOW_NODE_NO_OPERATION_REQUIRED.getReason(); } else { - boolean tempResult = Boolean.TRUE; - DecisionConfig decisionConfig = JsonUtil.parseObject(context.getNodeInfo(), DecisionConfig.class); if (StatusEnum.NO.getStatus().equals(decisionConfig.getDefaultDecision())) { try { @@ -80,11 +78,16 @@ public class ConditionWorkflowExecutor extends AbstractWorkflowExecutor { .select(JobTask::getResultMessage) .eq(JobTask::getTaskBatchId, context.getTaskBatchId())); + Boolean tempResult = null; List taskResult = Lists.newArrayList(); for (JobTask jobTask : jobTasks) { taskResult.add(jobTask.getResultMessage()); boolean execResult = (Boolean) Optional.ofNullable(expressionEngine.eval(decisionConfig.getNodeExpression(), jobTask.getResultMessage())).orElse(Boolean.FALSE); + if (Objects.isNull(tempResult)) { + tempResult = execResult; + } + if (Objects.equals(decisionConfig.getLogicalCondition(), LogicalConditionEnum.AND.getCode())) { tempResult = tempResult && execResult; } else { @@ -98,7 +101,7 @@ public class ConditionWorkflowExecutor extends AbstractWorkflowExecutor { } context.setTaskResult(JsonUtil.toJsonString(taskResult)); - result = tempResult; + result = Optional.ofNullable(tempResult).orElse(Boolean.FALSE); } catch (Exception e) { log.error("执行条件表达式解析异常. 表达式:[{}],参数: [{}]", decisionConfig.getNodeExpression(), context.getTaskResult(), e); taskBatchStatus = JobTaskBatchStatusEnum.FAIL.getStatus(); @@ -142,11 +145,11 @@ public class ConditionWorkflowExecutor extends AbstractWorkflowExecutor { logMetaDTO.setTaskId(jobTask.getId()); if (jobTaskBatch.getTaskBatchStatus() == JobTaskStatusEnum.SUCCESS.getStatus() || JobOperationReasonEnum.WORKFLOW_NODE_NO_OPERATION_REQUIRED.getReason() == context.getOperationReason()) { - EasyRetryLog.REMOTE.info("workflowNodeId:[{}]决策完成. 决策结果:[{}] <|>{}<|>", - context.getWorkflowNodeId(), context.getEvaluationResult(), logMetaDTO); + EasyRetryLog.REMOTE.info("workflowNodeId:[{}]决策完成. 上下文:[{}] 决策结果:[{}] <|>{}<|>", + context.getWorkflowNodeId(), context.getTaskResult(), context.getEvaluationResult(), logMetaDTO); } else { - EasyRetryLog.REMOTE.error("workflowNodeId:[{}] 决策失败. 失败原因:[{}] <|>{}<|>", context.getWorkflowNodeId(), - context.getLogMessage(), logMetaDTO); + EasyRetryLog.REMOTE.error("workflowNodeId:[{}] 决策失败. 上下文:[{}] 失败原因:[{}] <|>{}<|>", + context.getWorkflowNodeId(), context.getTaskResult(), context.getLogMessage(), logMetaDTO); } }