feat():规则版本测试

master
Jiang Peng 2024-05-16 20:03:50 +08:00
parent d54102d35a
commit 53bd42aabe
15 changed files with 132 additions and 48 deletions

View File

@ -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"+

View File

@ -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.";
}

View File

@ -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<DataSetProcessModel> {
private DataSetContext dataSetContext;
private DataSetContext dataSetContext;
@Override
public DataSetProcessModel get(){
return dataSetContext.get();
}
public RecordModel[] getRecordModelArr(){
public List<RecordModel> 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<String> getKeys(){
return get().getKeys();
}
}

View File

@ -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<RecordProcessModel> {
private RecordContext recordContext;
@Override
public RecordProcessModel get(){
return recordContext.get();
}
public RecordModel getRecordModel(){
return get().getRecordModel();
}
public String[] getKeys(){
return get().getKeys();
public List<String> getKeys(){
return get().getKeys();
}
public DataModel[] getDataModelArr(){
public List<DataModel> getDataModelArr(){
return getRecordModel().getDataModelArr();
}

View File

@ -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 {
/**
*

View File

@ -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<RecordModel> 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<RecordModel> recordModelArr){
return new DataSetModel(recordModelArr);
}

View File

@ -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<DataModel> dataModelArr;
public static RecordModel build(List<DataModel> dataModelArr){
return new RecordModel(dataModelArr);
}

View File

@ -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;

View File

@ -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<String> keys;
private DataSetModel dataSetModel;
}

View File

@ -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<String> keys;
private RecordModel recordModel;
}

View File

@ -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);
}
}

View File

@ -70,4 +70,6 @@ public interface EngineVersionMapper
void updVersionIsActivate(Long id, String isActivate);
int updIsTest(Long ruleEngineId);
}

View File

@ -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);
}

View File

@ -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("测试无异常");
}
}

View File

@ -111,6 +111,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<update id="updVersionIsActivate">
update engine_version set is_activate = #{isActivate} where id = #{id}
</update>
<update id="updIsTest">
update engine_version set isTest = '2' where id = #{id}
</update>
<delete id="deleteEngineVersionById" parameterType="Long">
delete from engine_version where id = #{id}