From 4905acbc54c2b1918f029b73ef5fdc9881309216 Mon Sep 17 00:00:00 2001 From: "everywhere.z" Date: Sun, 26 Jan 2025 17:56:59 +0800 Subject: [PATCH] =?UTF-8?q?enhancement=20#IBJO4X=20=E5=BB=BA=E7=AB=8B?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=85=83=E6=95=B0=E6=8D=AE=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E7=B1=BB=EF=BC=8C=E6=89=80=E6=9C=89=E5=85=83=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=9A=84=E6=93=8D=E4=BD=9C=E7=9A=84=E5=85=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../builder/el/operator/ForOperator.java | 2 ++ .../com/yomahub/liteflow/flow/FlowBus.java | 8 ++++- .../yomahub/liteflow/flow/element/Node.java | 7 +++++ .../liteflow/meta/LiteflowMetaOperator.java | 29 +++++++++++++++++++ liteflow-script-plugin/pom.xml | 2 +- pom.xml | 2 -- 6 files changed, 46 insertions(+), 4 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/operator/ForOperator.java b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/operator/ForOperator.java index 039374a70..c53b9d23a 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/operator/ForOperator.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/el/operator/ForOperator.java @@ -32,6 +32,7 @@ public class ForOperator extends BaseOperator { else if (objects[0] instanceof Integer) { Integer forCount = OperatorHelper.convert(objects[0], Integer.class); node = new Node(); + node.setType(NodeTypeEnum.FOR); NodeForComponent nodeForComponent = new NodeForComponent() { @Override public int processFor() { @@ -40,6 +41,7 @@ public class ForOperator extends BaseOperator { }; nodeForComponent.setSelf(nodeForComponent); nodeForComponent.setNodeId(StrUtil.format("LOOP_{}", forCount)); + nodeForComponent.setType(NodeTypeEnum.FOR); node.setInstance(nodeForComponent); } else { diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java index c2a579588..fd416815b 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java @@ -29,6 +29,7 @@ import com.yomahub.liteflow.flow.element.Node; import com.yomahub.liteflow.lifecycle.LifeCycleHolder; import com.yomahub.liteflow.log.LFLog; import com.yomahub.liteflow.log.LFLoggerManager; +import com.yomahub.liteflow.meta.LiteflowMetaOperator; import com.yomahub.liteflow.parser.el.LocalJsonFlowELParser; import com.yomahub.liteflow.parser.el.LocalXmlFlowELParser; import com.yomahub.liteflow.parser.el.LocalYmlFlowELParser; @@ -45,6 +46,7 @@ import com.yomahub.liteflow.core.proxy.LiteFlowProxyUtil; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -379,8 +381,12 @@ public class FlowBus { if (node == null || !node.getType().isScript()) { return; } - // 更新脚本 + // 更新元数据模版中的脚本 node.setScript(script); + + // 更新Chain中的Node中的脚本 + LiteflowMetaOperator.getNodesInAllChain(nodeId).forEach(n -> n.setScript(script)); + ScriptExecutorFactory.loadInstance() .getScriptExecutor(node.getLanguage()) .load(nodeId, script); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java index bb0d7baac..ba6091fd8 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java @@ -204,6 +204,13 @@ public class Node implements Executable, Cloneable, Rollbackable{ if (e instanceof ChainEndException) { throw e; } + + // 这里再次写一遍的原因是:如果抛错了,还是要看isEnd这个状态,如果为true的话,还是要优先处理ChainEndException + if (instance.isEnd()) { + String errorInfo = StrUtil.format("[{}] lead the chain to end", instance.getDisplayName()); + throw new ChainEndException(errorInfo); + } + // 如果组件覆盖了isContinueOnError方法,返回为true,那即便出了异常,也会继续流程 else if (getIsContinueOnErrorResult() || instance.isContinueOnError()) { String errorMsg = StrUtil.format("component[{}] cause error,but flow is still go on", id); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/meta/LiteflowMetaOperator.java b/liteflow-core/src/main/java/com/yomahub/liteflow/meta/LiteflowMetaOperator.java index f447df539..d30d617cc 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/meta/LiteflowMetaOperator.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/meta/LiteflowMetaOperator.java @@ -8,7 +8,10 @@ import com.yomahub.liteflow.flow.element.Node; import com.yomahub.liteflow.flow.instanceId.NodeInstanceIdManageSpiHolder; import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -30,6 +33,19 @@ public class LiteflowMetaOperator { return FlowBus.getChain(chainId); } + /** + * 找出含有指定nodeId的chain对象 + * @param nodeId 节点Id + * @return Chain对象列表 + */ + public static List getChainsContainsNodeId(String nodeId){ + return FlowBus.getChainMap().values().stream().filter( + chain -> getNodes(chain.getChainId()).stream().anyMatch( + node -> node.getId().equals(nodeId) + ) + ).collect(Collectors.toList()); + } + /** * 刷新所有的规则 * 可以手动重新从ruleSource指定的数据源进行刷新 @@ -147,6 +163,19 @@ public class LiteflowMetaOperator { return NodeInstanceIdManageSpiHolder.getInstance().getNodeInstanceIdManageSpi().getNodeInstanceIds(chainId, nodeId); } + /** + * 通过nodeId找到在所有Chain中存在的Node对象列表 + * @param nodeId Node实例id + * @return Node对象列表 + */ + public static List getNodesInAllChain(String nodeId){ + return FlowBus.getChainMap().values().stream().flatMap( + (Function>) chain -> Objects.requireNonNull(getNodes(chain.getChainId(), nodeId)).stream().filter( + node -> node.getId().equals(nodeId) + ) + ).collect(Collectors.toList()); + } + /** * 刷新某一个脚本 * @param nodeId 节点Id diff --git a/liteflow-script-plugin/pom.xml b/liteflow-script-plugin/pom.xml index 9c8a62031..2e996a6af 100644 --- a/liteflow-script-plugin/pom.xml +++ b/liteflow-script-plugin/pom.xml @@ -24,8 +24,8 @@ liteflow-script-aviator liteflow-script-java liteflow-script-javax - liteflow-script-kotlin liteflow-script-javax-pro + liteflow-script-kotlin \ No newline at end of file diff --git a/pom.xml b/pom.xml index 8ca095157..701107b2c 100644 --- a/pom.xml +++ b/pom.xml @@ -449,9 +449,7 @@ liteflow-solon-plugin liteflow-testcase-el liteflow-el-builder - liteflow-script-plugin/liteflow-script-javax liteflow-benchmark - liteflow-benchmark/liteflow-benchmark-script-javax-pro