feat:新增作用域模型类,作用域引擎类

dev
gtl 2024-05-06 21:55:12 +08:00
parent 5af8c4155a
commit 6a2fb20342
25 changed files with 462 additions and 62 deletions

View File

@ -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\\";
/**
*
*/

View File

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

View File

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

View File

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

View File

@ -1,10 +1,9 @@
package com.ruoyi.ruleEngine.scope;
package com.ruoyi.ruleEngine.context;
/**
*
* @ClassName TaskContextHolder
* @Author
* @Version: 1.0
*/
public class TaskContextHolder {

View File

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

View File

@ -0,0 +1,10 @@
package com.ruoyi.ruleEngine.engine.action;
/**
*
* @ClassName ActionDiscard
* @Author:
* @Date: 2024/5/6 13:48
*/
public class ActionDiscard extends RuntimeException{
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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