From b92a8cef2289764c89c1311f2beea5f66b727396 Mon Sep 17 00:00:00 2001 From: yaoxin <1752800946@qq.com> Date: Thu, 2 May 2024 16:16:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E4=BA=86=E8=A7=84?= =?UTF-8?q?=E5=88=99=E5=BC=95=E6=93=8E=E5=A2=9E=E5=88=A0=E6=94=B9=E6=9F=A5?= =?UTF-8?q?,=E8=A7=84=E5=88=99=E5=BC=95=E6=93=8E=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96,=E6=B5=8B=E8=AF=95=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/controller/SysFileController.java | 1 + muyu-modules/muyu-rule-engine/pom.xml | 84 ++++++++ .../src/main/java/com/muyu/Main.java | 7 + .../ClassLoading/CustomClassLoader.java | 54 +++++ .../engine/MuYuRuleEngineApplication.java | 22 ++ .../EngineMaintenanceController.java | 111 ++++++++++ .../rule/engine/domain/EngineMaintenance.java | 152 ++++++++++++++ .../mapper/EngineMaintenanceMapper.java | 61 ++++++ .../service/IEngineMaintenanceService.java | 67 ++++++ .../impl/EngineMaintenanceServiceImpl.java | 192 ++++++++++++++++++ .../src/main/resources/banner.txt | 2 + .../src/main/resources/bootstrap.yml | 28 +++ .../src/main/resources/logback.xml | 74 +++++++ .../ruleEngine/EngineMaintenanceMapper.xml | 111 ++++++++++ muyu-modules/pom.xml | 1 + 15 files changed, 967 insertions(+) create mode 100644 muyu-modules/muyu-rule-engine/pom.xml create mode 100644 muyu-modules/muyu-rule-engine/src/main/java/com/muyu/Main.java create mode 100644 muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/ClassLoading/CustomClassLoader.java create mode 100644 muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/MuYuRuleEngineApplication.java create mode 100644 muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/controller/EngineMaintenanceController.java create mode 100644 muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/domain/EngineMaintenance.java create mode 100644 muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/mapper/EngineMaintenanceMapper.java create mode 100644 muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/service/IEngineMaintenanceService.java create mode 100644 muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/service/impl/EngineMaintenanceServiceImpl.java create mode 100644 muyu-modules/muyu-rule-engine/src/main/resources/banner.txt create mode 100644 muyu-modules/muyu-rule-engine/src/main/resources/bootstrap.yml create mode 100644 muyu-modules/muyu-rule-engine/src/main/resources/logback.xml create mode 100644 muyu-modules/muyu-rule-engine/src/main/resources/mapper/ruleEngine/EngineMaintenanceMapper.xml diff --git a/muyu-modules/muyu-file/src/main/java/com/muyu/file/controller/SysFileController.java b/muyu-modules/muyu-file/src/main/java/com/muyu/file/controller/SysFileController.java index 5f5ce31..fc43f45 100644 --- a/muyu-modules/muyu-file/src/main/java/com/muyu/file/controller/SysFileController.java +++ b/muyu-modules/muyu-file/src/main/java/com/muyu/file/controller/SysFileController.java @@ -23,6 +23,7 @@ public class SysFileController { @Autowired private ISysFileService sysFileService; + /** * 文件上传请求 */ diff --git a/muyu-modules/muyu-rule-engine/pom.xml b/muyu-modules/muyu-rule-engine/pom.xml new file mode 100644 index 0000000..ff363f4 --- /dev/null +++ b/muyu-modules/muyu-rule-engine/pom.xml @@ -0,0 +1,84 @@ + + + 4.0.0 + + com.muyu + muyu-modules + 3.6.3 + + + muyu-rule-engine + + + 17 + 17 + UTF-8 + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + io.springfox + springfox-swagger-ui + ${swagger.fox.version} + + + + + com.mysql + mysql-connector-j + + + + + com.muyu + muyu-common-datasource + + + + + com.muyu + muyu-common-datascope + + + + + com.muyu + muyu-common-log + + + + + com.muyu + muyu-common-swagger + + + + + \ No newline at end of file diff --git a/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/Main.java b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/Main.java new file mode 100644 index 0000000..95690d4 --- /dev/null +++ b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/Main.java @@ -0,0 +1,7 @@ +package com.muyu; + +public class Main { + public static void main(String[] args) { + System.out.println("Hello world!"); + } +} \ No newline at end of file diff --git a/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/ClassLoading/CustomClassLoader.java b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/ClassLoading/CustomClassLoader.java new file mode 100644 index 0000000..f55d914 --- /dev/null +++ b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/ClassLoading/CustomClassLoader.java @@ -0,0 +1,54 @@ +package com.muyu.rule.engine.ClassLoading; + +import java.io.*; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; + +/** + * @ClassName CustomClassLoader + * @Description 描述 + * @Author Xin.Yao + * @Date 2024/5/1 19:37 + */ +public class CustomClassLoader extends URLClassLoader { + public CustomClassLoader(ClassLoader parent, String classPath) throws MalformedURLException { + super(new URL[]{new URL("file:" + classPath)},parent); + } + + @Override + protected Class findClass(String name) throws ClassNotFoundException { + try { + byte[] classBytes = loadClassData(name); + return defineClass(name, classBytes, 0, classBytes.length); + } catch (IOException e) { + throw new ClassNotFoundException(name, e); + } + } + + private byte[] loadClassData(String className) throws IOException { + String fileName = className.replace('.', File.separatorChar) + ".class"; + File classFile = new File(getPathForResource(fileName)); + if (!classFile.exists()) { + throw new FileNotFoundException("Class file not found: " + classFile.getAbsolutePath()); + } + + try (InputStream in = new FileInputStream(classFile)) { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + byte[] buffer = new byte[4096]; + int n; + while ((n = in.read(buffer)) != -1) { + out.write(buffer, 0, n); + } + return out.toByteArray(); + } + } + + private String getPathForResource(String resource) { + URL url = super.getResource(resource); + if (url == null) { + throw new IllegalArgumentException("Resource not found: " + resource); + } + return url.getPath(); + } +} diff --git a/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/MuYuRuleEngineApplication.java b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/MuYuRuleEngineApplication.java new file mode 100644 index 0000000..df531c7 --- /dev/null +++ b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/MuYuRuleEngineApplication.java @@ -0,0 +1,22 @@ +package com.muyu.rule.engine; + +import com.muyu.common.security.annotation.EnableCustomConfig; +import com.muyu.common.security.annotation.EnableMyFeignClients; +import com.muyu.common.swagger.annotation.EnableCustomSwagger2; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 系统模块 + * + * @author muyu + */ +@EnableCustomConfig +@EnableCustomSwagger2 +@EnableMyFeignClients +@SpringBootApplication +public class MuYuRuleEngineApplication { + public static void main (String[] args) { + SpringApplication.run(MuYuRuleEngineApplication.class, args); + } +} diff --git a/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/controller/EngineMaintenanceController.java b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/controller/EngineMaintenanceController.java new file mode 100644 index 0000000..4d5eb34 --- /dev/null +++ b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/controller/EngineMaintenanceController.java @@ -0,0 +1,111 @@ +package com.muyu.rule.engine.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.rule.engine.domain.EngineMaintenance; +import com.muyu.rule.engine.service.IEngineMaintenanceService; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.poi.ExcelUtil; +import com.muyu.common.core.web.page.TableDataInfo; + +/** + * 【请填写功能名称】Controller + * + * @author ruoyi + * @date 2024-05-02 + */ +@RestController +@RequestMapping("/maintenance") +public class EngineMaintenanceController extends BaseController +{ + @Autowired + private IEngineMaintenanceService engineMaintenanceService; + + /** + * 查询【请填写功能名称】列表 + */ + @GetMapping("/list") + public Result> list(EngineMaintenance engineMaintenance) + { + startPage(); + List list = engineMaintenanceService.selectEngineMaintenanceList(engineMaintenance); + return getDataTable(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) + { + return success(engineMaintenanceService.selectEngineMaintenanceById(id)); + } + + /** + * 测试方法 + * @param code + * @return + */ + @GetMapping(value = "/TestMethod") + public Result testMethod(@RequestParam("code") String code) + { + return engineMaintenanceService.testMethod(code); + } + + /** + * 新增【请填写功能名称】 + */ + @Log(title = "【请填写功能名称】", businessType = BusinessType.INSERT) + @PostMapping + public Result add(@RequestBody EngineMaintenance engineMaintenance) + { + return toAjax(engineMaintenanceService.insertEngineMaintenance(engineMaintenance)); + } + + /** + * 初始化规则引擎类 + */ + @PostMapping("/InitializeRuleEngine") + public Result initializeRuleEngine(@RequestBody EngineMaintenance engineMaintenance) + { + return engineMaintenanceService.initializeRuleEngine(engineMaintenance); + } + + /** + * 修改【请填写功能名称】 + */ + @Log(title = "【请填写功能名称】", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit(@RequestBody EngineMaintenance engineMaintenance) + { + return toAjax(engineMaintenanceService.updateEngineMaintenance(engineMaintenance)); + } + + /** + * 删除【请填写功能名称】 + */ + @Log(title = "【请填写功能名称】", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public Result remove(@PathVariable Long[] ids) + { + return toAjax(engineMaintenanceService.deleteEngineMaintenanceByIds(ids)); + } +} diff --git a/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/domain/EngineMaintenance.java b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/domain/EngineMaintenance.java new file mode 100644 index 0000000..ed7067e --- /dev/null +++ b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/domain/EngineMaintenance.java @@ -0,0 +1,152 @@ +package com.muyu.rule.engine.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.muyu.common.core.annotation.Excel; +import com.muyu.common.core.web.domain.BaseEntity; + +/** + * 【请填写功能名称】对象 engine_maintenance + * + * @author ruoyi + * @date 2024-05-02 + */ +public class EngineMaintenance extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + private Long id; + + /** 规则引擎名称 */ + @Excel(name = "规则引擎名称") + private String name; + + /** 规则引擎类型 */ + @Excel(name = "规则引擎类型") + private String type; + + /** 规则引擎激活状态 */ + @Excel(name = "规则引擎激活状态") + private String isActivate; + + /** 规则引擎状态 */ + @Excel(name = "规则引擎状态") + private String status; + + /** 规则引擎描述 */ + @Excel(name = "规则引擎描述") + private String description; + + /** 规则引擎编码 */ + @Excel(name = "规则引擎编码") + private String code; + + /** 规则引擎级别 */ + @Excel(name = "规则引擎级别") + private String level; + + /** 编辑代码文本 */ + @Excel(name = "编辑代码文本") + private String codeText; + + public String getCodeText() { + return codeText; + } + + public void setCodeText(String codeText) { + this.codeText = codeText; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getId() + { + return id; + } + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + public void setType(String type) + { + this.type = type; + } + + public String getType() + { + return type; + } + public void setIsActivate(String isActivate) + { + this.isActivate = isActivate; + } + + public String getIsActivate() + { + return isActivate; + } + public void setStatus(String status) + { + this.status = status; + } + + public String getStatus() + { + return status; + } + public void setDescription(String description) + { + this.description = description; + } + + public String getDescription() + { + return description; + } + public void setCode(String code) + { + this.code = code; + } + + public String getCode() + { + return code; + } + public void setLevel(String level) + { + this.level = level; + } + + public String getLevel() + { + return level; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("name", getName()) + .append("type", getType()) + .append("isActivate", getIsActivate()) + .append("status", getStatus()) + .append("description", getDescription()) + .append("code", getCode()) + .append("level", getLevel()) + .append("codeText", getCodeText()) + .append("remark", getRemark()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/mapper/EngineMaintenanceMapper.java b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/mapper/EngineMaintenanceMapper.java new file mode 100644 index 0000000..023da43 --- /dev/null +++ b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/mapper/EngineMaintenanceMapper.java @@ -0,0 +1,61 @@ +package com.muyu.rule.engine.mapper; + +import java.util.List; +import com.muyu.rule.engine.domain.EngineMaintenance; + +/** + * 【请填写功能名称】Mapper接口 + * + * @author ruoyi + * @date 2024-05-02 + */ +public interface EngineMaintenanceMapper +{ + /** + * 查询【请填写功能名称】 + * + * @param id 【请填写功能名称】主键 + * @return 【请填写功能名称】 + */ + public EngineMaintenance selectEngineMaintenanceById(Long id); + + /** + * 查询【请填写功能名称】列表 + * + * @param engineMaintenance 【请填写功能名称】 + * @return 【请填写功能名称】集合 + */ + public List selectEngineMaintenanceList(EngineMaintenance engineMaintenance); + + /** + * 新增【请填写功能名称】 + * + * @param engineMaintenance 【请填写功能名称】 + * @return 结果 + */ + public int insertEngineMaintenance(EngineMaintenance engineMaintenance); + + /** + * 修改【请填写功能名称】 + * + * @param engineMaintenance 【请填写功能名称】 + * @return 结果 + */ + public int updateEngineMaintenance(EngineMaintenance engineMaintenance); + + /** + * 删除【请填写功能名称】 + * + * @param id 【请填写功能名称】主键 + * @return 结果 + */ + public int deleteEngineMaintenanceById(Long id); + + /** + * 批量删除【请填写功能名称】 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteEngineMaintenanceByIds(Long[] ids); +} diff --git a/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/service/IEngineMaintenanceService.java b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/service/IEngineMaintenanceService.java new file mode 100644 index 0000000..a1dc534 --- /dev/null +++ b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/service/IEngineMaintenanceService.java @@ -0,0 +1,67 @@ +package com.muyu.rule.engine.service; + +import java.util.List; + +import com.muyu.common.core.domain.Result; +import com.muyu.rule.engine.domain.EngineMaintenance; + +/** + * 【请填写功能名称】Service接口 + * + * @author ruoyi + * @date 2024-05-02 + */ +public interface IEngineMaintenanceService +{ + /** + * 查询【请填写功能名称】 + * + * @param id 【请填写功能名称】主键 + * @return 【请填写功能名称】 + */ + public EngineMaintenance selectEngineMaintenanceById(Long id); + + /** + * 查询【请填写功能名称】列表 + * + * @param engineMaintenance 【请填写功能名称】 + * @return 【请填写功能名称】集合 + */ + public List selectEngineMaintenanceList(EngineMaintenance engineMaintenance); + + /** + * 新增【请填写功能名称】 + * + * @param engineMaintenance 【请填写功能名称】 + * @return 结果 + */ + public int insertEngineMaintenance(EngineMaintenance engineMaintenance); + + /** + * 修改【请填写功能名称】 + * + * @param engineMaintenance 【请填写功能名称】 + * @return 结果 + */ + public int 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); +} diff --git a/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/service/impl/EngineMaintenanceServiceImpl.java b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/service/impl/EngineMaintenanceServiceImpl.java new file mode 100644 index 0000000..89abd5b --- /dev/null +++ b/muyu-modules/muyu-rule-engine/src/main/java/com/muyu/rule/engine/service/impl/EngineMaintenanceServiceImpl.java @@ -0,0 +1,192 @@ +package com.muyu.rule.engine.service.impl; + +import java.io.File; +import java.io.FileWriter; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; + +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.DateUtils; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.rule.engine.ClassLoading.CustomClassLoader; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.muyu.rule.engine.mapper.EngineMaintenanceMapper; +import com.muyu.rule.engine.domain.EngineMaintenance; +import com.muyu.rule.engine.service.IEngineMaintenanceService; + +import javax.tools.JavaCompiler; +import javax.tools.StandardJavaFileManager; +import javax.tools.ToolProvider; + +/** + * 【请填写功能名称】Service业务层处理 + * + * @author ruoyi + * @date 2024-05-02 + */ +@Service +@Log4j2 +public class EngineMaintenanceServiceImpl implements IEngineMaintenanceService +{ + @Autowired + private EngineMaintenanceMapper engineMaintenanceMapper; + + /** + * 查询【请填写功能名称】 + * + * @param id 【请填写功能名称】主键 + * @return 【请填写功能名称】 + */ + @Override + public EngineMaintenance selectEngineMaintenanceById(Long id) + { + return engineMaintenanceMapper.selectEngineMaintenanceById(id); + } + + /** + * 查询【请填写功能名称】列表 + * + * @param engineMaintenance 【请填写功能名称】 + * @return 【请填写功能名称】 + */ + @Override + public List selectEngineMaintenanceList(EngineMaintenance engineMaintenance) + { + return engineMaintenanceMapper.selectEngineMaintenanceList(engineMaintenance); + } + + /** + * 新增【请填写功能名称】 + * + * @param engineMaintenance 【请填写功能名称】 + * @return 结果 + */ + @Override + public int insertEngineMaintenance(EngineMaintenance engineMaintenance) + { + String className = "Rule"+Character.toUpperCase(engineMaintenance.getCode().charAt(0)) + engineMaintenance.getCode().substring(1)+"Class"; + engineMaintenance.setCreateTime(DateUtils.getNowDate()); + engineMaintenance.setCreateBy(SecurityUtils.getUsername()); + engineMaintenance.setCodeText("package com.muyu.rule.engine.domain;\n\n\n"+ + "public class " + className + " {\n" + + "}"); + return engineMaintenanceMapper.insertEngineMaintenance(engineMaintenance); + } + + /** + * 修改【请填写功能名称】 + * + * @param engineMaintenance 【请填写功能名称】 + * @return 结果 + */ + @Override + public int updateEngineMaintenance(EngineMaintenance engineMaintenance) + { + engineMaintenance.setUpdateTime(DateUtils.getNowDate()); + engineMaintenance.setUpdateBy(SecurityUtils.getUsername()); + return engineMaintenanceMapper.updateEngineMaintenance(engineMaintenance); + } + + /** + * 批量删除【请填写功能名称】 + * + * @param ids 需要删除的【请填写功能名称】主键 + * @return 结果 + */ + @Override + public int deleteEngineMaintenanceByIds(Long[] ids) + { + return engineMaintenanceMapper.deleteEngineMaintenanceByIds(ids); + } + + /** + * 删除【请填写功能名称】信息 + * + * @param id 【请填写功能名称】主键 + * @return 结果 + */ + @Override + public int deleteEngineMaintenanceById(Long id) + { + return engineMaintenanceMapper.deleteEngineMaintenanceById(id); + } + + @Override + public Result initializeRuleEngine(EngineMaintenance engineMaintenance) { + try { + //创建源文件 + String className = "Rule"+Character.toUpperCase(engineMaintenance.getCode().charAt(0)) + engineMaintenance.getCode().substring(1)+"Class"; + // 源文件路径和名称 + String javaPath = "D:\\work\\ruoyi-cloud-server\\muyu-modules\\muyu-rule-engine\\src\\main\\java\\com\\muyu\\rule\\engine\\domain\\"; + String classPath = "D:\\work\\ruoyi-cloud-server\\muyu-modules\\muyu-rule-engine\\target\\classes\\"; + String filename = javaPath+className+".java"; + File file = new File(filename); + // 确保源文件所在的目录存在 + File fileParent = file.getParentFile(); + + if (!fileParent.exists()) { + fileParent.mkdir(); + } + // 确保源文件存在,如果已存在则先删除再创建 + if (file.exists()) { + file.delete(); // 删除存在的文件 + } + file.createNewFile(); + // 将源代码写入文件 + FileWriter fw = new FileWriter(file); + fw.write(engineMaintenance.getCodeText()); + fw.flush(); + fw.close(); + // 使用JavaCompiler 编译java文件 + // 获取系统Java编译器 + JavaCompiler jc = ToolProvider.getSystemJavaCompiler(); + // 获取标准文件管理器 + StandardJavaFileManager fileManager = jc.getStandardFileManager(null, null, null); + // 获取要编译的文件对象 + Iterable fileObjects = fileManager.getJavaFileObjects(filename); + // 设置编译选项,指定输出目录 + List options = Arrays.asList("-d", classPath); + // 创建编译任务 + JavaCompiler.CompilationTask cTask = jc.getTask(null, fileManager, null, options, null, fileObjects); + // 执行编译任务 + Boolean call = cTask.call(); + // 关闭文件管理器 + fileManager.close(); + if (call){ + return Result.success("初始化成功"); + } + }catch (Exception e){ + log.error(e.getMessage()); + Result.error("初始化失败"); + } + return Result.error("初始化失败"); + } + + @Override + public Result testMethod(String code) { + String className = "Rule"+Character.toUpperCase(code.charAt(0)) + code.substring(1)+"Class"; + String classPath = "D:\\work\\ruoyi-cloud-server\\muyu-modules\\muyu-rule-engine\\target\\classes\\"; + try { + // 使用CustomClassLoader加载class到内存 + CustomClassLoader customClassLoader = new CustomClassLoader(ClassLoader.getSystemClassLoader(), classPath); + // 加载类 + Class aClass = customClassLoader.loadClass("com.muyu.rule.engine.domain."+className); + // 实例化类 + Object obj = aClass.newInstance(); + //获取类中所有方法 + Method[] methods = aClass.getDeclaredMethods(); + for (Method method : methods) { + method.invoke(obj); + } + customClassLoader = null; + } catch (Exception e) { + log.error(e.getMessage()); + Result.error("测试失败"); + } + + return Result.success("测试成功"); + } +} diff --git a/muyu-modules/muyu-rule-engine/src/main/resources/banner.txt b/muyu-modules/muyu-rule-engine/src/main/resources/banner.txt new file mode 100644 index 0000000..0dd5eee --- /dev/null +++ b/muyu-modules/muyu-rule-engine/src/main/resources/banner.txt @@ -0,0 +1,2 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} diff --git a/muyu-modules/muyu-rule-engine/src/main/resources/bootstrap.yml b/muyu-modules/muyu-rule-engine/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..f8e1775 --- /dev/null +++ b/muyu-modules/muyu-rule-engine/src/main/resources/bootstrap.yml @@ -0,0 +1,28 @@ +# Tomcat +server: + port: 9205 + +# Spring +spring: + application: + # 应用名称 + name: muyu-ruleEngine + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 43.142.44.217:8848 + config: + # 配置中心地址 + server-addr: 43.142.44.217:8848 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +logging: + level: + com.muyu.rule.engine.mapper: DEBUG diff --git a/muyu-modules/muyu-rule-engine/src/main/resources/logback.xml b/muyu-modules/muyu-rule-engine/src/main/resources/logback.xml new file mode 100644 index 0000000..aa340cd --- /dev/null +++ b/muyu-modules/muyu-rule-engine/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/muyu-modules/muyu-rule-engine/src/main/resources/mapper/ruleEngine/EngineMaintenanceMapper.xml b/muyu-modules/muyu-rule-engine/src/main/resources/mapper/ruleEngine/EngineMaintenanceMapper.xml new file mode 100644 index 0000000..854ef1f --- /dev/null +++ b/muyu-modules/muyu-rule-engine/src/main/resources/mapper/ruleEngine/EngineMaintenanceMapper.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + select id, name, type, is_activate, status, description, code, level,code_text, remark, create_by, create_time, update_by, update_time from engine_maintenance + + + + + + + + insert into engine_maintenance + + name, + type, + is_activate, + status, + description, + code, + level, + code_text, + remark, + create_by, + create_time, + update_by, + update_time, + + + #{name}, + #{type}, + #{isActivate}, + #{status}, + #{description}, + #{code}, + #{level}, + #{codeText}, + #{remark}, + #{createBy}, + #{createTime}, + #{updateBy}, + #{updateTime}, + + + + + update engine_maintenance + + name = #{name}, + type = #{type}, + is_activate = #{isActivate}, + status = #{status}, + description = #{description}, + code = #{code}, + level = #{level}, + code_text = #{codeText}, + remark = #{remark}, + create_by = #{createBy}, + create_time = #{createTime}, + update_by = #{updateBy}, + update_time = #{updateTime}, + + where id = #{id} + + + + delete from engine_maintenance where id = #{id} + + + + delete from engine_maintenance where id in + + #{id} + + + \ No newline at end of file diff --git a/muyu-modules/pom.xml b/muyu-modules/pom.xml index 931eb34..98b01f8 100644 --- a/muyu-modules/pom.xml +++ b/muyu-modules/pom.xml @@ -14,6 +14,7 @@ muyu-job muyu-file muyu-etl + muyu-rule-engine muyu-modules