From 4a2d6a12c151ade9caabbb13306484961702b216 Mon Sep 17 00:00:00 2001 From: "everywhere.z" Date: Thu, 2 Mar 2023 11:05:26 +0800 Subject: [PATCH] =?UTF-8?q?bug=20#I6G0D5=20NodeIfComponent=20=E9=87=8D?= =?UTF-8?q?=E5=86=99=20isAccess=20=E5=AF=BC=E8=87=B4=E7=A9=BA=E6=8C=87?= =?UTF-8?q?=E9=92=88=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flow/element/condition/ForCondition.java | 5 ++++ .../flow/element/condition/IfCondition.java | 5 ++++ .../element/condition/IteratorCondition.java | 5 ++++ .../element/condition/SwitchCondition.java | 5 ++++ .../element/condition/WhileCondition.java | 5 ++++ .../test/ifelse/IfELSpringbootTest.java | 8 +++++++ .../liteflow/test/ifelse/cmp/X2Cmp.java | 24 +++++++++++++++++++ .../src/test/resources/ifelse/flow.el.xml | 4 ++++ 8 files changed, 61 insertions(+) create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/cmp/X2Cmp.java diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/ForCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/ForCondition.java index f6503478d..54d5f1605 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/ForCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/ForCondition.java @@ -28,6 +28,11 @@ public class ForCondition extends LoopCondition{ throw new NoForNodeException(errorInfo); } + //先去判断isAccess方法,如果isAccess方法都返回false,整个FOR表达式不执行 + if (!this.getForNode().isAccess(slotIndex)){ + return; + } + //执行forCount组件 forNode.setCurrChainId(this.getCurrChainId()); forNode.execute(slotIndex); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IfCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IfCondition.java index 3bd15e5b3..b336151cb 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IfCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IfCondition.java @@ -27,6 +27,11 @@ public class IfCondition extends Condition { @Override public void execute(Integer slotIndex) throws Exception { if (ListUtil.toList(NodeTypeEnum.IF, NodeTypeEnum.IF_SCRIPT).contains(getIfNode().getType())){ + //先去判断isAccess方法,如果isAccess方法都返回false,整个IF表达式不执行 + if (!this.getIfNode().isAccess(slotIndex)){ + return; + } + //先执行IF节点 this.getIfNode().setCurrChainId(this.getCurrChainId()); this.getIfNode().execute(slotIndex); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IteratorCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IteratorCondition.java index e40141496..40f569262 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IteratorCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/IteratorCondition.java @@ -24,6 +24,11 @@ public class IteratorCondition extends LoopCondition{ throw new NoIteratorNodeException(errorInfo); } + //先去判断isAccess方法,如果isAccess方法都返回false,整个ITERATOR表达式不执行 + if (!this.getIteratorNode().isAccess(slotIndex)){ + return; + } + //执行Iterator组件 iteratorNode.setCurrChainId(this.getCurrChainId()); iteratorNode.execute(slotIndex); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/SwitchCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/SwitchCondition.java index 9e26261df..5a33928c5 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/SwitchCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/SwitchCondition.java @@ -36,6 +36,11 @@ public class SwitchCondition extends Condition{ @Override public void execute(Integer slotIndex) throws Exception { if (ListUtil.toList(NodeTypeEnum.SWITCH, NodeTypeEnum.SWITCH_SCRIPT).contains(this.getSwitchNode().getType())){ + //先去判断isAccess方法,如果isAccess方法都返回false,整个SWITCH表达式不执行 + if (!this.getSwitchNode().isAccess(slotIndex)){ + return; + } + //先执行switch节点 this.getSwitchNode().setCurrChainId(this.getCurrChainId()); this.getSwitchNode().execute(slotIndex); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/WhileCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/WhileCondition.java index 3e6773b55..6d6ba358f 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/WhileCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/WhileCondition.java @@ -28,6 +28,11 @@ public class WhileCondition extends LoopCondition{ throw new NoWhileNodeException(errorInfo); } + //先去判断isAccess方法,如果isAccess方法都返回false,整个WHILE表达式不执行 + if (!this.getWhileNode().isAccess(slotIndex)){ + return; + } + //获得要循环的可执行对象 Executable executableItem = this.getDoExecutor(); diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/IfELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/IfELSpringbootTest.java index 97302498b..4af3289f1 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/IfELSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/IfELSpringbootTest.java @@ -84,4 +84,12 @@ public class IfELSpringbootTest extends BaseTest { Assert.assertEquals("x1==>x1==>x1==>x1==>d==>b==>a", response.getExecuteStepStrWithoutTime()); } + //IF节点中isAccess返回false,这个情况相当于IF整个表达式串没执行 + @Test + public void testIf8() throws Exception{ + LiteflowResponse response = flowExecutor.execute2Resp("chain8", "arg"); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("c", response.getExecuteStepStrWithoutTime()); + } + } diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/cmp/X2Cmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/cmp/X2Cmp.java new file mode 100644 index 000000000..ebca577f9 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ifelse/cmp/X2Cmp.java @@ -0,0 +1,24 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.ifelse.cmp; + +import com.yomahub.liteflow.core.NodeIfComponent; +import org.springframework.stereotype.Component; + +@Component("x2") +public class X2Cmp extends NodeIfComponent { + @Override + public boolean processIf() throws Exception { + return true; + } + + @Override + public boolean isAccess() { + return false; + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/ifelse/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/ifelse/flow.el.xml index b2a805b0c..a907ce080 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/ifelse/flow.el.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/ifelse/flow.el.xml @@ -38,4 +38,8 @@ .ELIF(x1.tag("false"), d) .ELSE(THEN(d, b, a)); + + + THEN(IF(x2, a, b), c); + \ No newline at end of file