From f89683bfb9c5e9bc27a0d6af310efcd10138465b Mon Sep 17 00:00:00 2001 From: "everywhere.z" Date: Tue, 26 Jul 2022 21:48:19 +0800 Subject: [PATCH] =?UTF-8?q?enhancement=20#I5IJLN=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=E9=87=8C=E8=8E=B7=E5=8F=96requestData?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/yomahub/liteflow/core/ScriptComponent.java | 2 +- .../liteflow/core/ScriptSwitchComponent.java | 2 +- .../yomahub/liteflow/script/ScriptExecutor.java | 2 +- .../script/groovy/GroovyScriptExecutor.java | 14 +++++++++++++- .../script/qlexpress/QLExpressScriptExecutor.java | 13 ++++++++++++- .../groovy/LiteflowXmlScriptGroovyELTest.java | 9 +++++++++ .../src/test/resources/xml-script/flow.el.xml | 12 ++++++++++++ 7 files changed, 49 insertions(+), 5 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/ScriptComponent.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/ScriptComponent.java index 8fbd9c307..e66cb9334 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/ScriptComponent.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/ScriptComponent.java @@ -15,7 +15,7 @@ public class ScriptComponent extends NodeComponent{ @Override public void process() throws Exception { - ScriptExecutorFactory.loadInstance().getScriptExecutor().execute(getNodeId(), getSlotIndex()); + ScriptExecutorFactory.loadInstance().getScriptExecutor().execute(this.getCurrChainName(), getNodeId(), getSlotIndex()); } public void loadScript(String script) { diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/ScriptSwitchComponent.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/ScriptSwitchComponent.java index 99b19f825..345cdec39 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/ScriptSwitchComponent.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/ScriptSwitchComponent.java @@ -11,7 +11,7 @@ public class ScriptSwitchComponent extends NodeSwitchComponent { @Override public String processSwitch() throws Exception { - return (String)ScriptExecutorFactory.loadInstance().getScriptExecutor().execute(getNodeId(), getSlotIndex()); + return (String)ScriptExecutorFactory.loadInstance().getScriptExecutor().execute(this.getCurrChainName(), getNodeId(), getSlotIndex()); } public void loadScript(String script) { diff --git a/liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java b/liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java index 1f6c20f54..13203a239 100644 --- a/liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java +++ b/liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java @@ -11,7 +11,7 @@ public interface ScriptExecutor { void load(String nodeId, String script); - Object execute(String nodeId, int slotIndex); + Object execute(String currChainName, String nodeId, int slotIndex); void cleanCache(); } diff --git a/liteflow-script-groovy/src/main/java/com/yomahub/liteflow/script/groovy/GroovyScriptExecutor.java b/liteflow-script-groovy/src/main/java/com/yomahub/liteflow/script/groovy/GroovyScriptExecutor.java index c497dba0c..f6e07db94 100644 --- a/liteflow-script-groovy/src/main/java/com/yomahub/liteflow/script/groovy/GroovyScriptExecutor.java +++ b/liteflow-script-groovy/src/main/java/com/yomahub/liteflow/script/groovy/GroovyScriptExecutor.java @@ -1,5 +1,6 @@ package com.yomahub.liteflow.script.groovy; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.slot.DataBus; import com.yomahub.liteflow.slot.Slot; @@ -47,7 +48,7 @@ public class GroovyScriptExecutor implements ScriptExecutor { } @Override - public Object execute(String nodeId, int slotIndex) { + public Object execute(String currChainName, String nodeId, int slotIndex) { try{ if (!compiledScriptMap.containsKey(nodeId)){ String errorMsg = StrUtil.format("script for node[{}] is not loaded", nodeId); @@ -65,6 +66,17 @@ public class GroovyScriptExecutor implements ScriptExecutor { String key = StrUtil.lowerFirst(o.getClass().getSimpleName()); bindings.put(key, o); }); + + //放入主Chain的流程参数 + Slot slot = DataBus.getSlot(slotIndex); + bindings.put("requestData", slot.getRequestData()); + + //如果有隐试流程,则放入隐式流程的流程参数 + Object subRequestData = slot.getChainReqData(currChainName); + if (ObjectUtil.isNotNull(subRequestData)){ + bindings.put("subRequestData", subRequestData); + } + return compiledScript.eval(bindings); }catch (Exception e){ log.error(e.getMessage(), e); diff --git a/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java b/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java index 682f89c59..0fd05652f 100644 --- a/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java +++ b/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java @@ -1,5 +1,6 @@ package com.yomahub.liteflow.script.qlexpress; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; import com.ql.util.express.DefaultContext; @@ -50,7 +51,7 @@ public class QLExpressScriptExecutor implements ScriptExecutor { } @Override - public Object execute(String nodeId, int slotIndex) { + public Object execute(String currChainName, String nodeId, int slotIndex) { List errorList = new ArrayList<>(); try{ if (!compiledScriptMap.containsKey(nodeId)){ @@ -70,6 +71,16 @@ public class QLExpressScriptExecutor implements ScriptExecutor { context.put(key, o); }); + //放入主Chain的流程参数 + Slot slot = DataBus.getSlot(slotIndex); + context.put("requestData", slot.getRequestData()); + + //如果有隐试流程,则放入隐式流程的流程参数 + Object subRequestData = slot.getChainReqData(currChainName); + if (ObjectUtil.isNotNull(subRequestData)){ + context.put("subRequestData", subRequestData); + } + return expressRunner.execute(instructionSet, context, errorList, true, false, null); }catch (Exception e){ for (String scriptErrorMsg : errorList){ diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/LiteflowXmlScriptGroovyELTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/LiteflowXmlScriptGroovyELTest.java index ecea4890b..200f8069b 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/LiteflowXmlScriptGroovyELTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/script/groovy/LiteflowXmlScriptGroovyELTest.java @@ -68,4 +68,13 @@ public class LiteflowXmlScriptGroovyELTest extends BaseTest { Assert.assertTrue(responseNew.isSuccess()); Assert.assertEquals("d==>s2[条件脚本_改]==>b==>s3[普通脚本_新增]", responseNew.getExecuteStepStr()); } + + //测试脚本中的requestData的引用 + @Test + public void testScript4() { + LiteflowResponse response = flowExecutor.execute2Resp("chain4", "arg"); + DefaultContext context = response.getFirstContextBean(); + Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("s4:arg", context.getData("s4")); + } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/resources/xml-script/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/resources/xml-script/flow.el.xml index af5adce38..ff3ee7148 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/resources/xml-script/flow.el.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/resources/xml-script/flow.el.xml @@ -28,6 +28,14 @@ defaultContext.setData("s1",a*b); ]]> + + + + @@ -37,4 +45,8 @@ THEN(d, SWITCH(s2).to(a,b)); + + + THEN(a, s4); + \ No newline at end of file