diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/DownloadOssSynchronization.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/DownloadOssSynchronization.java index c943334..c67dce6 100644 --- a/cloud-rule-server/src/main/java/com/muyu/rule/server/DownloadOssSynchronization.java +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/DownloadOssSynchronization.java @@ -12,7 +12,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; -import redis.clients.jedis.timeseries.TSInfo; import java.io.File; import java.io.FileOutputStream; @@ -68,10 +67,10 @@ public class DownloadOssSynchronization implements ApplicationRunner { ossClient.shutdown(); //下载完成实现批量批量类加载 - for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) { - String key = objectSummary.getKey(); - ruleEngineVersionService.loadValueEngineClass(key); - } +// for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) { +// String key = objectSummary.getKey(); +// ruleEngineVersionService.loadRuleEngineClass(key); +// } diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/controller/RuleEngineVersionController.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/controller/RuleEngineVersionController.java index 8626aa7..14407c5 100644 --- a/cloud-rule-server/src/main/java/com/muyu/rule/server/controller/RuleEngineVersionController.java +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/controller/RuleEngineVersionController.java @@ -1,6 +1,5 @@ package com.muyu.rule.server.controller; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.muyu.common.core.domain.Result; import com.muyu.common.domain.DataValue; @@ -282,17 +281,7 @@ Object o= versionService.readByOss(className); } - @PostMapping("/testEngine/{className}") - @Operation(summary = "规则引擎测试", description = "传入规则引擎的类名,和数据,用规则引擎进行测试数据") -public Result testEngine(@PathVariable("className") String className,@RequestBody DataValue dataValue){ - log.info("数据:" + dataValue); - //加载对应的规则引擎 - versionService.loadValueEngineClass(className); - //执行对应的规则引擎 - DataValue value = versionService.testEngine(className, dataValue); - return Result.success(value); -} /** * 通过id查询对应的版本 @@ -309,13 +298,34 @@ public Result> selectVersionById(@PathVariable("id") Lon } + @PostMapping("/testEngine/{className}") + @Operation(summary = "字段规则引擎测试", description = "传入规则引擎的类名,和数据,用规则引擎进行测试数据") + public Result testEngine(@PathVariable("className") String className,@RequestBody DataValue dataValue){ + log.info("数据:" + dataValue); + //加载对应的规则引擎 + versionService.loadValueEngineClass(className); + //执行对应的规则引擎 + DataValue value = versionService.testEngine(className, dataValue); + return Result.success(value); + } + @PostMapping("/rowEngine/{className}") + @Operation(summary = "行/记录规则引擎测试", description = "传入规则引擎的类名,和数据,用规则引擎进行测试数据") + public Result testEngine(@PathVariable("className") String className,@RequestBody DataValue[] dataValue){ + log.info("数据:" + dataValue); + //加载对应的规则引擎 + versionService.loadRowEngineClass(className); + //执行对应的规则引擎 + DataValue[] value = versionService.testEngine(className, dataValue); + return Result.success(value); + } @PostMapping("/DataSetEngine/{className}") +@Operation(summary = "数据集的规则引擎测试", description = "传入规则引擎的类名,和数据,用规则引擎进行测试数据") public Result DataSetEngine(@PathVariable("className") String className,@RequestBody DataValue[][] dataValues){ - versionService.loadDateSetEngineClass(className); + versionService.loadDataSetEngineClass(className); DataValue[][] testedEngine = versionService.testEngine(className, dataValues); diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/service/RuleEngineVersionService.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/service/RuleEngineVersionService.java index 7f5f7d5..7f5f973 100644 --- a/cloud-rule-server/src/main/java/com/muyu/rule/server/service/RuleEngineVersionService.java +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/service/RuleEngineVersionService.java @@ -65,13 +65,11 @@ public interface RuleEngineVersionService extends IService { * @param className 规则引擎类名 */ - void loadValueEngineClass(String className); + // void loadRuleEngineClass(String className); - String deposit(Integer type); - void loadDateSetEngineClass(String className); /** * 测试数据 * @@ -84,4 +82,10 @@ public interface RuleEngineVersionService extends IService { public DataValue[] testEngine(String className, DataValue[] dataValue); public DataValue[][] testEngine( String className, DataValue[][] dataValues); + + void loadValueEngineClass(String className); + + void loadRowEngineClass(String className); + + void loadDataSetEngineClass(String className); } diff --git a/cloud-rule-server/src/main/java/com/muyu/rule/server/service/impl/RuleEngineVersionServiceImpl.java b/cloud-rule-server/src/main/java/com/muyu/rule/server/service/impl/RuleEngineVersionServiceImpl.java index ce494cc..90cad1a 100644 --- a/cloud-rule-server/src/main/java/com/muyu/rule/server/service/impl/RuleEngineVersionServiceImpl.java +++ b/cloud-rule-server/src/main/java/com/muyu/rule/server/service/impl/RuleEngineVersionServiceImpl.java @@ -130,7 +130,11 @@ public class RuleEngineVersionServiceImpl extends ServiceImpl" + versionClazz); @@ -153,7 +157,7 @@ public class RuleEngineVersionServiceImpl extends ServiceImpl) instance); - } - } - public Object loadMethod(String className) { - try { - // 假设这是你的外部类文件路径 - String externalClassFilePath = - importClassAndPackPath + serverClassPath + className + Suffix_CLASS; - Path classFilePath = Paths.get(externalClassFilePath); - String externalClassDir = externalClassFilePath.substring(0, externalClassFilePath.lastIndexOf('/')); - URL[] urls = new URL[]{new File(externalClassDir).toURI().toURL()}; + /** + * 修改激活 + * @param id + * @param open + */ + public void updateOpen(Long id, String open) { - //创建自定义类加载器 - ExternalClassLoader externalClassLoader = new ExternalClassLoader(urls); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); - //加载类 - //注意类名必须是完全限定名(包括包名) - Class clazz = null; - - clazz = externalClassLoader.loadClassFromPath(classFilePath, className_prefix + className); - //创建类的实例 - Object instance = clazz.getDeclaredConstructor().newInstance(); - return 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); - } + updateWrapper.eq("id", id).set("open", open); + this.update(updateWrapper); } /** @@ -255,21 +225,8 @@ public class RuleEngineVersionServiceImpl extends ServiceImpl clazz = null; + clazz = externalClassLoader.loadClassFromPath(classFilePath, className_prefix + className); + //创建类的实例 + Object instance = clazz.getDeclaredConstructor().newInstance(); + //将加载出来引擎实例存入map集合中 + +engineMap.put(className,(BasicEngine) instance); + + } catch (IOException | InvocationTargetException | InstantiationException | IllegalAccessException | + NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + } + + @Override + public void loadRowEngineClass(String className) { + + //查询类是否已加载,避免重复加载规则引擎 + if (!engineRowMap.containsKey(className)) { + log.info("引擎map集合下没有该实例的规则,进行自定义类加载"); + try { + // 假设这是你的外部类文件路径 + String externalClassFilePath = + importClassAndPackPath + serverClassPath + className + Suffix_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 = null; + + clazz = externalClassLoader.loadClassFromPath(classFilePath, className_prefix + className); + //创建类的实例 + Object instance = clazz.getDeclaredConstructor().newInstance(); + //将加载出来引擎实例存入map集合中 + + engineRowMap.put(className,(BasicEngine) instance); + + } catch (IOException | InvocationTargetException | InstantiationException | IllegalAccessException | + NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + } + + @Override + public void loadDataSetEngineClass(String className) { //查询类是否已加载,避免重复加载规则引擎 if (!engineDataSetMap.containsKey(className)) { log.info("引擎map集合下没有该实例的规则,进行自定义类加载"); + try { + // 设置外部类文件路径 + String externalClassFilePath = + importClassAndPackPath + serverClassPath + className + Suffix_CLASS; + Path classFilePath = Paths.get(externalClassFilePath); + String externalClassDir = externalClassFilePath.substring(0, externalClassFilePath.lastIndexOf('/')); + URL[] urls = new URL[]{new File(externalClassDir).toURI().toURL()}; - Object instance = loadMethod(className); -//将加载出来引擎实例存入map集合中 - engineDataSetMap.put(className, (BasicEngine) instance); + //创建自定义类加载器 + ExternalClassLoader externalClassLoader = new ExternalClassLoader(urls); + + //加载类 + //注意类名必须是完全限定名(包括包名) + Class clazz = null; + + clazz = externalClassLoader.loadClassFromPath(classFilePath, className_prefix + className); + //创建类的实例 + Object instance = clazz.getDeclaredConstructor().newInstance(); + //将加载出来引擎实例存入map集合中 + + engineDataSetMap.put(className,(BasicEngine) instance); + + } catch (IOException | InvocationTargetException | InstantiationException | IllegalAccessException | + NoSuchMethodException e) { + throw new RuntimeException(e); + } } - } - /** - * 修改激活 - * - * @param id - * @param open - */ - public void updateOpen(Long id, String open) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); + public void execution(String engineKey,DataValue dataValue){ - updateWrapper.eq("id", id).set("open", open); - - this.update(updateWrapper); + BasicEngine dataValueBasicEngine = engineMap.get(engineKey); + dataValueBasicEngine.set(dataValue); + dataValueBasicEngine.execution(); } + + + public void execution(String engineKey,DataValue[] dataValue){ + + BasicEngine dataValueBasicEngine = engineRowMap.get(engineKey); + dataValueBasicEngine.set(dataValue); + dataValueBasicEngine.execution(); + } + + + public void execution(String engineKey,DataValue[][] dataValue){ + + BasicEngine dataValueBasicEngine = engineDataSetMap.get(engineKey); + dataValueBasicEngine.set(dataValue); + dataValueBasicEngine.execution(); + } + + + + }