master
chentaisen 2024-09-06 11:11:54 +08:00
parent 3e705ee147
commit b6b8579507
6 changed files with 112 additions and 16 deletions

View File

@ -9,6 +9,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.poi.ss.usermodel.DataValidation;
/**
* @ClassName RuleEdition
@ -66,4 +67,6 @@ public class RuleEdition {
*/
private String ruleEngine;
private DataValue dataValue;
}

View File

@ -0,0 +1,68 @@
package rule.util;
import org.ehcache.impl.internal.concurrent.ConcurrentHashMap;
import rule.data.engine.basic.BasicEngine;
import rule.domain.DataValue;
import rule.domain.RuleEdition;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Map;
/**
* @ClassName RuleTest
* @Description
* @Author Chen
* @Date 2024/9/5 20:52
*/
public class RuleTest {
static Map<String, BasicEngine<DataValue>> engineMap = new ConcurrentHashMap<>();
//外部类文件路径
public static final String engineWorkSourcePath = "D:\\work\\cc";
public static final String className = "com.muyu.rule.generate";
public static void test(RuleEdition ruleEdition) {
try {
//外部类文件路径
String externalClassFilePath =
engineWorkSourcePath + "\\com\\muyu\\rule\\generate\\"+ruleEdition.getRuleKind()+".class";
Path classFilePath = Paths.get(externalClassFilePath);
//获取外部类所在的目录
String externalClassDir = externalClassFilePath.substring(0, externalClassFilePath.lastIndexOf('\\'));
URL[] urls = new URL[]{new File(externalClassDir).toURI().toURL()};
ExternalClassLoader externalClassLoader = new ExternalClassLoader(urls);
//加载类 全限定名
Class<?> clazz = externalClassLoader.loadClassFromPath(classFilePath, className);
Object instance = clazz.getDeclaredConstructor().newInstance();
engineMap.put(ruleEdition.getRuleKind(), (BasicEngine<DataValue>) instance);
} catch (IOException e) {
throw new RuntimeException(e);
} catch (InvocationTargetException e) {
throw new RuntimeException(e);
} catch (InstantiationException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
} catch (NoSuchMethodException e) {
throw new RuntimeException(e);
}
DataValue dataValue = DataValue.builder()
.type("String")
.label("手机号")
.key("phone")
.value("张三")
.build();
BasicEngine<DataValue> engine = engineMap.get(ruleEdition.getRuleKind());
engine.set(dataValue);
engine.execution();
}
}

View File

@ -188,24 +188,28 @@ public class RuleEditionController {
@PutMapping("/updateRuleEngine")
@Operation(summary = "保存代码", description = "保存代码")
public Result updateRuleEngine(@RequestBody RuleEdition ruleEdition) {
//java OSS
UploadOss.uploadFiles(ruleEdition.getRuleEngine(), ruleEdition.getRuleKind());
// UploadOss.uploadFiles(ruleEdition.getRuleEngine(), ruleEdition.getRuleKind());
OSSFileDownload.streamingDownload(ruleEdition.getRuleKind());
// OSSFileDownload.streamingDownload(ruleEdition.getRuleKind());
// OSSFileDownload.compile(ruleEdition.getRuleKind());
OSSFileDownload.compile(ruleEdition.getRuleKind());
return Result.success(ruleEditionService.updateById(ruleEdition));
}
// /**
// * 测试代码
// * @param ruleEdition
// * @return
// */
// @PostMapping("/measurement")
// @Operation(summary = "测试代码", description = "测试代码")
// public Result measurement(@RequestBody RuleEdition ruleEdition) {
// List<RuleEdition> ruleEditionList = ruleEditionService.measurementList(ruleEdition);
// return Result.success(ruleEditionList);
// }
/**
*
*
* @param ruleEdition
* @return
*/
@PostMapping("/measurement")
@Operation(summary = "测试代码", description = "测试代码")
public Result measurement(@RequestBody RuleEdition ruleEdition) {
OSSFileDownload.compile(ruleEdition.getRuleKind());
return Result.success(ruleEditionService.measurementList(ruleEdition));
}
}

View File

@ -1,8 +1,11 @@
package com.muyu.rule.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.muyu.common.core.domain.Result;
import rule.domain.RuleEdition;
import java.util.List;
public interface RuleEditionService extends IService<RuleEdition> {
/**
*
@ -18,4 +21,6 @@ public interface RuleEditionService extends IService<RuleEdition> {
RuleEdition generate(RuleEdition ruleEdition);
Result<String> measurementList(RuleEdition ruleEdition);
}

View File

@ -3,6 +3,7 @@ package com.muyu.rule.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.muyu.common.core.domain.Result;
import com.muyu.common.core.enums.SysRuleYesNo;
import com.muyu.common.core.exception.ServiceException;
import com.muyu.rule.mapper.RuleEditionMapper;
@ -12,6 +13,9 @@ import org.springframework.stereotype.Service;
import rule.util.GenerateConstant;
import rule.domain.Rule;
import rule.domain.RuleEdition;
import rule.util.RuleTest;
import java.util.List;
/**
* @ClassName RuleEditionServiceImpl
@ -61,6 +65,18 @@ public class RuleEditionServiceImpl extends ServiceImpl<RuleEditionMapper, RuleE
return ruleEdition;
}
/**
*
* @param ruleEdition
* @return
*/
@Override
public Result<String> measurementList(RuleEdition ruleEdition) {
//测试
RuleTest.test(ruleEdition);
return Result.success("11");
}
/**
* id

View File

@ -50,12 +50,12 @@ public class OSSFileDownload {
public static Result<Object> compile(String fileName) {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
String[] strings = {"-classpath", "/home/lib", "-verbose", "-d", "/home/lib", "/home/"+fileName+".java"};
String[] strings = {"-classpath", "/home/lib", "-verbose", "-d", "/home/lib", "/home/" + fileName + ".java"};
//编译任务
int result = compiler.run(null, null, null, strings);
//检查编译结果
if (result == 0) {
System.out.println("编译成功,生成的.class文件位于源代码同目录");
System.out.println("编译成功,生成的.class文件位于源代码同目录");
} else {
System.out.println("编译失败");
}