瀏覽代碼

规范操作

jay li 8 月之前
父節點
當前提交
01f5c3734c

+ 14 - 0
liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/SQLXmlELParser.java

@@ -9,11 +9,13 @@ import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.parser.constant.ReadType;
 import com.yomahub.liteflow.parser.el.ClassXmlFlowELParser;
 import com.yomahub.liteflow.parser.sql.exception.ELSQLException;
+import com.yomahub.liteflow.parser.sql.read.CustomSqlRead;
 import com.yomahub.liteflow.parser.sql.read.SqlReadFactory;
 import com.yomahub.liteflow.parser.sql.util.JDBCHelper;
 import com.yomahub.liteflow.parser.sql.vo.SQLParserVO;
 import com.yomahub.liteflow.property.LiteflowConfig;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
+import com.yomahub.liteflow.spi.holder.ContextAwareHolder;
 import com.yomahub.liteflow.util.JsonUtil;
 
 import java.util.Objects;
@@ -32,6 +34,9 @@ public class SQLXmlELParser extends ClassXmlFlowELParser {
 
     private static final String ERROR_COMMON_MSG = "rule-source-ext-data is empty";
 
+    // 返回用户接口自定义sql
+    private CustomSqlRead customSqlRead;
+
     /**
      * 构造函数
      */
@@ -49,6 +54,15 @@ public class SQLXmlELParser extends ClassXmlFlowELParser {
                 throw new ELSQLException(ERROR_COMMON_MSG);
             }
 
+            // 自定义sql
+            if (ContextAwareHolder.loadContextAware().hasBean("CustomSqlRead")) {
+                this.customSqlRead = ContextAwareHolder.loadContextAware().getBean("CustomSqlRead");
+                String customChainSql = customSqlRead.getCustomChainSql();
+                if (StrUtil.isNotBlank(customChainSql)) {
+                    sqlParserVO.setCustomSql(customChainSql);
+                }
+            }
+
             // 检查配置文件
             checkParserVO(sqlParserVO);
 

+ 4 - 1
liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/AbstractSqlRead.java

@@ -49,7 +49,10 @@ public abstract class AbstractSqlRead<T> implements SqlRead<T> {
             stmt = conn.prepareStatement(sqlCmd, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
             // 设置游标拉取数量
             stmt.setFetchSize(SqlReadConstant.FETCH_SIZE_MAX);
-            stmt.setString(1, config.getApplicationName());
+
+            if (StrUtil.isBlank(config.getCustomSql())) {
+                stmt.setString(1, config.getApplicationName());
+            }
 
             rs = stmt.executeQuery();
 

+ 2 - 4
liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/CustomSqlRead.java

@@ -1,8 +1,6 @@
 package com.yomahub.liteflow.parser.sql.read;
 
-import java.util.List;
 
-
-public interface CustomSqlRead<T> {
-    List<T> getCustomChain();
+public interface CustomSqlRead {
+    String getCustomChainSql();
 }

+ 12 - 8
liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/read/impl/ChainRead.java

@@ -54,22 +54,26 @@ public class ChainRead extends AbstractSqlRead<ChainVO> {
 
     @Override
     public String buildQuerySql() {
+        if (StrUtil.isNotBlank(super.config.getCustomSql())) {
+            return super.config.getCustomSql();
+        }
+
         String chainTableName = super.config.getChainTableName();
         String chainApplicationNameField = super.config.getChainApplicationNameField();
-        String customFilterType = super.config.getCustomFilterType();
+        String customFilterSql = super.config.getCustomFilterSql();
 
-        if (StrUtil.isNotBlank(customFilterType)) {
-            String trim = customFilterType.trim();
-            if (trim.startsWith("where ") || trim.startsWith("WHERE ")) {
-                trim = trim.substring(5).trim();
+        if (StrUtil.isNotBlank(customFilterSql)) {
+            String customFilterSqlTrim = customFilterSql.trim();
+            if (customFilterSqlTrim.startsWith("where ") || customFilterSqlTrim.startsWith("WHERE ")) {
+                customFilterSqlTrim = customFilterSqlTrim.substring(5).trim();
             }
 
-            if (trim.startsWith("AND ") || trim.startsWith("and ")) {
-                trim = trim.substring(3);
+            if (customFilterSqlTrim.startsWith("AND ") || customFilterSqlTrim.startsWith("and ")) {
+                customFilterSqlTrim = customFilterSqlTrim.substring(3);
             }
 
             return StrUtil.format(SqlReadConstant.SQL_PATTERN_WITH_SUFFIX, chainTableName,
-                    chainApplicationNameField, trim);
+                    chainApplicationNameField, customFilterSqlTrim);
         } else {
             return StrUtil.format(SqlReadConstant.SQL_PATTERN, chainTableName, chainApplicationNameField);
         }

+ 0 - 9
liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/util/JDBCHelper.java

@@ -41,8 +41,6 @@ public class JDBCHelper {
 
     private static JDBCHelper INSTANCE;
 
-    private CustomSqlRead customSqlRead;
-
     /**
      * 定时任务线程池核心线程数
      */
@@ -96,13 +94,6 @@ public class JDBCHelper {
 
         // 获取 chain 数据
         List<ChainVO> chainVOList = chainRead.read();
-        if (ContextAwareHolder.loadContextAware().hasBean("CustomSqlRead")) {
-            this.customSqlRead = ContextAwareHolder.loadContextAware().getBean("CustomSqlRead");
-            List customChain = customSqlRead.getCustomChain();
-            if (CollectionUtil.isNotEmpty(customChain)) {
-                chainVOList = customChain;
-            }
-        }
         List<String> chainList = new ArrayList<>();
 
         chainVOList.forEach(

+ 19 - 6
liteflow-rule-plugin/liteflow-rule-sql/src/main/java/com/yomahub/liteflow/parser/sql/vo/SQLParserVO.java

@@ -72,9 +72,14 @@ public class SQLParserVO {
     private String chainEnableField;
 
     /**
-     * 自定义过滤值
+     * 后缀 自定义过滤 sql
      */
-    private String customFilterType;
+    private String customFilterSql;
+
+    /**
+     * 自定义 sql
+     */
+    private String customSql;
 
     /**
      * 脚本 node 表名
@@ -342,11 +347,19 @@ public class SQLParserVO {
         this.namespaceField = namespaceField;
     }
 
-    public String getCustomFilterType() {
-        return customFilterType;
+    public String getCustomFilterSql() {
+        return customFilterSql;
+    }
+
+    public void setCustomFilterSql(String customFilterSql) {
+        this.customFilterSql = customFilterSql;
+    }
+
+    public String getCustomSql() {
+        return customSql;
     }
 
-    public void setCustomFilterType(String customFilterType) {
-        this.customFilterType = customFilterType;
+    public void setCustomSql(String customSql) {
+        this.customSql = customSql;
     }
 }

+ 3 - 16
liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/withSuffix/SQLWithXmlELWithSuffix2SpringbootTest.java

@@ -3,13 +3,10 @@ package com.yomahub.liteflow.test.withSuffix;
 import com.yomahub.liteflow.core.FlowExecutor;
 import com.yomahub.liteflow.flow.LiteflowResponse;
 import com.yomahub.liteflow.parser.sql.read.CustomSqlRead;
-import com.yomahub.liteflow.parser.sql.read.vo.ChainVO;
 import com.yomahub.liteflow.test.BaseTest;
-import com.yomahub.liteflow.test.sqlroute.cmp.CustomChainImpl;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.boot.test.mock.mockito.MockBean;
@@ -19,9 +16,6 @@ import org.springframework.test.context.junit.jupiter.SpringExtension;
 
 import javax.annotation.Resource;
 
-import java.util.Collections;
-import java.util.List;
-
 import static org.mockito.Mockito.when;
 
 /**
@@ -50,17 +44,10 @@ public class SQLWithXmlELWithSuffix2SpringbootTest extends BaseTest {
 
 	@Test
 	public void testSQLWithXmlChain2() {
-		ChainVO chainVO = new ChainVO();
-		chainVO.setChainId("r_chain1");
-		chainVO.setBody("THEN(c,a,b);");
-
-		List<ChainVO> chainVOS = Collections.singletonList(chainVO);
-
-		when(customChain.getCustomChain()).thenReturn(chainVOS);
-
-		flowExecutor.init(false);
+		when(customChain.getCustomChainSql())
+				.thenReturn(" SELECT * FROM EL_TABLE WHERE custom_filter_type = 'biz1' ");
 
 		LiteflowResponse response = flowExecutor.execute2Resp("r_chain1", "arg");
-		Assertions.assertEquals("c==>a==>b", response.getExecuteStepStr());
+		Assertions.assertEquals("c==>b==>a", response.getExecuteStepStr());
 	}
 }

+ 1 - 1
liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-data-source-with-suffix-xml.properties

@@ -3,7 +3,7 @@ liteflow.rule-source-ext-data={\
   "chainTableName":"EL_TABLE",\
   "chainApplicationNameField":"application_name",\
   "chainNameField":"chain_name",\
-  "customFilterType":"custom_filter_type = 'biz1'",\
+  "customFilterSql":"custom_filter_type = 'biz1'",\
   "elDataField":"EL_DATA",\
   "scriptTableName":"script_node_table",\
   "scriptApplicationNameField":"application_name",\

+ 1 - 1
liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/resources/application-data-source-with-suffix2-xml.properties

@@ -3,7 +3,7 @@ liteflow.rule-source-ext-data={\
   "chainTableName":"EL_TABLE",\
   "chainApplicationNameField":"application_name",\
   "chainNameField":"chain_name",\
-  "customFilterType":"custom_filter_type = 'biz2' ",\
+  "customFilterSql":"custom_filter_type = 'biz2' ",\
   "elDataField":"EL_DATA",\
   "scriptTableName":"script_node_table",\
   "scriptApplicationNameField":"application_name",\