feat: 2.6.0

1. 优化决策节点逻辑
This commit is contained in:
byteblogs168 2024-01-17 18:32:54 +08:00
parent 7f59b6324c
commit 1bcb21f8d7
5 changed files with 20 additions and 8 deletions

View File

@ -4,6 +4,9 @@ import cn.hutool.core.util.StrUtil;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; 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_CALLBACK_NODE_EXECUTOR_ERROR(11, "回调节点执行异常"),
WORKFLOW_NODE_NO_OPERATION_REQUIRED(12, "无需处理"), WORKFLOW_NODE_NO_OPERATION_REQUIRED(12, "无需处理"),
WORKFLOW_NODE_EXECUTOR_ERROR_SKIP(13, "节点处理失败并跳过"), WORKFLOW_NODE_EXECUTOR_ERROR_SKIP(13, "节点处理失败并跳过"),
WORKFLOW_DECISION_FOR_FALSE(14, "判定未通过"),
; ;
@ -36,4 +40,10 @@ public enum JobOperationReasonEnum {
private final int reason; private final int reason;
private final String desc; private final String desc;
/**
* 工作流后续节点跳过执行配置
*/
public static final List<Integer> WORKFLOW_SUCCESSOR_SKIP_EXECUTE = Arrays.asList(
WORKFLOW_NODE_NO_OPERATION_REQUIRED.getReason(), WORKFLOW_DECISION_FOR_FALSE.getReason());
} }

View File

@ -108,7 +108,7 @@ public class WorkflowExecutorActor extends AbstractActor {
parentJobTaskBatchList.stream() parentJobTaskBatchList.stream()
.map(JobTaskBatch::getOperationReason) .map(JobTaskBatch::getOperationReason)
.filter(Objects::nonNull) .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); workflowBatchHandler.complete(taskExecute.getWorkflowTaskBatchId(), workflowTaskBatch);
return; return;
} }

View File

@ -1,6 +1,5 @@
package com.aizuda.easy.retry.server.job.task.support.executor.workflow; 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.lang.Assert;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.aizuda.easy.retry.common.core.constant.SystemConstants; 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.expression.ExpressionFactory;
import com.aizuda.easy.retry.common.core.util.JsonUtil; import com.aizuda.easy.retry.common.core.util.JsonUtil;
import com.aizuda.easy.retry.common.log.EasyRetryLog; 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.dto.DecisionConfig;
import com.aizuda.easy.retry.server.common.enums.ExpressionTypeEnum; 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.enums.LogicalConditionEnum;
import com.aizuda.easy.retry.server.common.exception.EasyRetryServerException; 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.dto.LogMetaDTO;
import com.aizuda.easy.retry.server.job.task.support.expression.ExpressionInvocationHandler; import com.aizuda.easy.retry.server.job.task.support.expression.ExpressionInvocationHandler;
import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper; import com.aizuda.easy.retry.template.datasource.persistence.mapper.JobTaskMapper;
@ -38,7 +35,7 @@ import java.util.Optional;
@Component @Component
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j @Slf4j
public class ConditionWorkflowExecutor extends AbstractWorkflowExecutor { public class DecisionWorkflowExecutor extends AbstractWorkflowExecutor {
private final JobTaskMapper jobTaskMapper; private final JobTaskMapper jobTaskMapper;
@Override @Override
@ -102,6 +99,9 @@ public class ConditionWorkflowExecutor extends AbstractWorkflowExecutor {
context.setTaskResult(JsonUtil.toJsonString(taskResult)); context.setTaskResult(JsonUtil.toJsonString(taskResult));
result = Optional.ofNullable(tempResult).orElse(Boolean.FALSE); result = Optional.ofNullable(tempResult).orElse(Boolean.FALSE);
if (!result) {
operationReason = JobOperationReasonEnum.WORKFLOW_DECISION_FOR_FALSE.getReason();
}
} catch (Exception e) { } catch (Exception e) {
log.error("执行条件表达式解析异常. 表达式:[{}],参数: [{}]", decisionConfig.getNodeExpression(), context.getTaskResult(), e); log.error("执行条件表达式解析异常. 表达式:[{}],参数: [{}]", decisionConfig.getNodeExpression(), context.getTaskResult(), e);
taskBatchStatus = JobTaskBatchStatusEnum.FAIL.getStatus(); taskBatchStatus = JobTaskBatchStatusEnum.FAIL.getStatus();
@ -109,10 +109,12 @@ public class ConditionWorkflowExecutor extends AbstractWorkflowExecutor {
jobTaskStatus = JobTaskStatusEnum.FAIL.getStatus(); jobTaskStatus = JobTaskStatusEnum.FAIL.getStatus();
message = e.getMessage(); message = e.getMessage();
} }
} else {
result = Boolean.TRUE;
} }
} }
if (JobTaskBatchStatusEnum.SUCCESS.getStatus() == taskBatchStatus) { if (JobTaskBatchStatusEnum.SUCCESS.getStatus() == taskBatchStatus && result) {
workflowTaskExecutor(context); workflowTaskExecutor(context);
} }

View File

@ -133,7 +133,7 @@ public class WorkflowBatchHandler {
for (JobTaskBatch jobTaskBatch : jobTaskBatchList) { for (JobTaskBatch jobTaskBatch : jobTaskBatchList) {
// 只要是无需处理的说明后面的子节点都不需要处理了isNeedProcess为false // 只要是无需处理的说明后面的子节点都不需要处理了isNeedProcess为false
if (JobOperationReasonEnum.WORKFLOW_NODE_NO_OPERATION_REQUIRED.getReason() == jobTaskBatch.getOperationReason()) { if (JobOperationReasonEnum.WORKFLOW_SUCCESSOR_SKIP_EXECUTE.contains(jobTaskBatch.getOperationReason())) {
isNeedProcess = false; isNeedProcess = false;
continue; continue;
} }

View File

@ -203,7 +203,7 @@ public class WorkflowBatchServiceImpl implements WorkflowBatchService {
} }
private static boolean isNoOperation(JobTaskBatch i) { 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(); || i.getTaskBatchStatus() == JobTaskBatchStatusEnum.STOP.getStatus();
} }