feat: 2.6.0
1. 优化决策节点逻辑
This commit is contained in:
parent
7f59b6324c
commit
1bcb21f8d7
@ -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<Integer> WORKFLOW_SUCCESSOR_SKIP_EXECUTE = Arrays.asList(
|
||||
WORKFLOW_NODE_NO_OPERATION_REQUIRED.getReason(), WORKFLOW_DECISION_FOR_FALSE.getReason());
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user