From 4324874cd6dfd2bf6cb2a786deac838a56a86c5d Mon Sep 17 00:00:00 2001 From: mll Date: Fri, 8 Jul 2022 14:18:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=B5=8B=E8=AF=95=E7=94=A8?= =?UTF-8?q?=E4=BE=8B:=E6=A8=A1=E6=8B=9F=E7=9C=9F=E5=AE=9E=E5=9C=BA?= =?UTF-8?q?=E6=99=AF1:=E7=AE=80=E5=8D=95=E8=90=A5=E9=94=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yomahub/liteflow/test/scenes/CmpUtil.java | 23 +++ .../test/scenes/ScensELSpringbootTest1.java | 44 +++++ .../test/scenes/bean/MarketingDO.java | 157 ++++++++++++++++++ .../test/scenes/bean/RequestDataDO.java | 47 ++++++ .../test/scenes/cmp1/ASwitchChooseOneCmp.java | 64 +++++++ .../liteflow/test/scenes/cmp1/BEventCmp.java | 22 +++ .../liteflow/test/scenes/cmp1/BManualCmp.java | 21 +++ .../liteflow/test/scenes/cmp1/BTimingCmp.java | 21 +++ .../liteflow/test/scenes/cmp1/FinallyCmp.java | 20 +++ .../liteflow/test/scenes/enums/DescEnum.java | 11 ++ .../test/scenes/enums/MarketingModeEnum.java | 26 +++ .../test/scenes/enums/MarketingTypeEnum.java | 26 +++ .../resources/scens/application1.properties | 1 + .../src/test/resources/scens/flow1.el.xml | 6 + 14 files changed, 489 insertions(+) create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/CmpUtil.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/ScensELSpringbootTest1.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/bean/MarketingDO.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/bean/RequestDataDO.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/ASwitchChooseOneCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/BEventCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/BManualCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/BTimingCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/FinallyCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/enums/DescEnum.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/enums/MarketingModeEnum.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/enums/MarketingTypeEnum.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/scens/application1.properties create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/scens/flow1.el.xml diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/CmpUtil.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/CmpUtil.java new file mode 100644 index 000000000..c737cf8f8 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/CmpUtil.java @@ -0,0 +1,23 @@ +package com.yomahub.liteflow.test.scenes; + +/** + *

公共方法类

+ *

node Component util

+ */ +public class CmpUtil { + + private static final String SPLIT_STRING = "_"; + + public CmpUtil() {} + + + /** + * 得到:唯一nodeId + * @param mode 模式(枚举) + * @param type 类型(枚举) + * @return String 唯一 node id + * */ + public static String processSwitch(String mode,String type) { + return mode + SPLIT_STRING + type; + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/ScensELSpringbootTest1.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/ScensELSpringbootTest1.java new file mode 100644 index 000000000..ca80bbfef --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/ScensELSpringbootTest1.java @@ -0,0 +1,44 @@ +package com.yomahub.liteflow.test.scenes; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.test.BaseTest; +import com.yomahub.liteflow.test.scenes.bean.RequestDataDO; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +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 org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + +/** + * springboot环境EL复杂例子测试1 + * @author nmnl + */ +@RunWith(SpringRunner.class) +@TestPropertySource(value = "classpath:/scens/application1.properties") +@SpringBootTest(classes = ScensELSpringbootTest1.class) +@EnableAutoConfiguration +@ComponentScan({"com.yomahub.liteflow.test.scenes.cmp1"}) +public class ScensELSpringbootTest1 extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + + // 验证正常finally + /*@Test + public void testScens1_1() throws Exception{ + LocalDateTime x = LocalDateTime.of(LocalDate.now(), LocalTime.of(15,0,0)); + LiteflowResponse response = flowExecutor.execute2Resp("chaintask", RequestDataDO.of(x,"a")); + //Assert.assertTrue(response.isSuccess()); + Assert.assertEquals("ASwitchCmp==>FinallyCmp",response.getExecuteStepStr()); + }*/ +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/bean/MarketingDO.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/bean/MarketingDO.java new file mode 100644 index 000000000..1c8139c71 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/bean/MarketingDO.java @@ -0,0 +1,157 @@ +package com.yomahub.liteflow.test.scenes.bean; + +import java.time.LocalDateTime; + +public class MarketingDO { + + /** id */ + private String id; + + /** 名称 */ + private String name; + + /** 类型(枚举) + * @see com.yomahub.liteflow.test.scenes.enums.MarketingTypeEnum + * */ + private String type; + + /** 模式(枚举) + * @see com.yomahub.liteflow.test.scenes.enums.MarketingModeEnum + * */ + private String mode; + + /** 开始时间 */ + private LocalDateTime startDatetime; + + /** 结束时间 */ + private LocalDateTime endDatetime; + + /** 限制总次数 */ + private Integer limitTotalNum; + + /** 限制每天次数 */ + private Integer limitDayNum; + + /** 参与区域(运营商) + * */ + private String joinInst; + + /** 用户模型json + * */ + private String userModel; + + /** 消息模版json + */ + private String msgTemplate; + + /** 奖励规则json + * */ + private String rewardRule; + + /** 描述 */ + private String remark; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getMode() { + return mode; + } + + public void setMode(String mode) { + this.mode = mode; + } + + public LocalDateTime getStartDatetime() { + return startDatetime; + } + + public void setStartDatetime(LocalDateTime startDatetime) { + this.startDatetime = startDatetime; + } + + public LocalDateTime getEndDatetime() { + return endDatetime; + } + + public void setEndDatetime(LocalDateTime endDatetime) { + this.endDatetime = endDatetime; + } + + public Integer getLimitTotalNum() { + return limitTotalNum; + } + + public void setLimitTotalNum(Integer limitTotalNum) { + this.limitTotalNum = limitTotalNum; + } + + public Integer getLimitDayNum() { + return limitDayNum; + } + + public void setLimitDayNum(Integer limitDayNum) { + this.limitDayNum = limitDayNum; + } + + public String getJoinInst() { + return joinInst; + } + + public void setJoinInst(String joinInst) { + this.joinInst = joinInst; + } + + public String getUserModel() { + return userModel; + } + + public void setUserModel(String userModel) { + this.userModel = userModel; + } + + public String getMsgTemplate() { + return msgTemplate; + } + + public void setMsgTemplate(String msgTemplate) { + this.msgTemplate = msgTemplate; + } + + public String getRewardRule() { + return rewardRule; + } + + public void setRewardRule(String rewardRule) { + this.rewardRule = rewardRule; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/bean/RequestDataDO.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/bean/RequestDataDO.java new file mode 100644 index 000000000..8f4f96569 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/bean/RequestDataDO.java @@ -0,0 +1,47 @@ +package com.yomahub.liteflow.test.scenes.bean; + +import java.time.LocalDateTime; +import java.util.Objects; + +/** + * springboot环境EL复杂例子测试1 + * 可以参与的营销 : 1条件:开始时间+区域. + * @author nmnl + */ +public class RequestDataDO { + // LocalDateTime.of(LocalDate.now(), LocalTime.of(15,0,0)); + private LocalDateTime localDateTime; + + private String instId; + + private RequestDataDO(LocalDateTime localDateTime, String instId) { + this.localDateTime = localDateTime; + this.instId = instId; + } + + private static RequestDataDO create(LocalDateTime localDateTime, String instId) { + return new RequestDataDO(localDateTime, instId); + } + + public static RequestDataDO of(LocalDateTime localDateTime, String instId) { + Objects.requireNonNull(localDateTime, "localDateTime"); + Objects.requireNonNull(instId, "instId"); + return create(localDateTime, instId); + } + + public LocalDateTime getLocalDateTime() { + return localDateTime; + } + + public void setLocalDateTime(LocalDateTime localDateTime) { + this.localDateTime = localDateTime; + } + + public String getInstId() { + return instId; + } + + public void setInstId(String instId) { + this.instId = instId; + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/ASwitchChooseOneCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/ASwitchChooseOneCmp.java new file mode 100644 index 000000000..10b7d1d3e --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/ASwitchChooseOneCmp.java @@ -0,0 +1,64 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.scenes.cmp1; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeSwitchComponent; +import com.yomahub.liteflow.test.scenes.CmpUtil; +import com.yomahub.liteflow.test.scenes.bean.MarketingDO; +import com.yomahub.liteflow.test.scenes.bean.RequestDataDO; + +import java.util.HashMap; +import java.util.Map; + +/** + * springboot环境EL复杂例子测试1 + * 场景描述:可以参与的营销 ASwitchCmp + * 1条件:开始时间+区域. + * 2流程:根据营销信息(类型+模式)->筛选可参与营销(类型+模式) + * 3触发:THEN + * @author nmnl + */ +// @LiteflowComponent("ASwitchCmp") +// @Component("ASwitchCmp") +@LiteflowComponent("a") +public class ASwitchChooseOneCmp extends NodeSwitchComponent { + + // 简单数据结构 + // 虚拟:营销数据 + private final static Map CHOOSE_ONE = new HashMap<>(3); + + static { + MarketingDO a = new MarketingDO(); + CHOOSE_ONE.put("a",a); + + MarketingDO b = new MarketingDO(); + CHOOSE_ONE.put("b",b); + + MarketingDO c = new MarketingDO(); + CHOOSE_ONE.put("c",c); + } + + @Override + public String processSwitch() throws Exception { + RequestDataDO requestDataDO = this.getRequestData(); + if (null == requestDataDO){ + // requestDataDO 为空,无法做进一步的判断 + throw new Exception("requestDataDO 为空"); + } + // 1条件:营销开始时间+区域.. + MarketingDO chooseOne = CHOOSE_ONE.get(requestDataDO.getInstId()); + if (null == chooseOne){ + // 未命中活动 + throw new Exception("未命中营销"); + } + //this.getSlot().setResponseData(chooseOne); + return CmpUtil.processSwitch(chooseOne.getMode(),chooseOne.getType()); + + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/BEventCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/BEventCmp.java new file mode 100644 index 000000000..53350edfb --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/BEventCmp.java @@ -0,0 +1,22 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.scenes.cmp1; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowComponent("BEventCmp") +public class BEventCmp extends NodeComponent { + + @Override + public void process() { + + System.out.println(" --- " + this.getRequestData().toString()); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/BManualCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/BManualCmp.java new file mode 100644 index 000000000..4d93086e3 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/BManualCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.scenes.cmp1; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowComponent("BManualCmp") +public class BManualCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("BManualCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/BTimingCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/BTimingCmp.java new file mode 100644 index 000000000..4da1e44f7 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/BTimingCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.scenes.cmp1; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowComponent("BTimingCmp") +public class BTimingCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("BTimingCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/FinallyCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/FinallyCmp.java new file mode 100644 index 000000000..9da5cbf9e --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/cmp1/FinallyCmp.java @@ -0,0 +1,20 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.scenes.cmp1; + +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowComponent("FinallyCmp") +public class FinallyCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("FinallyCmp executed!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/enums/DescEnum.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/enums/DescEnum.java new file mode 100644 index 000000000..f44ff146c --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/enums/DescEnum.java @@ -0,0 +1,11 @@ +package com.yomahub.liteflow.test.scenes.enums; + +/** + * 枚举类总接口 + * @author nmnl + */ +public interface DescEnum { + + /** 获取枚举desc属性 */ + String getDesc(); +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/enums/MarketingModeEnum.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/enums/MarketingModeEnum.java new file mode 100644 index 000000000..1aff197a2 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/enums/MarketingModeEnum.java @@ -0,0 +1,26 @@ +package com.yomahub.liteflow.test.scenes.enums; + +/** + * 模式 + * @author mll + */ +public enum MarketingModeEnum implements DescEnum { + + EVENT("事件模式"), + + MANUAL("手动模式"), + + TIMING("定时模式"); + + private final String desc; + + @Override + public String getDesc() { + return desc; + } + + MarketingModeEnum(String desc) { + this.desc = desc; + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/enums/MarketingTypeEnum.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/enums/MarketingTypeEnum.java new file mode 100644 index 000000000..7722c2041 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/scenes/enums/MarketingTypeEnum.java @@ -0,0 +1,26 @@ +package com.yomahub.liteflow.test.scenes.enums; + +/** + * 类型 + * @author nmnl + */ +public enum MarketingTypeEnum implements DescEnum { + + PAY_DISCOUNT("支付折扣活动"), + + ISSUING_COUPONS("发卷活动"), + + MESSAGE_NOTIFICATION("消息通知活动"); + + private final String desc; + + @Override + public String getDesc() { + return desc; + } + + MarketingTypeEnum(String desc) { + this.desc = desc; + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/scens/application1.properties b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/scens/application1.properties new file mode 100644 index 000000000..6841930a1 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/scens/application1.properties @@ -0,0 +1 @@ +liteflow.rule-source=scens/flow1.el.xml \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/scens/flow1.el.xml b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/scens/flow1.el.xml new file mode 100644 index 000000000..6896b47f3 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/scens/flow1.el.xml @@ -0,0 +1,6 @@ + + + + SWITCH(a).to(BEventCmp,BManualCmp,BTimingCmp) + + \ No newline at end of file