feat:新增作用域模型类,作用域引擎类
parent
5af8c4155a
commit
6a2fb20342
|
@ -10,7 +10,7 @@ public class ConfigCodeConstants {
|
|||
/**
|
||||
* 文件基础路径
|
||||
*/
|
||||
public final static String BASE_FILE_PATH="D:/workspace/gtl-ruoyi-server/ruoyi-modules/ruoyi-rule_engine/ruoyi-rule_engine-server/src/main/java/com/ruoyi/ruleEngine/scope/";
|
||||
public final static String BASE_FILE_PATH="D:\\workspace\\gtl-ruoyi-server\\ruoyi-modules\\ruoyi-rule_engine\\ruoyi-rule_engine-common\\src\\main\\java\\com\\ruoyi\\ruleEngine\\context\\";
|
||||
/**
|
||||
* 配置文件名数组
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
package com.ruoyi.ruleEngine.context;
|
||||
|
||||
import com.ruoyi.ruleEngine.model.process.DataModelProcessModel;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 数据模型上下文
|
||||
* @ClassName DataModelContextHolder
|
||||
* @Author 森静若林
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
public class DataModelContextHolder{
|
||||
|
||||
private static final ThreadLocal<DataModelProcessModel> THREAD_LOCAL=new ThreadLocal<>();
|
||||
|
||||
private RecordContextHolder recordContextHolder;
|
||||
|
||||
public static DataModelContextHolder build(RecordContextHolder recordContextHolder){
|
||||
return DataModelContextHolder.builder()
|
||||
.recordContextHolder(recordContextHolder)
|
||||
.build();
|
||||
}
|
||||
|
||||
public static DataModelProcessModel get() {
|
||||
return THREAD_LOCAL.get();
|
||||
}
|
||||
|
||||
public static void set(DataModelProcessModel dataModelProcessModel) {
|
||||
THREAD_LOCAL.set(dataModelProcessModel);
|
||||
}
|
||||
|
||||
public static void remove() {
|
||||
THREAD_LOCAL.remove();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package com.ruoyi.ruleEngine.context;
|
||||
|
||||
import com.ruoyi.ruleEngine.model.process.DataSetProcessModel;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 数据集上下文
|
||||
* @ClassName DataSetContextHolder
|
||||
* @Author 森静若林
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
public class DataSetContextHolder{
|
||||
|
||||
private static final ThreadLocal<DataSetProcessModel> THREAD_LOCAL=new ThreadLocal<>();
|
||||
|
||||
private TaskContextHolder taskContextHolder;
|
||||
|
||||
public static DataSetContextHolder build(TaskContextHolder taskContextHolder){
|
||||
return DataSetContextHolder.builder()
|
||||
.taskContextHolder(taskContextHolder)
|
||||
.build();
|
||||
}
|
||||
|
||||
public static DataSetProcessModel get() {
|
||||
return THREAD_LOCAL.get();
|
||||
}
|
||||
|
||||
public static void set(DataSetProcessModel dataSetProcessModel) {
|
||||
THREAD_LOCAL.set(dataSetProcessModel);
|
||||
}
|
||||
|
||||
public static void remove() {
|
||||
THREAD_LOCAL.remove();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
package com.ruoyi.ruleEngine.context;
|
||||
|
||||
import com.ruoyi.ruleEngine.model.process.RecordProcessModel;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 记录上下文
|
||||
* @ClassName RecordContextHolder
|
||||
* @Author 森静若林
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
public class RecordContextHolder{
|
||||
|
||||
private static final ThreadLocal<RecordProcessModel> THREAD_LOCAL=new ThreadLocal<>();
|
||||
|
||||
private DataSetContextHolder dataSetContextHolder;
|
||||
|
||||
public static RecordContextHolder build(DataSetContextHolder dataSetContextHolder){
|
||||
return RecordContextHolder.builder()
|
||||
.dataSetContextHolder(dataSetContextHolder)
|
||||
.build();
|
||||
}
|
||||
|
||||
public static RecordProcessModel get() {
|
||||
return THREAD_LOCAL.get();
|
||||
}
|
||||
|
||||
public static void set(RecordProcessModel recordProcessModel) {
|
||||
THREAD_LOCAL.set(recordProcessModel);
|
||||
}
|
||||
|
||||
public static void remove() {
|
||||
THREAD_LOCAL.remove();
|
||||
}
|
||||
}
|
|
@ -1,10 +1,9 @@
|
|||
package com.ruoyi.ruleEngine.scope;
|
||||
package com.ruoyi.ruleEngine.context;
|
||||
|
||||
/**
|
||||
* 任务上下文
|
||||
* @ClassName TaskContextHolder
|
||||
* @Author 森静若林
|
||||
* @Version: 1.0
|
||||
*/
|
||||
public class TaskContextHolder {
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
package com.ruoyi.ruleEngine.engine;
|
||||
|
||||
/**
|
||||
* 引擎
|
||||
* @ClassName Engine
|
||||
* @Author: 森静若林
|
||||
* @Date: 2024/5/6 13:48
|
||||
*/
|
||||
public interface Engine<V> {
|
||||
|
||||
public void execution();
|
||||
|
||||
public V get();
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
package com.ruoyi.ruleEngine.engine.action;
|
||||
|
||||
/**
|
||||
* 丢弃动作
|
||||
* @ClassName ActionDiscard
|
||||
* @Author: 森静若林
|
||||
* @Date: 2024/5/6 13:48
|
||||
*/
|
||||
public class ActionDiscard extends RuntimeException{
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
package com.ruoyi.ruleEngine.engine.custom;
|
||||
|
||||
import com.ruoyi.ruleEngine.engine.action.ActionDiscard;
|
||||
import com.ruoyi.ruleEngine.engine.scope.DataModelEngine;
|
||||
|
||||
/**
|
||||
* 不为空自定义引擎
|
||||
* @ClassName IsNotNullEngineCustom
|
||||
* @Author: 森静若林
|
||||
* @Date: 2024/5/6 13:48
|
||||
*/
|
||||
public class IsNotNullEngineCustom extends DataModelEngine {
|
||||
@Override
|
||||
public void execution () {
|
||||
Object value = getValue();
|
||||
|
||||
if (value == null || "".equals(value) || "null".equals(value)) {
|
||||
throw new ActionDiscard();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
package com.ruoyi.ruleEngine.engine.scope;
|
||||
|
||||
import com.ruoyi.ruleEngine.engine.Engine;
|
||||
import com.ruoyi.ruleEngine.model.DataModel;
|
||||
import com.ruoyi.ruleEngine.model.process.DataModelProcessModel;
|
||||
import com.ruoyi.ruleEngine.context.DataModelContextHolder;
|
||||
|
||||
/**
|
||||
* 数据模型引擎
|
||||
* @ClassName DataModelEngine
|
||||
* @Author: 森静若林
|
||||
* @Date: 2024/5/6 13:48
|
||||
*/
|
||||
public abstract class DataModelEngine implements Engine<DataModelProcessModel> {
|
||||
|
||||
@Override
|
||||
public DataModelProcessModel get (){
|
||||
return DataModelContextHolder.get();
|
||||
}
|
||||
|
||||
public DataModel getModel(){
|
||||
return get().getDataModel();
|
||||
}
|
||||
|
||||
|
||||
public String getKey () {
|
||||
return getModel().getKey();
|
||||
}
|
||||
|
||||
public Object getValue () {
|
||||
return getModel().getValue();
|
||||
}
|
||||
|
||||
public String getSourceType () {
|
||||
return getModel().getSourceType();
|
||||
}
|
||||
|
||||
public String getProcessType () {
|
||||
return getModel().getProcessType();
|
||||
}
|
||||
|
||||
public Class<?> getProcessClass () {
|
||||
return getModel().getProcessClass();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
package com.ruoyi.ruleEngine.engine.scope;
|
||||
|
||||
import com.ruoyi.ruleEngine.context.DataSetContextHolder;
|
||||
import com.ruoyi.ruleEngine.engine.Engine;
|
||||
import com.ruoyi.ruleEngine.model.DataSetModel;
|
||||
import com.ruoyi.ruleEngine.model.RecordModel;
|
||||
import com.ruoyi.ruleEngine.model.process.DataSetProcessModel;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据集引擎
|
||||
* @ClassName DataSetEngine
|
||||
* @Author: 森静若林
|
||||
* @Date: 2024/5/6 13:48
|
||||
*/
|
||||
public abstract class DataSetEngine implements Engine<DataSetProcessModel> {
|
||||
|
||||
@Override
|
||||
public DataSetProcessModel get (){
|
||||
return DataSetContextHolder.get();
|
||||
}
|
||||
|
||||
public DataSetModel getModel(){
|
||||
return get().getDataSetModel();
|
||||
}
|
||||
|
||||
public List<RecordModel> getRecordModels () {
|
||||
return getModel().getRecordModels();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
package com.ruoyi.ruleEngine.engine.scope;
|
||||
|
||||
import com.ruoyi.ruleEngine.context.RecordContextHolder;
|
||||
import com.ruoyi.ruleEngine.engine.Engine;
|
||||
import com.ruoyi.ruleEngine.model.DataModel;
|
||||
import com.ruoyi.ruleEngine.model.RecordModel;
|
||||
import com.ruoyi.ruleEngine.model.process.RecordProcessModel;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 记录引擎
|
||||
* @ClassName RecordEngine
|
||||
* @Author: 森静若林
|
||||
* @Date: 2024/5/6 13:48
|
||||
*/
|
||||
public abstract class RecordEngine implements Engine<RecordProcessModel> {
|
||||
|
||||
@Override
|
||||
public RecordProcessModel get (){
|
||||
return RecordContextHolder.get();
|
||||
}
|
||||
|
||||
public List<String> getKeys(){
|
||||
return get().getKeys();
|
||||
}
|
||||
|
||||
public RecordModel getModel(){
|
||||
return get().getRecordModel();
|
||||
}
|
||||
|
||||
public List<DataModel> getDataModels () {
|
||||
return getModel().getDataModels();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
package com.ruoyi.ruleEngine.model;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
/**
|
||||
* 数据模型
|
||||
* @ClassName DataModel
|
||||
* @Author 森静若林
|
||||
* @Date 2024/5/5 18:48
|
||||
*/
|
||||
@Data
|
||||
@SuperBuilder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DataModel {
|
||||
/**
|
||||
* 键
|
||||
*/
|
||||
private String key;
|
||||
|
||||
/**
|
||||
* 值
|
||||
*/
|
||||
private Object value;
|
||||
|
||||
/**
|
||||
* 原标准
|
||||
*/
|
||||
private String sourceType;
|
||||
|
||||
/**
|
||||
* 处理标准
|
||||
*/
|
||||
private String processType;
|
||||
|
||||
/**
|
||||
* 处理类型
|
||||
*/
|
||||
private Class<?> processClass;
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package com.ruoyi.ruleEngine.model;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 数据集模型
|
||||
* @ClassName DataSetModel
|
||||
* @Author 森静若林
|
||||
* @Date 2024/5/5 18:48
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DataSetModel {
|
||||
|
||||
private List<RecordModel> recordModels;
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package com.ruoyi.ruleEngine.model;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 记录模型
|
||||
* @ClassName RecordModel
|
||||
* @Author 森静若林
|
||||
* @Date 2024/5/5 18:48
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RecordModel {
|
||||
|
||||
private List<DataModel> dataModels;
|
||||
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package com.ruoyi.ruleEngine.model.process;
|
||||
|
||||
import com.ruoyi.ruleEngine.model.DataModel;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 数据模型处理模型
|
||||
* @ClassName DataModelProcessModel
|
||||
* @Author 森静若林
|
||||
* @Date 2024/5/5 18:37
|
||||
*/
|
||||
@Data
|
||||
public class DataModelProcessModel {
|
||||
private DataModel dataModel;
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package com.ruoyi.ruleEngine.model.process;
|
||||
|
||||
import com.ruoyi.ruleEngine.model.DataSetModel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 数据集处理模型
|
||||
* @ClassName DataSetProcessModel
|
||||
* @Author 森静若林
|
||||
* @Date 2024/5/5 18:37
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class DataSetProcessModel {
|
||||
private DataSetModel dataSetModel;
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package com.ruoyi.ruleEngine.model.process;
|
||||
|
||||
import com.ruoyi.ruleEngine.model.RecordModel;
|
||||
import lombok.Data;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 记录处理模型
|
||||
* @ClassName RecordProcessModel
|
||||
* @Author 森静若林
|
||||
* @Date 2024/5/5 18:37
|
||||
*/
|
||||
@Data
|
||||
public class RecordProcessModel {
|
||||
private List<String> keys;
|
||||
private RecordModel recordModel;
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
package com.ruoyi.ruleEngine.util;
|
||||
|
||||
import com.ruoyi.ruleEngine.context.DataSetContextHolder;
|
||||
import com.ruoyi.ruleEngine.model.DataModel;
|
||||
import com.ruoyi.ruleEngine.model.DataSetModel;
|
||||
import com.ruoyi.ruleEngine.model.RecordModel;
|
||||
import com.ruoyi.ruleEngine.model.process.DataSetProcessModel;
|
||||
import java.sql.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 作用域上下文工具
|
||||
* @ClassName ScopeContextHolderUtil
|
||||
* @Author 森静若林
|
||||
* @Date 2024/5/6 20:51
|
||||
*/
|
||||
|
||||
public class ScopeContextHolderUtil {
|
||||
|
||||
public static void setDataSetContextHolder(Connection connection){
|
||||
try {
|
||||
PreparedStatement preparedStatement = connection.prepareStatement("select * from table_info limit 0,10");
|
||||
ResultSet resultSet = preparedStatement.executeQuery();
|
||||
List<RecordModel> recordModels=new ArrayList<>();
|
||||
while (resultSet.next()){
|
||||
int index=1;
|
||||
ResultSetMetaData data = resultSet.getMetaData();
|
||||
int columnCount = data.getColumnCount();
|
||||
List<DataModel> dataModels=new ArrayList<>();
|
||||
while (index<=columnCount){
|
||||
DataModel dataModel = DataModel.builder()
|
||||
.key(data.getColumnName(index))
|
||||
.value(resultSet.getString(index))
|
||||
.sourceType(data.getColumnTypeName(index))
|
||||
.processType(data.getColumnClassName(index))
|
||||
.processClass(Class.forName(data.getColumnClassName(index)))
|
||||
.build();
|
||||
dataModels.add(dataModel);
|
||||
index++;
|
||||
}
|
||||
RecordModel recordModel = new RecordModel(dataModels);
|
||||
recordModels.add(recordModel);
|
||||
}
|
||||
connection.close();
|
||||
DataSetModel dataSetModel = new DataSetModel(recordModels);
|
||||
DataSetProcessModel dataSetProcessModel = new DataSetProcessModel(dataSetModel);
|
||||
//存入本地线程
|
||||
DataSetContextHolder.set(dataSetProcessModel);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
package com.ruoyi.ruleEngine.scope;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 数据模型上下文
|
||||
* @ClassName DataModelContextHolder
|
||||
* @Author 森静若林
|
||||
* @Version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class DataModelContextHolder {
|
||||
|
||||
private final RecordContextHolder recordContextHolder;
|
||||
|
||||
public static DataModelContextHolder build(RecordContextHolder recordContextHolder){
|
||||
return new DataModelContextHolder(recordContextHolder);
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
package com.ruoyi.ruleEngine.scope;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 数据集上下文
|
||||
* @ClassName DataSetContextHolder
|
||||
* @Author 森静若林
|
||||
* @Version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class DataSetContextHolder {
|
||||
|
||||
private final TaskContextHolder taskContextHolder;
|
||||
|
||||
public static DataSetContextHolder build(TaskContextHolder taskContextHolder){
|
||||
return new DataSetContextHolder(taskContextHolder);
|
||||
}
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
package com.ruoyi.ruleEngine.scope;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 记录上下文
|
||||
* @ClassName RecordContextHolder
|
||||
* @Author 森静若林
|
||||
* @Version: 1.0
|
||||
*/
|
||||
@Data
|
||||
public class RecordContextHolder {
|
||||
|
||||
private final DataSetContextHolder dataSetContextHolder;
|
||||
|
||||
public static RecordContextHolder build(DataSetContextHolder dataSetContextHolder){
|
||||
return new RecordContextHolder(dataSetContextHolder);
|
||||
}
|
||||
}
|
|
@ -79,8 +79,8 @@ public class EngineMaintenanceServiceImpl extends ServiceImpl<EngineMaintenanceM
|
|||
@Transactional
|
||||
public boolean saveEngineMaintenance(EngineMaintenance engineMaintenance) {
|
||||
boolean save = this.save(engineMaintenance);
|
||||
EngineConfigScopeResp scopeInfo = engineConfigService.getScopeInfoById(engineMaintenance.getScope());
|
||||
engineConfigService.save(EngineConfig.builder().versionCode("1.0").ruleContent(scopeInfo.getCode()).build());
|
||||
EngineConfigScopeResp scopeInfo = engineConfigService.getScopeInfoById(0);
|
||||
engineConfigService.save(EngineConfig.builder().versionCode("1.0").ruleContent(scopeInfo.getCode()).engineMaintenanceId(engineMaintenance.getId()).build());
|
||||
return save;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue