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.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());
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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();
}