From 0f4b83919317c3d0c77d2f94e19d22de292aa622 Mon Sep 17 00:00:00 2001 From: chao <3072464591@QQ.com> Date: Thu, 2 May 2024 16:26:10 +0800 Subject: [PATCH] =?UTF-8?q?feat():=20=E5=BC=95=E6=93=8E=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- etl-common/etl-common-core/pom.xml | 5 + .../com/etl/data/rule/domain/EngineRule.java | 76 +++++++++++++ .../rule/controller/EngineRuleController.java | 91 +++++++++++++++ .../data/rule/mapper/EngineRuleMapper.java | 62 +++++++++++ .../data/rule/service/IEngineRuleService.java | 62 +++++++++++ .../service/impl/EngineRuleServiceImpl.java | 91 +++++++++++++++ .../data/rule/utils/DynamicCompilation.java | 63 +++++++++++ .../rule/utils/DynamicCompilationExample.java | 65 +++++++++++ .../data/rule/utils/JavaSourceFromString.java | 29 +++++ .../mapper/data/EngineRuleMapper.xml | 104 ++++++++++++++++++ pom.xml | 7 ++ 11 files changed, 655 insertions(+) create mode 100644 etl-modules/etl-modules-data-source/etl-modules-data-source-common/src/main/java/com/etl/data/rule/domain/EngineRule.java create mode 100644 etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/controller/EngineRuleController.java create mode 100644 etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/mapper/EngineRuleMapper.java create mode 100644 etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/service/IEngineRuleService.java create mode 100644 etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/service/impl/EngineRuleServiceImpl.java create mode 100644 etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/utils/DynamicCompilation.java create mode 100644 etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/utils/DynamicCompilationExample.java create mode 100644 etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/utils/JavaSourceFromString.java create mode 100644 etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/resources/mapper/data/EngineRuleMapper.xml diff --git a/etl-common/etl-common-core/pom.xml b/etl-common/etl-common-core/pom.xml index f641aa9..48c3296 100644 --- a/etl-common/etl-common-core/pom.xml +++ b/etl-common/etl-common-core/pom.xml @@ -141,6 +141,11 @@ jedis + + com.alibaba + QLExpress + + diff --git a/etl-modules/etl-modules-data-source/etl-modules-data-source-common/src/main/java/com/etl/data/rule/domain/EngineRule.java b/etl-modules/etl-modules-data-source/etl-modules-data-source-common/src/main/java/com/etl/data/rule/domain/EngineRule.java new file mode 100644 index 0000000..c7be075 --- /dev/null +++ b/etl-modules/etl-modules-data-source/etl-modules-data-source-common/src/main/java/com/etl/data/rule/domain/EngineRule.java @@ -0,0 +1,76 @@ +package com.etl.data.rule.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.etl.common.core.annotation.Excel; +import com.etl.common.core.web.domain.BaseEntity; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * 引擎维护对象 engine_rule + * + * @author Chao + * @date 2024-05-02 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +@TableName("engine_rule") +public class EngineRule extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * ID + */ + private Long id; + + /** + * 规则名称 + */ + @Excel(name = "规则名称") + @TableId(value = "id", type = IdType.AUTO) + private String name; + + /** + * 规则类型(1-规则模板 2-自定义模板) + */ + @Excel(name = "规则类型(1-规则模板 2-自定义模板)") + private String type; + + /** + * 规则作用域(1-数据字段 2-数据集 3-记录) + */ + @Excel(name = "规则作用域(1-数据字段 2-数据集 3-记录)") + private Long scope; + + /** + * 引擎编码 + */ + @Excel(name = "引擎编码") + private String encoding; + + /** + * 是否激活(Y-激活 N-未激活) + */ + @Excel(name = "是否激活(Y-激活 N-未激活)") + private String activatedOrNot; + + /** + * 规则状态(Y-正常 N-停用) + */ + @Excel(name = "规则状态(Y-正常 N-停用)") + private String status; + + /** + * 描述 + */ + @Excel(name = "描述") + private String description; +} diff --git a/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/controller/EngineRuleController.java b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/controller/EngineRuleController.java new file mode 100644 index 0000000..a07d4c5 --- /dev/null +++ b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/controller/EngineRuleController.java @@ -0,0 +1,91 @@ +package com.etl.data.rule.controller; + +import com.etl.common.core.domain.Result; +import com.etl.common.core.utils.poi.ExcelUtil; +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.common.security.annotation.RequiresPermissions; +import com.etl.data.rule.domain.EngineRule; +import com.etl.data.rule.service.IEngineRuleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 引擎维护Controller + * + * @author Chao + * @date 2024-05-02 + */ +@RestController +@RequestMapping("/engine") +public class EngineRuleController extends BaseController { + @Autowired + private IEngineRuleService engineRuleService; + + /** + * 查询引擎维护列表 + */ + @RequiresPermissions("data:engine:list") + @GetMapping("/list") + public Result> list(EngineRule engineRule) { + startPage(); + List list = engineRuleService.selectEngineRuleList(engineRule); + return getDataTable(list); + } + + /** + * 导出引擎维护列表 + */ + @RequiresPermissions("data:engine:export") + @Log(title = "引擎维护", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, EngineRule engineRule) { + List list = engineRuleService.selectEngineRuleList(engineRule); + ExcelUtil util = new ExcelUtil(EngineRule.class); + util.exportExcel(response, list, "引擎维护数据"); + } + + /** + * 获取引擎维护详细信息 + */ + @RequiresPermissions("data:engine:query") + @GetMapping(value = "/{id}") + public Result getInfo(@PathVariable("id") Long id) { + return success(engineRuleService.selectEngineRuleById(id)); + } + + /** + * 新增引擎维护 + */ + @RequiresPermissions("data:engine:add") + @Log(title = "引擎维护", businessType = BusinessType.INSERT) + @PostMapping + public Result add(@RequestBody EngineRule engineRule) { + return toAjax(engineRuleService.insertEngineRule(engineRule)); + } + + /** + * 修改引擎维护 + */ + @RequiresPermissions("data:engine:edit") + @Log(title = "引擎维护", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit(@RequestBody EngineRule engineRule) { + return toAjax(engineRuleService.updateEngineRule(engineRule)); + } + + /** + * 删除引擎维护 + */ + @RequiresPermissions("data:engine:remove") + @Log(title = "引擎维护", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public Result remove(@PathVariable Long[] ids) { + return toAjax(engineRuleService.deleteEngineRuleByIds(ids)); + } +} diff --git a/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/mapper/EngineRuleMapper.java b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/mapper/EngineRuleMapper.java new file mode 100644 index 0000000..e88d1df --- /dev/null +++ b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/mapper/EngineRuleMapper.java @@ -0,0 +1,62 @@ +package com.etl.data.rule.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.etl.data.rule.domain.EngineRule; + +import java.util.List; + +/** + * 引擎维护Mapper接口 + * + * @author Chao + * @date 2024-05-02 + */ +public interface EngineRuleMapper extends BaseMapper { + /** + * 查询引擎维护 + * + * @param id 引擎维护主键 + * @return 引擎维护 + */ + public EngineRule selectEngineRuleById(Long id); + + /** + * 查询引擎维护列表 + * + * @param engineRule 引擎维护 + * @return 引擎维护集合 + */ + public List selectEngineRuleList(EngineRule engineRule); + + /** + * 新增引擎维护 + * + * @param engineRule 引擎维护 + * @return 结果 + */ + public int insertEngineRule(EngineRule engineRule); + + /** + * 修改引擎维护 + * + * @param engineRule 引擎维护 + * @return 结果 + */ + public int updateEngineRule(EngineRule engineRule); + + /** + * 删除引擎维护 + * + * @param id 引擎维护主键 + * @return 结果 + */ + public int deleteEngineRuleById(Long id); + + /** + * 批量删除引擎维护 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteEngineRuleByIds(Long[] ids); +} diff --git a/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/service/IEngineRuleService.java b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/service/IEngineRuleService.java new file mode 100644 index 0000000..1eb28a7 --- /dev/null +++ b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/service/IEngineRuleService.java @@ -0,0 +1,62 @@ +package com.etl.data.rule.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.etl.data.rule.domain.EngineRule; + +import java.util.List; + +/** + * 引擎维护Service接口 + * + * @author Chao + * @date 2024-05-02 + */ +public interface IEngineRuleService extends IService { + /** + * 查询引擎维护 + * + * @param id 引擎维护主键 + * @return 引擎维护 + */ + public EngineRule selectEngineRuleById(Long id); + + /** + * 查询引擎维护列表 + * + * @param engineRule 引擎维护 + * @return 引擎维护集合 + */ + public List selectEngineRuleList(EngineRule engineRule); + + /** + * 新增引擎维护 + * + * @param engineRule 引擎维护 + * @return 结果 + */ + public int insertEngineRule(EngineRule engineRule); + + /** + * 修改引擎维护 + * + * @param engineRule 引擎维护 + * @return 结果 + */ + public int updateEngineRule(EngineRule engineRule); + + /** + * 批量删除引擎维护 + * + * @param ids 需要删除的引擎维护主键集合 + * @return 结果 + */ + public int deleteEngineRuleByIds(Long[] ids); + + /** + * 删除引擎维护信息 + * + * @param id 引擎维护主键 + * @return 结果 + */ + public int deleteEngineRuleById(Long id); +} diff --git a/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/service/impl/EngineRuleServiceImpl.java b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/service/impl/EngineRuleServiceImpl.java new file mode 100644 index 0000000..750766e --- /dev/null +++ b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/service/impl/EngineRuleServiceImpl.java @@ -0,0 +1,91 @@ +package com.etl.data.rule.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.etl.common.core.utils.DateUtils; +import com.etl.data.rule.domain.EngineRule; +import com.etl.data.rule.mapper.EngineRuleMapper; +import com.etl.data.rule.service.IEngineRuleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 引擎维护Service业务层处理 + * + * @author Chao + * @date 2024-05-02 + */ +@Service +public class EngineRuleServiceImpl extends ServiceImpl implements IEngineRuleService { + @Autowired + private EngineRuleMapper engineRuleMapper; + + /** + * 查询引擎维护 + * + * @param id 引擎维护主键 + * @return 引擎维护 + */ + @Override + public EngineRule selectEngineRuleById(Long id) { + return engineRuleMapper.selectEngineRuleById(id); + } + + /** + * 查询引擎维护列表 + * + * @param engineRule 引擎维护 + * @return 引擎维护 + */ + @Override + public List selectEngineRuleList(EngineRule engineRule) { + return engineRuleMapper.selectEngineRuleList(engineRule); + } + + /** + * 新增引擎维护 + * + * @param engineRule 引擎维护 + * @return 结果 + */ + @Override + public int insertEngineRule(EngineRule engineRule) { + engineRule.setCreateTime(DateUtils.getNowDate()); + return engineRuleMapper.insertEngineRule(engineRule); + } + + /** + * 修改引擎维护 + * + * @param engineRule 引擎维护 + * @return 结果 + */ + @Override + public int updateEngineRule(EngineRule engineRule) { + engineRule.setUpdateTime(DateUtils.getNowDate()); + return engineRuleMapper.updateEngineRule(engineRule); + } + + /** + * 批量删除引擎维护 + * + * @param ids 需要删除的引擎维护主键 + * @return 结果 + */ + @Override + public int deleteEngineRuleByIds(Long[] ids) { + return engineRuleMapper.deleteEngineRuleByIds(ids); + } + + /** + * 删除引擎维护信息 + * + * @param id 引擎维护主键 + * @return 结果 + */ + @Override + public int deleteEngineRuleById(Long id) { + return engineRuleMapper.deleteEngineRuleById(id); + } +} diff --git a/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/utils/DynamicCompilation.java b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/utils/DynamicCompilation.java new file mode 100644 index 0000000..29f900e --- /dev/null +++ b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/utils/DynamicCompilation.java @@ -0,0 +1,63 @@ +package com.etl.data.rule.utils; + +import javax.tools.JavaCompiler; +import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.ToolProvider; +import java.io.File; +import java.io.FileWriter; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.List; + +public class DynamicCompilation { + + /** + * 主函数,用于演示Java Compiler API的动态编译与执行过程。 + * 本示例覆盖了从创建Java源文件到编译、加载及执行的整个流程。 + * + * @param args 命令行参数列表,本示例中未使用该参数。 + * @throws Exception 可能抛出的异常,涵盖文件I/O操作、编译错误及类加载等过程中的异常情况。 + */ + public static void main(String[] args) throws Exception { + // 1. 初始化Java编译器实例,利用ToolProvider获取系统默认的Java编译器。 + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + + // 2. 获取标准的文件管理器,用于处理源文件、类文件等。 + StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null); + + try { + // 3. 创建一个临时的Java源文件"HelloWorld.java",并向其中写入简单的打印"Hello World!"代码。 + File sourceFile = new File("HelloWorld.java"); + FileWriter writer = new FileWriter(sourceFile); + writer.write("public class HelloWorld { public static void main(String[] args) { System.out.println(\"Hello World!\"); } }"); + writer.close(); + + // 4. 准备编译任务,指定源文件并配置编译选项(本例中未设置额外选项)。 + Iterable compilationUnits = fileManager.getJavaFileObjectsFromFiles(List.of(sourceFile)); + JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, null, null, null, compilationUnits); + + // 5. 执行编译任务并检查是否成功。 + boolean success = task.call(); + + // 6. 若编译成功,则动态加载并执行新生成的类。 + if (success) { + // 动态创建类加载器,指向当前目录以查找新编译的类。 + URLClassLoader classLoader = new URLClassLoader(new URL[]{new File(".").toURI().toURL()}); + + // 加载名为"HelloWorld"的类。 + Class clazz = classLoader.loadClass("HelloWorld"); + + // 获取该类的main方法,并执行它。 + Method method = clazz.getMethod("main", String[].class); + // 传递null作为main方法的args参数。 + method.invoke(null, (Object) null); + } + } finally { + // 注意:实际应用中应考虑在此处关闭fileManager等资源,但为简化示例,此处省略。 + } + } + + +} diff --git a/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/utils/DynamicCompilationExample.java b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/utils/DynamicCompilationExample.java new file mode 100644 index 0000000..0febf5a --- /dev/null +++ b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/utils/DynamicCompilationExample.java @@ -0,0 +1,65 @@ +package com.etl.data.rule.utils; + + +import javax.tools.*; +import java.io.File; +import java.lang.reflect.Method; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Collections; + +/** + * @author Han + */ +public class DynamicCompilationExample { + + /** + * 主函数:演示内存直接动态编译Java代码。 + * 该方法首先将Java代码字符串编译成类,然后通过反射执行该类的main方法。 + * + * @param args 命令行参数(未使用) + * @throws Exception 如果编译或类加载失败抛出此异常 + */ + public static void main(String[] args) throws Exception { + // 获取系统Java编译器实例 这个方法可能会抛出异常 + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + // 创建诊断信息收集器 创建一个DiagnosticCollector实例来收集编译过程中的错误、警告等诊断信息 + DiagnosticCollector diagnostics = new DiagnosticCollector<>(); + // 获取标准Java文件管理器实例 获取一个标准的文件管理器,用于处理源文件、类文件等。这里,它使用了之前创建的诊断收集器,并且没有指定特定的字符集或locale + StandardJavaFileManager fileManager = compiler.getStandardFileManager(diagnostics, null, null); + + // 定义要编译的Java代码字符串 + String code = "public class HelloWorld {\n" + + " public static void main(String[] args) {\n" + + " System.out.println(\"Hello, world!\");\n" + + " }\n" + + "}"; + // 将代码字符串转换为Java源文件对象 + JavaFileObject source = new JavaSourceFromString("HelloWorld", code); + + // 创建编译任务 + Iterable compilationUnits = Collections.singletonList(source); + JavaCompiler.CompilationTask task = compiler.getTask(null, fileManager, diagnostics, null, null, compilationUnits); + // 执行编译任务 + boolean success = task.call(); + + // 关闭文件管理器 + fileManager.close(); + + // 根据编译任务执行结果输出信息并处理 + if (success) { + System.out.println("Compilation succeeded."); + // 使用反射加载并执行编译后的类 + URLClassLoader classLoader = new URLClassLoader(new URL[]{new File(".").toURI().toURL()}); + Class clazz = classLoader.loadClass("HelloWorld"); + Method method = clazz.getMethod("main", String[].class); + method.invoke(null, new Object[]{null}); + } else { + System.out.println("Compilation failed."); + // 输出诊断信息 + for (Diagnostic diagnostic : diagnostics.getDiagnostics()) { + System.out.println(diagnostic.getMessage(null)); + } + } + } +} diff --git a/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/utils/JavaSourceFromString.java b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/utils/JavaSourceFromString.java new file mode 100644 index 0000000..6165943 --- /dev/null +++ b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/java/com/etl/data/rule/utils/JavaSourceFromString.java @@ -0,0 +1,29 @@ +package com.etl.data.rule.utils; + +import javax.tools.SimpleJavaFileObject; +import java.net.URI; + +/** + * 自定义Java源文件对象,用于从字符串中读取Java源代码。 + * @author Han + */ +public class JavaSourceFromString extends SimpleJavaFileObject { + + final String code; + + /** + * 构造函数,使用给定的源代码和类名创建一个新的Java源文件对象。 + * + * @param className 类的简单名称 + * @param code 类的源代码字符串 + */ + JavaSourceFromString(String className, String code) { + super(URI.create("string:///" + className.replace('.', '/') + Kind.SOURCE.extension), Kind.SOURCE); + this.code = code; + } + + @Override + public CharSequence getCharContent(boolean ignoreEncodingErrors) { + return code; + } +} diff --git a/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/resources/mapper/data/EngineRuleMapper.xml b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/resources/mapper/data/EngineRuleMapper.xml new file mode 100644 index 0000000..c8bf279 --- /dev/null +++ b/etl-modules/etl-modules-data-source/etl-modules-data-source-system/src/main/resources/mapper/data/EngineRuleMapper.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + select id, name, type, scope, encoding, activated_or_not, status, description, remark, create_by, create_time, update_by, update_time from engine_rule + + + + + + + + insert into engine_rule + + name, + type, + scope, + encoding, + activated_or_not, + status, + description, + remark, + create_by, + create_time, + update_by, + update_time, + + + #{name}, + #{type}, + #{scope}, + #{encoding}, + #{activatedOrNot}, + #{status}, + #{description}, + #{remark}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update engine_rule + + name = #{name}, + type = #{type}, + scope = #{scope}, + encoding = #{encoding}, + activated_or_not = #{activatedOrNot}, + status = #{status}, + description = #{description}, + remark = #{remark}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from engine_rule where id = #{id} + + + + delete from engine_rule where id in + + #{id} + + + diff --git a/pom.xml b/pom.xml index 3e3b656..d6f613e 100644 --- a/pom.xml +++ b/pom.xml @@ -35,6 +35,7 @@ 8.2.2 4.1.2 2.9.0 + 3.2.3 2.14.3 @@ -227,6 +228,12 @@ ${jedis.version} + + com.alibaba + QLExpress + ${QLExpress.version} + +