feat:规则引擎客户端新增规则引擎服务类
parent
7462c6b251
commit
8408d8f9a6
|
@ -19,13 +19,6 @@ public class ConnectionPoolContextHolder {
|
||||||
*/
|
*/
|
||||||
private final Map<Long, DruidDataSource> druidDataSourceMap=new ConcurrentHashMap<>(16);
|
private final Map<Long, DruidDataSource> druidDataSourceMap=new ConcurrentHashMap<>(16);
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取所有数据源
|
|
||||||
*/
|
|
||||||
public Map<Long,DruidDataSource> getMap(){
|
|
||||||
return this.druidDataSourceMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 将数据源存入上下文中
|
* 将数据源存入上下文中
|
||||||
*/
|
*/
|
||||||
|
@ -46,4 +39,11 @@ public class ConnectionPoolContextHolder {
|
||||||
public boolean hasKey(Long id){
|
public boolean hasKey(Long id){
|
||||||
return this.druidDataSourceMap.containsKey(id);
|
return this.druidDataSourceMap.containsKey(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除数据源
|
||||||
|
*/
|
||||||
|
public void remove(Long id){
|
||||||
|
this.druidDataSourceMap.remove(id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ public class ConnectionPoolService {
|
||||||
public void init(List<DataSource> dataSourceList){
|
public void init(List<DataSource> dataSourceList){
|
||||||
for (DataSource dataSource : dataSourceList) {
|
for (DataSource dataSource : dataSourceList) {
|
||||||
try {
|
try {
|
||||||
connectionPoolContextHolder.put(dataSource.getId(), createDataSource(dataSource));
|
this.put(dataSource);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException(e.getMessage());
|
throw new RuntimeException(e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.ruoyi.dataTransform.domain.req;
|
package com.ruoyi.dataTransform.domain.req;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.model.DataModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataModel;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.ruoyi.dataTransform.util;
|
package com.ruoyi.dataTransform.util;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.model.DataModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataModel;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
|
@ -2,8 +2,7 @@ package com.ruoyi.dataTransform.consumer;
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSON;
|
import com.alibaba.fastjson2.JSON;
|
||||||
import com.rabbitmq.client.Channel;
|
import com.rabbitmq.client.Channel;
|
||||||
import com.ruoyi.ruleEngine.client.config.RuleEngineVersionFactory;
|
import com.ruoyi.ruleEngine.client.service.RuleEngineService;
|
||||||
import com.ruoyi.ruleEngine.client.util.RuleEngineUtil;
|
|
||||||
import com.ruoyi.ruleEngine.constant.QueueNameConstants;
|
import com.ruoyi.ruleEngine.constant.QueueNameConstants;
|
||||||
import com.ruoyi.ruleEngine.domain.EngineVersion;
|
import com.ruoyi.ruleEngine.domain.EngineVersion;
|
||||||
import lombok.extern.log4j.Log4j2;
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
@ -15,7 +14,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 引擎版本消费者
|
* 引擎版本消费者
|
||||||
|
@ -31,7 +29,7 @@ public class EngineVersionConsumer {
|
||||||
private RedisTemplate<String, String> redisTemplate;
|
private RedisTemplate<String, String> redisTemplate;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RuleEngineVersionFactory ruleEngineVersionFactory;
|
private RuleEngineService ruleEngineService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private MessageConverter messageConverter;
|
private MessageConverter messageConverter;
|
||||||
|
@ -47,12 +45,10 @@ public class EngineVersionConsumer {
|
||||||
String messageId = message.getMessageProperties().getMessageId();
|
String messageId = message.getMessageProperties().getMessageId();
|
||||||
try {
|
try {
|
||||||
Long count = redisTemplate.opsForSet().add(QueueNameConstants.VERSION_MESSAGE, messageId);
|
Long count = redisTemplate.opsForSet().add(QueueNameConstants.VERSION_MESSAGE, messageId);
|
||||||
if (count > 0) {
|
if (count != null&&count > 0) {
|
||||||
// 正常消费消息
|
// 正常消费消息
|
||||||
// 编译
|
|
||||||
Map<String, byte[]> bytecode = RuleEngineUtil.compileVersion(engineVersion);
|
|
||||||
// 新增或替换规则内容
|
// 新增或替换规则内容
|
||||||
ruleEngineVersionFactory.put(engineVersion.getId(),bytecode);
|
ruleEngineService.put(engineVersion);
|
||||||
// 消费成功 手动确认
|
// 消费成功 手动确认
|
||||||
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
|
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
|
||||||
log.info("引擎版本消费者接收到消息,消息内容:{},消费消息成功!", JSON.toJSONString(engineVersion));
|
log.info("引擎版本消费者接收到消息,消息内容:{},消费消息成功!", JSON.toJSONString(engineVersion));
|
||||||
|
|
|
@ -4,7 +4,7 @@ import com.ruoyi.common.core.domain.Result;
|
||||||
import com.ruoyi.common.security.annotation.RequiresPermissions;
|
import com.ruoyi.common.security.annotation.RequiresPermissions;
|
||||||
import com.ruoyi.dataTransform.domain.req.RandomDataReq;
|
import com.ruoyi.dataTransform.domain.req.RandomDataReq;
|
||||||
import com.ruoyi.dataTransform.service.DataExtractService;
|
import com.ruoyi.dataTransform.service.DataExtractService;
|
||||||
import com.ruoyi.ruleEngine.client.model.DataModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataModel;
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
package com.ruoyi.dataTransform.service;
|
package com.ruoyi.dataTransform.service;
|
||||||
|
|
||||||
import com.ruoyi.dataTransform.domain.req.RandomDataReq;
|
import com.ruoyi.dataTransform.domain.req.RandomDataReq;
|
||||||
import com.ruoyi.ruleEngine.client.model.DataModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataModel;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -5,7 +5,7 @@ import com.ruoyi.dataAsset.service.ConnectionPoolService;
|
||||||
import com.ruoyi.dataTransform.domain.req.RandomDataReq;
|
import com.ruoyi.dataTransform.domain.req.RandomDataReq;
|
||||||
import com.ruoyi.dataTransform.service.DataExtractService;
|
import com.ruoyi.dataTransform.service.DataExtractService;
|
||||||
import com.ruoyi.dataTransform.util.DataExtractUtil;
|
import com.ruoyi.dataTransform.util.DataExtractUtil;
|
||||||
import com.ruoyi.ruleEngine.client.model.DataModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataModel;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
|
@ -4,20 +4,20 @@ import com.ruoyi.common.core.domain.Result;
|
||||||
import com.ruoyi.common.core.exception.ServiceException;
|
import com.ruoyi.common.core.exception.ServiceException;
|
||||||
import com.ruoyi.dataTransform.domain.req.TestDataReq;
|
import com.ruoyi.dataTransform.domain.req.TestDataReq;
|
||||||
import com.ruoyi.dataTransform.service.EngineOperationService;
|
import com.ruoyi.dataTransform.service.EngineOperationService;
|
||||||
import com.ruoyi.ruleEngine.client.config.RuleEngineVersionFactory;
|
import com.ruoyi.ruleEngine.client.engine.context.DataModelContextHolder;
|
||||||
import com.ruoyi.ruleEngine.client.context.DataModelContextHolder;
|
import com.ruoyi.ruleEngine.client.engine.context.DataSetContextHolder;
|
||||||
import com.ruoyi.ruleEngine.client.context.DataSetContextHolder;
|
import com.ruoyi.ruleEngine.client.engine.context.RecordContextHolder;
|
||||||
import com.ruoyi.ruleEngine.client.context.RecordContextHolder;
|
|
||||||
import com.ruoyi.ruleEngine.client.dynamicLoad.DynamicLoader;
|
import com.ruoyi.ruleEngine.client.dynamicLoad.DynamicLoader;
|
||||||
import com.ruoyi.ruleEngine.client.engine.action.ActionRecords;
|
import com.ruoyi.ruleEngine.client.engine.action.ActionRecords;
|
||||||
import com.ruoyi.ruleEngine.client.engine.action.ActionRemove;
|
import com.ruoyi.ruleEngine.client.engine.action.ActionRemove;
|
||||||
import com.ruoyi.ruleEngine.client.engine.action.ActionReplace;
|
import com.ruoyi.ruleEngine.client.engine.action.ActionReplace;
|
||||||
import com.ruoyi.ruleEngine.client.model.DataModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataModel;
|
||||||
import com.ruoyi.ruleEngine.client.model.DataSetModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataSetModel;
|
||||||
import com.ruoyi.ruleEngine.client.model.RecordModel;
|
import com.ruoyi.ruleEngine.client.engine.model.RecordModel;
|
||||||
import com.ruoyi.ruleEngine.client.model.process.DataModelProcessModel;
|
import com.ruoyi.ruleEngine.client.engine.model.process.DataModelProcessModel;
|
||||||
import com.ruoyi.ruleEngine.client.model.process.DataSetProcessModel;
|
import com.ruoyi.ruleEngine.client.engine.model.process.DataSetProcessModel;
|
||||||
import com.ruoyi.ruleEngine.client.model.process.RecordProcessModel;
|
import com.ruoyi.ruleEngine.client.engine.model.process.RecordProcessModel;
|
||||||
|
import com.ruoyi.ruleEngine.client.service.RuleEngineService;
|
||||||
import com.ruoyi.ruleEngine.remote.RemoteRuleEngineService;
|
import com.ruoyi.ruleEngine.remote.RemoteRuleEngineService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
@ -40,7 +40,7 @@ import java.util.Objects;
|
||||||
public class EngineOperationServiceImpl implements EngineOperationService {
|
public class EngineOperationServiceImpl implements EngineOperationService {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RuleEngineVersionFactory ruleEngineVersionFactory;
|
private RuleEngineService ruleEngineService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RemoteRuleEngineService remoteRuleEngineService;
|
private RemoteRuleEngineService remoteRuleEngineService;
|
||||||
|
@ -75,7 +75,7 @@ public class EngineOperationServiceImpl implements EngineOperationService {
|
||||||
}
|
}
|
||||||
StringBuffer actionRecords=null;
|
StringBuffer actionRecords=null;
|
||||||
// 获取版本对应class文件的字节数组
|
// 获取版本对应class文件的字节数组
|
||||||
Map<String, byte[]> bytecode = ruleEngineVersionFactory.get(testDataReq.getVersionId());
|
Map<String, byte[]> bytecode = ruleEngineService.get(testDataReq.getVersionId());
|
||||||
try {
|
try {
|
||||||
//执行引擎
|
//执行引擎
|
||||||
actionRecords=this.engineExecute(bytecode,testDataReq.getVersionClass(), testDataReq.getVersionId());
|
actionRecords=this.engineExecute(bytecode,testDataReq.getVersionClass(), testDataReq.getVersionId());
|
||||||
|
|
|
@ -1,18 +1,15 @@
|
||||||
package com.ruoyi.ruleEngine.client.config;
|
package com.ruoyi.ruleEngine.client.config;
|
||||||
|
|
||||||
import com.ruoyi.common.core.domain.Result;
|
import com.ruoyi.common.core.domain.Result;
|
||||||
import com.ruoyi.ruleEngine.client.util.RuleEngineUtil;
|
import com.ruoyi.ruleEngine.client.service.RuleEngineService;
|
||||||
import com.ruoyi.ruleEngine.constant.RuleOperationConstants;
|
|
||||||
import com.ruoyi.ruleEngine.domain.EngineVersion;
|
import com.ruoyi.ruleEngine.domain.EngineVersion;
|
||||||
import com.ruoyi.ruleEngine.domain.req.EngineVersionQueryReq;
|
import com.ruoyi.ruleEngine.domain.req.EngineVersionQueryReq;
|
||||||
import com.ruoyi.ruleEngine.client.dynamicLoad.DynamicLoader;
|
|
||||||
import com.ruoyi.ruleEngine.remote.RemoteRuleEngineService;
|
import com.ruoyi.ruleEngine.remote.RemoteRuleEngineService;
|
||||||
import lombok.extern.log4j.Log4j2;
|
import lombok.extern.log4j.Log4j2;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.ApplicationArguments;
|
import org.springframework.boot.ApplicationArguments;
|
||||||
import org.springframework.boot.ApplicationRunner;
|
import org.springframework.boot.ApplicationRunner;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 规则引擎应用程序运行程序
|
* 规则引擎应用程序运行程序
|
||||||
|
@ -27,18 +24,13 @@ public class RuleEngineApplicationRunner implements ApplicationRunner {
|
||||||
private RemoteRuleEngineService remoteRuleEngineService;
|
private RemoteRuleEngineService remoteRuleEngineService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private RuleEngineVersionFactory ruleEngineVersionFactory;
|
private RuleEngineService ruleEngineService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(ApplicationArguments args) throws Exception {
|
public void run(ApplicationArguments args) {
|
||||||
Result<List<EngineVersion>> result = remoteRuleEngineService.list(new EngineVersionQueryReq());
|
Result<List<EngineVersion>> result = remoteRuleEngineService.list(new EngineVersionQueryReq());
|
||||||
if(Result.isSuccess(result)){
|
if(Result.isSuccess(result)){
|
||||||
result.getData().forEach(engineVersion -> {
|
ruleEngineService.init(result.getData());
|
||||||
// 编译规则内容
|
|
||||||
Map<String, byte[]> bytecode = RuleEngineUtil.compileVersion(engineVersion);
|
|
||||||
// 存入工厂
|
|
||||||
ruleEngineVersionFactory.put(engineVersion.getId(), bytecode);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.ruoyi.ruleEngine.client.config;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
|
import org.springframework.context.annotation.Import;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则引擎版本客户端配置
|
||||||
|
* @ClassName RuleEngineVersionFactory
|
||||||
|
* @Author 森静若林
|
||||||
|
* @Date 2024/5/8 19:31
|
||||||
|
*/
|
||||||
|
@ComponentScan
|
||||||
|
@Import(RuleEngineApplicationRunner.class)
|
||||||
|
public class RuleEngineVersionClientConfig {
|
||||||
|
|
||||||
|
}
|
|
@ -1,30 +0,0 @@
|
||||||
package com.ruoyi.ruleEngine.client.config;
|
|
||||||
|
|
||||||
import org.springframework.context.annotation.ComponentScan;
|
|
||||||
import org.springframework.context.annotation.Import;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 规则引擎版本工厂
|
|
||||||
* @ClassName RuleEngineVersionFactory
|
|
||||||
* @Author 森静若林
|
|
||||||
* @Date 2024/5/8 19:31
|
|
||||||
*/
|
|
||||||
@ComponentScan
|
|
||||||
@Import(RuleEngineApplicationRunner.class)
|
|
||||||
public class RuleEngineVersionFactory {
|
|
||||||
private final Map<Long,Map<String, byte[]>> versionContentMap=new HashMap<>();
|
|
||||||
|
|
||||||
public Map<Long, Map<String, byte[]>> getMap() {
|
|
||||||
return this.versionContentMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void put(Long id,Map<String, byte[]> map) {
|
|
||||||
this.versionContentMap.put(id,map);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, byte[]> get(Long id) {
|
|
||||||
return this.versionContentMap.get(id);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
package com.ruoyi.ruleEngine.client.context;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则引擎上下文
|
||||||
|
* @ClassName RuleEngineContextHolder
|
||||||
|
* @Author GuanTieLin
|
||||||
|
* @Date 2024/5/15 20:37
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
public class RuleEngineContextHolder {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 存储容器
|
||||||
|
*/
|
||||||
|
private final Map<Long, Map<String, byte[]>> versionContentMap=new ConcurrentHashMap<>(16);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断key是否存在
|
||||||
|
*/
|
||||||
|
public boolean hasKey(Long id){
|
||||||
|
return versionContentMap.containsKey(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增编译文件数据
|
||||||
|
*/
|
||||||
|
public void put(Long id,Map<String, byte[]> map) {
|
||||||
|
this.versionContentMap.put(id,map);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取编译文件数据
|
||||||
|
*/
|
||||||
|
public Map<String, byte[]> get(Long id) {
|
||||||
|
return this.versionContentMap.get(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除编译文件数据
|
||||||
|
*/
|
||||||
|
public void remove(Long id) {
|
||||||
|
this.versionContentMap.remove(id);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
package com.ruoyi.ruleEngine.client.engine.action;
|
package com.ruoyi.ruleEngine.client.engine.action;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.model.DataModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataModel;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.ruoyi.ruleEngine.client.engine.action;
|
package com.ruoyi.ruleEngine.client.engine.action;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.model.DataModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataModel;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
package com.ruoyi.ruleEngine.client.context;
|
package com.ruoyi.ruleEngine.client.engine.context;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.model.process.DataModelProcessModel;
|
import com.ruoyi.ruleEngine.client.engine.model.process.DataModelProcessModel;
|
||||||
import com.ruoyi.ruleEngine.client.util.RuleEngineUtil;
|
import com.ruoyi.ruleEngine.client.util.RuleEngineUtil;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -1,6 +1,6 @@
|
||||||
package com.ruoyi.ruleEngine.client.context;
|
package com.ruoyi.ruleEngine.client.engine.context;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.model.process.DataSetProcessModel;
|
import com.ruoyi.ruleEngine.client.engine.model.process.DataSetProcessModel;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.ruoyi.ruleEngine.client.context;
|
package com.ruoyi.ruleEngine.client.engine.context;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.model.process.RecordProcessModel;
|
import com.ruoyi.ruleEngine.client.engine.model.process.RecordProcessModel;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.ruoyi.ruleEngine.client.context;
|
package com.ruoyi.ruleEngine.client.engine.context;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 任务上下文
|
* 任务上下文
|
|
@ -1,4 +1,4 @@
|
||||||
package com.ruoyi.ruleEngine.client.model;
|
package com.ruoyi.ruleEngine.client.engine.model;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.ruoyi.ruleEngine.client.model;
|
package com.ruoyi.ruleEngine.client.engine.model;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
|
@ -1,4 +1,4 @@
|
||||||
package com.ruoyi.ruleEngine.client.model;
|
package com.ruoyi.ruleEngine.client.engine.model;
|
||||||
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
|
@ -1,6 +1,6 @@
|
||||||
package com.ruoyi.ruleEngine.client.model.process;
|
package com.ruoyi.ruleEngine.client.engine.model.process;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.model.DataModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataModel;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
|
@ -1,6 +1,6 @@
|
||||||
package com.ruoyi.ruleEngine.client.model.process;
|
package com.ruoyi.ruleEngine.client.engine.model.process;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.model.DataSetModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataSetModel;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
|
@ -1,6 +1,6 @@
|
||||||
package com.ruoyi.ruleEngine.client.model.process;
|
package com.ruoyi.ruleEngine.client.engine.model.process;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.model.RecordModel;
|
import com.ruoyi.ruleEngine.client.engine.model.RecordModel;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
|
@ -1,9 +1,9 @@
|
||||||
package com.ruoyi.ruleEngine.client.engine.scope;
|
package com.ruoyi.ruleEngine.client.engine.scope;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.context.DataModelContextHolder;
|
import com.ruoyi.ruleEngine.client.engine.context.DataModelContextHolder;
|
||||||
import com.ruoyi.ruleEngine.client.engine.Engine;
|
import com.ruoyi.ruleEngine.client.engine.Engine;
|
||||||
import com.ruoyi.ruleEngine.client.model.DataModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataModel;
|
||||||
import com.ruoyi.ruleEngine.client.model.process.DataModelProcessModel;
|
import com.ruoyi.ruleEngine.client.engine.model.process.DataModelProcessModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 数据模型引擎
|
* 数据模型引擎
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
package com.ruoyi.ruleEngine.client.engine.scope;
|
package com.ruoyi.ruleEngine.client.engine.scope;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.context.DataSetContextHolder;
|
import com.ruoyi.ruleEngine.client.engine.context.DataSetContextHolder;
|
||||||
import com.ruoyi.ruleEngine.client.engine.Engine;
|
import com.ruoyi.ruleEngine.client.engine.Engine;
|
||||||
import com.ruoyi.ruleEngine.client.model.DataSetModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataSetModel;
|
||||||
import com.ruoyi.ruleEngine.client.model.RecordModel;
|
import com.ruoyi.ruleEngine.client.engine.model.RecordModel;
|
||||||
import com.ruoyi.ruleEngine.client.model.process.DataSetProcessModel;
|
import com.ruoyi.ruleEngine.client.engine.model.process.DataSetProcessModel;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
package com.ruoyi.ruleEngine.client.engine.scope;
|
package com.ruoyi.ruleEngine.client.engine.scope;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.context.RecordContextHolder;
|
import com.ruoyi.ruleEngine.client.engine.context.RecordContextHolder;
|
||||||
import com.ruoyi.ruleEngine.client.engine.Engine;
|
import com.ruoyi.ruleEngine.client.engine.Engine;
|
||||||
import com.ruoyi.ruleEngine.client.model.DataModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataModel;
|
||||||
import com.ruoyi.ruleEngine.client.model.RecordModel;
|
import com.ruoyi.ruleEngine.client.engine.model.RecordModel;
|
||||||
import com.ruoyi.ruleEngine.client.model.process.RecordProcessModel;
|
import com.ruoyi.ruleEngine.client.engine.model.process.RecordProcessModel;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,81 @@
|
||||||
|
package com.ruoyi.ruleEngine.client.service;
|
||||||
|
|
||||||
|
import com.ruoyi.ruleEngine.client.context.RuleEngineContextHolder;
|
||||||
|
import com.ruoyi.ruleEngine.client.util.RuleEngineUtil;
|
||||||
|
import com.ruoyi.ruleEngine.domain.EngineVersion;
|
||||||
|
import lombok.extern.log4j.Log4j2;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 规则引擎服务
|
||||||
|
* @ClassName RuleEngineService
|
||||||
|
* @Author GuanTieLin
|
||||||
|
* @Date 2024/5/15 20:36
|
||||||
|
*/
|
||||||
|
@Log4j2
|
||||||
|
@Component
|
||||||
|
public class RuleEngineService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private RuleEngineContextHolder ruleEngineContextHolder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化规则引擎上下文
|
||||||
|
* @param engineVersionList 引擎版本集合
|
||||||
|
*/
|
||||||
|
public void init(List<EngineVersion> engineVersionList){
|
||||||
|
engineVersionList.forEach(this::put);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增编译文件数据
|
||||||
|
* @param engineVersion 引擎版本
|
||||||
|
*/
|
||||||
|
public void put(EngineVersion engineVersion){
|
||||||
|
// 编译规则内容
|
||||||
|
Map<String, byte[]> bytecode = RuleEngineUtil.compileVersion(engineVersion);
|
||||||
|
// 存入上下文
|
||||||
|
ruleEngineContextHolder.put(engineVersion.getId(), bytecode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除编译文件数据
|
||||||
|
* @param id 引擎版本编号
|
||||||
|
*/
|
||||||
|
public void remove(Long id){
|
||||||
|
if(hasKey(id)){
|
||||||
|
ruleEngineContextHolder.remove(id);
|
||||||
|
}else {
|
||||||
|
log.error("引擎上下文中不存在key:[{}]",id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取编译文件数据
|
||||||
|
* @param id 引擎版本编号
|
||||||
|
* @return 编译文件数据
|
||||||
|
*/
|
||||||
|
public Map<String,byte[]> get(Long id){
|
||||||
|
Map<String,byte[]> map=new HashMap<>();
|
||||||
|
if(hasKey(id)){
|
||||||
|
map=ruleEngineContextHolder.get(id);
|
||||||
|
}else {
|
||||||
|
log.error("引擎上下文中不存在key:[{}]",id);
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断key是否存在
|
||||||
|
* @param id 引擎版本编号
|
||||||
|
* @return 是否
|
||||||
|
*/
|
||||||
|
public boolean hasKey(Long id){
|
||||||
|
return ruleEngineContextHolder.hasKey(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,11 +1,11 @@
|
||||||
package com.ruoyi.ruleEngine.client.util;
|
package com.ruoyi.ruleEngine.client.util;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.context.DataSetContextHolder;
|
import com.ruoyi.ruleEngine.client.engine.context.DataSetContextHolder;
|
||||||
import com.ruoyi.ruleEngine.client.dynamicLoad.DynamicLoader;
|
import com.ruoyi.ruleEngine.client.dynamicLoad.DynamicLoader;
|
||||||
import com.ruoyi.ruleEngine.client.model.DataModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataModel;
|
||||||
import com.ruoyi.ruleEngine.client.model.DataSetModel;
|
import com.ruoyi.ruleEngine.client.engine.model.DataSetModel;
|
||||||
import com.ruoyi.ruleEngine.client.model.RecordModel;
|
import com.ruoyi.ruleEngine.client.engine.model.RecordModel;
|
||||||
import com.ruoyi.ruleEngine.client.model.process.DataSetProcessModel;
|
import com.ruoyi.ruleEngine.client.engine.model.process.DataSetProcessModel;
|
||||||
import com.ruoyi.ruleEngine.constant.RuleOperationConstants;
|
import com.ruoyi.ruleEngine.constant.RuleOperationConstants;
|
||||||
import com.ruoyi.ruleEngine.domain.EngineVersion;
|
import com.ruoyi.ruleEngine.domain.EngineVersion;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
|
@ -56,6 +56,11 @@ public class RuleEngineUtil {
|
||||||
DataSetContextHolder.set(dataSetProcessModel);
|
DataSetContextHolder.set(dataSetProcessModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编译版本内容
|
||||||
|
* @param engineVersion 引擎版本
|
||||||
|
* @return class文件字节数组
|
||||||
|
*/
|
||||||
public static Map<String, byte[]> compileVersion(EngineVersion engineVersion){
|
public static Map<String, byte[]> compileVersion(EngineVersion engineVersion){
|
||||||
// 获取版本内容
|
// 获取版本内容
|
||||||
String content = engineVersion.getRuleContent().replaceAll("\r\n", "");
|
String content = engineVersion.getRuleContent().replaceAll("\r\n", "");
|
||||||
|
|
|
@ -1 +1,3 @@
|
||||||
com.ruoyi.ruleEngine.client.config.RuleEngineVersionFactory
|
com.ruoyi.ruleEngine.client.config.RuleEngineVersionClientConfig
|
||||||
|
com.ruoyi.ruleEngine.client.context.RuleEngineContextHolder
|
||||||
|
com.ruoyi.ruleEngine.client.service.RuleEngineService
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
package com.ruoyi.ruleEngine.client.context;
|
package com.ruoyi.ruleEngine.client.engine.context;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.model.process.DataModelProcessModel;
|
import com.ruoyi.ruleEngine.client.engine.model.process.DataModelProcessModel;
|
||||||
import com.ruoyi.ruleEngine.client.util.RuleEngineUtil;
|
import com.ruoyi.ruleEngine.client.util.RuleEngineUtil;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.ruoyi.ruleEngine.client.context;
|
package com.ruoyi.ruleEngine.client.engine.context;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.model.process.DataSetProcessModel;
|
import com.ruoyi.ruleEngine.client.engine.model.process.DataSetProcessModel;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.ruoyi.ruleEngine.client.context;
|
package com.ruoyi.ruleEngine.client.engine.context;
|
||||||
|
|
||||||
import com.ruoyi.ruleEngine.client.model.process.RecordProcessModel;
|
import com.ruoyi.ruleEngine.client.engine.model.process.RecordProcessModel;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package com.ruoyi.ruleEngine.client.context;
|
package com.ruoyi.ruleEngine.client.engine.context;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 任务上下文
|
* 任务上下文
|
||||||
|
|
Loading…
Reference in New Issue