diff --git a/README.md b/README.md index 99f6ba892..794b3fe37 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,10 @@ To join the LF CLUB, please scan the QR code below or click on the image to go d +**速众 AI 低代码开发平台** + + + **WECHAT OFFICIAL ACCOUNT** Since the community group is over 200 people, you need to be invited to join the group. Follow the WECHAT OFFICIAL ACCOUNT and click `Personal WeChat` to add me, I can invite you into the group diff --git a/README.zh-CN.md b/README.zh-CN.md index 1207434b8..78be71724 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -102,6 +102,10 @@ LF CLUB里能解决你在使用LiteFlow框架时碰到的所有问题,并有 +**速众 AI 低代码开发平台** + + + **微信公众号** 社区群需要邀请入群。关注公众号后点击`个人微信`加我,我可以拉你入群 diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/common/ChainConstant.java b/liteflow-core/src/main/java/com/yomahub/liteflow/common/ChainConstant.java index 8a6a2e924..492c7094f 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/common/ChainConstant.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/common/ChainConstant.java @@ -114,4 +114,6 @@ public interface ChainConstant { String USER_DIR = "user.dir"; String BIND = "bind"; + + String CONTEXT_SEARCH_REGEX = "^\\$\\{(.*?)\\}$"; } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java index 3b3aa7f3f..2aad3ac06 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java @@ -9,10 +9,13 @@ package com.yomahub.liteflow.core; import cn.hutool.core.date.StopWatch; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; +import com.yomahub.liteflow.common.ChainConstant; import com.yomahub.liteflow.core.proxy.LiteFlowProxyUtil; import com.yomahub.liteflow.enums.CmpStepTypeEnum; import com.yomahub.liteflow.enums.NodeTypeEnum; +import com.yomahub.liteflow.exception.ObjectConvertException; import com.yomahub.liteflow.flow.LiteflowResponse; import com.yomahub.liteflow.flow.element.Node; import com.yomahub.liteflow.flow.entity.CmpStep; @@ -26,6 +29,7 @@ import com.yomahub.liteflow.slot.DataBus; import com.yomahub.liteflow.slot.Slot; import com.yomahub.liteflow.spi.holder.CmpAroundAspectHolder; import com.yomahub.liteflow.util.JsonUtil; +import com.yomahub.liteflow.util.LiteflowContextRegexMatcher; import java.lang.reflect.Method; import java.util.Date; @@ -446,10 +450,31 @@ public abstract class NodeComponent{ if (StrUtil.isBlank(bindData)) { return null; } - if (clazz.equals(String.class) || clazz.equals(Object.class)) { - return (T) bindData; + + //如果bind的value是一个正则表达式,说明要在上下文中进行搜索 + if (ReUtil.isMatch(ChainConstant.CONTEXT_SEARCH_REGEX, bindData)) { + Object searchResult = LiteflowContextRegexMatcher.searchContext( + this.getSlot().getContextBeanList(), + ReUtil.getGroup1(ChainConstant.CONTEXT_SEARCH_REGEX, bindData) + ); + + if (searchResult == null){ + return null; + } + + //搜索到的对象一定要符合给定的clazz + if (clazz.isAssignableFrom(searchResult.getClass())) { + return (T) searchResult; + }else{ + String errMsg = StrUtil.format("{} cannot convert to {}", searchResult.getClass().getName(), clazz.getName()); + throw new ObjectConvertException(errMsg); + } + }else{ + if (clazz.equals(String.class) || clazz.equals(Object.class)) { + return (T) bindData; + } + return JsonUtil.parseObject(bindData, clazz); } - return JsonUtil.parseObject(bindData, clazz); } public List getBindDataList(Class clazz) { @@ -514,4 +539,10 @@ public abstract class NodeComponent{ Class originalClass = LiteFlowProxyUtil.getUserClass(this.getClass()); return originalClass.getName(); } + + public static void main(String[] args) { + + boolean flag = ReUtil.isMatch(ChainConstant.CONTEXT_SEARCH_REGEX, "${user.name}"); + System.out.println(ReUtil.getGroup1(ChainConstant.CONTEXT_SEARCH_REGEX, "${user.name}")); + } } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/proxy/DeclComponentProxy.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/proxy/DeclComponentProxy.java index 713c84700..905d89847 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/proxy/DeclComponentProxy.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/proxy/DeclComponentProxy.java @@ -20,6 +20,7 @@ import com.yomahub.liteflow.flow.element.Node; import com.yomahub.liteflow.log.LFLog; import com.yomahub.liteflow.log.LFLoggerManager; import com.yomahub.liteflow.slot.DataBus; +import com.yomahub.liteflow.util.LiteflowContextRegexMatcher; import com.yomahub.liteflow.util.SerialsUtil; import net.bytebuddy.ByteBuddy; import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; @@ -157,8 +158,6 @@ public class DeclComponentProxy { } - private final ExpressRunner expressRunner = new ExpressRunner(); - private Object[] loadMethodParameter(Object proxy, MethodWrapBean methodWrapBean, Object[] args){ NodeComponent thisNodeComponent = (NodeComponent) proxy; @@ -181,38 +180,9 @@ public class DeclComponentProxy { return null; } - // 把上下文数据转换成map形式的,key为别名,value为上下文 - Map contextMap = DataBus.getSlot(thisNodeComponent.getSlotIndex()).getContextBeanList().stream().collect( - Collectors.toMap(tuple -> tuple.get(0), tuple -> tuple.get(1)) - ); - - List errorList = new ArrayList<>(); - - Object result = null; - // 根据表达式去上下文里搜索相匹配的数据 - for(Map.Entry entry : contextMap.entrySet()){ - try{ - InstructionSet instructionSet = expressRunner.getInstructionSetFromLocalCache(entry.getKey() + "." + parameterWrapBean.getFact().value()); - DefaultContext context = new DefaultContext<>(); - context.put(entry.getKey(), entry.getValue()); - result = expressRunner.execute(instructionSet, context, errorList, false, false); - if (result != null){ - break; - } - }catch (Exception ignore){} - } - - if (result == null){ - try{ - // 如果没有搜到,那么尝试推断表达式是指定的上下文,按照指定上下文的方式去再获取 - InstructionSet instructionSet = expressRunner.getInstructionSetFromLocalCache("contextMap." + parameterWrapBean.getFact().value()); - DefaultContext context = new DefaultContext<>(); - context.put("contextMap", contextMap); - result = expressRunner.execute(instructionSet, context, errorList, false, false); - }catch (Exception ignore){} - } - - return result; + return LiteflowContextRegexMatcher.searchContext( + DataBus.getSlot(thisNodeComponent.getSlotIndex()).getContextBeanList(), + parameterWrapBean.getFact().value()); }).toArray(); } } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/exception/ObjectConvertException.java b/liteflow-core/src/main/java/com/yomahub/liteflow/exception/ObjectConvertException.java new file mode 100644 index 000000000..5ea45f369 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/exception/ObjectConvertException.java @@ -0,0 +1,29 @@ +package com.yomahub.liteflow.exception; + +/** + * 对象转型异常 + * + * @author Bryan.Zhang + * @since 2.13.0 + */ +public class ObjectConvertException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + /** 异常信息 */ + private String message; + + public ObjectConvertException(String message) { + this.message = message; + } + + @Override + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + +} 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 348c3bba9..95f0f055f 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 @@ -154,6 +154,7 @@ public class LiteflowMetaOperator { /** * 通过chainId,nodeId,index去获取具体的Node节点 + * 只有打开liteflow.enable-node-instance-id=true才会正常调用这个 * @param chainId chain的Id * @param nodeId 节点的Id * @param index 节点的序号下标,从0开始 diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/util/LiteflowContextRegexMatcher.java b/liteflow-core/src/main/java/com/yomahub/liteflow/util/LiteflowContextRegexMatcher.java new file mode 100644 index 000000000..61b8e83db --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/util/LiteflowContextRegexMatcher.java @@ -0,0 +1,57 @@ +package com.yomahub.liteflow.util; + +import cn.hutool.core.lang.Tuple; +import com.ql.util.express.DefaultContext; +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.InstructionSet; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * LiteFlow上下文正则表达式匹配器 + * 用来根据正则表达式去寻找上下文中符合的对象 + * @author Bryan.Zhang + * @since 2.13.0 + */ +public class LiteflowContextRegexMatcher { + + private static final ExpressRunner expressRunner = new ExpressRunner(); + + public static Object searchContext(List contextList, String regPattern){ + // 把上下文数据转换成map形式的,key为别名,value为上下文 + Map contextMap = contextList.stream().collect( + Collectors.toMap(tuple -> tuple.get(0), tuple -> tuple.get(1)) + ); + + List errorList = new ArrayList<>(); + + Object result = null; + // 根据表达式去上下文里搜索相匹配的数据 + for(Map.Entry entry : contextMap.entrySet()){ + try{ + InstructionSet instructionSet = expressRunner.getInstructionSetFromLocalCache(entry.getKey() + "." + regPattern); + DefaultContext context = new DefaultContext<>(); + context.put(entry.getKey(), entry.getValue()); + result = expressRunner.execute(instructionSet, context, errorList, false, false); + if (result != null){ + break; + } + }catch (Exception ignore){} + } + + if (result == null){ + try{ + // 如果没有搜到,那么尝试推断表达式是指定的上下文,按照指定上下文的方式去再获取 + InstructionSet instructionSet = expressRunner.getInstructionSetFromLocalCache("contextMap." + regPattern); + DefaultContext context = new DefaultContext<>(); + context.put("contextMap", contextMap); + result = expressRunner.execute(instructionSet, context, errorList, false, false); + }catch (Exception ignore){} + } + + return result; + } +} diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CatchELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CatchELWrapper.java index 831af267c..d02a555d5 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CatchELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CatchELWrapper.java @@ -1,5 +1,7 @@ package com.yomahub.liteflow.builder.el; +import java.util.Map; + /** * 捕获异常表达式 * Catch(a).do(b) @@ -35,6 +37,30 @@ public class CatchELWrapper extends ELWrapper { return this; } + @Override + public CatchELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public CatchELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public CatchELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public CatchELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public CatchELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CommonNodeELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CommonNodeELWrapper.java index 57c83ca54..325f7d998 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CommonNodeELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/CommonNodeELWrapper.java @@ -58,22 +58,25 @@ public class CommonNodeELWrapper extends ELWrapper { @Override public CommonNodeELWrapper data(String dataName, Object object) { - setData("'" + JsonUtil.toJsonString(object) + "'"); - setDataName(dataName); + super.data(dataName, object); return this; } @Override public CommonNodeELWrapper data(String dataName, String jsonString) { - setData("'" + jsonString + "'"); - setDataName(dataName); + super.data(dataName, jsonString); return this; } @Override public CommonNodeELWrapper data(String dataName, Map jsonMap) { - setData("'" + JsonUtil.toJsonString(jsonMap) + "'"); - setDataName(dataName); + super.data(dataName, jsonMap); + return this; + } + + @Override + public ELWrapper bind(String key, String value) { + super.bind(key, value); return this; } @@ -102,28 +105,4 @@ public class CommonNodeELWrapper extends ELWrapper { processWrapperProperty(sb, paramContext); return sb.toString(); } - - /** - * Node的公共属性不包括id,对父类方法重载。 - * - * @param elContext EL 上下文 - * @param paramContext 参数上下文 - */ - @Override - protected void processWrapperProperty(StringBuilder elContext, StringBuilder paramContext){ - if(this.getTag() != null){ - elContext.append(StrUtil.format(".tag(\"{}\")", this.getTag())); - } - if(this.getData() != null){ - elContext.append(StrUtil.format(".data({})", this.getDataName())); - paramContext.append(StrUtil.format("{} = {}", this.getDataName(), this.getData())).append(";\n"); - } - if(this.getMaxWaitSeconds() != null){ - elContext.append(StrUtil.format(".maxWaitSeconds({})", String.valueOf(this.getMaxWaitSeconds()))); - } - if (this.getRetry() != null){ - elContext.append(StrUtil.format(".retry({})", this.getRetry().toString())); - } - } - } diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELBus.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELBus.java index 374d445a2..6514996cc 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELBus.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELBus.java @@ -126,7 +126,7 @@ public class ELBus { * @param nodeId 节点id * @return {@link CommonNodeELWrapper} */ - public static CommonNodeELWrapper commonNode(String nodeId){ + public static CommonNodeELWrapper element(String nodeId){ return new CommonNodeELWrapper(nodeId); } diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELWrapper.java index d053e4e08..d141855de 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ELWrapper.java @@ -1,13 +1,12 @@ package com.yomahub.liteflow.builder.el; +import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.builder.el.vo.RetryELVo; import com.yomahub.liteflow.util.JsonUtil; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.function.Consumer; /** * ELWrapper是所有组件的抽象父类 @@ -25,6 +24,7 @@ public abstract class ELWrapper { private String id; private String dataName; private String data; + private final Map bindData = new HashMap<>(); private Integer maxWaitSeconds; private RetryELVo retry; @@ -84,6 +84,18 @@ public abstract class ELWrapper { return this.dataName; } + protected String getBindData(String key) { + return bindData.get(key); + } + + protected void putBindData(String key, String value) { + this.bindData.put(key, value); + } + + protected Map getBindData() { + return bindData; + } + protected void setMaxWaitSeconds(Integer maxWaitSeconds){ this.maxWaitSeconds = maxWaitSeconds; } @@ -161,6 +173,11 @@ public abstract class ELWrapper { return this; } + protected ELWrapper bind(String key, String value){ + putBindData(key, value); + return this; + } + protected ELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); @@ -227,6 +244,13 @@ public abstract class ELWrapper { if(this.getTag() != null){ elContext.append(StrUtil.format(".tag(\"{}\")", this.getTag())); } + if(this.getData() != null){ + elContext.append(StrUtil.format(".data({})", this.getDataName())); + paramContext.append(StrUtil.format("{} = {}", this.getDataName(), this.getData())).append(";\n"); + } + if(MapUtil.isNotEmpty(this.getBindData())){ + this.getBindData().forEach((key, value) -> elContext.append(StrUtil.format(".bind(\"{}\", \"{}\")", key, value))); + } if(this.getMaxWaitSeconds() != null){ elContext.append(StrUtil.format(".maxWaitSeconds({})", String.valueOf(this.getMaxWaitSeconds()))); } diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/FinallyELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/FinallyELWrapper.java index 3bbe2ecc9..a8dbb4dbc 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/FinallyELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/FinallyELWrapper.java @@ -2,6 +2,8 @@ package com.yomahub.liteflow.builder.el; import cn.hutool.core.util.StrUtil; +import java.util.Map; + /** * 后置表达式 * 只能在THEN组件中调用 @@ -28,6 +30,30 @@ public class FinallyELWrapper extends ELWrapper { return this; } + @Override + public FinallyELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public FinallyELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public FinallyELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public FinallyELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + /** * 后置组件无法设置maxWaitSeconds属性,重载用protected修饰 * diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IfELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IfELWrapper.java index 1c1ebbf01..ecd95e2d6 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IfELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/IfELWrapper.java @@ -2,6 +2,7 @@ package com.yomahub.liteflow.builder.el; import cn.hutool.core.util.ObjectUtil; +import java.util.Map; import java.util.Objects; /** @@ -211,6 +212,30 @@ public class IfELWrapper extends ELWrapper { return this; } + @Override + public IfELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public IfELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public IfELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public IfELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public IfELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/LoopELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/LoopELWrapper.java index 1413fd1a8..b9cc39115 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/LoopELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/LoopELWrapper.java @@ -1,5 +1,7 @@ package com.yomahub.liteflow.builder.el; +import java.util.Map; + /** * FOR、WHILE、ITERATOR循环表达式的公共抽象父类 * @@ -68,6 +70,30 @@ public class LoopELWrapper extends ELWrapper { return this; } + @Override + public LoopELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public LoopELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public LoopELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public LoopELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public LoopELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ParELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ParELWrapper.java index 27b66458d..5cb3dd2ae 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ParELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ParELWrapper.java @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; /** * 并行组件 @@ -70,6 +71,30 @@ public class ParELWrapper extends ELWrapper { return this; } + @Override + public ParELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public ParELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public ParELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public ParELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public ParELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/PreELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/PreELWrapper.java index b591ae286..03da3cf29 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/PreELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/PreELWrapper.java @@ -30,6 +30,30 @@ public class PreELWrapper extends ELWrapper { return this; } + @Override + public PreELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public PreELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public PreELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public PreELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public PreELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SerELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SerELWrapper.java index 87c990d3a..a16de2a2c 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SerELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SerELWrapper.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 串行组件 @@ -74,6 +75,30 @@ public class SerELWrapper extends ELWrapper { return this; } + @Override + public SerELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public SerELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public SerELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public SerELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public SerELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SwitchELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SwitchELWrapper.java index cbed3f486..69a02e79b 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SwitchELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/SwitchELWrapper.java @@ -2,6 +2,8 @@ package com.yomahub.liteflow.builder.el; import cn.hutool.core.util.StrUtil; +import java.util.Map; + /** * 选择组件 * SWITCH(a).TO(b,c,d...).default(x) @@ -47,6 +49,30 @@ public class SwitchELWrapper extends ELWrapper { return this; } + @Override + public SwitchELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public SwitchELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public SwitchELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public SwitchELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public SwitchELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ThenELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ThenELWrapper.java index fcf2fc288..ee834b828 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ThenELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/ThenELWrapper.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * 串行组件 @@ -74,6 +75,30 @@ public class ThenELWrapper extends ELWrapper { return this; } + @Override + public ThenELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public ThenELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public ThenELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public ThenELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public ThenELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhenELWrapper.java b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhenELWrapper.java index d09a0bd05..34384e087 100644 --- a/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhenELWrapper.java +++ b/liteflow-el-builder/src/main/java/com/yomahub/liteflow/builder/el/WhenELWrapper.java @@ -68,6 +68,30 @@ public class WhenELWrapper extends ELWrapper { return this; } + @Override + public WhenELWrapper data(String dataName, Object object) { + super.data(dataName, object); + return this; + } + + @Override + public WhenELWrapper data(String dataName, String jsonString) { + super.data(dataName, jsonString); + return this; + } + + @Override + public WhenELWrapper data(String dataName, Map jsonMap) { + super.data(dataName, jsonMap); + return this; + } + + @Override + public WhenELWrapper bind(String key, String value) { + super.bind(key, value); + return this; + } + @Override public WhenELWrapper maxWaitSeconds(Integer maxWaitSeconds){ setMaxWaitSeconds(maxWaitSeconds); diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/datasource/impl/BaoMiDouDynamicDsConn.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/datasource/impl/BaoMiDouDynamicDsConn.java index 2ecd298a3..b547bc7f8 100644 --- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/datasource/impl/BaoMiDouDynamicDsConn.java +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/datasource/impl/BaoMiDouDynamicDsConn.java @@ -24,11 +24,7 @@ import java.util.Optional; public class BaoMiDouDynamicDsConn implements LiteFlowDataSourceConnect { @Override public boolean filter(SQLParserVO config) { - // 是否配置苞米豆动态数据源配置 - boolean configFlag = Optional.ofNullable(config.getBaomidou()) - .map(SQLParserVO.DataSourceConfig::getDataSourceName) - .isPresent(); - if (!configFlag) { + if (StrUtil.isBlank(config.getBaomidouDataSource())) { return false; } boolean classLoadFlag = ClassLoaderUtil.isPresent(Constant.LOAD_CLASS_NAME); @@ -40,7 +36,7 @@ public class BaoMiDouDynamicDsConn implements LiteFlowDataSourceConnect { @Override public Connection getConn(SQLParserVO config) throws Exception { - String dataSourceName = config.getBaomidou().getDataSourceName(); + String dataSourceName = config.getBaomidouDataSource(); ContextAware contextAware = ContextAwareHolder.loadContextAware(); DynamicRoutingDataSource dynamicRoutingDataSource = contextAware.getBean(DynamicRoutingDataSource.class); Map dataSources = dynamicRoutingDataSource.getDataSources(); diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/datasource/impl/ShardingJdbcDsConn.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/datasource/impl/ShardingJdbcDsConn.java index 2c31e1bf6..468ce4d3c 100644 --- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/datasource/impl/ShardingJdbcDsConn.java +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/datasource/impl/ShardingJdbcDsConn.java @@ -1,6 +1,7 @@ package com.yomahub.liteflow.parser.sql.datasource.impl; import cn.hutool.core.util.ClassLoaderUtil; +import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.exception.MissMavenDependencyException; import com.yomahub.liteflow.parser.sql.datasource.LiteFlowDataSourceConnect; import com.yomahub.liteflow.parser.sql.vo.SQLParserVO; @@ -21,12 +22,7 @@ public class ShardingJdbcDsConn implements LiteFlowDataSourceConnect { @Override public boolean filter(SQLParserVO config) { - // 是否配置 sharding jdbc 动态数据源配置 - boolean configFlag = Optional.ofNullable(config.getShardingjdbc()) - .map(SQLParserVO.DataSourceConfig::getDataSourceName) - .isPresent(); - - if (!configFlag) { + if (StrUtil.isBlank(config.getShardingJdbcDataSource())) { return false; } boolean classLoadFlag = ClassLoaderUtil.isPresent(Constant.LOAD_CLASS_NAME); diff --git a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java index 67257084c..e8087742e 100644 --- a/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java +++ b/liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java @@ -169,12 +169,12 @@ public class SQLParserVO { /** * 苞米豆动态数据源配置 */ - private DataSourceConfig baomidou; + private String baomidouDataSource; /** * sharding jdbc 动态数据源配置 */ - private DataSourceConfig shardingjdbc; + private String shardingJdbcDataSource; public String getUrl() { return url; @@ -451,31 +451,19 @@ public class SQLParserVO { this.nodeInstanceIdMapJsonField = nodeInstanceIdMapJsonField; } - public DataSourceConfig getBaomidou() { - return baomidou; + public String getBaomidouDataSource() { + return baomidouDataSource; } - public void setBaomidou(DataSourceConfig baomidou) { - this.baomidou = baomidou; + public void setBaomidouDataSource(String baomidouDataSource) { + this.baomidouDataSource = baomidouDataSource; } - public DataSourceConfig getShardingjdbc() { - return shardingjdbc; + public String getShardingJdbcDataSource() { + return shardingJdbcDataSource; } - public void setShardingjdbc(DataSourceConfig shardingjdbc) { - this.shardingjdbc = shardingjdbc; - } - - public static class DataSourceConfig { - private String dataSourceName; - - public String getDataSourceName() { - return dataSourceName; - } - - public void setDataSourceName(String dataSourceName) { - this.dataSourceName = dataSourceName; - } + public void setShardingJdbcDataSource(String shardingJdbcDataSource) { + this.shardingJdbcDataSource = shardingJdbcDataSource; } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/BindELBuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/BindELBuilderTest.java new file mode 100644 index 000000000..c7b88d4a7 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/BindELBuilderTest.java @@ -0,0 +1,48 @@ +package com.yomahub.liteflow.test.builder; + +import com.yomahub.liteflow.builder.el.ELBus; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.HashMap; +import java.util.Map; + +@SpringBootTest(classes = BindELBuilderTest.class) +@EnableAutoConfiguration +public class BindELBuilderTest extends BaseTest { + + @Test + public void testBind1(){ + String actualEl = ELBus.then("a", ELBus.element("b").bind("k1", "v1")).toEL(); + String expected = "THEN(a,b.bind(\"k1\", \"v1\"));"; + System.out.println(actualEl); + Assertions.assertEquals(expected, actualEl); + } + + @Test + public void testBind2(){ + String actualEl = ELBus.then("a", "b").bind("k1","v1").toEL(); + String expected = "THEN(a,b).bind(\"k1\", \"v1\");"; + System.out.println(actualEl); + Assertions.assertEquals(expected, actualEl); + } + + @Test + public void testBind3(){ + String actualEl = ELBus.then("a", ELBus.node("b").bind("k1", "v1")).toEL(); + String expected = "THEN(a,node(\"b\").bind(\"k1\", \"v1\"));"; + System.out.println(actualEl); + Assertions.assertEquals(expected, actualEl); + } + + @Test + public void testBind4(){ + String actualEl = ELBus.then("a", ELBus.when("b","c").bind("k1", "v1")).bind("k2","v2").toEL(); + String expected = "THEN(a,WHEN(b,c).bind(\"k1\", \"v1\")).bind(\"k2\", \"v2\");"; + System.out.println(actualEl); + Assertions.assertEquals(expected, actualEl); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/MaxWaitSecondBuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/MaxWaitSecondBuilderTest.java index bb48c2db1..b3ea51823 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/MaxWaitSecondBuilderTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/MaxWaitSecondBuilderTest.java @@ -14,8 +14,8 @@ public class MaxWaitSecondBuilderTest extends BaseTest { // node层面 @Test public void testMaxWaitSecond1(){ - CommonNodeELWrapper nodeA = ELBus.commonNode("a").maxWaitSeconds(4); - CommonNodeELWrapper nodeB = ELBus.commonNode("b").maxWaitSeconds(4); + CommonNodeELWrapper nodeA = ELBus.element("a").maxWaitSeconds(4); + CommonNodeELWrapper nodeB = ELBus.element("b").maxWaitSeconds(4); WhenELWrapper whenELWrapper = ELBus.when(nodeA, nodeB); Assertions.assertEquals("WHEN(a.maxWaitSeconds(4),b.maxWaitSeconds(4));", whenELWrapper.toEL()); } diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/RetryBuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/RetryBuilderTest.java index 21ce4187e..2635745d3 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/RetryBuilderTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/RetryBuilderTest.java @@ -16,8 +16,8 @@ public class RetryBuilderTest extends BaseTest { // node上进行retry @Test public void testRetry1(){ - CommonNodeELWrapper nodeA = ELBus.commonNode("a").retry(2); - CommonNodeELWrapper nodeB = ELBus.commonNode("b").retry(3); + CommonNodeELWrapper nodeA = ELBus.element("a").retry(2); + CommonNodeELWrapper nodeB = ELBus.element("b").retry(3); WhenELWrapper whenELWrapper = ELBus.when(nodeA, nodeB); Assertions.assertEquals("WHEN(a.retry(2),b.retry(3));", whenELWrapper.toEL()); } @@ -25,8 +25,8 @@ public class RetryBuilderTest extends BaseTest { // node上进行retry,带exception @Test public void testRetry2(){ - CommonNodeELWrapper nodeA = ELBus.commonNode("a").retry(2, "java.lang.NullPointerException"); - CommonNodeELWrapper nodeB = ELBus.commonNode("b").retry(3, "java.lang.NullPointerException", "java.lang.ArrayIndexOutOfBoundsException"); + CommonNodeELWrapper nodeA = ELBus.element("a").retry(2, "java.lang.NullPointerException"); + CommonNodeELWrapper nodeB = ELBus.element("b").retry(3, "java.lang.NullPointerException", "java.lang.ArrayIndexOutOfBoundsException"); WhenELWrapper whenELWrapper = ELBus.when(nodeA, nodeB); Assertions.assertEquals("WHEN(a.retry(2,\"java.lang.NullPointerException\"),b.retry(3,\"java.lang.NullPointerException\",\"java.lang.ArrayIndexOutOfBoundsException\"));", whenELWrapper.toEL()); diff --git a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/ThenELBuilderTest.java b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/ThenELBuilderTest.java index ca1c6bced..a0658f2f7 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/ThenELBuilderTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/builder/ThenELBuilderTest.java @@ -28,7 +28,7 @@ public class ThenELBuilderTest extends BaseTest { name2Value.put("name", "zhangsan"); name2Value.put("age", 18); String expected = "nodeData = '{\"name\":\"zhangsan\",\"age\":18}';\nTHEN(\n\ta.tag(\"tagA\").data(nodeData).maxWaitSeconds(10).retry(2),\n\tnode(\"b\")\n);"; - String actualEl = ELBus.then(ELBus.commonNode("a").data("nodeData", name2Value).tag("tagA").maxWaitSeconds(10).retry(2), ELBus.node("b")).toEL(true); + String actualEl = ELBus.then(ELBus.element("a").data("nodeData", name2Value).tag("tagA").maxWaitSeconds(10).retry(2), ELBus.node("b")).toEL(true); System.out.println(actualEl); Assertions.assertEquals(expected, actualEl); } diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/config/LiteflowConfigTest1.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/config/LiteflowConfigTest1.java index 2b2b2a48d..1c0e977b3 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/config/LiteflowConfigTest1.java +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/config/LiteflowConfigTest1.java @@ -42,7 +42,7 @@ public class LiteflowConfigTest1 extends BaseTest { Assertions.assertEquals(300000L, config.getDelay().longValue()); Assertions.assertEquals(300000L, config.getPeriod().longValue()); Assertions.assertFalse(config.getEnableLog()); - Assertions.assertEquals(16, config.getGlobalThreadPoolSize().longValue()); + Assertions.assertEquals(64, config.getGlobalThreadPoolSize().longValue()); Assertions.assertEquals(512, config.getGlobalThreadPoolQueueSize().longValue()); Assertions.assertEquals(ParseModeEnum.PARSE_ALL_ON_START, config.getParseMode()); } diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/pom.xml b/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/pom.xml index 4636f0fd2..01239774a 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/pom.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/pom.xml @@ -24,6 +24,12 @@ ${revision} test + + com.yomahub + liteflow-script-javax + ${revision} + test + org.springframework.boot spring-boot-starter-test diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/resources/common/flow.xml b/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/resources/common/flow.xml index fec11713d..423034994 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/resources/common/flow.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/resources/common/flow.xml @@ -12,16 +12,24 @@ import com.yomahub.liteflow.test.script.javax.common.cmp.Person; import com.yomahub.liteflow.test.script.javax.common.cmp.TestDomain; import com.yomahub.liteflow.script.ScriptExecuteWrap; + import org.slf4j.Logger; + import org.slf4j.LoggerFactory; + import java.util.List; import java.util.function.ToIntFunction; public class Demo implements CommonScriptBody { + + private Logger log = LoggerFactory.getLogger(this.getClass()); + public Void body(ScriptExecuteWrap wrap) { int v1 = 2; int v2 = 3; DefaultContext ctx = wrap.getCmp().getFirstContextBean(); ctx.setData("s1", v1 * v2); + log.info("---hello---"); + TestDomain domain = ContextAwareHolder.loadContextAware().getBean(TestDomain.class); System.out.println(domain); String str = domain.sayHello("jack"); diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/BindDataSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/BindDataSpringbootTest1.java similarity index 91% rename from liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/BindDataSpringbootTest.java rename to liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/BindDataSpringbootTest1.java index fb22daec7..106da8382 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/BindDataSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/BindDataSpringbootTest1.java @@ -18,11 +18,11 @@ import javax.annotation.Resource; * * @author Bryan.Zhang */ -@TestPropertySource(value = "classpath:/bindData/application.properties") -@SpringBootTest(classes = BindDataSpringbootTest.class) +@TestPropertySource(value = "classpath:/bindData/application1.properties") +@SpringBootTest(classes = BindDataSpringbootTest1.class) @EnableAutoConfiguration -@ComponentScan({ "com.yomahub.liteflow.test.bindData.cmp" }) -public class BindDataSpringbootTest extends BaseTest { +@ComponentScan({ "com.yomahub.liteflow.test.bindData.cmp1" }) +public class BindDataSpringbootTest1 extends BaseTest { @Resource private FlowExecutor flowExecutor; diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/BindDataSpringbootTest2.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/BindDataSpringbootTest2.java new file mode 100644 index 000000000..0533b4cbf --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/BindDataSpringbootTest2.java @@ -0,0 +1,100 @@ +package com.yomahub.liteflow.test.bindData; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.exception.ObjectConvertException; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.slot.DefaultContext; +import com.yomahub.liteflow.test.BaseTest; +import com.yomahub.liteflow.test.bindData.context.Member; +import com.yomahub.liteflow.test.bindData.context.MemberContext; +import com.yomahub.liteflow.test.bindData.context.OrderContext; +import com.yomahub.liteflow.test.bindData.context.UserInfoContext; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.TestPropertySource; + +import javax.annotation.Resource; + +/** + * springboot环境EL常规的例子测试 + * + * @author Bryan.Zhang + */ +@TestPropertySource(value = "classpath:/bindData/application2.properties") +@SpringBootTest(classes = BindDataSpringbootTest2.class) +@EnableAutoConfiguration +@ComponentScan({"com.yomahub.liteflow.test.bindData.cmp2"}) +public class BindDataSpringbootTest2 extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + // 测试动态bind,最简单的情况,2个上下文中搜索 + @Test + public void testBindDynamic1() throws Exception { + MemberContext memberContext = new MemberContext(); + memberContext.setId(31); + memberContext.setName("jack"); + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg", memberContext, new DefaultContext()); + Assertions.assertTrue(response.isSuccess()); + DefaultContext context = response.getContextBean(DefaultContext.class); + Assertions.assertEquals("jack", context.getData("a1")); + } + + // 测试动态bind,多级取数据,2个上下文中搜索 + @Test + public void testBindDynamic2() throws Exception { + OrderContext orderContext = new OrderContext(); + orderContext.setOrderCode("SO1234"); + orderContext.setMember(new Member("M0001","jack")); + LiteflowResponse response = flowExecutor.execute2Resp("chain2", "arg", orderContext, new DefaultContext()); + Assertions.assertTrue(response.isSuccess()); + DefaultContext context = response.getContextBean(DefaultContext.class); + Assertions.assertEquals("M0001", context.getData("a2")); + } + + // 测试动态bind,多个上下文,拥有相同的变量,指定上下文 + @Test + public void testBindDynamic3() throws Exception { + OrderContext orderContext = new OrderContext(); + orderContext.setId(1000); + orderContext.setOrderCode("SO1234"); + orderContext.setMember(new Member("M0001","jack")); + + MemberContext memberContext = new MemberContext(); + memberContext.setId(2000); + memberContext.setName("jack"); + + LiteflowResponse response = flowExecutor.execute2Resp("chain3", "arg", orderContext, memberContext, new DefaultContext()); + Assertions.assertTrue(response.isSuccess()); + DefaultContext context = response.getContextBean(DefaultContext.class); + Assertions.assertEquals(2000, (Integer) context.getData("a3")); + } + + // 测试动态bind,多个上下文,结合@ContextBean测试 + @Test + public void testBindDynamic4() throws Exception { + UserInfoContext userInfoContext = new UserInfoContext(); + userInfoContext.setInfo("test info"); + + LiteflowResponse response = flowExecutor.execute2Resp("chain4", "arg", userInfoContext, new DefaultContext()); + Assertions.assertTrue(response.isSuccess()); + DefaultContext context = response.getContextBean(DefaultContext.class); + Assertions.assertEquals("test info", context.getData("a4")); + } + + // 测试动态bind,getBindData中的class给错,报错 + @Test + public void testBindDynamic5() throws Exception { + MemberContext memberContext = new MemberContext(); + memberContext.setId(31); + memberContext.setName("jack"); + LiteflowResponse response = flowExecutor.execute2Resp("chain5", "arg", memberContext, new DefaultContext()); + Assertions.assertFalse(response.isSuccess()); + Assertions.assertEquals(ObjectConvertException.class, response.getCause().getClass()); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/ACmp.java similarity index 92% rename from liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/ACmp.java rename to liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/ACmp.java index 57e07216f..7730a1cd8 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/ACmp.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/ACmp.java @@ -5,7 +5,7 @@ * @email weenyc31@163.com * @Date 2020/4/1 */ -package com.yomahub.liteflow.test.bindData.cmp; +package com.yomahub.liteflow.test.bindData.cmp1; import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.core.NodeComponent; diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/BCmp.java similarity index 92% rename from liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/BCmp.java rename to liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/BCmp.java index a67876e1c..689c6f4c2 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/BCmp.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/BCmp.java @@ -5,7 +5,7 @@ * @email weenyc31@163.com * @Date 2020/4/1 */ -package com.yomahub.liteflow.test.bindData.cmp; +package com.yomahub.liteflow.test.bindData.cmp1; import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.core.NodeComponent; diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/CCmp.java similarity index 92% rename from liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/CCmp.java rename to liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/CCmp.java index 8488ecad2..7223469ab 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/CCmp.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/CCmp.java @@ -5,7 +5,7 @@ * @email weenyc31@163.com * @Date 2020/4/1 */ -package com.yomahub.liteflow.test.bindData.cmp; +package com.yomahub.liteflow.test.bindData.cmp1; import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.core.NodeComponent; diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/DCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/DCmp.java similarity index 93% rename from liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/DCmp.java rename to liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/DCmp.java index b169cea40..ce5ec2ede 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/DCmp.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/DCmp.java @@ -5,7 +5,7 @@ * @email weenyc31@163.com * @Date 2020/4/1 */ -package com.yomahub.liteflow.test.bindData.cmp; +package com.yomahub.liteflow.test.bindData.cmp1; import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.core.NodeComponent; diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/XCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/XCmp.java similarity index 91% rename from liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/XCmp.java rename to liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/XCmp.java index 4398afc14..43b960907 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/XCmp.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/XCmp.java @@ -1,4 +1,4 @@ -package com.yomahub.liteflow.test.bindData.cmp; +package com.yomahub.liteflow.test.bindData.cmp1; import com.yomahub.liteflow.core.NodeBooleanComponent; import com.yomahub.liteflow.slot.DefaultContext; diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/YCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/YCmp.java similarity index 90% rename from liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/YCmp.java rename to liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/YCmp.java index 6d0ba089f..9f050b019 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp/YCmp.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp1/YCmp.java @@ -1,4 +1,4 @@ -package com.yomahub.liteflow.test.bindData.cmp; +package com.yomahub.liteflow.test.bindData.cmp1; import com.yomahub.liteflow.core.NodeSwitchComponent; import com.yomahub.liteflow.slot.DefaultContext; diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A1Cmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A1Cmp.java new file mode 100644 index 000000000..d91ea1c54 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A1Cmp.java @@ -0,0 +1,27 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.bindData.cmp2; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.slot.DefaultContext; +import com.yomahub.liteflow.test.bindData.context.Member; +import org.springframework.stereotype.Component; + +@Component("a1") +public class A1Cmp extends NodeComponent { + + @Override + public void process() { + DefaultContext defaultContext = this.getContextBean(DefaultContext.class); + String bindValue = this.getBindData("k1", String.class); + if (bindValue != null) { + defaultContext.setData(this.getNodeId(), bindValue); + } + + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A2Cmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A2Cmp.java new file mode 100644 index 000000000..481e4af55 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A2Cmp.java @@ -0,0 +1,28 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.bindData.cmp2; + +import cn.hutool.core.util.StrUtil; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.slot.DefaultContext; +import com.yomahub.liteflow.test.bindData.context.Member; +import org.springframework.stereotype.Component; + +@Component("a2") +public class A2Cmp extends NodeComponent { + + @Override + public void process() { + DefaultContext context = this.getContextBean(DefaultContext.class); + String bindValue = this.getBindData("k1", String.class); + if (bindValue != null) { + context.setData(this.getNodeId(), bindValue); + } + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A3Cmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A3Cmp.java new file mode 100644 index 000000000..a3bc634aa --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A3Cmp.java @@ -0,0 +1,26 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.bindData.cmp2; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.slot.DefaultContext; +import org.springframework.stereotype.Component; + +@Component("a3") +public class A3Cmp extends NodeComponent { + + @Override + public void process() { + DefaultContext context = this.getContextBean(DefaultContext.class); + Integer bindValue = this.getBindData("k1", Integer.class); + if (bindValue != null) { + context.setData(this.getNodeId(), bindValue); + } + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A4Cmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A4Cmp.java new file mode 100644 index 000000000..aeaf8383f --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A4Cmp.java @@ -0,0 +1,26 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.bindData.cmp2; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.slot.DefaultContext; +import org.springframework.stereotype.Component; + +@Component("a4") +public class A4Cmp extends NodeComponent { + + @Override + public void process() { + DefaultContext context = this.getContextBean(DefaultContext.class); + String bindValue = this.getBindData("k1", String.class); + if (bindValue != null) { + context.setData(this.getNodeId(), bindValue); + } + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A5Cmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A5Cmp.java new file mode 100644 index 000000000..a651d7578 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/cmp2/A5Cmp.java @@ -0,0 +1,26 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.bindData.cmp2; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.slot.DefaultContext; +import org.springframework.stereotype.Component; + +@Component("a5") +public class A5Cmp extends NodeComponent { + + @Override + public void process() { + DefaultContext context = this.getContextBean(DefaultContext.class); + String bindValue = this.getBindData("k1", String.class); + if (bindValue != null) { + context.setData(this.getNodeId(), bindValue); + } + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/context/Member.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/context/Member.java new file mode 100644 index 000000000..c1b2fe026 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/context/Member.java @@ -0,0 +1,28 @@ +package com.yomahub.liteflow.test.bindData.context; + +public class Member { + private String memberCode; + + private String memberName; + + public Member(String memberCode, String memberName) { + this.memberCode = memberCode; + this.memberName = memberName; + } + + public String getMemberCode() { + return memberCode; + } + + public void setMemberCode(String memberCode) { + this.memberCode = memberCode; + } + + public String getMemberName() { + return memberName; + } + + public void setMemberName(String memberName) { + this.memberName = memberName; + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/context/MemberContext.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/context/MemberContext.java new file mode 100644 index 000000000..75b3285ed --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/context/MemberContext.java @@ -0,0 +1,24 @@ +package com.yomahub.liteflow.test.bindData.context; + +public class MemberContext { + + private Integer id; + + private String name; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/context/OrderContext.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/context/OrderContext.java new file mode 100644 index 000000000..967b069c1 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/context/OrderContext.java @@ -0,0 +1,34 @@ +package com.yomahub.liteflow.test.bindData.context; + +public class OrderContext { + + private Integer id; + + private String orderCode; + + private Member member; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getOrderCode() { + return orderCode; + } + + public void setOrderCode(String orderCode) { + this.orderCode = orderCode; + } + + public Member getMember() { + return member; + } + + public void setMember(Member member) { + this.member = member; + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/context/UserInfoContext.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/context/UserInfoContext.java new file mode 100644 index 000000000..22a79fd70 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/bindData/context/UserInfoContext.java @@ -0,0 +1,17 @@ +package com.yomahub.liteflow.test.bindData.context; + +import com.yomahub.liteflow.context.ContextBean; + +@ContextBean("userCx") +public class UserInfoContext { + + private String info; + + public String getInfo() { + return info; + } + + public void setInfo(String info) { + this.info = info; + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/fallback/FallbackELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/fallback/FallbackELSpringbootTest.java index 7020e69dc..86d5b2431 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/fallback/FallbackELSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/fallback/FallbackELSpringbootTest.java @@ -172,7 +172,7 @@ public class FallbackELSpringbootTest extends BaseTest { LiteflowResponse response = flowExecutor.execute2Resp("concurrent2", "arg"); Assertions.assertTrue(response.isSuccess()); String stepStr = response.getExecuteStepStrWithoutTime(); - Assertions.assertTrue("fb_comm_cmp==>fb_bool_cmp".equals(stepStr) || "ifn2==>c".equals(stepStr)); + Assertions.assertTrue("fb_comm_cmp==>fb_bool_cmp".equals(stepStr) || "fb_bool_cmp==>fb_comm_cmp".equals(stepStr) || "ifn2==>c".equals(stepStr)); } @Test diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/application.properties b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/application.properties deleted file mode 100644 index fca905fff..000000000 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/application.properties +++ /dev/null @@ -1 +0,0 @@ -liteflow.rule-source=bindData/flow.el.xml \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/application1.properties b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/application1.properties new file mode 100644 index 000000000..2286d450d --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/application1.properties @@ -0,0 +1 @@ +liteflow.rule-source=bindData/flow1.xml \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/application2.properties b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/application2.properties new file mode 100644 index 000000000..d0fce85e2 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/application2.properties @@ -0,0 +1 @@ +liteflow.rule-source=bindData/flow2.xml \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/flow1.xml similarity index 100% rename from liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/flow.el.xml rename to liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/flow1.xml diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/flow2.xml b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/flow2.xml new file mode 100644 index 000000000..41139afd7 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/bindData/flow2.xml @@ -0,0 +1,23 @@ + + + + + THEN(a1.bind("k1", "${name}")); + + + + THEN(a2.bind("k1", "${member.memberCode}")); + + + + THEN(a3.bind("k1", "${memberContext.id}")); + + + + THEN(a4.bind("k1", "${userCx.info}")); + + + + THEN(a5.bind("k1", "${id}")); + + \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot-dynamic/src/test/resources/application-baomidou-data-source-xml.properties b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot-dynamic/src/test/resources/application-baomidou-data-source-xml.properties index 8387890fd..c5c2bdcdc 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot-dynamic/src/test/resources/application-baomidou-data-source-xml.properties +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot-dynamic/src/test/resources/application-baomidou-data-source-xml.properties @@ -1,6 +1,6 @@ liteflow.rule-source-ext-data={\ "applicationName":"demo",\ - "baomidou":{"dataSourceName":"h2-first"},\ + "baomidouDataSource":"h2-first",\ "chainTableName":"EL_TABLE",\ "chainApplicationNameField":"application_name",\ "chainNameField":"chain_name",\ diff --git a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot-sharding-jdbc/src/test/resources/application-sharding-jdbc-data-source-xml.properties b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot-sharding-jdbc/src/test/resources/application-sharding-jdbc-data-source-xml.properties index cc93b75ff..7894d8e5c 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-sql-springboot-sharding-jdbc/src/test/resources/application-sharding-jdbc-data-source-xml.properties +++ b/liteflow-testcase-el/liteflow-testcase-el-sql-springboot-sharding-jdbc/src/test/resources/application-sharding-jdbc-data-source-xml.properties @@ -1,6 +1,6 @@ liteflow.rule-source-ext-data={\ "applicationName":"demo",\ - "shardingjdbc":{"dataSourceName":"ds_1"},\ + "shardingJdbcDataSource":"ds_1",\ "chainTableName":"EL_TABLE",\ "chainApplicationNameField":"application_name",\ "chainNameField":"chain_name",\ diff --git a/pom.xml b/pom.xml index 2450085fa..2cdd95ecf 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 3.21.0 3.1.12 1.9.23 - 1.3.10 + 1.3.11 4.3.1 4.1.1 2.9.3 diff --git a/static/img/suzhong-banner.jpg b/static/img/suzhong-banner.jpg new file mode 100644 index 000000000..11c7a740a Binary files /dev/null and b/static/img/suzhong-banner.jpg differ