diff --git a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/constant/GenerateConstant.java b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/constant/GenerateConstant.java index 27126a2..eb5ade7 100644 --- a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/constant/GenerateConstant.java +++ b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/constant/GenerateConstant.java @@ -31,10 +31,22 @@ public class GenerateConstant { } return className; } + + /** + * 生成一个常量的代码字符串 + * + * @param engine 引擎对象,包含引擎的级别信息 + * @param engineVersion 引擎版本对象,包含版本名称和代码 + * @return 返回一个包含包路径、导入语句、类定义以及基本注释的代码字符串 + */ public static String generateConstant(Engine engine,EngineVersion engineVersion){ + //创建日期格式化对象,用于格式化当前日期和时间 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + //格式化当前日期和时间 String format = simpleDateFormat.format(new Date()); + //获取引擎级别对应的字符串 String level = getType(engine.getLevel()); + //构建并返回代码字符串 return PACKAGE_PATH+"\n\n" + ACTION_IMPORT+"\n\n"+ SCOPE_IMPORT+level+";\n"+ diff --git a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/constant/PathConstant.java b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/constant/PathConstant.java index 8156389..2c29a4f 100644 --- a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/constant/PathConstant.java +++ b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/constant/PathConstant.java @@ -7,7 +7,12 @@ package com.muyu.engine.constant; * @Date 2024/5/11 16:11 */ public class PathConstant { + + //java源代码文件的路径 public static final String JAVA_PATH = "D:\\vue08a\\2108-cloud-server\\muyu-modules\\muyu-engine\\muyu-engine-common\\src\\main\\java\\com\\muyu\\engine\\custom\\"; + //表示编译后生成的class文件的路径 public static final String CLASS_PATH= "D:\\vue08a\\2108-cloud-server\\muyu-modules\\muyu-engine\\muyu-engine-common\\target\\classes\\"; - public static final String PACKAGE_PATH_SERVICE ="com.muyu.engine.custom"; + //表示包的路径,用于指定服务相关的包 + public static final String PACKAGE_PATH_SERVICE ="com.muyu.engine.custom."; + } diff --git a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/scope/DataSetEngine.java b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/scope/DataSetEngine.java index c1de4b4..41e3404 100644 --- a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/scope/DataSetEngine.java +++ b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/scope/DataSetEngine.java @@ -6,6 +6,8 @@ import com.muyu.model.RecordModel; import com.muyu.scope.DataSetContext; import com.muyu.scope.model.DataSetProcessModel; +import java.util.List; + /** * @ClassName DataSetEngine * @Description 数据模型引擎接口 @@ -13,22 +15,23 @@ import com.muyu.scope.model.DataSetProcessModel; * @Date 2024/5/12 11:10 */ public abstract class DataSetEngine implements Engine { - private DataSetContext dataSetContext; + private DataSetContext dataSetContext; @Override public DataSetProcessModel get(){ return dataSetContext.get(); } - public RecordModel[] getRecordModelArr(){ + + public List getRecordModelArr(){ return getDataSetModel().getRecordModelArr(); } + public DataSetModel getDataSetModel(){ return get().getDataSetModel(); } -// public DataSetContext getDataSetContext(){ -// return dataSetContext; -// } -// public void setDataSetContext(DataSetContext dataSetContext){ -// this.dataSetContext = dataSetContext; -// } + + public List getKeys(){ + return get().getKeys(); + } + } diff --git a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/scope/RecordEngine.java b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/scope/RecordEngine.java index eb49608..ad3cbf0 100644 --- a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/scope/RecordEngine.java +++ b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/engine/scope/RecordEngine.java @@ -6,6 +6,8 @@ import com.muyu.model.RecordModel; import com.muyu.scope.RecordContext; import com.muyu.scope.model.RecordProcessModel; +import java.util.List; + /** * @ClassName RecordEngine * @Description 数据模型引擎接口 @@ -13,18 +15,23 @@ import com.muyu.scope.model.RecordProcessModel; * @Date 2024/5/12 11:10 */ public abstract class RecordEngine implements Engine { + private RecordContext recordContext; + @Override public RecordProcessModel get(){ return recordContext.get(); } + public RecordModel getRecordModel(){ return get().getRecordModel(); } - public String[] getKeys(){ - return get().getKeys(); + + public List getKeys(){ + return get().getKeys(); } - public DataModel[] getDataModelArr(){ + + public List getDataModelArr(){ return getRecordModel().getDataModelArr(); } diff --git a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/model/DataModel.java b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/model/DataModel.java index 880ef85..5458eb6 100644 --- a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/model/DataModel.java +++ b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/model/DataModel.java @@ -1,6 +1,8 @@ package com.muyu.model; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; /** * @ClassName DataModel @@ -9,6 +11,8 @@ import lombok.Data; * @Date 2024/5/11 16:17 */ @Data +@AllArgsConstructor +@NoArgsConstructor public class DataModel { /** * 数据键 diff --git a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/model/DataSetModel.java b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/model/DataSetModel.java index bb086fd..3acc47c 100644 --- a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/model/DataSetModel.java +++ b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/model/DataSetModel.java @@ -1,7 +1,11 @@ package com.muyu.model; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; /** * @ClassName DataSetModel @@ -10,20 +14,13 @@ import lombok.Data; * @Date 2024/5/11 16:17 */ @Data +@AllArgsConstructor +@NoArgsConstructor public class DataSetModel { - private RecordModel[] recordModelArr = null; + private List recordModelArr; - private DataSetModel(int recordModelLength){ - recordModelArr = new RecordModel[recordModelLength]; - } - private DataSetModel(RecordModel[] recordModelArr){ - recordModelArr=recordModelArr; - } - private static DataSetModel build(int recordModelLength){ - return new DataSetModel(recordModelLength); - } - private static DataSetModel build(RecordModel[] recordModelArr){ + private static DataSetModel build(List recordModelArr){ return new DataSetModel(recordModelArr); } diff --git a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/model/RecordModel.java b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/model/RecordModel.java index 4b2e739..c16698c 100644 --- a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/model/RecordModel.java +++ b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/model/RecordModel.java @@ -1,6 +1,10 @@ package com.muyu.model; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; /** * @ClassName RecordModel @@ -9,23 +13,12 @@ import lombok.Data; * @Date 2024/5/11 16:18 */ @Data +@AllArgsConstructor +@NoArgsConstructor public class RecordModel { - private DataModel[] dataModelArr = null; - - private RecordModel(int dataModelLength){ - this.dataModelArr = new DataModel[dataModelLength]; - } - - private RecordModel(DataModel[] dataModelArr){ - this.dataModelArr = dataModelArr; - } - - public static RecordModel build(int dataModelLength){ - return new RecordModel(dataModelLength); - } - - public static RecordModel build(DataModel[] dataModelArr){ + private List dataModelArr; + public static RecordModel build(List dataModelArr){ return new RecordModel(dataModelArr); } diff --git a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/scope/model/DataProcessModel.java b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/scope/model/DataProcessModel.java index f940230..ce62087 100644 --- a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/scope/model/DataProcessModel.java +++ b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/scope/model/DataProcessModel.java @@ -1,15 +1,19 @@ package com.muyu.scope.model; import com.muyu.model.DataModel; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; /** * @ClassName DataProcessModel - * @Description 数据处理模型 + * @Description 数据处理模型 字段 * @Author Peng.Jiang * @Date 2024/5/11 19:32 */ @Data +@AllArgsConstructor +@NoArgsConstructor public class DataProcessModel { private DataModel dataModel; diff --git a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/scope/model/DataSetProcessModel.java b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/scope/model/DataSetProcessModel.java index b8121fa..8c2c7bf 100644 --- a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/scope/model/DataSetProcessModel.java +++ b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/scope/model/DataSetProcessModel.java @@ -1,17 +1,24 @@ package com.muyu.scope.model; import com.muyu.model.DataSetModel; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; /** * @ClassName DataSetProcessModel - * @Description 数据处理模型 + * @Description 数据处理模型 数据集 * @Author Peng.Jiang * @Date 2024/5/11 19:32 */ @Data +@AllArgsConstructor +@NoArgsConstructor public class DataSetProcessModel { + private List keys; private DataSetModel dataSetModel; } diff --git a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/scope/model/RecordProcessModel.java b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/scope/model/RecordProcessModel.java index c79bb6f..ea716f5 100644 --- a/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/scope/model/RecordProcessModel.java +++ b/muyu-modules/muyu-engine/muyu-engine-common/src/main/java/com/muyu/scope/model/RecordProcessModel.java @@ -2,18 +2,24 @@ package com.muyu.scope.model; import com.muyu.model.DataSetModel; import com.muyu.model.RecordModel; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; /** * @ClassName RecordProcessModel - * @Description 数据处理模型 + * @Description 数据处理模型 记录 * @Author Peng.Jiang * @Date 2024/5/11 19:33 */ @Data +@AllArgsConstructor +@NoArgsConstructor public class RecordProcessModel { - private String[] keys; + private List keys; private RecordModel recordModel; } diff --git a/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/controller/EngineVersionController.java b/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/controller/EngineVersionController.java index e5a53e6..124e477 100644 --- a/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/controller/EngineVersionController.java +++ b/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/controller/EngineVersionController.java @@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletResponse; import com.muyu.common.core.utils.poi.ExcelUtil; import com.muyu.engine.domain.EngineVersion; import com.muyu.engine.req.DataSourceAssetModelReq; +import com.muyu.engine.req.TestInterfaceReq; import com.muyu.engine.service.EngineVersionService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -124,8 +125,8 @@ public class EngineVersionController extends BaseController public Result initializeRuleEngine(@RequestBody EngineVersion engineVersion){ return engineVersionService.initializeRuleEngine(engineVersion); } - @PostMapping("TestRuleVersion") - public Result testRuleVersion(){ - return engineVersionService.testRuleVersion(); + @PostMapping("testRuleVersion") + public Result testRuleVersion(@RequestBody TestInterfaceReq testInterfaceReq){ + return engineVersionService.testRuleVersion(testInterfaceReq); } } diff --git a/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/mapper/EngineVersionMapper.java b/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/mapper/EngineVersionMapper.java index 61529e6..a5ad0b4 100644 --- a/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/mapper/EngineVersionMapper.java +++ b/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/mapper/EngineVersionMapper.java @@ -70,4 +70,6 @@ public interface EngineVersionMapper void updVersionIsActivate(Long id, String isActivate); + int updIsTest(Long ruleEngineId); + } diff --git a/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/service/EngineVersionService.java b/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/service/EngineVersionService.java index 2b2c7f5..96c634b 100644 --- a/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/service/EngineVersionService.java +++ b/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/service/EngineVersionService.java @@ -5,6 +5,7 @@ import com.muyu.common.core.domain.Result; import com.muyu.engine.domain.Engine; import com.muyu.engine.domain.EngineVersion; import com.muyu.engine.req.DataSourceAssetModelReq; +import com.muyu.engine.req.TestInterfaceReq; import org.springframework.stereotype.Service; import java.util.List; @@ -76,6 +77,6 @@ public interface EngineVersionService Result getDataRegionList(DataSourceAssetModelReq req); - Result testRuleVersion(); + Result testRuleVersion(TestInterfaceReq testInterfaceReq); } diff --git a/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/service/impl/EngineVersionServiceImpl.java b/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/service/impl/EngineVersionServiceImpl.java index 8655a01..0277357 100644 --- a/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/service/impl/EngineVersionServiceImpl.java +++ b/muyu-modules/muyu-engine/muyu-engine-server/src/main/java/com/muyu/engine/service/impl/EngineVersionServiceImpl.java @@ -3,6 +3,9 @@ package com.muyu.engine.service.impl; import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.lang.reflect.Method; +import java.nio.file.Files; +import java.nio.file.Paths; import java.sql.*; import java.util.*; @@ -10,6 +13,7 @@ import com.muyu.common.core.domain.Result; import com.muyu.common.core.utils.DateUtils; import com.muyu.common.security.utils.SecurityUtils; import com.muyu.data.access.client.datasource.MyDataSource; +import com.muyu.engine.classLoading.CustomClassLoader; import com.muyu.engine.constant.GenerateConstant; import com.muyu.engine.constant.PathConstant; import com.muyu.engine.domain.Engine; @@ -17,8 +21,11 @@ import com.muyu.engine.domain.EngineVersion; import com.muyu.engine.mapper.EngineMapper; import com.muyu.engine.mapper.EngineVersionMapper; import com.muyu.engine.req.DataSourceAssetModelReq; +import com.muyu.engine.req.TestInterfaceReq; import com.muyu.engine.service.EngineVersionService; import com.muyu.etl.domain.VTClass; +import com.muyu.scope.DataModelContext; +import com.muyu.scope.RecordContext; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -260,8 +267,40 @@ public class EngineVersionServiceImpl implements EngineVersionService } @Override - public Result testRuleVersion() { - return null; + public Result testRuleVersion(TestInterfaceReq testInterfaceReq) { + //根据规则引擎ID查询引擎信息 + Engine engine = engineMapper.selectEngineById(testInterfaceReq.getEngineVersion().getRuleEngineId()); + //根据引擎级别设置不同的上下文,进行存储 + if(engine.getLevel().equals("data-feild")){ + DataModelContext.set(testInterfaceReq.getDataProcessModel()); + }else if(engine.getLevel().equals("data-set")){ + DataModelContext.set(testInterfaceReq.getDataProcessModel()); + }else { + RecordContext.set(testInterfaceReq.getRecordProcessModel()); + } + //拼接服务类的全限定名和类路径 + String className = PathConstant.PACKAGE_PATH_SERVICE+GenerateConstant.getClassName(testInterfaceReq.getEngineVersion().getVersionCode()); + String classPath = PathConstant.CLASS_PATH+className.replace(".","\\")+".class"; + try { + //从类路径中读取字节码文件 + byte[] bytes = Files.readAllBytes(Paths.get(classPath)); + //创建自定义类加载器并加载类 + CustomClassLoader customClassLoader = new CustomClassLoader(); + Class aClass = customClassLoader.defineClassFromBytes(className, bytes); + //实例化加载的类 + Object newInstance = aClass.newInstance(); + //执行加载的类中的所有方法 + Method[] methods = aClass.getDeclaredMethods(); + for (Method method : methods) { + method.invoke(newInstance); + } + } catch (Exception e) { + //如果过程中发送异常,返回错误信息 + return Result.success("程序异常,异常信息:"+e.getMessage()); + } + engineVersionMapper.updIsTest(testInterfaceReq.getEngineVersion().getRuleEngineId()); + //执行无异常,返回成功结果 + return Result.success("测试无异常"); } } diff --git a/muyu-modules/muyu-engine/muyu-engine-server/src/main/resources/mapper/ruleEngine/EngineVersionMapper.xml b/muyu-modules/muyu-engine/muyu-engine-server/src/main/resources/mapper/ruleEngine/EngineVersionMapper.xml index 6743e20..6d9feb9 100644 --- a/muyu-modules/muyu-engine/muyu-engine-server/src/main/resources/mapper/ruleEngine/EngineVersionMapper.xml +++ b/muyu-modules/muyu-engine/muyu-engine-server/src/main/resources/mapper/ruleEngine/EngineVersionMapper.xml @@ -111,6 +111,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update engine_version set is_activate = #{isActivate} where id = #{id} + + update engine_version set isTest = '2' where id = #{id} + delete from engine_version where id = #{id}