From 4e9ba19c3308c957d7a13e635146f2138d8cdd0d Mon Sep 17 00:00:00 2001 From: gtl <2949451835@qq.com> Date: Fri, 3 May 2024 19:35:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=96=B0=E5=A2=9E=E8=A7=84=E5=88=99?= =?UTF-8?q?=E5=BC=95=E6=93=8E=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataAsset/GtlDataAssetApplication.java | 2 +- .../service/impl/DataSourceServiceImpl.java | 33 ++-- .../ruoyi-rule_engine-common/pom.xml | 8 +- .../ruoyi/ruleEngine/domain/EngineConfig.java | 97 +++++++++++ .../ruleEngine/domain/EngineMaintenance.java | 119 +++++++++++++ .../ruleEngine/domain/model/TestData.java | 23 +++ .../domain/req/EngineConfigEditReq.java | 38 +++++ .../domain/req/EngineConfigQueryReq.java | 38 +++++ .../domain/req/EngineConfigSaveReq.java | 46 +++++ .../domain/req/EngineMaintenanceEditReq.java | 49 ++++++ .../domain/req/EngineMaintenanceQueryReq.java | 49 ++++++ .../domain/req/EngineMaintenanceSaveReq.java | 60 +++++++ .../domain/resp/EngineConfigScopeResp.java | 27 +++ .../ruoyi-rule_engine-server/pom.xml | 105 ++++++++++++ .../ruleEngine/GtlRuleEngineApplication.java | 22 +++ .../controller/EngineConfigController.java | 111 ++++++++++++ .../EngineMaintenanceController.java | 112 ++++++++++++ .../ruleEngine/dynamicLoad/DynamicLoader.java | 78 +++++++++ .../dynamicLoad/MemoryJavaFileManager.java | 144 ++++++++++++++++ .../ruleEngine/mapper/EngineConfigMapper.java | 14 ++ .../mapper/EngineMaintenanceMapper.java | 14 ++ .../scope/DataModelContextHolder.java | 19 +++ .../scope/DataSetContextHolder.java | 19 +++ .../ruleEngine/scope/RecordContextHolder.java | 19 +++ .../ruleEngine/scope/TaskContextHolder.java | 14 ++ .../com/ruoyi/ruleEngine/scope/TestClass.txt | 10 ++ .../service/EngineConfigService.java | 43 +++++ .../service/EngineMaintenanceService.java | 35 ++++ .../service/impl/EngineConfigServiceImpl.java | 161 ++++++++++++++++++ .../impl/EngineMaintenanceServiceImpl.java | 105 ++++++++++++ .../src/main/resources/banner.txt | 8 + .../src/main/resources/bootstrap.yml | 30 ++++ .../src/main/resources/logback.xml | 74 ++++++++ 33 files changed, 1710 insertions(+), 16 deletions(-) create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/EngineConfig.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/EngineMaintenance.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/model/TestData.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineConfigEditReq.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineConfigQueryReq.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineConfigSaveReq.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineMaintenanceEditReq.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineMaintenanceQueryReq.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineMaintenanceSaveReq.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/resp/EngineConfigScopeResp.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/GtlRuleEngineApplication.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/controller/EngineConfigController.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/controller/EngineMaintenanceController.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/dynamicLoad/DynamicLoader.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/dynamicLoad/MemoryJavaFileManager.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/mapper/EngineConfigMapper.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/mapper/EngineMaintenanceMapper.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/DataModelContextHolder.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/DataSetContextHolder.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/RecordContextHolder.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/TaskContextHolder.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/TestClass.txt create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/EngineConfigService.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/EngineMaintenanceService.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/impl/EngineConfigServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/impl/EngineMaintenanceServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/resources/banner.txt create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/resources/bootstrap.yml create mode 100644 ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/resources/logback.xml diff --git a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-server/src/main/java/com/ruoyi/dataAsset/GtlDataAssetApplication.java b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-server/src/main/java/com/ruoyi/dataAsset/GtlDataAssetApplication.java index 24ccdb1..281c807 100644 --- a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-server/src/main/java/com/ruoyi/dataAsset/GtlDataAssetApplication.java +++ b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-server/src/main/java/com/ruoyi/dataAsset/GtlDataAssetApplication.java @@ -7,7 +7,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** - * etl服务模块 + * data_asset服务模块 * * @author gtl */ diff --git a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-server/src/main/java/com/ruoyi/dataAsset/service/impl/DataSourceServiceImpl.java b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-server/src/main/java/com/ruoyi/dataAsset/service/impl/DataSourceServiceImpl.java index 8c1f2a6..e7f6a38 100644 --- a/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-server/src/main/java/com/ruoyi/dataAsset/service/impl/DataSourceServiceImpl.java +++ b/ruoyi-modules/ruoyi-data_asset/ruoyi-data_asset-server/src/main/java/com/ruoyi/dataAsset/service/impl/DataSourceServiceImpl.java @@ -118,11 +118,11 @@ public class DataSourceServiceImpl extends ServiceImpl{ - //可能同步过,先删除 - TableInfo one = tableInfoService.getOne(new LambdaQueryWrapper() - .eq(TableInfo::getName, tableName) - .eq(TableInfo::getDataSourceId, dataSource.getId())); - if(Objects.nonNull(one)){ - tableInfoService.removeById(one.getId()); - columnInfoService.remove(new LambdaQueryWrapper() - .eq(ColumnInfo::getTableId,one.getId())); - } - }); + //可能同步过,先删除 + TableInfo one = tableInfoService.getOne(new LambdaQueryWrapper() + .eq(TableInfo::getName, tableName) + .eq(TableInfo::getDataSourceId, dataSource.getId())); + if(Objects.nonNull(one)){ + tableInfoService.removeById(one.getId()); + columnInfoService.remove(new LambdaQueryWrapper() + .eq(ColumnInfo::getTableId,one.getId())); + } //添加 tableInfoService.save(tableInfo); //异步存储表数据 diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/pom.xml b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/pom.xml index ffec837..6f63a6e 100644 --- a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/pom.xml +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/pom.xml @@ -18,5 +18,11 @@ 17 UTF-8 - + + + + com.muyu + muyu-common-core + + diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/EngineConfig.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/EngineConfig.java new file mode 100644 index 0000000..c8d9044 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/EngineConfig.java @@ -0,0 +1,97 @@ +package com.ruoyi.ruleEngine.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.ruleEngine.domain.req.EngineConfigQueryReq; +import com.ruoyi.ruleEngine.domain.req.EngineConfigSaveReq; +import com.ruoyi.ruleEngine.domain.req.EngineConfigEditReq; +import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.function.Supplier; +import java.util.Date; + +/** + * 引擎规则配置对象 engine_config + * + * @author gtl + * @date 2024-05-02 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("engine_config") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "EngineConfig", description = "引擎规则配置") +public class EngineConfig extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "编号", value = "编号") + private Long id; + + /** 版本编码 */ + @Excel(name = "版本编码") + @ApiModelProperty(name = "版本编码", value = "版本编码", required = true) + private String versionCode; + + /** 规则内容 */ + @Excel(name = "规则内容") + @ApiModelProperty(name = "规则内容", value = "规则内容", required = true) + private String ruleContent; + + /** 引擎维护编号 */ + @Excel(name = "引擎维护编号") + @ApiModelProperty(name = "引擎维护编号", value = "引擎维护编号", required = true) + private Long engineMaintenanceId; + + /** + * 查询构造器 + */ + public static EngineConfig queryBuild( EngineConfigQueryReq engineConfigQueryReq){ + return EngineConfig.builder() + .versionCode(engineConfigQueryReq.getVersionCode()) + .ruleContent(engineConfigQueryReq.getRuleContent()) + .engineMaintenanceId(engineConfigQueryReq.getEngineMaintenanceId()) + .build(); + } + + /** + * 添加构造器 + */ + public static EngineConfig saveBuild(EngineConfigSaveReq engineConfigSaveReq,Supplier createBy){ + return EngineConfig.builder() + .versionCode(engineConfigSaveReq.getVersionCode()) + .ruleContent(engineConfigSaveReq.getRuleContent()) + .engineMaintenanceId(engineConfigSaveReq.getEngineMaintenanceId()) + .remark(engineConfigSaveReq.getRemark()) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } + + /** + * 修改构造器 + */ + public static EngineConfig editBuild(Long id, EngineConfigEditReq engineConfigEditReq, Supplier updateBy){ + return EngineConfig.builder() + .id(id) + .versionCode(engineConfigEditReq.getVersionCode()) + .ruleContent(engineConfigEditReq.getRuleContent()) + .engineMaintenanceId(engineConfigEditReq.getEngineMaintenanceId()) + .remark(engineConfigEditReq.getRemark()) + .updateBy(updateBy.get()) + .updateTime(new Date()) + .build(); + } + +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/EngineMaintenance.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/EngineMaintenance.java new file mode 100644 index 0000000..76116ca --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/EngineMaintenance.java @@ -0,0 +1,119 @@ +package com.ruoyi.ruleEngine.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.annotation.Excel; +import com.ruoyi.ruleEngine.domain.req.EngineMaintenanceQueryReq; +import com.ruoyi.ruleEngine.domain.req.EngineMaintenanceSaveReq; +import com.ruoyi.ruleEngine.domain.req.EngineMaintenanceEditReq; +import com.ruoyi.common.core.web.domain.BaseEntity; +import java.util.function.Supplier; +import java.util.Date; + +/** + * 引擎维护对象 engine_maintenance + * + * @author gtl + * @date 2024-05-02 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@TableName("engine_maintenance") +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "EngineMaintenance", description = "引擎维护") +public class EngineMaintenance extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + @TableId(value = "id",type = IdType.AUTO) + @ApiModelProperty(name = "编号", value = "编号") + private Long id; + + /** 名称 */ + @Excel(name = "名称") + @ApiModelProperty(name = "名称", value = "名称") + private String name; + + /** 类型 */ + @Excel(name = "类型") + @ApiModelProperty(name = "类型", value = "类型") + private Long type; + + /** 作用域 */ + @Excel(name = "作用域") + @ApiModelProperty(name = "作用域", value = "作用域") + private Integer scope; + + /** 引擎编码 */ + @Excel(name = "引擎编码") + @ApiModelProperty(name = "引擎编码", value = "引擎编码") + private String engineCode; + + /** 是否激活 */ + @Excel(name = "是否激活") + @ApiModelProperty(name = "是否激活", value = "是否激活") + private String isActivate; + + /** 状态 */ + @Excel(name = "状态") + @ApiModelProperty(name = "状态", value = "状态") + private String status; + + /** + * 查询构造器 + */ + public static EngineMaintenance queryBuild( EngineMaintenanceQueryReq engineMaintenanceQueryReq){ + return EngineMaintenance.builder() + .name(engineMaintenanceQueryReq.getName()) + .type(engineMaintenanceQueryReq.getType()) + .scope(engineMaintenanceQueryReq.getScope()) + .engineCode(engineMaintenanceQueryReq.getEngineCode()) + .isActivate(engineMaintenanceQueryReq.getIsActivate()) + .status(engineMaintenanceQueryReq.getStatus()) + .build(); + } + + /** + * 添加构造器 + */ + public static EngineMaintenance saveBuild(EngineMaintenanceSaveReq engineMaintenanceSaveReq,Supplier createBy){ + return EngineMaintenance.builder() + .name(engineMaintenanceSaveReq.getName()) + .type(engineMaintenanceSaveReq.getType()) + .scope(engineMaintenanceSaveReq.getScope()) + .engineCode(engineMaintenanceSaveReq.getEngineCode()) + .isActivate(engineMaintenanceSaveReq.getIsActivate()) + .status(engineMaintenanceSaveReq.getStatus()) + .createBy(createBy.get()) + .createTime(new Date()) + .build(); + } + + /** + * 修改构造器 + */ + public static EngineMaintenance editBuild(Long id, EngineMaintenanceEditReq engineMaintenanceEditReq, Supplier updateBy){ + return EngineMaintenance.builder() + .id(id) + .name(engineMaintenanceEditReq.getName()) + .type(engineMaintenanceEditReq.getType()) + .scope(engineMaintenanceEditReq.getScope()) + .engineCode(engineMaintenanceEditReq.getEngineCode()) + .isActivate(engineMaintenanceEditReq.getIsActivate()) + .status(engineMaintenanceEditReq.getStatus()) + .updateBy(updateBy.get()) + .updateTime(new Date()) + .build(); + } + +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/model/TestData.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/model/TestData.java new file mode 100644 index 0000000..e34f68b --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/model/TestData.java @@ -0,0 +1,23 @@ +package com.ruoyi.ruleEngine.domain.model; + +import lombok.Data; + +import java.util.List; + +/** + * 测试数据 + * @ClassName TestData + * @Author 森静若林 + * @Date 2024/5/3 16:13 + */ +@Data +public class TestData { + /** + * 引擎配置编号 + */ + private Long id; + /** + * 测试数据集合 + */ + private List list; +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineConfigEditReq.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineConfigEditReq.java new file mode 100644 index 0000000..4966afc --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineConfigEditReq.java @@ -0,0 +1,38 @@ +package com.ruoyi.ruleEngine.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 引擎规则配置对象 engine_config + * + * @author gtl + * @date 2024-05-02 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "EngineConfigEditReq", description = "引擎规则配置") +public class EngineConfigEditReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 版本编码 */ + @ApiModelProperty(name = "版本编码", value = "版本编码", required = true) + private String versionCode; + + /** 规则内容 */ + @ApiModelProperty(name = "规则内容", value = "规则内容", required = true) + private String ruleContent; + + /** 引擎维护编号 */ + @ApiModelProperty(name = "引擎维护编号", value = "引擎维护编号", required = true) + private Long engineMaintenanceId; + +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineConfigQueryReq.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineConfigQueryReq.java new file mode 100644 index 0000000..b3a9bda --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineConfigQueryReq.java @@ -0,0 +1,38 @@ +package com.ruoyi.ruleEngine.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 引擎规则配置对象 engine_config + * + * @author gtl + * @date 2024-05-02 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "EngineConfigQueryReq", description = "引擎规则配置") +public class EngineConfigQueryReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 版本编码 */ + @ApiModelProperty(name = "版本编码", value = "版本编码") + private String versionCode; + + /** 规则内容 */ + @ApiModelProperty(name = "规则内容", value = "规则内容") + private String ruleContent; + + /** 引擎维护编号 */ + @ApiModelProperty(name = "引擎维护编号", value = "引擎维护编号") + private Long engineMaintenanceId; + +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineConfigSaveReq.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineConfigSaveReq.java new file mode 100644 index 0000000..28f81ce --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineConfigSaveReq.java @@ -0,0 +1,46 @@ +package com.ruoyi.ruleEngine.domain.req; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 引擎规则配置对象 engine_config + * + * @author gtl + * @date 2024-05-02 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "EngineConfigSaveReq", description = "引擎规则配置") +public class EngineConfigSaveReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + + @ApiModelProperty(name = "编号", value = "编号") + private Long id; + + /** 版本编码 */ + + @ApiModelProperty(name = "版本编码", value = "版本编码", required = true) + private String versionCode; + + /** 规则内容 */ + + @ApiModelProperty(name = "规则内容", value = "规则内容", required = true) + private String ruleContent; + + /** 引擎维护编号 */ + + @ApiModelProperty(name = "引擎维护编号", value = "引擎维护编号", required = true) + private Long engineMaintenanceId; + +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineMaintenanceEditReq.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineMaintenanceEditReq.java new file mode 100644 index 0000000..428ebc0 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineMaintenanceEditReq.java @@ -0,0 +1,49 @@ +package com.ruoyi.ruleEngine.domain.req; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 引擎维护对象 engine_maintenance + * + * @author gtl + * @date 2024-05-02 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "EngineMaintenanceEditReq", description = "引擎维护") +public class EngineMaintenanceEditReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 名称 */ + @ApiModelProperty(name = "名称", value = "名称") + private String name; + + /** 类型 */ + @ApiModelProperty(name = "类型", value = "类型") + private Long type; + + /** 作用域 */ + @ApiModelProperty(name = "作用域", value = "作用域") + private Integer scope; + + /** 引擎编码 */ + @ApiModelProperty(name = "引擎编码", value = "引擎编码") + private String engineCode; + + /** 是否激活 */ + @ApiModelProperty(name = "是否激活", value = "是否激活") + private String isActivate; + + /** 状态 */ + @ApiModelProperty(name = "状态", value = "状态") + private String status; + +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineMaintenanceQueryReq.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineMaintenanceQueryReq.java new file mode 100644 index 0000000..2d5b5c1 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineMaintenanceQueryReq.java @@ -0,0 +1,49 @@ +package com.ruoyi.ruleEngine.domain.req; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 引擎维护对象 engine_maintenance + * + * @author gtl + * @date 2024-05-02 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "EngineMaintenanceQueryReq", description = "引擎维护") +public class EngineMaintenanceQueryReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 名称 */ + @ApiModelProperty(name = "名称", value = "名称") + private String name; + + /** 类型 */ + @ApiModelProperty(name = "类型", value = "类型") + private Long type; + + /** 作用域 */ + @ApiModelProperty(name = "作用域", value = "作用域") + private Integer scope; + + /** 引擎编码 */ + @ApiModelProperty(name = "引擎编码", value = "引擎编码") + private String engineCode; + + /** 是否激活 */ + @ApiModelProperty(name = "是否激活", value = "是否激活") + private String isActivate; + + /** 状态 */ + @ApiModelProperty(name = "状态", value = "状态") + private String status; + +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineMaintenanceSaveReq.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineMaintenanceSaveReq.java new file mode 100644 index 0000000..9d7fcbf --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/req/EngineMaintenanceSaveReq.java @@ -0,0 +1,60 @@ +package com.ruoyi.ruleEngine.domain.req; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.AllArgsConstructor; +import lombok.experimental.SuperBuilder; +import io.swagger.annotations.*; +import com.ruoyi.common.core.web.domain.BaseEntity; + +/** + * 引擎维护对象 engine_maintenance + * + * @author gtl + * @date 2024-05-02 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "EngineMaintenanceSaveReq", description = "引擎维护") +public class EngineMaintenanceSaveReq extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** 编号 */ + + @ApiModelProperty(name = "编号", value = "编号") + private Long id; + + /** 名称 */ + + @ApiModelProperty(name = "名称", value = "名称") + private String name; + + /** 类型 */ + + @ApiModelProperty(name = "类型", value = "类型") + private Long type; + + /** 作用域 */ + + @ApiModelProperty(name = "作用域", value = "作用域") + private Integer scope; + + /** 引擎编码 */ + + @ApiModelProperty(name = "引擎编码", value = "引擎编码") + private String engineCode; + + /** 是否激活 */ + + @ApiModelProperty(name = "是否激活", value = "是否激活") + private String isActivate; + + /** 状态 */ + + @ApiModelProperty(name = "状态", value = "状态") + private String status; + +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/resp/EngineConfigScopeResp.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/resp/EngineConfigScopeResp.java new file mode 100644 index 0000000..d8bc0aa --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-common/src/main/java/com/ruoyi/ruleEngine/domain/resp/EngineConfigScopeResp.java @@ -0,0 +1,27 @@ +package com.ruoyi.ruleEngine.domain.resp; + +import lombok.Data; +import lombok.experimental.SuperBuilder; + +import java.io.Serializable; + +/** + * 规则引擎作用域 + * @ClassName RuleEngineScopeResp + * @Author 森静若林 + * @Date 2024/5/2 15:05 + */ +@Data +@SuperBuilder +public class EngineConfigScopeResp implements Serializable { + private static final long serialVersionUID = 1L; + + /** 类型 */ + private String type; + + /** 名称 */ + private String name; + + /** 代码 */ + private String code; +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/pom.xml b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/pom.xml index 417b169..dea8fad 100644 --- a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/pom.xml +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/pom.xml @@ -18,5 +18,110 @@ 17 UTF-8 + + + + com.muyu + ruoyi-rule_engine-common + 3.6.3 + + + + 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 + + + + + com.microsoft.sqlserver + mssql-jdbc + 9.4.0.jre8 + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + true + + + + org.springframework.boot + spring-boot-maven-plugin + + com.ruoyi.ruleEngine.GtlRuleEngineApplication + + + + diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/GtlRuleEngineApplication.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/GtlRuleEngineApplication.java new file mode 100644 index 0000000..badcb30 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/GtlRuleEngineApplication.java @@ -0,0 +1,22 @@ +package com.ruoyi.ruleEngine; + +import com.ruoyi.common.security.annotation.EnableCustomConfig; +import com.ruoyi.common.security.annotation.EnableMyFeignClients; +import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * rule_engine服务模块 + * + * @author gtl + */ +@EnableCustomConfig +@EnableCustomSwagger2 +@EnableMyFeignClients +@SpringBootApplication +public class GtlRuleEngineApplication { + public static void main(String[] args) { + SpringApplication.run(GtlRuleEngineApplication.class,args); + } +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/controller/EngineConfigController.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/controller/EngineConfigController.java new file mode 100644 index 0000000..e0cefa0 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/controller/EngineConfigController.java @@ -0,0 +1,111 @@ +package com.ruoyi.ruleEngine.controller; + +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.ruleEngine.domain.EngineConfig; +import com.ruoyi.ruleEngine.domain.model.TestData; +import com.ruoyi.ruleEngine.domain.req.EngineConfigEditReq; +import com.ruoyi.ruleEngine.domain.req.EngineConfigQueryReq; +import com.ruoyi.ruleEngine.domain.req.EngineConfigSaveReq; +import com.ruoyi.ruleEngine.domain.resp.EngineConfigScopeResp; +import com.ruoyi.ruleEngine.service.EngineConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import java.util.List; + +/** + * 引擎配置Controller + * + * @author gtl + * @date 2024-05-02 + */ +@Api(tags = "引擎配置") +@RestController +@RequestMapping("/config") +public class EngineConfigController extends BaseController { + + @Autowired + private EngineConfigService engineConfigService; + + /** + * 获取引擎配置作用域列表 + */ + @ApiOperation("获取引擎配置作用域列表") + @RequiresPermissions("rule_engine:config:list") + @GetMapping("/getScopeList") + public Result> getScopeList() { + return Result.success(engineConfigService.getScopeList()); + } + + /** + * 通过引擎作用域编号获取引擎配置作用域信息 + */ + @ApiOperation("通过引擎作用域编号获取引擎配置作用域信息") + @RequiresPermissions("rule_engine:config:list") + @GetMapping("/getScopeInfo/{id}") + public Result getScopeInfoById(@PathVariable Integer id) { + return Result.success(engineConfigService.getScopeInfoById(id)); + } + + /** + * 查询引擎规则配置列表 + */ + @ApiOperation("获取引擎规则配置列表") + @RequiresPermissions("ruleEngine:config:list") + @GetMapping("/list") + public Result> list(EngineConfigQueryReq engineConfigQueryReq) { + return Result.success(engineConfigService.list(EngineConfig.queryBuild(engineConfigQueryReq))); + } + + /** + * 测试引擎规则配置 + */ + @ApiOperation("测试引擎规则配置") + @RequiresPermissions("ruleEngine:config:add") + @PostMapping(value = "/test") + public Result ruleTest(@RequestBody TestData testData) { + return Result.success(engineConfigService.ruleTest(testData)); + } + + /** + * 新增引擎规则配置 + */ + @RequiresPermissions("ruleEngine:config:add") + @Log(title = "引擎规则配置", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增引擎规则配置") + public Result add(@RequestBody EngineConfigSaveReq engineConfigSaveReq) { + return toAjax(engineConfigService.save(EngineConfig.saveBuild(engineConfigSaveReq, SecurityUtils::getUsername))); + } + + /** + * 修改引擎规则配置 + */ + @RequiresPermissions("ruleEngine:config:edit") + @Log(title = "引擎规则配置", businessType = BusinessType.UPDATE) + @PutMapping("/{id}") + @ApiOperation("修改引擎规则配置") + public Result edit(@PathVariable Long id, @RequestBody EngineConfigEditReq engineConfigEditReq) { + return toAjax(engineConfigService.updateById(EngineConfig.editBuild(id,engineConfigEditReq, SecurityUtils::getUsername))); + } + + /** + * 删除引擎规则配置 + */ + @RequiresPermissions("ruleEngine:config:remove") + @Log(title = "引擎规则配置", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除引擎规则配置") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4") + public Result remove(@PathVariable List ids) { + return toAjax(engineConfigService.removeBatchByIds(ids)); + } + +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/controller/EngineMaintenanceController.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/controller/EngineMaintenanceController.java new file mode 100644 index 0000000..e970e32 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/controller/EngineMaintenanceController.java @@ -0,0 +1,112 @@ +package com.ruoyi.ruleEngine.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import com.ruoyi.common.core.utils.poi.ExcelUtil; +import com.ruoyi.common.core.web.page.TableDataInfo; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.ruleEngine.service.EngineMaintenanceService; +import io.swagger.annotations.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.core.domain.Result; +import com.ruoyi.common.core.web.controller.BaseController; +import com.ruoyi.common.log.annotation.Log; +import com.ruoyi.common.log.enums.BusinessType; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.ruoyi.ruleEngine.domain.EngineMaintenance; +import com.ruoyi.ruleEngine.domain.req.EngineMaintenanceQueryReq; +import com.ruoyi.ruleEngine.domain.req.EngineMaintenanceSaveReq; +import com.ruoyi.ruleEngine.domain.req.EngineMaintenanceEditReq; + + +/** + * 引擎维护Controller + * + * @author gtl + * @date 2024-05-02 + */ +@Api(tags = "引擎维护") +@RestController +@RequestMapping("/maintenance") +public class EngineMaintenanceController extends BaseController { + @Autowired + private EngineMaintenanceService engineMaintenanceService; + + /** + * 查询引擎维护列表 + */ + @ApiOperation("获取引擎维护列表") + @RequiresPermissions("rule_engine:maintenance:list") + @GetMapping("/list") + public Result> list(EngineMaintenanceQueryReq engineMaintenanceQueryReq) { + startPage(); + List list = engineMaintenanceService.list(EngineMaintenance.queryBuild(engineMaintenanceQueryReq)); + return getDataTable(list); + } + + /** + * 导出引擎维护列表 + */ + @ApiOperation("导出引擎维护列表") + @RequiresPermissions("rule_engine:maintenance:export") + @Log(title = "引擎维护", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, EngineMaintenance engineMaintenance) { + List list = engineMaintenanceService.list(engineMaintenance); + ExcelUtil util = new ExcelUtil(EngineMaintenance.class); + util.exportExcel(response, list, "引擎维护数据"); + } + + /** + * 获取引擎维护详细信息 + */ + @ApiOperation("获取引擎维护详细信息") + @RequiresPermissions("rule_engine:maintenance:query") + @GetMapping(value = "/{id}") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = Long.class) + public Result getInfo(@PathVariable("id") Long id) { + return Result.success(engineMaintenanceService.getById(id)); + } + + /** + * 新增引擎维护 + */ + @RequiresPermissions("rule_engine:maintenance:add") + @Log(title = "引擎维护", businessType = BusinessType.INSERT) + @PostMapping + @ApiOperation("新增引擎维护") + public Result add(@RequestBody EngineMaintenanceSaveReq engineMaintenanceSaveReq) { + return toAjax(engineMaintenanceService.saveEngineMaintenance(EngineMaintenance.saveBuild(engineMaintenanceSaveReq, SecurityUtils::getUsername))); + } + + /** + * 修改引擎维护 + */ + @RequiresPermissions("rule_engine:maintenance:edit") + @Log(title = "引擎维护", businessType = BusinessType.UPDATE) + @PutMapping("/{id}") + @ApiOperation("修改引擎维护") + public Result edit(@PathVariable Long id, @RequestBody EngineMaintenanceEditReq engineMaintenanceEditReq) { + return toAjax(engineMaintenanceService.updateById(EngineMaintenance.editBuild(id,engineMaintenanceEditReq, SecurityUtils::getUsername))); + } + + /** + * 删除引擎维护 + */ + @RequiresPermissions("rule_engine:maintenance:remove") + @Log(title = "引擎维护", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + @ApiOperation("删除引擎维护") + @ApiImplicitParam(name = "id", value = "id", required = true, dataType = "Long", paramType = "path", dataTypeClass = String.class, example = "1,2,3,4") + public Result remove(@PathVariable List ids) { + return toAjax(engineMaintenanceService.removeBatchEngineMaintenanceByIds(ids)); + } +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/dynamicLoad/DynamicLoader.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/dynamicLoad/DynamicLoader.java new file mode 100644 index 0000000..47d05aa --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/dynamicLoad/DynamicLoader.java @@ -0,0 +1,78 @@ +package com.ruoyi.ruleEngine.dynamicLoad; + +import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import javax.tools.JavaCompiler; +import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.ToolProvider; + +/** + * @ClassName DynamicLoader + * @Author 森静若林 + * @Date 2024/5/1 20:37 + */ +public class DynamicLoader { + /** + * 通过类名和其代码(Java代码字符串),编译得到字节码,返回类名及其对应类的字节码,封装于Map中,值得注意的是, + * 平常类中就编译出来的字节码只有一个类,但是考虑到内部类的情况, 会出现很多个类名及其字节码,所以用Map封装方便。 + * + * @param javaName 类名 + * @param javaSrc Java源码 + * @return map + */ + public static Map compile(String javaName, String javaSrc) { + // 调用java编译器接口 + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + StandardJavaFileManager stdManager = compiler + .getStandardFileManager(null, null, null); + + try (MemoryJavaFileManager manager = new MemoryJavaFileManager( + stdManager)) { + + @SuppressWarnings("static-access") + JavaFileObject javaFileObject = manager.makeStringSource(javaName, + javaSrc); + JavaCompiler.CompilationTask task = compiler.getTask(null, manager, + null, null, null, Arrays.asList(javaFileObject)); + if (task.call()) { + return manager.getClassBytes(); + } + + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 先根据类名在内存中查找是否已存在该类,若不存在则调用 URLClassLoader的 defineClass方法加载该类 + * URLClassLoader的具体作用就是将class文件加载到jvm虚拟机中去 + * + * @author Administrator + * + */ + public static class MemoryClassLoader extends URLClassLoader { + Map classBytes = new HashMap(); + + public MemoryClassLoader(Map classBytes) { + super(new URL[0], MemoryClassLoader.class.getClassLoader()); + this.classBytes.putAll(classBytes); + } + + @Override + protected Class findClass(String name) + throws ClassNotFoundException { + byte[] buf = classBytes.get(name); + if (buf == null) { + return super.findClass(name); + } + classBytes.remove(name); + return defineClass(name, buf, 0, buf.length); + } + } +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/dynamicLoad/MemoryJavaFileManager.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/dynamicLoad/MemoryJavaFileManager.java new file mode 100644 index 0000000..aa784d7 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/dynamicLoad/MemoryJavaFileManager.java @@ -0,0 +1,144 @@ +package com.ruoyi.ruleEngine.dynamicLoad; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.Reader; +import java.io.StringReader; +import java.net.URI; +import java.nio.CharBuffer; +import java.util.HashMap; +import java.util.Map; +import javax.tools.FileObject; +import javax.tools.ForwardingJavaFileManager; +import javax.tools.JavaFileManager; +import javax.tools.JavaFileObject; +import javax.tools.SimpleJavaFileObject; + +/** + * 将编译好的.class文件保存到内存当中,这里的内存也就是map映射当中 + * @ClassName MemoryJavaFileManager + * @Author 森静若林 + * @Date 2024/5/1 20:38 + */ +@SuppressWarnings("rawtypes") +public final class MemoryJavaFileManager extends ForwardingJavaFileManager { + + private final static String EXT = ".java";// Java源文件的扩展名 + private Map classBytes;// 用于存放.class文件的内存 + + @SuppressWarnings("unchecked") + public MemoryJavaFileManager(JavaFileManager fileManager) { + super(fileManager); + classBytes = new HashMap(); + } + + public Map getClassBytes() { + return classBytes; + } + + @Override + public void close() throws IOException { + classBytes = new HashMap(); + } + + @Override + public void flush() throws IOException { + } + + /** + * 一个文件对象,用来表示从string中获取到的source,一下类容是按照jkd给出的例子写的 + */ + private static class StringInputBuffer extends SimpleJavaFileObject { + // The source code of this "file". + final String code; + + /** + * Constructs a new JavaSourceFromString. + * + * @param name 此文件对象表示的编译单元的name + * @param code 此文件对象表示的编译单元source的code + */ + StringInputBuffer(String name, String code) { + super(toURI(name), Kind.SOURCE); + this.code = code; + } + + @Override + public CharBuffer getCharContent(boolean ignoreEncodingErrors) { + return CharBuffer.wrap(code); + } + + @SuppressWarnings("unused") + public Reader openReader() { + return new StringReader(code); + } + } + + /** + * 将Java字节码存储到classBytes映射中的文件对象 + */ + private class ClassOutputBuffer extends SimpleJavaFileObject { + private String name; + + /** + * @param name className + */ + ClassOutputBuffer(String name) { + super(toURI(name), Kind.CLASS); + this.name = name; + } + + @Override + public OutputStream openOutputStream() { + return new FilterOutputStream(new ByteArrayOutputStream()) { + @Override + public void close() throws IOException { + out.close(); + ByteArrayOutputStream bos = (ByteArrayOutputStream) out; + + // 这里需要修改 + classBytes.put(name, bos.toByteArray()); + } + }; + } + } + + @Override + public JavaFileObject getJavaFileForOutput( + JavaFileManager.Location location, String className, + JavaFileObject.Kind kind, FileObject sibling) throws IOException { + if (kind == JavaFileObject.Kind.CLASS) { + return new ClassOutputBuffer(className); + } else { + return super.getJavaFileForOutput(location, className, kind, + sibling); + } + } + + static JavaFileObject makeStringSource(String name, String code) { + return new StringInputBuffer(name, code); + } + + static URI toURI(String name) { + File file = new File(name); + if (file.exists()) {// 如果文件存在,返回他的URI + return file.toURI(); + } else { + try { + final StringBuilder newUri = new StringBuilder(); + newUri.append("mfm:///"); + newUri.append(name.replace('.', '/')); + if (name.endsWith(EXT)) { + newUri.replace(newUri.length() - EXT.length(), + newUri.length(), EXT); + } + return URI.create(newUri.toString()); + } catch (Exception exp) { + return URI.create("mfm:///com/sun/script/java/java_source"); + } + } + } +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/mapper/EngineConfigMapper.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/mapper/EngineConfigMapper.java new file mode 100644 index 0000000..15a3e85 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/mapper/EngineConfigMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.ruleEngine.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.ruleEngine.domain.EngineConfig; + +/** + * 引擎规则配置Mapper接口 + * + * @author gtl + * @date 2024-05-02 + */ +public interface EngineConfigMapper extends BaseMapper { + +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/mapper/EngineMaintenanceMapper.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/mapper/EngineMaintenanceMapper.java new file mode 100644 index 0000000..f6b348a --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/mapper/EngineMaintenanceMapper.java @@ -0,0 +1,14 @@ +package com.ruoyi.ruleEngine.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.ruoyi.ruleEngine.domain.EngineMaintenance; + +/** + * 引擎维护Mapper接口 + * + * @author gtl + * @date 2024-05-02 + */ +public interface EngineMaintenanceMapper extends BaseMapper { + +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/DataModelContextHolder.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/DataModelContextHolder.java new file mode 100644 index 0000000..6df5c21 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/DataModelContextHolder.java @@ -0,0 +1,19 @@ +package com.ruoyi.ruleEngine.scope; + +import lombok.Data; + +/** + * 数据模型上下文 + * @ClassName DataModelContextHolder + * @Author 森静若林 + * @Version: 1.0 + */ +@Data +public class DataModelContextHolder { + + private final RecordContextHolder recordContextHolder; + + public static DataModelContextHolder build(RecordContextHolder recordContextHolder){ + return new DataModelContextHolder(recordContextHolder); + } +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/DataSetContextHolder.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/DataSetContextHolder.java new file mode 100644 index 0000000..b4c063f --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/DataSetContextHolder.java @@ -0,0 +1,19 @@ +package com.ruoyi.ruleEngine.scope; + +import lombok.Data; + +/** + * 数据集上下文 + * @ClassName DataSetContextHolder + * @Author 森静若林 + * @Version: 1.0 + */ +@Data +public class DataSetContextHolder { + + private final TaskContextHolder taskContextHolder; + + public static DataSetContextHolder build(TaskContextHolder taskContextHolder){ + return new DataSetContextHolder(taskContextHolder); + } +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/RecordContextHolder.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/RecordContextHolder.java new file mode 100644 index 0000000..c4ac5a9 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/RecordContextHolder.java @@ -0,0 +1,19 @@ +package com.ruoyi.ruleEngine.scope; + +import lombok.Data; + +/** + * 记录上下文 + * @ClassName RecordContextHolder + * @Author 森静若林 + * @Version: 1.0 + */ +@Data +public class RecordContextHolder { + + private final DataSetContextHolder dataSetContextHolder; + + public static RecordContextHolder build(DataSetContextHolder dataSetContextHolder){ + return new RecordContextHolder(dataSetContextHolder); + } +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/TaskContextHolder.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/TaskContextHolder.java new file mode 100644 index 0000000..5987641 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/TaskContextHolder.java @@ -0,0 +1,14 @@ +package com.ruoyi.ruleEngine.scope; + +/** + * 任务上下文 + * @ClassName TaskContextHolder + * @Author 森静若林 + * @Version: 1.0 + */ +public class TaskContextHolder { + + public static TaskContextHolder build(){ + return new TaskContextHolder(); + } +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/TestClass.txt b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/TestClass.txt new file mode 100644 index 0000000..187d619 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/TestClass.txt @@ -0,0 +1,10 @@ +import java.util.List; + +/** + * @Author 森静若林 + */ +public class TestClass { + public String ruleTest(List list) { + + } +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/EngineConfigService.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/EngineConfigService.java new file mode 100644 index 0000000..1c531f0 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/EngineConfigService.java @@ -0,0 +1,43 @@ +package com.ruoyi.ruleEngine.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.ruleEngine.domain.EngineConfig; +import com.ruoyi.ruleEngine.domain.model.TestData; +import com.ruoyi.ruleEngine.domain.resp.EngineConfigScopeResp; +import java.util.List; + +/** + * 引擎配置Service接口 + * + * @author gtl + * @date 2024-05-02 + */ +public interface EngineConfigService extends IService { + /** + * 查询引擎配置作用域列表 + * + * @return 引擎规则作用域集合 + */ + public List getScopeList(); + + /** + * 查询引擎规则配置列表 + * + * @param engineConfig 引擎规则配置 + * @return 引擎规则配置集合 + */ + public List list(EngineConfig engineConfig); + + /** + * 通过引擎作用域编号获取引擎配置作用域信息 + * @param id 引擎作用域编号 + * @return 引擎配置作用域信息 + */ + EngineConfigScopeResp getScopeInfoById(Integer id); + + /** + * 规则测试 + * @param testData 规则配置版本编号 + */ + Object ruleTest(TestData testData); +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/EngineMaintenanceService.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/EngineMaintenanceService.java new file mode 100644 index 0000000..a4080eb --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/EngineMaintenanceService.java @@ -0,0 +1,35 @@ +package com.ruoyi.ruleEngine.service; + +import java.util.List; +import com.ruoyi.ruleEngine.domain.EngineMaintenance; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 引擎维护Service接口 + * + * @author gtl + * @date 2024-05-02 + */ +public interface EngineMaintenanceService extends IService { + /** + * 查询引擎维护列表 + * + * @param engineMaintenance 引擎维护 + * @return 引擎维护集合 + */ + public List list(EngineMaintenance engineMaintenance); + + /** + * 新增引擎维护 + * @param engineMaintenance 引擎维护对象 + * @return 是否 + */ + boolean saveEngineMaintenance(EngineMaintenance engineMaintenance); + + /** + * 批量删除引擎维护 + * @param ids 引擎维护编号集合 + * @return 是否 + */ + boolean removeBatchEngineMaintenanceByIds(List ids); +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/impl/EngineConfigServiceImpl.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/impl/EngineConfigServiceImpl.java new file mode 100644 index 0000000..ecf10f0 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/impl/EngineConfigServiceImpl.java @@ -0,0 +1,161 @@ +package com.ruoyi.ruleEngine.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.exception.ServiceException; +import com.ruoyi.common.core.utils.ObjUtils; +import com.ruoyi.ruleEngine.domain.EngineConfig; +import com.ruoyi.ruleEngine.domain.model.TestData; +import com.ruoyi.ruleEngine.domain.resp.EngineConfigScopeResp; +import com.ruoyi.ruleEngine.dynamicLoad.DynamicLoader; +import com.ruoyi.ruleEngine.mapper.EngineConfigMapper; +import com.ruoyi.ruleEngine.service.EngineConfigService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 引擎配置Service业务层处理 + * + * @author gtl + * @date 2024-05-02 + */ +@Slf4j +@Service +public class EngineConfigServiceImpl extends ServiceImpl implements EngineConfigService { + + /** + * 查询引擎配置作用域列表 + * + * @return 引擎规则作用域集合 + */ + @Override + public List getScopeList() { + List list=new ArrayList<>(); + List scopeName=List.of("TaskContextHolder","DataSetContextHolder","RecordContextHolder","DataModelContextHolder"); + try { + for (String scope : scopeName) { + String path="D:/workspace/gtl-ruoyi-server/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/"+scope+".java"; + String code = Files.readString(Paths.get(path)); + String type=null; + if(scope.contains("Task")){ + type="任务"; + }else if(scope.contains("DataSet")){ + type="数据集"; + }else if(scope.contains("Record")){ + type="资产记录"; + }else{ + type="资产模型"; + } + list.add(EngineConfigScopeResp.builder().type(type).name(scope).code(code).build()); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + return list; + } + + /** + * 查询引擎规则配置列表 + * + * @param engineConfig 引擎规则配置 + * @return 引擎规则配置 + */ + @Override + public List list(EngineConfig engineConfig) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + + if (ObjUtils.notNull(engineConfig.getVersionCode())){ + queryWrapper.eq(EngineConfig::getVersionCode, engineConfig.getVersionCode()); + } + + if (ObjUtils.notNull(engineConfig.getRuleContent())){ + queryWrapper.eq(EngineConfig::getRuleContent, engineConfig.getRuleContent()); + } + + if (ObjUtils.notNull(engineConfig.getEngineMaintenanceId())){ + queryWrapper.eq(EngineConfig::getEngineMaintenanceId, engineConfig.getEngineMaintenanceId()); + } + + + + + + return list(queryWrapper); + } + + /** + * 通过引擎作用域编号获取引擎配置作用域信息 + * @param id 引擎作用域编号 + * @return 引擎配置作用域信息 + */ + @Override + public EngineConfigScopeResp getScopeInfoById(Integer id) { + String scope=null; + String type=null; + if(id==0){ + type="测试模版"; + scope="TestClass.txt"; + }else if(id==1){ + type="任务"; + scope="TaskContextHolder.java"; + }else if(id==2){ + type="数据集"; + scope="DataSetContextHolder.java"; + }else if(id==3){ + type="资产记录"; + scope="RecordContextHolder.java"; + }else{ + type="资产模型"; + scope="DataModelContextHolder.java"; + } + String path="D:/workspace/gtl-ruoyi-server/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/"+scope; + String code = null; + try { + code = Files.readString(Paths.get(path)); + } catch (IOException e) { + throw new RuntimeException(e); + } + return EngineConfigScopeResp.builder().type(type).name(scope).code(code).build(); + } + + /** + * 规则测试 + * @param testData 规则配置版本编号 + */ + @Override + public Object ruleTest(TestData testData) { + Object invoke=null; + try { + String className="TestClass"; + final String SUFFIX = ".java";// 类名后面要跟的后缀 + EngineConfig config = this.getById(testData.getId()); + String content = config.getRuleContent().replaceAll("\r\n", ""); + // 对source进行编译生成class文件存放在Map中,这里用bytecode接收 + Map bytecode = DynamicLoader.compile(className + SUFFIX,content ); + + // 加载class文件到虚拟机中,然后通过反射执行 + @SuppressWarnings("resource") + DynamicLoader.MemoryClassLoader classLoader = new DynamicLoader.MemoryClassLoader( + bytecode); + Class clazz = classLoader.loadClass(className); + + // 调用ruleTest方法 + Method mainMethod = clazz.getDeclaredMethod("ruleTest", List.class); + invoke = mainMethod.invoke(null, testData.getList()); + } catch (ClassNotFoundException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { + e.printStackTrace(); + throw new ServiceException("测试失败"); + } + return invoke; + } + +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/impl/EngineMaintenanceServiceImpl.java b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/impl/EngineMaintenanceServiceImpl.java new file mode 100644 index 0000000..a458332 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/service/impl/EngineMaintenanceServiceImpl.java @@ -0,0 +1,105 @@ +package com.ruoyi.ruleEngine.service.impl; + +import java.util.List; +import com.ruoyi.common.core.utils.ObjUtils; +import com.ruoyi.ruleEngine.domain.EngineConfig; +import com.ruoyi.ruleEngine.domain.resp.EngineConfigScopeResp; +import com.ruoyi.ruleEngine.service.EngineConfigService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.ruleEngine.mapper.EngineMaintenanceMapper; +import com.ruoyi.ruleEngine.domain.EngineMaintenance; +import com.ruoyi.ruleEngine.service.EngineMaintenanceService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.transaction.annotation.Transactional; + +/** + * 引擎维护Service业务层处理 + * + * @author gtl + * @date 2024-05-02 + */ +@Slf4j +@Service +public class EngineMaintenanceServiceImpl extends ServiceImpl implements EngineMaintenanceService { + + @Autowired + private EngineConfigService engineConfigService; + + /** + * 查询引擎维护列表 + * + * @param engineMaintenance 引擎维护 + * @return 引擎维护 + */ + @Override + public List list(EngineMaintenance engineMaintenance) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + + if (ObjUtils.notNull(engineMaintenance.getName())){ + queryWrapper.like(EngineMaintenance::getName, engineMaintenance.getName()); + } + + if (ObjUtils.notNull(engineMaintenance.getType())){ + queryWrapper.eq(EngineMaintenance::getType, engineMaintenance.getType()); + } + + if (ObjUtils.notNull(engineMaintenance.getScope())){ + queryWrapper.eq(EngineMaintenance::getScope, engineMaintenance.getScope()); + } + + if (ObjUtils.notNull(engineMaintenance.getEngineCode())){ + queryWrapper.eq(EngineMaintenance::getEngineCode, engineMaintenance.getEngineCode()); + } + + if (ObjUtils.notNull(engineMaintenance.getIsActivate())){ + queryWrapper.eq(EngineMaintenance::getIsActivate, engineMaintenance.getIsActivate()); + } + + if (ObjUtils.notNull(engineMaintenance.getStatus())){ + queryWrapper.eq(EngineMaintenance::getStatus, engineMaintenance.getStatus()); + } + + + + + + return list(queryWrapper); + } + + /** + * 新增引擎维护 + * @param engineMaintenance 引擎维护对象 + * @return 是否 + */ + @Override + @Transactional + public boolean saveEngineMaintenance(EngineMaintenance engineMaintenance) { + boolean save = this.save(engineMaintenance); + EngineConfigScopeResp scopeInfo = engineConfigService.getScopeInfoById(engineMaintenance.getScope()); + engineConfigService.save(EngineConfig.builder().versionCode("1.0").ruleContent(scopeInfo.getCode()).build()); + return save; + } + + /** + * 批量删除引擎维护 + * @param ids 引擎维护编号集合 + * @return 是否 + */ + @Override + @Transactional + public boolean removeBatchEngineMaintenanceByIds(List ids) { + boolean removed = this.removeBatchByIds(ids); + List engineConfigs = engineConfigService.list(new LambdaQueryWrapper() + .in(EngineConfig::getEngineMaintenanceId, ids)); + if(!engineConfigs.isEmpty()){ + engineConfigService.removeBatchByIds(engineConfigs.stream().map(EngineConfig::getId).toList()); + } + return removed; + } + + +} diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/resources/banner.txt b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/resources/banner.txt new file mode 100644 index 0000000..b9d8703 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/resources/banner.txt @@ -0,0 +1,8 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} + __ .__ .__ + ____ _/ |_ | | _______ __ __ ____ ___.__.|__| + / ___\ \ __\| | ______ \_ __ \| | \ / _ \ < | || | + / /_/ > | | | |__ /_____/ | | \/| | /( <_> ) \___ || | + \___ / |__| |____/ |__| |____/ \____/ / ____||__| +/_____/ \/ diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/resources/bootstrap.yml b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..fb05069 --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/resources/bootstrap.yml @@ -0,0 +1,30 @@ +# Tomcat +server: + port: 9205 + +# Spring +spring: + application: + # 应用名称 + name: ruoyi-rule-engine + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: 47.98.98.250:8848 + namespace: 143f1a53-e544-4782-8667-877c532e2c66 + config: + # 配置中心地址 + server-addr: 47.98.98.250:8848 + namespace: 143f1a53-e544-4782-8667-877c532e2c66 + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +logging: + level: + com.ruoyi.ruleEngine.mapper: DEBUG diff --git a/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/resources/logback.xml b/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/resources/logback.xml new file mode 100644 index 0000000..88b252e --- /dev/null +++ b/ruoyi-modules/ruoyi-rule_engine/ruoyi-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 + + + + + + + + + + + + + + + + + +