From 0b2481959fc5259cab9eb9adcb251071ff5d6ef3 Mon Sep 17 00:00:00 2001 From: "everywhere.z" Date: Tue, 16 Jul 2024 23:56:02 +0800 Subject: [PATCH] =?UTF-8?q?enhancement=20#IACEGB=20=E4=B8=8A=E4=B8=8B?= =?UTF-8?q?=E6=96=87=E8=B6=85=E7=B1=BB=E5=88=A4=E6=96=AD=E7=9A=84=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=92=8C=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yomahub/liteflow/context/ContextBean.java | 1 - .../java/com/yomahub/liteflow/slot/Slot.java | 2 +- .../ContextBeanSpringbootTest.java | 13 +++++++++- .../liteflow/test/contextBean/cmp/CCmp.java | 24 +++++++++++++++++++ .../test/contextBean/context/TestContext.java | 7 ++++-- .../contextBean/context/TestSubContext.java | 23 ++++++++++++++++++ .../src/test/resources/contextBean/flow.xml | 4 ++++ 7 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/cmp/CCmp.java create mode 100644 liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/context/TestSubContext.java diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/context/ContextBean.java b/liteflow-core/src/main/java/com/yomahub/liteflow/context/ContextBean.java index b41c20473..99e6ab07c 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/context/ContextBean.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/context/ContextBean.java @@ -13,7 +13,6 @@ import java.lang.annotation.*; @Target({ ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) @Documented -@Inherited public @interface ContextBean { @LFAliasFor("name") diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java index ee6efc68a..faf34fe49 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java @@ -458,7 +458,7 @@ public class Slot { } public T getContextBean(Class contextBeanClazz) { - Tuple contextTuple = contextBeanList.stream().filter(tuple -> tuple.get(1).getClass().getName().equals(contextBeanClazz.getName())).findFirst().orElse(null); + Tuple contextTuple = contextBeanList.stream().filter(tuple -> contextBeanClazz.isAssignableFrom(tuple.get(1).getClass())).findFirst().orElse(null); if (contextTuple == null) { contextBeanList.forEach(o -> LOG.info("ChainId[{}], Context class:{},Request class:{}", this.getChainId(), o.getClass().getName(), contextBeanClazz.getName())); throw new NoSuchContextBeanException("this type is not in the context type passed in"); diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/ContextBeanSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/ContextBeanSpringbootTest.java index 1daf1541a..5f90dffbd 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/ContextBeanSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/ContextBeanSpringbootTest.java @@ -4,6 +4,7 @@ import com.yomahub.liteflow.core.FlowExecutor; import com.yomahub.liteflow.flow.LiteflowResponse; import com.yomahub.liteflow.test.BaseTest; import com.yomahub.liteflow.test.contextBean.context.TestContext; +import com.yomahub.liteflow.test.contextBean.context.TestSubContext; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -12,6 +13,7 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.test.context.TestPropertySource; import javax.annotation.Resource; +import java.math.BigDecimal; /** * ContextBean测试 @@ -36,7 +38,7 @@ public class ContextBeanSpringbootTest extends BaseTest { Assertions.assertEquals("J001", context.getSkuCode()); } - // new一个上下文的情况 + // 利用别名取上下文 @Test public void testContextBean2() throws Exception { LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg", new TestContext("J001", "test")); @@ -44,4 +46,13 @@ public class ContextBeanSpringbootTest extends BaseTest { TestContext context = response.getContextBean("skuContext"); Assertions.assertEquals("J001", context.getSkuCode()); } + + // 利用超类取上下文 + @Test + public void testContextBean3() throws Exception { + LiteflowResponse response = flowExecutor.execute2Resp("chain2", "arg", new TestSubContext("J001", "test", new BigDecimal("10.5"))); + Assertions.assertTrue(response.isSuccess()); + TestContext context = response.getContextBean(TestContext.class); + Assertions.assertEquals("J001", context.getSkuCode()); + } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/cmp/CCmp.java new file mode 100644 index 000000000..371d1de0a --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/cmp/CCmp.java @@ -0,0 +1,24 @@ +/** + *

Title: liteflow

+ *

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

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.contextBean.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.test.contextBean.context.TestContext; +import org.springframework.stereotype.Component; + +@Component("c") +public class CCmp extends NodeComponent { + + @Override + public void process() { + TestContext context = this.getContextBean(TestContext.class); + context.setSkuCode("J001"); + System.out.println("CCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/context/TestContext.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/context/TestContext.java index 9f83e3b39..66dea661f 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/context/TestContext.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/context/TestContext.java @@ -5,9 +5,12 @@ import com.yomahub.liteflow.context.ContextBean; @ContextBean("skuContext") public class TestContext { - private String skuCode; + protected String skuCode; - private String skuName; + protected String skuName; + + public TestContext() { + } public TestContext(String skuCode, String skuName) { this.skuCode = skuCode; diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/context/TestSubContext.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/context/TestSubContext.java new file mode 100644 index 000000000..d6ae3018c --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/contextBean/context/TestSubContext.java @@ -0,0 +1,23 @@ +package com.yomahub.liteflow.test.contextBean.context; + +import java.math.BigDecimal; + +public class TestSubContext extends TestContext{ + + private BigDecimal price; + + + + public TestSubContext(String skuCode, String skuName, BigDecimal price) { + super(skuCode, skuName); + this.price = price; + } + + public BigDecimal getPrice() { + return price; + } + + public void setPrice(BigDecimal price) { + this.price = price; + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/contextBean/flow.xml b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/contextBean/flow.xml index 84d650db4..e052fb43c 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/contextBean/flow.xml +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/contextBean/flow.xml @@ -4,4 +4,8 @@ THEN(a,b); + + + THEN(c,b); + \ No newline at end of file