From 7dcbe492a5f4510740380f5f386402a512d61e33 Mon Sep 17 00:00:00 2001 From: Yunfei Du <278774021@qq.com> Date: Tue, 14 May 2024 21:26:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E8=A7=84=E5=88=99=E5=BC=95=E6=93=8E(?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=BA=90=E6=8E=A5=E5=85=A5,=E6=B5=8B?= =?UTF-8?q?=E8=AF=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/constant/ServiceNameConstants.java | 10 ++ .../client/config/DataAccessClientRunner.java | 39 ++++-- .../client/jdbcUtils/JDBCAbstractClass.java | 21 ++++ .../client/jdbcUtils/JDBCConcreteClass.java | 27 +++++ .../domain/dataSource/DataSourceConfig.java | 81 +++++++++++++ .../data/domain/dataSource/MyDataSource.java | 84 +++++++++++++ .../com/etl/data/unit/service/impl/A.java | 28 +++++ .../com/etl/data/unit/service/impl/B.java | 29 +++++ .../com/etl/data/unit/service/impl/C.java | 36 ++++++ .../ClassLoading/CustomClassLoader.java | 13 ++ .../main/java/com/etl/rule/engine/Engine.java | 14 +++ .../engine/constant/GenerateConstant.java | 72 +++++++++++ .../rule/engine/constant/PathConstant.java | 7 ++ .../rule/engine/domain/EngineMaintenance.java | 63 ++++++++++ .../domain/resp/EngineMaintenanceResp.java | 75 ++++++++++++ .../com/etl/rule/engine/model/DataModel.java | 39 ++++++ .../etl/rule/engine/model/DataSetModel.java | 30 +++++ .../etl/rule/engine/model/DataStandard.java | 11 ++ .../etl/rule/engine/model/RecordModel.java | 31 +++++ .../rule/engine/scope/DataModelContext.java | 37 ++++++ .../rule/engine/scope/DataModelEngine.java | 47 ++++++++ .../etl/rule/engine/scope/DataSetContext.java | 38 ++++++ .../etl/rule/engine/scope/DataSetEngine.java | 31 +++++ .../etl/rule/engine/scope/RecordContext.java | 35 ++++++ .../etl/rule/engine/scope/RecordEngine.java | 19 +++ .../etl/rule/engine/scope/ScopeContext.java | 15 +++ .../etl/rule/engine/scope/TaskContext.java | 14 +++ .../engine/scope/model/DataProcessModel.java | 16 +++ .../scope/model/DataSetProcessModel.java | 16 +++ .../scope/model/RecordProcessModel.java | 18 +++ .../engine}/ETLRuleEngineApplication.java | 2 +- .../EngineMaintenanceController.java | 72 +++++++---- .../RuleEngineVersionController.java | 1 + .../mapper/EngineMaintenanceMapper.java | 14 +++ .../rule/engine/scope/DataModelEngine.java | 11 ++ .../service/IEngineMaintenanceService.java | 75 ++++++++++++ .../service/IRuleEngineVersionService.java | 18 +++ .../impl/EngineMaintenanceServiceImpl.java | 114 ++++++++++++------ .../src/main/resources/logback.xml | 74 ++++++++++++ etl-modules/pom.xml | 1 + 40 files changed, 1301 insertions(+), 77 deletions(-) create mode 100644 etl-modules/etl-data-source/etl-data-source-client/src/main/java/com/etl/data/client/jdbcUtils/JDBCAbstractClass.java create mode 100644 etl-modules/etl-data-source/etl-data-source-client/src/main/java/com/etl/data/client/jdbcUtils/JDBCConcreteClass.java create mode 100644 etl-modules/etl-data-source/etl-data-source-common/src/main/java/com/etl/data/domain/dataSource/DataSourceConfig.java create mode 100644 etl-modules/etl-data-source/etl-data-source-common/src/main/java/com/etl/data/domain/dataSource/MyDataSource.java create mode 100644 etl-modules/etl-data-unit/src/main/java/com/etl/data/unit/service/impl/A.java create mode 100644 etl-modules/etl-data-unit/src/main/java/com/etl/data/unit/service/impl/B.java create mode 100644 etl-modules/etl-data-unit/src/main/java/com/etl/data/unit/service/impl/C.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/ClassLoading/CustomClassLoader.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/Engine.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/constant/GenerateConstant.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/constant/PathConstant.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/domain/EngineMaintenance.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/domain/resp/EngineMaintenanceResp.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/DataModel.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/DataSetModel.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/DataStandard.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/RecordModel.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataModelContext.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataModelEngine.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataSetContext.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataSetEngine.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/RecordContext.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/RecordEngine.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/ScopeContext.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/TaskContext.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/model/DataProcessModel.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/model/DataSetProcessModel.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/model/RecordProcessModel.java rename etl-modules/etl-rule-engine/{src/main/java/com/etl => etl-rule-engine-server/src/main/java/com/etl/rule/engine}/ETLRuleEngineApplication.java (95%) rename etl-modules/etl-rule-engine/{ => etl-rule-engine-server}/src/main/java/com/etl/rule/engine/controller/EngineMaintenanceController.java (57%) create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/mapper/EngineMaintenanceMapper.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/scope/DataModelEngine.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/service/IEngineMaintenanceService.java create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/service/IRuleEngineVersionService.java rename etl-modules/etl-rule-engine/{ => etl-rule-engine-server}/src/main/java/com/etl/rule/engine/service/impl/EngineMaintenanceServiceImpl.java (60%) create mode 100644 etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/resources/logback.xml diff --git a/etl-common/etl-common-core/src/main/java/com/etl/common/core/constant/ServiceNameConstants.java b/etl-common/etl-common-core/src/main/java/com/etl/common/core/constant/ServiceNameConstants.java index 414661b..dc73026 100644 --- a/etl-common/etl-common-core/src/main/java/com/etl/common/core/constant/ServiceNameConstants.java +++ b/etl-common/etl-common-core/src/main/java/com/etl/common/core/constant/ServiceNameConstants.java @@ -20,4 +20,14 @@ public class ServiceNameConstants { * 文件服务的serviceid */ public static final String FILE_SERVICE = "etl-file"; + + /** + * 数据源服务 + */ + public static final String DATA_SOURCE_SERVICE = "etl-data-source"; + + /** + * 数据规则引擎服务 + */ + public static final String DATA_RULE_ENGINE_SERVICE = "etl-data-rule-engine"; } diff --git a/etl-modules/etl-data-source/etl-data-source-client/src/main/java/com/etl/data/client/config/DataAccessClientRunner.java b/etl-modules/etl-data-source/etl-data-source-client/src/main/java/com/etl/data/client/config/DataAccessClientRunner.java index e94ee30..73a9b65 100644 --- a/etl-modules/etl-data-source/etl-data-source-client/src/main/java/com/etl/data/client/config/DataAccessClientRunner.java +++ b/etl-modules/etl-data-source/etl-data-source-client/src/main/java/com/etl/data/client/config/DataAccessClientRunner.java @@ -1,8 +1,9 @@ package com.etl.data.client.config; +import com.etl.data.client.jdbcUtils.JDBCConcreteClass; import com.etl.data.domain.DataSource; -import com.etl.data.domain.config.DataSourceConfig; +import com.etl.data.domain.dataSource.DataSourceConfig; import com.etl.data.domain.req.DataSourceQueryReq; import com.etl.data.source.remote.RemoteDataSourceService; import lombok.extern.log4j.Log4j2; @@ -10,13 +11,16 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; -import java.util.HashMap; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSetMetaData; import java.util.List; /** - * 数据访问客户端运行程序 - * @author YunFei.Du - * @date 14:10 2024/5/10 + * 数据访问客户端运行程序 + * + * @author YunFei.Du + * @date 14:10 2024/5/10 */ @Log4j2 public class DataAccessClientRunner implements ApplicationRunner { @@ -26,18 +30,27 @@ public class DataAccessClientRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) { - try { - List< DataSource > dataSourceList = remoteDataSourceService.getDataSourceList ( new DataSourceQueryReq () ).getData ( ).getRows ( ); - HashMap< String, javax.sql.DataSource > hashMap = new HashMap<> ( ); - for (DataSource dataSource : dataSourceList) { + List< DataSource > dataSourceList = remoteDataSourceService.getDataSourceList ( new DataSourceQueryReq ( ) ).getData ( ).getRows ( ); + try { + dataSourceList.stream ( ).forEach ( dataSource -> { log.info ( "dataSource:{}", dataSource ); - javax.sql.DataSource dataSource1 = DataSourceConfig.dataSource ( dataSource.getHost ( ), dataSource.getDatabaseName ( ), dataSource.getPort ( ), dataSource.getUsername ( ), dataSource.getPassword ( ) ); - log.info ( "dataSource111:{}", dataSource1 ); - hashMap.put ( dataSource.getName ( ), dataSource1 ); + DataSourceConfig.init ( dataSource ); + } ); + String key = dataSourceList.get ( 0 ).getName ( ) + dataSourceList.get ( 0 ).getId ( ); + DataSourceConfig.getNum ( key ); + Connection connection = DataSourceConfig.getConnection ( key ); + JDBCConcreteClass jdbcConcreteClass = new JDBCConcreteClass ( ); + PreparedStatement preparedStatement = jdbcConcreteClass.getPreparedStatement ( connection, "select * from car" ); + ResultSetMetaData rsd = preparedStatement.getMetaData ( ); + for (int i = 1; i <= rsd.getColumnCount ( ); i++) { + log.info ( "类型:{}", rsd.getColumnClassName ( i ) ); } + DataSourceConfig.close ( connection ); + DataSourceConfig.getNum ( key ); } catch (Exception e) { - log.error ( "失败了" ); + log.error ( "数据访问客户端运行程序异常:{}", e.getMessage ( ) ); + throw new RuntimeException ( e ); } } } diff --git a/etl-modules/etl-data-source/etl-data-source-client/src/main/java/com/etl/data/client/jdbcUtils/JDBCAbstractClass.java b/etl-modules/etl-data-source/etl-data-source-client/src/main/java/com/etl/data/client/jdbcUtils/JDBCAbstractClass.java new file mode 100644 index 0000000..7e4e4e1 --- /dev/null +++ b/etl-modules/etl-data-source/etl-data-source-client/src/main/java/com/etl/data/client/jdbcUtils/JDBCAbstractClass.java @@ -0,0 +1,21 @@ +package com.etl.data.client.jdbcUtils; + +import org.springframework.stereotype.Component; + +import javax.xml.bind.annotation.XmlAccessorOrder; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +/** + * jdbc抽象类 + * @author YunFei.Du + * @date 15:34 2024/5/14 + */ + +@Component +public abstract class JDBCAbstractClass { + + + public abstract PreparedStatement getPreparedStatement(Connection connection, String sql); +} diff --git a/etl-modules/etl-data-source/etl-data-source-client/src/main/java/com/etl/data/client/jdbcUtils/JDBCConcreteClass.java b/etl-modules/etl-data-source/etl-data-source-client/src/main/java/com/etl/data/client/jdbcUtils/JDBCConcreteClass.java new file mode 100644 index 0000000..4b712c2 --- /dev/null +++ b/etl-modules/etl-data-source/etl-data-source-client/src/main/java/com/etl/data/client/jdbcUtils/JDBCConcreteClass.java @@ -0,0 +1,27 @@ +package com.etl.data.client.jdbcUtils; + +import lombok.extern.log4j.Log4j2; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * jdbc实体类 + * @author YunFei.Du + * @date 15:36 2024/5/14 + */ +@Log4j2 +public class JDBCConcreteClass extends JDBCAbstractClass{ + @Override + public PreparedStatement getPreparedStatement(Connection connection,String sql) { + try { + PreparedStatement preparedStatement = connection.prepareStatement ( sql ); + log.info ( "查询结果:" + preparedStatement ); + return preparedStatement; + } catch (SQLException e) { + throw new RuntimeException ( e ); + } + } +} diff --git a/etl-modules/etl-data-source/etl-data-source-common/src/main/java/com/etl/data/domain/dataSource/DataSourceConfig.java b/etl-modules/etl-data-source/etl-data-source-common/src/main/java/com/etl/data/domain/dataSource/DataSourceConfig.java new file mode 100644 index 0000000..be56075 --- /dev/null +++ b/etl-modules/etl-data-source/etl-data-source-common/src/main/java/com/etl/data/domain/dataSource/DataSourceConfig.java @@ -0,0 +1,81 @@ +package com.etl.data.domain.dataSource; + +import com.alibaba.druid.pool.DruidDataSource; +import com.etl.data.domain.DataSource; +import lombok.extern.log4j.Log4j2; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.HashMap; + +/** + * 数据源连接池配置 + * @author YunFei.Du + * @date 9:09 2024/5/14 + */ +@Log4j2 +public class DataSourceConfig { + + + private static HashMap dataSourceMap= new HashMap<> (); + + /** + * 初始化数据库连接池。 + * @param dataSource 提供数据库连接配置信息的对象,包括用户名、密码、数据库地址、端口、数据库名称、JDBC驱动类名、初始化连接数和最大活动连接数等。 + */ + public static void init(DataSource dataSource) { + // 创建Druid数据源实例 + DruidDataSource druidDataSource = new DruidDataSource(); + druidDataSource.setUsername(dataSource.getUsername ()); + druidDataSource.setPassword(dataSource.getPassword()); + druidDataSource.setUrl ( "jdbc:mysql://"+dataSource.getHost ( )+":"+dataSource.getPort ( )+"/"+dataSource.getDatabaseName ( ) ); + druidDataSource.setDriverClassName ( dataSource.getJdbcDriver () ); + // 设置初始化连接数和最小空闲连接数 + druidDataSource.setInitialSize ( Integer.valueOf ( dataSource.getInitNum () ) ); + druidDataSource.setMinIdle ( Integer.valueOf ( dataSource.getInitNum () ) ); + // 设置最大活动连接数 + druidDataSource.setMaxActive ( Integer.valueOf ( dataSource.getMaxNum () ) ); + try { + //初始化连接池 + druidDataSource.init(); + } catch (SQLException e) { + log.error ( "初始化数据源失败" ); + } + // 将数据源实例添加到dataSourceMap中,以名称+ID作为键 + dataSourceMap.put(dataSource.getName ()+dataSource.getId(), druidDataSource); + } + + /** + * 获取连接池信息 + * @param key + */ + public static void getNum(String key) { + DruidDataSource druidDataSource = dataSourceMap.get ( key ); + log.info(key + "正在使用连接" + druidDataSource.getActiveCount () + "个,线程数量:" + druidDataSource.getPoolingCount () + "个"); + + } + + public static Connection getConnection(String key) { + + DruidDataSource druidDataSource = dataSourceMap.get ( key ); + if (druidDataSource != null){ + try { + return druidDataSource.getConnection ( ); + } catch (SQLException e) { + throw new RuntimeException ( e ); + } + } + return null; + } + + /** + * 释放连接 + * @param connection + */ + public static void close(Connection connection) { + try { + connection.close (); + } catch (SQLException e) { + log.error ( "释放连接失败" ); + } + } +} diff --git a/etl-modules/etl-data-source/etl-data-source-common/src/main/java/com/etl/data/domain/dataSource/MyDataSource.java b/etl-modules/etl-data-source/etl-data-source-common/src/main/java/com/etl/data/domain/dataSource/MyDataSource.java new file mode 100644 index 0000000..8f1977f --- /dev/null +++ b/etl-modules/etl-data-source/etl-data-source-common/src/main/java/com/etl/data/domain/dataSource/MyDataSource.java @@ -0,0 +1,84 @@ +package com.etl.data.domain.dataSource; + +import com.alibaba.druid.pool.DruidDataSource; +import com.etl.data.domain.DataSource; +import lombok.extern.log4j.Log4j2; +import org.springframework.stereotype.Component; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +/** + * 数据库连接池管理 + * @author YunFei.Du + * @date 15:23 2024/5/13 + */ +@Component +@Log4j2 +public class MyDataSource { + private static HashMap polls=new HashMap<> ( ); + + /** + * 数据库连接池初始化 + */ + public static void info(List< DataSource> dataSourceList){ + for (DataSource dataSource : dataSourceList) { + String jdbUrl ="jdbc:"+dataSource.getJdbcDriver()+"://"+dataSource.getHost()+":"+dataSource.getPort()+"/"+dataSource.getDatabaseName(); + String key=dataSource.getId ()+"_"+dataSource.getName (); + //创建德鲁伊数据库连接池 + DruidDataSource druidSource = new DruidDataSource ( ); + druidSource.setUrl ( jdbUrl ); + druidSource.setUsername ( dataSource.getUsername () ); + druidSource.setPassword ( dataSource.getPassword () ); + druidSource.setInitialSize ( Integer.valueOf ( dataSource.getInitNum () ) ); + druidSource.setMinIdle ( Integer.valueOf ( dataSource.getMaxNum ()) ); + druidSource.setMaxActive ( Integer.valueOf ( dataSource.getMaxNum ()) ); + try { + druidSource.init (); + } catch (SQLException e) { + throw new RuntimeException ( e ); + } + addDataSource ( key,druidSource ); + } + } + + private static void addDataSource(String key, DruidDataSource druidSource) { + if (!polls.containsKey ( key )){ + polls.put ( key,druidSource ); + } + } + + /** + * 获取连接 直接使用数据库连接池对象条用getConnection()方法 + * @param key + * @return + */ + public static Connection getConnection(String key) { + //根据key获取连接池 + DruidDataSource druidDataSource = polls.get ( key ); + if (druidDataSource!=null){ + try { + return druidDataSource.getConnection (); + } catch (SQLException e) { + throw new RuntimeException ( e ); + } + } + return null; + } + + /** + * 释放连接 + */ + public static void close(Connection connection) { + if (connection!=null){ + try { + connection.close (); + } catch (SQLException e){ + log.error ( "释放连接失败" ); + } + } + } + +} diff --git a/etl-modules/etl-data-unit/src/main/java/com/etl/data/unit/service/impl/A.java b/etl-modules/etl-data-unit/src/main/java/com/etl/data/unit/service/impl/A.java new file mode 100644 index 0000000..9d05c6c --- /dev/null +++ b/etl-modules/etl-data-unit/src/main/java/com/etl/data/unit/service/impl/A.java @@ -0,0 +1,28 @@ +package com.etl.data.unit.service.impl;/** + * @ClassName A + * @Description 描述 + * @Author YunFei Du + * @Date 2024/05/13 15:01 + */ + +import com.etl.data.unit.service.Basic; +import com.etl.data.unit.domain.DataModel; +import com.etl.data.unit.domain.TreadConstant; + +/** + *A + * 描述 + * YunFei Du + *2024/05/13 15:01 + */ +public class A implements Basic { + public void show(){ + DataModel dataModel = TreadConstant.get(); + System.out.println(dataModel.getValue()); + } + @Override + public void execution() { + DataModel dataModel = TreadConstant.get(); + System.out.println(dataModel.getValue()); + } +} diff --git a/etl-modules/etl-data-unit/src/main/java/com/etl/data/unit/service/impl/B.java b/etl-modules/etl-data-unit/src/main/java/com/etl/data/unit/service/impl/B.java new file mode 100644 index 0000000..41e47ee --- /dev/null +++ b/etl-modules/etl-data-unit/src/main/java/com/etl/data/unit/service/impl/B.java @@ -0,0 +1,29 @@ +package com.etl.data.unit.service.impl;/** + * @ClassName B + * @Description 描述 + * @Author YunFei Du + * @Date 2024/05/13 15:01 + */ + +import com.etl.data.unit.service.Basic; +import com.etl.data.unit.domain.DataModel; +import com.etl.data.unit.domain.TreadConstant; + +/** + *B + * 描述 + * YunFei Du + *2024/05/13 15:01 + */ +public class B implements Basic { + public void udp(){ + DataModel dataModel = TreadConstant.get(); + dataModel.setValue("李四"); + } + + @Override + public void execution() { + DataModel dataModel = TreadConstant.get(); + dataModel.setValue("李四"); + } +} diff --git a/etl-modules/etl-data-unit/src/main/java/com/etl/data/unit/service/impl/C.java b/etl-modules/etl-data-unit/src/main/java/com/etl/data/unit/service/impl/C.java new file mode 100644 index 0000000..8172f21 --- /dev/null +++ b/etl-modules/etl-data-unit/src/main/java/com/etl/data/unit/service/impl/C.java @@ -0,0 +1,36 @@ +package com.etl.data.unit.service.impl;/** + * @ClassName C + * @Description 描述 + * @Author YunFei Du + * @Date 2024/05/13 15:01 + */ + +import com.etl.data.unit.service.Basic; +import com.etl.data.unit.domain.DataModel; +import com.etl.data.unit.domain.TreadConstant; + +/** + *C + * 描述 + * YunFei Du + *2024/05/13 15:01 + */ +public class C implements Basic { + public void eq(){ + DataModel dataModel = TreadConstant.get(); + if ("张三".equals(dataModel.getValue())){ + System.out.println("是张三"); + }else{ + System.out.println(String.format("不是张三,而是%s",dataModel.getValue())); + } + } + @Override + public void execution() { + DataModel dataModel = TreadConstant.get(); + if ("张三".equals(dataModel.getValue())){ + System.out.println("是张三"); + }else{ + System.out.println(String.format("不是张三,而是%s",dataModel.getValue())); + } + } +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/ClassLoading/CustomClassLoader.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/ClassLoading/CustomClassLoader.java new file mode 100644 index 0000000..cae6184 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/ClassLoading/CustomClassLoader.java @@ -0,0 +1,13 @@ +package com.etl.rule.engine.ClassLoading; + +/** + * @ClassName CustomClassLoader + * @Description 描述 + * @Author YunFei.Du + * @Date 2024/5/1 19:37 + */ +public class CustomClassLoader extends ClassLoader { + public Class defineClassFromBytes(String name, byte[] data) { + return defineClass(name, data, 0, data.length); + } +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/Engine.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/Engine.java new file mode 100644 index 0000000..c2460ab --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/Engine.java @@ -0,0 +1,14 @@ +package com.etl.rule.engine; + +/** + * @Author: YunFei.Du + * @date: 2024/5/6 + * @Description: 引擎 + * @Version: 1.0 + */ +public interface Engine { + + public void execution(); + + public V get(); +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/constant/GenerateConstant.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/constant/GenerateConstant.java new file mode 100644 index 0000000..1583c65 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/constant/GenerateConstant.java @@ -0,0 +1,72 @@ +package com.etl.rule.engine.constant; + +import com.etl.common.security.utils.SecurityUtils; +import com.etl.rule.engine.domain.EngineMaintenance; +import com.etl.rule.engine.domain.RuleEngineVersion; +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * @ClassName GenerateConstant + * @Description 描述 + * @Author YunFei.Du + * @Date 2024/5/7 19:45 + */ +@Component +public class GenerateConstant { + public static final String DATA_FIELD = "DataModelEngine"; + public static final String DATA_RECORD = "RecordEngine"; + public static final String DATA_SET = "DataSetEngine"; + public static final String ACTION_IMPORT = "import com.etl.rule.engine.action.ActionDiscard;\n"; + public static final String SCOPE_IMPORT = "import com.etl.rule.engine.scope."; + public static final String PACKAGE_PATH = "package com.etl.rule.engine.custom;"; + + public static String getClassName(String versionCode){ + String[] splits = versionCode.split("_"); + String className=""; + for (String split : splits) { + className += split.substring(0,1).toUpperCase()+split.substring(1); + } + return className; + } + + + public static String generateConstant(EngineMaintenance engineMaintenance, RuleEngineVersion engineVersion){ + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + String format = simpleDateFormat.format(new Date()); + String level = selectType(engineMaintenance.getLevel()); + return PACKAGE_PATH+"\n\n" + + ACTION_IMPORT + + SCOPE_IMPORT+level+";\n" + + "\n" + + "/**\n" + + " * @Author: "+ SecurityUtils.getUsername() +"\n" + + " * @date: "+format+"\n" + + " * @Description: "+engineVersion.getName()+engineVersion.getCode()+"\n" + + " * @Version: 1.0\n" + + " */\n" + + "public class "+getClassName(engineVersion.getVersionCode())+" extends "+level+" {\n" + + " @Override\n" + + " public void execution () {\n" + + " }\n" + + "}"; + } + + public static String selectType(String level){ + String type = ""; + switch (level) { + case "data-field": + type = DATA_FIELD; + break; + case "data-record": + type = DATA_RECORD; + break; + case "data-set": + type = DATA_SET; + break; + } + return type; + } +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/constant/PathConstant.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/constant/PathConstant.java new file mode 100644 index 0000000..feaa1aa --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/constant/PathConstant.java @@ -0,0 +1,7 @@ +package com.etl.rule.engine.constant; + +public class PathConstant { + public static final String JAVA_PATH = "D:\\projects\\shixun\\fei-cloud-service\\etl-modules\\etl-rule-engine\\etl-rule-engine-common\\src\\main\\java\\com\\etl\\rule\\engine\\custom\\"; + public static final String CLASS_PATH = "D:\\projects\\shixun\\fei-cloud-service\\etl-modules\\etl-rule-engine\\etl-rule-engine-common\\target\\classes\\"; + public static final String PACKAGE_PATH_SERVICE = "com.etl.rule.engine.custom"; +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/domain/EngineMaintenance.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/domain/EngineMaintenance.java new file mode 100644 index 0000000..ed0d669 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/domain/EngineMaintenance.java @@ -0,0 +1,63 @@ +package com.etl.rule.engine.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.etl.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +/** + * 引擎维护 + * @author ruoyi + * @date 2024-05-02 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +@TableName("engine_maintenance") +public class EngineMaintenance extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id",type = IdType.AUTO) + private Long id; + + /** 规则引擎名称 */ + private String name; + + /** 规则引擎类型 */ + private String type; + + /** 规则引擎激活状态 */ + private String isActivate; + + /** 规则引擎状态 */ + private String status; + + /** 规则引擎描述 */ + private String description; + + /** 规则引擎编码 */ + private String code; + + /** 编码*/ + private String engineCode; + + /** 规则引擎级别 */ + private String level; + + /** 编辑代码文本 */ + private String codeText; + + +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/domain/resp/EngineMaintenanceResp.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/domain/resp/EngineMaintenanceResp.java new file mode 100644 index 0000000..e454bf1 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/domain/resp/EngineMaintenanceResp.java @@ -0,0 +1,75 @@ +package com.etl.rule.engine.domain.resp; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.etl.common.core.web.domain.BaseEntity; +import com.etl.rule.engine.domain.EngineMaintenance; +import com.etl.rule.engine.domain.RuleEngineVersion; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +/** + * @ClassName EngineMaintenanceResq + * @Description 描述 + * @Author YunFei.Du + * @Date 2024/5/7 14:42 + */ +@Data +@SuperBuilder +@AllArgsConstructor +@NoArgsConstructor +public class EngineMaintenanceResp extends BaseEntity { + /** + * 主键 + */ + @TableId(value = "id",type = IdType.AUTO) + private Long id; + + /** 规则引擎名称 */ + private String name; + + /** 规则引擎类型 */ + private String type; + + /** 规则引擎激活状态 */ + private String isActivate; + + /** 规则引擎状态 */ + private String status; + + /** 规则引擎描述 */ + private String description; + + /** 规则引擎编码 */ + private String code; + /** 编码*/ + private String engineCode; + /** 规则引擎级别 */ + private String level; + + /** 编辑代码文本 */ + private String codeText; + + /** 规则版本列表*/ + private List< RuleEngineVersion > ruleEngineVersionList; + + public static EngineMaintenanceResp engineMaintenanceBuild(EngineMaintenance engineMaintenance, List< RuleEngineVersion > ruleEngineVersionList) { + return EngineMaintenanceResp.builder () + .id (engineMaintenance.getId ()) + .name (engineMaintenance.getName ()) + .type (engineMaintenance.getType ()) + .isActivate (engineMaintenance.getIsActivate ()) + .status (engineMaintenance.getStatus ()) + .description (engineMaintenance.getDescription ()) + .code (engineMaintenance.getCode ()) + .engineCode (engineMaintenance.getEngineCode ()) + .level (engineMaintenance.getLevel ()) + .codeText (engineMaintenance.getCodeText ()) + .ruleEngineVersionList (ruleEngineVersionList) + .build (); + } +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/DataModel.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/DataModel.java new file mode 100644 index 0000000..23a0189 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/DataModel.java @@ -0,0 +1,39 @@ +package com.etl.rule.engine.model; + +import lombok.Data; + +/** + * @Author: DongZeLiang + * @date: 2024/5/5 + * @Description: 数据模型 + * @Version: 1.0 + */ +@Data +public class DataModel { + + /** + * 数据键 + */ + private String key; + + /** + * 数据值 + */ + private Object value; + + /** + * 源标准-枚举 + */ + private String sourceType; + + /** + * 处理标准-枚举 + */ + private String processType; + + /** + * 处理类型 + */ + private Class processClass; + +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/DataSetModel.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/DataSetModel.java new file mode 100644 index 0000000..6ee38ba --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/DataSetModel.java @@ -0,0 +1,30 @@ +package com.etl.rule.engine.model; + +/** + * @Author: DongZeLiang + * @date: 2024/5/5 + * @Description: 一页 + * @Version: 1.0 + */ +public class DataSetModel { + + // [[DataModel,DataModel,DataModel],[DataModel,DataModel,DataModel]] + + private RecordModel[] recordModelArr = null; + + private DataSetModel(int recordModelLength){ + recordModelArr = new RecordModel[recordModelLength]; + } + private DataSetModel(RecordModel[] recordModelArr){ + recordModelArr = recordModelArr; + } + + public static DataSetModel build(int recordModelLength){ + return new DataSetModel(recordModelLength); + } + + public static DataSetModel build(RecordModel[] recordModelArr){ + return new DataSetModel(recordModelArr); + } + +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/DataStandard.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/DataStandard.java new file mode 100644 index 0000000..7cbbfde --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/DataStandard.java @@ -0,0 +1,11 @@ +package com.etl.rule.engine.model; + +/** + * @Author: DongZeLiang + * @date: 2024/5/5 + * @Description: 数据标准 + * @Version: 1.0 + */ +public interface DataStandard { + +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/RecordModel.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/RecordModel.java new file mode 100644 index 0000000..aca1fce --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/model/RecordModel.java @@ -0,0 +1,31 @@ +package com.etl.rule.engine.model; + +import lombok.Data; + +/** + * @Author: DongZeLiang + * @date: 2024/5/5 + * @Description: 记录模型 + * @Version: 1.0 + */ +@Data +public class RecordModel { + // [DataModel,DataModel,DataModel] + + private RecordModel(int dataModelLength){ + this.dataModelArr = new DataModel[dataModelLength]; + } + private RecordModel(DataModel[] dataModelArr){ + this.dataModelArr = dataModelArr; + } + + private DataModel[] dataModelArr = null; + + public static RecordModel build(int dataModelLength){ + return new RecordModel(dataModelLength); + } + + public static RecordModel build(DataModel[] dataModelArr){ + return new RecordModel(dataModelArr); + } +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataModelContext.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataModelContext.java new file mode 100644 index 0000000..fc2da07 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataModelContext.java @@ -0,0 +1,37 @@ +package com.etl.rule.engine.scope; + +import com.etl.rule.engine.scope.model.DataProcessModel; +import org.springframework.stereotype.Component; + +/** + * @Author: YunFei.Du + * @date: 2024/4/29 + * @Description: 数据模型 + * @Version: 1.0 + */ +@Component +public class DataModelContext implements ScopeContext { + + private static final ThreadLocal THREAD_LOCAL = new ThreadLocal<>(); + + private final RecordContext recordContext; + + public DataModelContext (RecordContext recordContext) { + this.recordContext = recordContext; + } + + @Override + public DataProcessModel get () { + return THREAD_LOCAL.get(); + } + + @Override + public void set (DataProcessModel dataProcessModel) { + THREAD_LOCAL.set(dataProcessModel); + } + + @Override + public void clear(){ + THREAD_LOCAL.remove(); + } +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataModelEngine.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataModelEngine.java new file mode 100644 index 0000000..134d06d --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataModelEngine.java @@ -0,0 +1,47 @@ +package com.etl.rule.engine.scope; + +import com.etl.rule.engine.Engine; +import com.etl.rule.engine.model.DataModel; +import com.etl.rule.engine.scope.model.DataProcessModel; + +/** + * @Author: YunFei.Du + * @date: 2024/5/6 + * @Description: 数据模型引擎接口 + * @Version: 1.0 + */ +public abstract class DataModelEngine implements Engine { + + private DataModelContext dataModelContext; + + @Override + public DataProcessModel get (){ + return dataModelContext.get(); + } + + public DataModel getModel(){ + return get().getDataModel(); + } + + + public String getKey () { + return getModel().getKey(); + } + + public Object getValue () { + return getModel().getValue(); + } + + public String getSourceType () { + return getModel().getSourceType(); + } + + public String getProcessType () { + return getModel().getProcessType(); + } + + public Class getProcessClass () { + return getModel().getProcessClass(); + } + +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataSetContext.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataSetContext.java new file mode 100644 index 0000000..979316d --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataSetContext.java @@ -0,0 +1,38 @@ +package com.etl.rule.engine.scope; + +import com.etl.rule.engine.scope.model.DataSetProcessModel; +import org.springframework.stereotype.Component; + +/** + * @Author: YunFei.Du + * @date: 2024/4/29 + * @Description: 数据集 + * @Version: 1.0 + */ +@Component +public class DataSetContext implements ScopeContext { + + private static final ThreadLocal THREAD_LOCAL = new ThreadLocal<>(); + + private final TaskContext taskContext; + + public DataSetContext (TaskContext taskContext) { + this.taskContext = taskContext; + } + + + @Override + public DataSetProcessModel get() { + return THREAD_LOCAL.get(); + } + + @Override + public void clear() { + THREAD_LOCAL.remove(); + } + + @Override + public void set(DataSetProcessModel dataSetProcessModel) { + THREAD_LOCAL.set(dataSetProcessModel); + } +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataSetEngine.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataSetEngine.java new file mode 100644 index 0000000..27de773 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/DataSetEngine.java @@ -0,0 +1,31 @@ +package com.etl.rule.engine.scope; + +import com.etl.rule.engine.Engine; +import com.etl.rule.engine.model.DataSetModel; +import com.etl.rule.engine.scope.model.DataSetProcessModel; + +/** + * @Author: YunFei.Du + * @date: 2024/5/6 + * @Description: 数据模型引擎接口 + * @Version: 1.0 + */ +public abstract class DataSetEngine implements Engine { + private DataSetContext dataSetContext; + @Override + public DataSetProcessModel get() { + return dataSetContext.get(); + } + + public DataSetModel getDataSetModel() { + return get().getDataSetModel(); + } + + public DataSetContext getDataSetContext() { + return dataSetContext; + } + + public void setDataSetContext(DataSetContext dataSetContext) { + this.dataSetContext = dataSetContext; + } +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/RecordContext.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/RecordContext.java new file mode 100644 index 0000000..9d1d589 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/RecordContext.java @@ -0,0 +1,35 @@ +package com.etl.rule.engine.scope; + +import com.etl.rule.engine.scope.model.RecordProcessModel; + +/** + * @Author: YunFei.Du + * @date: 2024/4/29 + * @Description: 记录/资产模型 + * @Version: 1.0 + */ +public class RecordContext implements ScopeContext{ + + private static final ThreadLocal THREAD_LOCAL = new ThreadLocal<>(); + + private final DataSetContext dataSetContext; + + private RecordContext (DataSetContext dataSetContext) { + this.dataSetContext = dataSetContext; + } + + @Override + public RecordProcessModel get() { + return THREAD_LOCAL.get(); + } + + @Override + public void clear() { + THREAD_LOCAL.remove(); + } + + @Override + public void set(RecordProcessModel recordProcessModel) { + THREAD_LOCAL.set(recordProcessModel); + } +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/RecordEngine.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/RecordEngine.java new file mode 100644 index 0000000..d257f2a --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/RecordEngine.java @@ -0,0 +1,19 @@ +package com.etl.rule.engine.scope; + +import com.etl.rule.engine.Engine; +import com.etl.rule.engine.scope.model.RecordProcessModel; + +/** + * @Author: YunFei.Du + * @date: 2024/5/6 + * @Description: 数据模型引擎接口 + * @Version: 1.0 + */ +public abstract class RecordEngine implements Engine { + private RecordContext recordContext; + + @Override + public RecordProcessModel get() { + return null; + } +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/ScopeContext.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/ScopeContext.java new file mode 100644 index 0000000..5d090b8 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/ScopeContext.java @@ -0,0 +1,15 @@ +package com.etl.rule.engine.scope; + +/** + * @Author: YunFei.Du + * @date: 2024/5/6 + * @Description: 数据域规范 + * @Version: 1.0 + */ +public interface ScopeContext { + + V get(); + + void clear(); + void set(V v); +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/TaskContext.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/TaskContext.java new file mode 100644 index 0000000..ffb2420 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/TaskContext.java @@ -0,0 +1,14 @@ +package com.etl.rule.engine.scope; + +/** + * @Author: YunFei.Du + * @date: 2024/4/29 + * @Description: 任务上下文 + * @Version: 1.0 + */ +public class TaskContext { + + public static TaskContext build(){ + return new TaskContext(); + } +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/model/DataProcessModel.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/model/DataProcessModel.java new file mode 100644 index 0000000..0e8aaa1 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/model/DataProcessModel.java @@ -0,0 +1,16 @@ +package com.etl.rule.engine.scope.model; + +import com.etl.rule.engine.model.DataModel; +import lombok.Data; + +/** + * @Author: YunFei.Du + * @date: 2024/5/5 + * @Description: 数据处理模型 + * @Version: 1.0 + */ +@Data +public class DataProcessModel { + + private DataModel dataModel; +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/model/DataSetProcessModel.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/model/DataSetProcessModel.java new file mode 100644 index 0000000..4be7c44 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/model/DataSetProcessModel.java @@ -0,0 +1,16 @@ +package com.etl.rule.engine.scope.model; + +import com.etl.rule.engine.model.DataSetModel; +import lombok.Data; + +/** + * @Author: YunFei.Du + * @date: 2024/5/5 + * @Description: 数据集处理模型 + * @Version: 1.0 + */ +@Data +public class DataSetProcessModel { + + private DataSetModel dataSetModel; +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/model/RecordProcessModel.java b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/model/RecordProcessModel.java new file mode 100644 index 0000000..7b476eb --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-common/src/main/java/com/etl/rule/engine/scope/model/RecordProcessModel.java @@ -0,0 +1,18 @@ +package com.etl.rule.engine.scope.model; + +import com.etl.rule.engine.model.RecordModel; +import lombok.Data; + +/** + * @Author: YunFei.Du + * @date: 2024/5/5 + * @Description: 行级别任务处理模型 + * @Version: 1.0 + */ +@Data +public class RecordProcessModel { + + private String[] keys; + + private RecordModel recordModel; +} diff --git a/etl-modules/etl-rule-engine/src/main/java/com/etl/ETLRuleEngineApplication.java b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/ETLRuleEngineApplication.java similarity index 95% rename from etl-modules/etl-rule-engine/src/main/java/com/etl/ETLRuleEngineApplication.java rename to etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/ETLRuleEngineApplication.java index 8529d74..05580de 100644 --- a/etl-modules/etl-rule-engine/src/main/java/com/etl/ETLRuleEngineApplication.java +++ b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/ETLRuleEngineApplication.java @@ -1,4 +1,4 @@ -package com.etl; +package com.etl.rule.engine; import com.etl.common.security.annotation.EnableCustomConfig; import com.etl.common.security.annotation.EnableMyFeignClients; diff --git a/etl-modules/etl-rule-engine/src/main/java/com/etl/rule/engine/controller/EngineMaintenanceController.java b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/controller/EngineMaintenanceController.java similarity index 57% rename from etl-modules/etl-rule-engine/src/main/java/com/etl/rule/engine/controller/EngineMaintenanceController.java rename to etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/controller/EngineMaintenanceController.java index b6ef0bb..09559b4 100644 --- a/etl-modules/etl-rule-engine/src/main/java/com/etl/rule/engine/controller/EngineMaintenanceController.java +++ b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/controller/EngineMaintenanceController.java @@ -6,7 +6,9 @@ import com.etl.common.core.web.controller.BaseController; import com.etl.common.core.web.page.TableDataInfo; import com.etl.common.log.annotation.Log; import com.etl.common.log.enums.BusinessType; + import com.etl.rule.engine.domain.EngineMaintenance; +import com.etl.rule.engine.domain.resp.EngineMaintenanceResp; import com.etl.rule.engine.service.IEngineMaintenanceService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -15,10 +17,9 @@ import javax.servlet.http.HttpServletResponse; import java.util.List; /** - * 【请填写功能名称】Controller - * - * @author ruoyi - * @date 2024-05-02 + * 引擎维护 控制层 + * @author YunFei.Du + * @date 20:20 2024/5/6 */ @RestController @RequestMapping("/maintenance") @@ -28,30 +29,46 @@ public class EngineMaintenanceController extends BaseController private IEngineMaintenanceService engineMaintenanceService; /** - * 查询【请填写功能名称】列表 + * 引擎状态改变 + * @param engineMaintenance + * @return + */ + @PostMapping("ActivateEngine") + public Result activateEngine(@RequestBody EngineMaintenance engineMaintenance ) + { + return engineMaintenanceService.activateEngine(engineMaintenance); + } + /** + * + */ + + + + /** + * 查询引擎维护 列表 */ @GetMapping("/list") - public Result> list(EngineMaintenance engineMaintenance) + public Result> list(EngineMaintenance engineMaintenance) { startPage(); - List list = engineMaintenanceService.selectEngineMaintenanceList(engineMaintenance); + List list = engineMaintenanceService.selectEngineMaintenanceList(engineMaintenance); return getDataAsset ( list ); } - /** - * 导出【请填写功能名称】列表 - */ - @Log(title = "【请填写功能名称】", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(HttpServletResponse response, EngineMaintenance engineMaintenance) - { - List list = engineMaintenanceService.selectEngineMaintenanceList(engineMaintenance); - ExcelUtil util = new ExcelUtil(EngineMaintenance.class); - util.exportExcel(response, list, "【请填写功能名称】数据"); - } +// /** +// * 导出引擎维护 列表 +// */ +// @Log(title = "引擎维护 ", businessType = BusinessType.EXPORT) +// @PostMapping("/export") +// public void export(HttpServletResponse response, EngineMaintenance engineMaintenance) +// { +// List list = engineMaintenanceService.selectEngineMaintenanceList(engineMaintenance); +// ExcelUtil util = new ExcelUtil(EngineMaintenance.class); +// util.exportExcel(response, list, "引擎维护 数据"); +// } /** - * 获取【请填写功能名称】详细信息 + * 获取引擎维护 详细信息 */ @GetMapping(value = "/{id}") public Result getInfo(@PathVariable("id") Long id) @@ -71,9 +88,9 @@ public class EngineMaintenanceController extends BaseController } /** - * 新增【请填写功能名称】 + * 新增引擎维护 */ - @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT) + @Log(title = "引擎维护 ", businessType = BusinessType.INSERT) @PostMapping public Result add(@RequestBody EngineMaintenance engineMaintenance) { @@ -90,22 +107,25 @@ public class EngineMaintenanceController extends BaseController } /** - * 修改【请填写功能名称】 + * 修改引擎维护 */ - @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE) + @Log(title = "引擎维护 ", businessType = BusinessType.UPDATE) @PutMapping public Result edit(@RequestBody EngineMaintenance engineMaintenance) { - return toAjax(engineMaintenanceService.updateEngineMaintenance(engineMaintenance)); + return engineMaintenanceService.updateEngineMaintenance(engineMaintenance); } /** - * 删除【请填写功能名称】 + * 删除引擎维护 */ - @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE) + @Log(title = "引擎维护 ", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public Result remove(@PathVariable Long[] ids) { return toAjax(engineMaintenanceService.deleteEngineMaintenanceByIds(ids)); } + + + } diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/controller/RuleEngineVersionController.java b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/controller/RuleEngineVersionController.java index ff39240..4d87956 100644 --- a/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/controller/RuleEngineVersionController.java +++ b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/controller/RuleEngineVersionController.java @@ -21,6 +21,7 @@ import java.util.List; @RestController @RequestMapping("version") public class RuleEngineVersionController { + @Autowired private IRuleEngineVersionService ruleEngineVersionService; diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/mapper/EngineMaintenanceMapper.java b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/mapper/EngineMaintenanceMapper.java new file mode 100644 index 0000000..fb55cc4 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/mapper/EngineMaintenanceMapper.java @@ -0,0 +1,14 @@ +package com.etl.rule.engine.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.etl.rule.engine.domain.EngineMaintenance; + +/** + * @ClassName EngineMaintenanceMapper + * @Description 描述 + * @Author YunFei.Du + * @Date 2024/5/6 20:51 + */ +public interface EngineMaintenanceMapper extends BaseMapper< EngineMaintenance > { + +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/scope/DataModelEngine.java b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/scope/DataModelEngine.java new file mode 100644 index 0000000..35dc428 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/scope/DataModelEngine.java @@ -0,0 +1,11 @@ +package com.etl.rule.engine.scope; + +/** + * @ClassName DataModelEngine + * @Description 描述 + * @Author YunFei.Du + * @Date 2024/5/14 18:36 + */ +public class DataModelEngine { + +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/service/IEngineMaintenanceService.java b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/service/IEngineMaintenanceService.java new file mode 100644 index 0000000..8bdb3fb --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/service/IEngineMaintenanceService.java @@ -0,0 +1,75 @@ +package com.etl.rule.engine.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.etl.common.core.domain.Result; +import com.etl.rule.engine.domain.EngineMaintenance; +import com.etl.rule.engine.domain.resp.EngineMaintenanceResp; + +import java.util.List; + +/** + * 引擎维护 Service接口 + * + * @author ruoyi + * @date 2024-05-02 + */ +public interface IEngineMaintenanceService extends IService< EngineMaintenance> +{ + /** + * 查询引擎维护 + * + * @param id 引擎维护 主键 + * @return 引擎维护 + */ + public EngineMaintenanceResp selectEngineMaintenanceById(Long id); + + /** + * 查询引擎维护 列表 + * + * @param engineMaintenance 引擎维护 + * @return 引擎维护 集合 + */ + public List< EngineMaintenanceResp > selectEngineMaintenanceList(EngineMaintenance engineMaintenance); + + /** + * 新增引擎维护 + * + * @param engineMaintenance 引擎维护 + * @return 结果 + */ + public int insertEngineMaintenance(EngineMaintenance engineMaintenance); + + /** + * 修改引擎维护 + * + * @param engineMaintenance 引擎维护 + * @return 结果 + */ + public Result updateEngineMaintenance(EngineMaintenance engineMaintenance); + + /** + * 批量删除引擎维护 + * + * @param ids 需要删除的引擎维护 主键集合 + * @return 结果 + */ + public int deleteEngineMaintenanceByIds(Long[] ids); + + /** + * 删除引擎维护 信息 + * + * @param id 引擎维护 主键 + * @return 结果 + */ + public int deleteEngineMaintenanceById(Long id); + + /** + * 初始化规则引擎类 + */ + Result initializeRuleEngine(EngineMaintenance engineMaintenance); + + Result testMethod(String code); + + + Result activateEngine(EngineMaintenance engineMaintenance); +} diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/service/IRuleEngineVersionService.java b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/service/IRuleEngineVersionService.java new file mode 100644 index 0000000..35b2e45 --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/service/IRuleEngineVersionService.java @@ -0,0 +1,18 @@ +package com.etl.rule.engine.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.etl.rule.engine.domain.RuleEngineVersion; + +import java.util.List; + +/** + * @ClassName RuleEngineVersionService + * @Description 描述 + * @Author YunFei.Du + * @Date 2024/5/6 20:55 + */ +public interface IRuleEngineVersionService extends IService< RuleEngineVersion > { + + + +} diff --git a/etl-modules/etl-rule-engine/src/main/java/com/etl/rule/engine/service/impl/EngineMaintenanceServiceImpl.java b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/service/impl/EngineMaintenanceServiceImpl.java similarity index 60% rename from etl-modules/etl-rule-engine/src/main/java/com/etl/rule/engine/service/impl/EngineMaintenanceServiceImpl.java rename to etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/service/impl/EngineMaintenanceServiceImpl.java index 9140483..1909b90 100644 --- a/etl-modules/etl-rule-engine/src/main/java/com/etl/rule/engine/service/impl/EngineMaintenanceServiceImpl.java +++ b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/java/com/etl/rule/engine/service/impl/EngineMaintenanceServiceImpl.java @@ -1,13 +1,21 @@ package com.etl.rule.engine.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.etl.common.core.domain.Result; import com.etl.common.core.utils.DateUtils; import com.etl.common.security.utils.SecurityUtils; import com.etl.rule.engine.ClassLoading.CustomClassLoader; import com.etl.rule.engine.domain.EngineMaintenance; +import com.etl.rule.engine.domain.RuleEngineVersion; +import com.etl.rule.engine.domain.resp.EngineMaintenanceResp; import com.etl.rule.engine.mapper.EngineMaintenanceMapper; import com.etl.rule.engine.service.IEngineMaintenanceService; +import com.etl.rule.engine.service.IRuleEngineVersionService; import lombok.extern.log4j.Log4j2; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -19,50 +27,58 @@ import java.io.FileWriter; import java.lang.reflect.Method; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** - * 【请填写功能名称】Service业务层处理 + * 引擎维护 Service业务层处理 * * @author ruoyi * @date 2024-05-02 */ @Service @Log4j2 -public class EngineMaintenanceServiceImpl implements IEngineMaintenanceService -{ +public class EngineMaintenanceServiceImpl extends ServiceImpl implements IEngineMaintenanceService { + @Autowired - private EngineMaintenanceMapper engineMaintenanceMapper; + private IRuleEngineVersionService ruleEngineVersionService; /** - * 查询【请填写功能名称】 + * 查询引擎维护 * - * @param id 【请填写功能名称】主键 - * @return 【请填写功能名称】 + * @param id 引擎维护 主键 + * @return 引擎维护 */ @Override - public EngineMaintenance selectEngineMaintenanceById(Long id) - { - return engineMaintenanceMapper.selectEngineMaintenanceById(id); + public EngineMaintenanceResp selectEngineMaintenanceById(Long id) { + EngineMaintenance engineMaintenance = this.getById ( id ); + List< RuleEngineVersion > engineVersions = ruleEngineVersionService.list ( new LambdaQueryWrapper< RuleEngineVersion > ( ).in ( RuleEngineVersion::getEngineMaintenanceId, engineMaintenance.getId ( ) ) ); + return EngineMaintenanceResp.engineMaintenanceBuild ( engineMaintenance, engineVersions ); } /** - * 查询【请填写功能名称】列表 + * 查询引擎维护 列表 * - * @param engineMaintenance 【请填写功能名称】 - * @return 【请填写功能名称】 + * @param engineMaintenance 引擎维护 + * @return 引擎维护 */ @Override - public List selectEngineMaintenanceList(EngineMaintenance engineMaintenance) - { - return engineMaintenanceMapper.selectEngineMaintenanceList(engineMaintenance); + public List< EngineMaintenanceResp > selectEngineMaintenanceList(EngineMaintenance engineMaintenance) { + ArrayList< EngineMaintenanceResp > engineMaintenanceList = new ArrayList<> ( ); + List< EngineMaintenance > list = this.list ( ); + for (EngineMaintenance maintenance : list) { + List< RuleEngineVersion > engineVersions = ruleEngineVersionService.list ( new LambdaQueryWrapper< RuleEngineVersion > ( ).in ( RuleEngineVersion::getEngineMaintenanceId, maintenance.getId ( ) ) ); + EngineMaintenanceResp engineMaintenanceResp1 = EngineMaintenanceResp.engineMaintenanceBuild ( maintenance, engineVersions ); + engineMaintenanceList.add ( engineMaintenanceResp1 ); + } + return engineMaintenanceList; } /** - * 新增【请填写功能名称】 + * 新增引擎维护 * - * @param engineMaintenance 【请填写功能名称】 + * @param engineMaintenance 引擎维护 * @return 结果 */ @Override @@ -74,46 +90,65 @@ public class EngineMaintenanceServiceImpl implements IEngineMaintenanceService engineMaintenance.setCodeText("package com.etl.rule.engine.domain;\n\n\n"+ "public class " + className + " {\n" + "}"); - return engineMaintenanceMapper.insertEngineMaintenance(engineMaintenance); + boolean save = this.save ( engineMaintenance ); + if (save){ + return 1; + } + return 0; } /** - * 修改【请填写功能名称】 - * @param engineMaintenance 【请填写功能名称】 + * 修改引擎维护 + * @param engineMaintenance 引擎维护 * @return 结果 */ @Override - public int updateEngineMaintenance(EngineMaintenance engineMaintenance) - { - engineMaintenance.setUpdateTime(DateUtils.getNowDate()); - engineMaintenance.setUpdateBy(SecurityUtils.getUsername()); - return engineMaintenanceMapper.updateEngineMaintenance(engineMaintenance); + public Result updateEngineMaintenance(EngineMaintenance engineMaintenance) { + boolean update = this.update ( new LambdaUpdateWrapper< EngineMaintenance > ( ) + .set ( EngineMaintenance::getIsActivate, engineMaintenance.getIsActivate () ) + .set ( EngineMaintenance::getStatus, engineMaintenance.getStatus () ) + .set ( EngineMaintenance::getUpdateTime, DateUtils.getNowDate ( ) ) + .set ( EngineMaintenance::getUpdateBy, SecurityUtils.getUsername ( ) ) + .eq ( EngineMaintenance::getId, engineMaintenance.getId ( ))); + + if (update?true:false){ + return Result.success (); + }else { + return Result.error (); + } } /** - * 批量删除【请填写功能名称】 + * 批量删除引擎维护 * - * @param ids 需要删除的【请填写功能名称】主键 + * @param ids 需要删除的引擎维护 主键 * @return 结果 */ @Override - public int deleteEngineMaintenanceByIds(Long[] ids) - { - return engineMaintenanceMapper.deleteEngineMaintenanceByIds(ids); + public int deleteEngineMaintenanceByIds(Long[] ids) { + boolean b = this.removeBatchByIds ( Arrays.asList ( ids ) ); + if (b){ + return 1; + }else { + return 0; + } } /** - * 删除【请填写功能名称】信息 + * 删除引擎维护 信息 * - * @param id 【请填写功能名称】主键 + * @param id 引擎维护 主键 * @return 结果 */ @Override - public int deleteEngineMaintenanceById(Long id) - { - return engineMaintenanceMapper.deleteEngineMaintenanceById(id); + public int deleteEngineMaintenanceById(Long id) { + boolean b = this.removeById ( id ); + if (b){ + return 1; + }else { + return 0; + } } - @Override public Result initializeRuleEngine(EngineMaintenance engineMaintenance) { try { @@ -195,4 +230,9 @@ public class EngineMaintenanceServiceImpl implements IEngineMaintenanceService } return Result.success("测试成功"); } + + @Override + public Result activateEngine(EngineMaintenance engineMaintenance) { + return null; + } } diff --git a/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/resources/logback.xml b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/resources/logback.xml new file mode 100644 index 0000000..ed5d1de --- /dev/null +++ b/etl-modules/etl-rule-engine/etl-rule-engine-server/src/main/resources/logback.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/etl-modules/pom.xml b/etl-modules/pom.xml index 065a933..fcebf30 100644 --- a/etl-modules/pom.xml +++ b/etl-modules/pom.xml @@ -15,6 +15,7 @@ etl-file etl-data-source etl-rule-engine + etl-data-unit etl-modules