Browse Source

前端核心发布: 8.2.80

基础框架发布: 8.2.18
  1) 规则引擎中,修复资源深度复制时, 选项参数不应该加 NEW。
main
wangshaoping 2 weeks ago
parent
commit
c7b8b4c693
  1. 2
      app.platform/build.gradle
  2. 1
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit.java
  3. 5
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Lib.java
  4. 83
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Resource.java
  5. 5
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/IndicatorProcessor.java
  6. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ArithmeticIndicatorProcessor.java
  7. 28
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ConditionRangeIndicatorProcessor.java
  8. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/EmptyIndicatorProcessor.java
  9. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/GroovyScriptIndicatorProcessor.java
  10. 15
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/HttpRequestIndicatorProcessor.java
  11. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/MathFormulaIndicatorProcessor.java
  12. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/NumberRangeIndicatorProcessor.java
  13. 27
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ObjectPropertiesIndicatorProcessor.java
  14. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/SqlIndicatorProcessor.java
  15. 7
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/TernaryIndicatorProcessor.java
  16. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/WhenThenIndicatorProcessor.java
  17. 18
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/Model.java
  18. 3
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/ParameterProcessor.java
  19. 10
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ArithmeticParameterProcessor.java
  20. 28
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ConditionRangeParameterProcessor.java
  21. 31
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTable2CParameterProcessor.java
  22. 30
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTableParameterProcessor.java
  23. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTreeParameterProcessor.java
  24. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/EmptyParameterProcessor.java
  25. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ExecutionFlowParameterProcessor.java
  26. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/GroovyScriptParameterProcessor.java
  27. 15
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/HttpRequestParameterProcessor.java
  28. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/MathFormulaParameterProcessor.java
  29. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/NumberRangeParameterProcessor.java
  30. 27
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ObjectPropertiesParameterProcessor.java
  31. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/OptionValueParameterProcessor.java
  32. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/PmmlParameterProcessor.java
  33. 31
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/RuleSetParameterProcessor.java
  34. 52
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ScoreCardParameterProcessor.java
  35. 29
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/SingleRuleParameterProcessor.java
  36. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/SqlParameterProcessor.java
  37. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/TernaryParameterProcessor.java
  38. 6
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/WhenThenParameterProcessor.java
  39. 1
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/GroovyExpressionReplacer.java
  40. 61
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/PlaceHolder.java
  41. 19
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/PlaceHolderEnumExpressionUtil.java
  42. 29
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/UserFunctionExpressionUtil.java
  43. 4
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/executable/service/impl/ExecuteUnitServiceImpl.java
  44. 26
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/lib/entity/processor/ConditionRangeIndicatorProcessorEntity.java
  45. 7
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/parameter/InOptionParameterEntity.java
  46. 26
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/processor/ConditionRangeParameterProcessorEntity.java
  47. 35
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/processor/ObjectPropertiesParameterProcessorEntity.java
  48. 4
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/service/impl/ResourceServiceImpl.java
  49. 29
      io.sc.platform.core/src/main/java/UserFunctionExpressionUtil.java
  50. 19
      io.sc.platform.util/src/main/java/io/sc/platform/util/PlaceHolderExpressionUtil.java

2
app.platform/build.gradle

@ -1,4 +1,4 @@
yapply plugin: 'war' apply plugin: 'war'
apply plugin: 'com.google.cloud.tools.jib' apply plugin: 'com.google.cloud.tools.jib'
apply from: "build-common.gradle" apply from: "build-common.gradle"

1
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit.java

@ -19,6 +19,7 @@ public abstract class ExecuteUnit {
protected List<Function> functions; //自定义函数 protected List<Function> functions; //自定义函数
public abstract String getType(); public abstract String getType();
public abstract void optimize();
public List<Dictionary> getDictionaries() { public List<Dictionary> getDictionaries() {
return dictionaries; return dictionaries;

5
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Lib.java

@ -12,6 +12,11 @@ public class ExecuteUnit4Lib extends ExecuteUnit {
return "LIB"; return "LIB";
} }
@Override
public void optimize() {
}
public Lib getLib() { public Lib getLib() {
return lib; return lib;
} }

83
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Resource.java

@ -1,10 +1,18 @@
package io.sc.engine.rule.core.code; package io.sc.engine.rule.core.code;
import com.fasterxml.jackson.annotation.JsonPropertyOrder; import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import io.sc.engine.rule.core.po.lib.Indicator;
import io.sc.engine.rule.core.po.lib.IndicatorLib;
import io.sc.engine.rule.core.po.lib.Lib; import io.sc.engine.rule.core.po.lib.Lib;
import io.sc.engine.rule.core.po.model.Model;
import io.sc.engine.rule.core.po.model.Parameter;
import io.sc.engine.rule.core.po.model.ParameterProcessor;
import io.sc.engine.rule.core.po.model.parameter.IndicatorParameter;
import io.sc.engine.rule.core.po.resource.ModelResource;
import io.sc.engine.rule.core.po.resource.Resource; import io.sc.engine.rule.core.po.resource.Resource;
import io.sc.engine.rule.core.util.PlaceHolder;
import java.util.List; import java.util.*;
@JsonPropertyOrder({"type","resource","libs","dictionaries","functions"}) @JsonPropertyOrder({"type","resource","libs","dictionaries","functions"})
public class ExecuteUnit4Resource extends ExecuteUnit{ public class ExecuteUnit4Resource extends ExecuteUnit{
@ -31,4 +39,77 @@ public class ExecuteUnit4Resource extends ExecuteUnit{
public void setLibs(List<Lib> libs) { public void setLibs(List<Lib> libs) {
this.libs = libs; this.libs = libs;
} }
public void optimize(){
if(1==1) return;
if(resource instanceof ModelResource){
ModelResource modelResource =(ModelResource) resource;
Model model =modelResource.getModel();
List<ParameterProcessor> processors =model.getAllParameterProcessors();
PlaceHolder placeHolder =new PlaceHolder();
for(ParameterProcessor processor : processors){
placeHolder.add(processor.extractPlaceHolder());
}
for(String s : placeHolder.getVariableRefs()){
System.out.println(s);
}
}
}
private void optimizeLibs(){
if(resource instanceof ModelResource){
ModelResource modelResource =(ModelResource) resource;
Model model =modelResource.getModel();
List<Parameter> parameters =model.getAllParameters();
if(parameters==null || parameters.isEmpty()){
return;
}
List<IndicatorLib> requiredLibs =new ArrayList<>();
for(Parameter parameter : parameters){
if(parameter instanceof IndicatorParameter){
IndicatorParameter indicatorParameter =(IndicatorParameter)parameter;
String libCode =indicatorParameter.getLibCode();
Integer libVersion =indicatorParameter.getLibVersion();
String indicatorCode =indicatorParameter.getIndicatorCode();
findRefIndicators(requiredLibs,indicatorParameter.getLibCode(),indicatorParameter.getLibVersion(),indicatorParameter.getIndicatorCode());
}
}
}
}
private void optimizeDictionaries(){
}
private void optimizeFunctions(){
}
private Lib findLib(String code, Integer version){
if(libs==null && libs.isEmpty()){ return null; }
for(Lib lib : libs) {
if(lib.getCode().equals(code) && lib.getVersion().equals(version)){ return lib; }
}
return null;
}
private List<Indicator> findIndicatorsByLib(String libCode, Integer libVersion){
if(libs==null && libs.isEmpty()){
return Collections.emptyList();
}
for(Lib lib : libs){
if(lib instanceof IndicatorLib){
IndicatorLib indicatorLib =(IndicatorLib)lib;
return indicatorLib.getIndicators();
}
}
return Collections.emptyList();
}
private void findRefIndicators(List<IndicatorLib> requiredLibs, String libCode, Integer libVersion, String indicatorCode){
}
} }

5
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/IndicatorProcessor.java

@ -6,6 +6,7 @@ import io.sc.engine.rule.core.po.lib.processor.*;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeInfo;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 指标处理器 * 指标处理器
@ -26,12 +27,14 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
@JsonSubTypes.Type(value=SqlIndicatorProcessor.class), //SQL赋值处理器 @JsonSubTypes.Type(value=SqlIndicatorProcessor.class), //SQL赋值处理器
@JsonSubTypes.Type(value=HttpRequestIndicatorProcessor.class) //Http请求处理器 @JsonSubTypes.Type(value=HttpRequestIndicatorProcessor.class) //Http请求处理器
}) })
public class IndicatorProcessor { public abstract class IndicatorProcessor {
protected ProcessorType type; //类型 protected ProcessorType type; //类型
protected String id; //ID,主键 protected String id; //ID,主键
protected String description; //描述 protected String description; //描述
protected Integer order; //排序 protected Integer order; //排序
public abstract PlaceHolder extractPlaceHolder();
@JsonIgnore @JsonIgnore
public ProcessorType getType() { public ProcessorType getType() {
return type; return type;

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ArithmeticIndicatorProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.lib.IndicatorProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 指标处理器算数运算操作 * 指标处理器算数运算操作
@ -21,6 +22,11 @@ public class ArithmeticIndicatorProcessor extends IndicatorProcessor {
return ProcessorType.ARITHMETIC; return ProcessorType.ARITHMETIC;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(arithmetic);
}
public String getArithmetic() { public String getArithmetic() {
return arithmetic; return arithmetic;
} }

28
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ConditionRangeIndicatorProcessor.java

@ -1,10 +1,17 @@
package io.sc.engine.rule.core.po.lib.processor; package io.sc.engine.rule.core.po.lib.processor;
import com.fasterxml.jackson.core.type.TypeReference;
import io.sc.engine.rule.core.code.generator.impl.processor.ConditionRange;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.po.lib.IndicatorProcessor; import io.sc.engine.rule.core.po.lib.IndicatorProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
import io.sc.platform.util.ObjectMapperUtil;
import org.springframework.util.StringUtils;
import java.util.List;
/** /**
* 指标处理器条件范围操作 * 指标处理器条件范围操作
@ -21,6 +28,27 @@ public class ConditionRangeIndicatorProcessor extends IndicatorProcessor {
return ProcessorType.CONDITION_RANGE; return ProcessorType.CONDITION_RANGE;
} }
@Override
public PlaceHolder extractPlaceHolder() {
if(!StringUtils.hasText(conditionRange)){
return new PlaceHolder();
}
try {
List<ConditionRange> items = ObjectMapperUtil.json().readValue(conditionRange, new TypeReference<List<ConditionRange>>() {
});
if(items!=null && !items.isEmpty()){
PlaceHolder result =new PlaceHolder();
for (ConditionRange item : items) {
result.add(PlaceHolder.extract(item.getCondition(),item.getValue()));
}
return result;
}
return new PlaceHolder();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public String getConditionRange() { public String getConditionRange() {
return conditionRange; return conditionRange;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/EmptyIndicatorProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.lib.IndicatorProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 指标处理器空操作 * 指标处理器空操作
@ -18,4 +19,9 @@ public class EmptyIndicatorProcessor extends IndicatorProcessor {
public ProcessorType getType() { public ProcessorType getType() {
return ProcessorType.EMPTY; return ProcessorType.EMPTY;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return new PlaceHolder();
}
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/GroovyScriptIndicatorProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.lib.IndicatorProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 指标处理器脚本代码操作 * 指标处理器脚本代码操作
@ -21,6 +22,11 @@ public class GroovyScriptIndicatorProcessor extends IndicatorProcessor {
return ProcessorType.GROOVY_SCRIPT; return ProcessorType.GROOVY_SCRIPT;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(groovyScript);
}
public String getGroovyScript() { public String getGroovyScript() {
return groovyScript; return groovyScript;
} }

15
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/HttpRequestIndicatorProcessor.java

@ -7,6 +7,7 @@ import io.sc.engine.rule.core.enums.HttpMethodType;
import io.sc.engine.rule.core.enums.HttpResponseBodyType; import io.sc.engine.rule.core.enums.HttpResponseBodyType;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.po.lib.IndicatorProcessor; import io.sc.engine.rule.core.po.lib.IndicatorProcessor;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 指标处理器SQL赋值操作 * 指标处理器SQL赋值操作
@ -39,6 +40,20 @@ public class HttpRequestIndicatorProcessor extends IndicatorProcessor {
return ProcessorType.HTTP_REQUEST; return ProcessorType.HTTP_REQUEST;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(httpUrl,
httpAuthBasicUsername,
httpAuthBasicPassword,
httpAuthBearerToken,
httpAuthParameterValues,
httpRequestHeader,
httpRequestHeaderParameterValues,
httpRequestBody,
httpRequestBodyParameterValues
);
}
public HttpMethodType getHttpMethod() { public HttpMethodType getHttpMethod() {
return httpMethod; return httpMethod;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/MathFormulaIndicatorProcessor.java

@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.po.lib.IndicatorProcessor; import io.sc.engine.rule.core.po.lib.IndicatorProcessor;
import io.sc.engine.rule.core.po.model.ParameterProcessor; import io.sc.engine.rule.core.po.model.ParameterProcessor;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 模型参数处理器数学表达式操作 * 模型参数处理器数学表达式操作
@ -19,6 +20,11 @@ public class MathFormulaIndicatorProcessor extends IndicatorProcessor {
return ProcessorType.MATH_FORMULA; return ProcessorType.MATH_FORMULA;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(mathFormula);
}
public String getMathFormula() { public String getMathFormula() {
return mathFormula; return mathFormula;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/NumberRangeIndicatorProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.lib.IndicatorProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 指标处理器数值范围操作 * 指标处理器数值范围操作
@ -22,6 +23,11 @@ public class NumberRangeIndicatorProcessor extends IndicatorProcessor {
return ProcessorType.NUMBER_RANGE; return ProcessorType.NUMBER_RANGE;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(numberRangeVar,numberRange);
}
public String getNumberRangeVar() { public String getNumberRangeVar() {
return numberRangeVar; return numberRangeVar;
} }

27
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ObjectPropertiesIndicatorProcessor.java

@ -2,8 +2,15 @@ package io.sc.engine.rule.core.po.lib.processor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.core.type.TypeReference;
import io.sc.engine.rule.core.code.generator.impl.processor.ObjectProperty;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.po.lib.IndicatorProcessor; import io.sc.engine.rule.core.po.lib.IndicatorProcessor;
import io.sc.engine.rule.core.util.PlaceHolder;
import io.sc.platform.util.ObjectMapperUtil;
import org.springframework.util.StringUtils;
import java.util.List;
/** /**
* 模型参数处理器条件范围操作 * 模型参数处理器条件范围操作
@ -21,6 +28,26 @@ public class ObjectPropertiesIndicatorProcessor extends IndicatorProcessor {
return ProcessorType.OBJECT_PROPERTIES; return ProcessorType.OBJECT_PROPERTIES;
} }
@Override
public PlaceHolder extractPlaceHolder() {
PlaceHolder result =new PlaceHolder();
result.add(PlaceHolder.extract(objectCondition));
if(StringUtils.hasText(objectProperties)){
try {
List<ObjectProperty> items = ObjectMapperUtil.json().readValue(objectProperties, new TypeReference<List<ObjectProperty>>() {
});
if(items!=null && !items.isEmpty()) {
for (ObjectProperty item : items) {
result.add(PlaceHolder.extract(item.getExpression()));
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return result;
}
public String getObjectCondition() { public String getObjectCondition() {
return objectCondition; return objectCondition;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/SqlIndicatorProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.lib.IndicatorProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 指标处理器SQL赋值操作 * 指标处理器SQL赋值操作
@ -24,6 +25,11 @@ public class SqlIndicatorProcessor extends IndicatorProcessor {
return ProcessorType.SQL; return ProcessorType.SQL;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(sql,sqlFieldMapping);
}
public String getSqlDatasourceName() { public String getSqlDatasourceName() {
return sqlDatasourceName; return sqlDatasourceName;
} }

7
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/TernaryIndicatorProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.lib.IndicatorProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 指标处理器三元操作 * 指标处理器三元操作
@ -23,6 +24,12 @@ public class TernaryIndicatorProcessor extends IndicatorProcessor {
return ProcessorType.TERNARY; return ProcessorType.TERNARY;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(ternaryCondition,ternaryTrue,ternaryFalse);
}
public String getTernaryCondition() { public String getTernaryCondition() {
return ternaryCondition; return ternaryCondition;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/WhenThenIndicatorProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.lib.IndicatorProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 指标处理器WhenThen操作 * 指标处理器WhenThen操作
@ -23,6 +24,11 @@ public class WhenThenIndicatorProcessor extends IndicatorProcessor {
return ProcessorType.WHEN_THEN; return ProcessorType.WHEN_THEN;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(when,then);
}
public String getWhen() { public String getWhen() {
return when; return when;
} }

18
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/Model.java

@ -1,6 +1,7 @@
package io.sc.engine.rule.core.po.model; package io.sc.engine.rule.core.po.model;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import io.sc.engine.rule.core.enums.ExecuteMode; import io.sc.engine.rule.core.enums.ExecuteMode;
@ -67,6 +68,23 @@ public class Model {
return null; return null;
} }
@JsonIgnore
public List<ParameterProcessor> getAllParameterProcessors(){
List<Parameter> parameters =getAllParameters();
if(parameters==null || parameters.isEmpty()){
return Collections.emptyList();
}
List<ParameterProcessor> result =new ArrayList<>();
for(Parameter parameter : parameters){
List<ParameterProcessor> processors =parameter.getProcessors();
if(processors==null || processors.isEmpty()){
continue;
}
result.addAll(processors);
}
return result;
}
@JsonIgnore @JsonIgnore
public List<ParameterInOptionItem> getParameterOptionsByOptionParameterCode(String code){ public List<ParameterInOptionItem> getParameterOptionsByOptionParameterCode(String code){
if(code!=null && !code.trim().isEmpty()) { if(code!=null && !code.trim().isEmpty()) {

3
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/ParameterProcessor.java

@ -6,6 +6,7 @@ import io.sc.engine.rule.core.po.model.processor.*;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeInfo;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 参数处理器 * 参数处理器
@ -44,6 +45,8 @@ public abstract class ParameterProcessor {
@JsonIgnore @JsonIgnore
public abstract ProcessorType getType(); public abstract ProcessorType getType();
public abstract PlaceHolder extractPlaceHolder();
public String getId() { public String getId() {
return id; return id;
} }

10
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ArithmeticParameterProcessor.java

@ -5,6 +5,11 @@ import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
import io.sc.engine.rule.core.util.PlaceHolderEnumExpressionUtil;
import io.sc.platform.util.PlaceHolderExpressionUtil;
import java.util.List;
/** /**
* 模型参数处理器算数运算操作 * 模型参数处理器算数运算操作
@ -21,6 +26,11 @@ public class ArithmeticParameterProcessor extends ParameterProcessor {
return ProcessorType.ARITHMETIC; return ProcessorType.ARITHMETIC;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(arithmetic);
}
public String getArithmetic() { public String getArithmetic() {
return arithmetic; return arithmetic;
} }

28
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ConditionRangeParameterProcessor.java

@ -1,10 +1,17 @@
package io.sc.engine.rule.core.po.model.processor; package io.sc.engine.rule.core.po.model.processor;
import com.fasterxml.jackson.core.type.TypeReference;
import io.sc.engine.rule.core.code.generator.impl.processor.ConditionRange;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.po.model.ParameterProcessor; import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
import io.sc.platform.util.ObjectMapperUtil;
import org.springframework.util.StringUtils;
import java.util.List;
/** /**
* 模型参数处理器条件范围操作 * 模型参数处理器条件范围操作
@ -21,6 +28,27 @@ public class ConditionRangeParameterProcessor extends ParameterProcessor {
return ProcessorType.CONDITION_RANGE; return ProcessorType.CONDITION_RANGE;
} }
@Override
public PlaceHolder extractPlaceHolder() {
if(!StringUtils.hasText(conditionRange)){
return new PlaceHolder();
}
try {
List<ConditionRange> items = ObjectMapperUtil.json().readValue(conditionRange, new TypeReference<List<ConditionRange>>() {
});
if(items!=null && !items.isEmpty()){
PlaceHolder result =new PlaceHolder();
for (ConditionRange item : items) {
result.add(PlaceHolder.extract(item.getCondition(),item.getValue()));
}
return result;
}
return new PlaceHolder();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public String getConditionRange() { public String getConditionRange() {
return conditionRange; return conditionRange;
} }

31
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTable2CParameterProcessor.java

@ -1,10 +1,18 @@
package io.sc.engine.rule.core.po.model.processor; package io.sc.engine.rule.core.po.model.processor;
import com.fasterxml.jackson.core.type.TypeReference;
import io.sc.engine.rule.core.code.generator.impl.processor.ConditionRange;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.po.model.ParameterProcessor; import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
import io.sc.platform.util.ObjectMapperUtil;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
/** /**
* 模型参数处理器简单决策表 * 模型参数处理器简单决策表
@ -21,6 +29,29 @@ public class DecisionTable2CParameterProcessor extends ParameterProcessor {
return ProcessorType.DECISION_TABLE_2C; return ProcessorType.DECISION_TABLE_2C;
} }
@Override
public PlaceHolder extractPlaceHolder() {
if(!StringUtils.hasText(decisionTable2C)){
return new PlaceHolder();
}
try {
List<Map<String,String>> items = ObjectMapperUtil.json().readValue(decisionTable2C, new TypeReference<List<Map<String,String>>>() {
});
if(items!=null && !items.isEmpty()) {
PlaceHolder result = new PlaceHolder();
for (Map<String,String> item : items) {
for (Map.Entry<String,String> entry : item.entrySet()) {
result.add(PlaceHolder.extract(entry.getValue()));
}
}
return result;
}
return new PlaceHolder();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public String getDecisionTable2C() { public String getDecisionTable2C() {
return decisionTable2C; return decisionTable2C;
} }

30
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTableParameterProcessor.java

@ -1,10 +1,17 @@
package io.sc.engine.rule.core.po.model.processor; package io.sc.engine.rule.core.po.model.processor;
import com.fasterxml.jackson.core.type.TypeReference;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.po.model.ParameterProcessor; import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
import io.sc.platform.util.ObjectMapperUtil;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
/** /**
* 模型参数处理器决策表 * 模型参数处理器决策表
@ -21,6 +28,29 @@ public class DecisionTableParameterProcessor extends ParameterProcessor {
return ProcessorType.DECISION_TABLE; return ProcessorType.DECISION_TABLE;
} }
@Override
public PlaceHolder extractPlaceHolder() {
if(!StringUtils.hasText(decisionTable)){
return new PlaceHolder();
}
try {
List<Map<String,String>> items = ObjectMapperUtil.json().readValue(decisionTable, new TypeReference<List<Map<String,String>>>() {
});
if(items!=null && !items.isEmpty()) {
PlaceHolder result = new PlaceHolder();
for (Map<String,String> item : items) {
for (Map.Entry<String,String> entry : item.entrySet()) {
result.add(PlaceHolder.extract(entry.getValue()));
}
}
return result;
}
return new PlaceHolder();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public String getDecisionTable() { public String getDecisionTable() {
return decisionTable; return decisionTable;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTreeParameterProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 模型参数处理器决策树 * 模型参数处理器决策树
@ -21,6 +22,11 @@ public class DecisionTreeParameterProcessor extends ParameterProcessor {
return ProcessorType.DECISION_TREE; return ProcessorType.DECISION_TREE;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(decisionTree);
}
public String getDecisionTree() { public String getDecisionTree() {
return decisionTree; return decisionTree;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/EmptyParameterProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 模型参数处理器空操作 * 模型参数处理器空操作
@ -18,4 +19,9 @@ public class EmptyParameterProcessor extends ParameterProcessor {
public ProcessorType getType() { public ProcessorType getType() {
return ProcessorType.EMPTY; return ProcessorType.EMPTY;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return new PlaceHolder();
}
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ExecutionFlowParameterProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 模型参数处理器执行流 * 模型参数处理器执行流
@ -21,6 +22,11 @@ public class ExecutionFlowParameterProcessor extends ParameterProcessor {
return ProcessorType.EXECUTION_FLOW; return ProcessorType.EXECUTION_FLOW;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(executionFlow);
}
public String getExecutionFlow() { public String getExecutionFlow() {
return executionFlow; return executionFlow;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/GroovyScriptParameterProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 模型参数处理器脚本代码操作 * 模型参数处理器脚本代码操作
@ -21,6 +22,11 @@ public class GroovyScriptParameterProcessor extends ParameterProcessor {
return ProcessorType.GROOVY_SCRIPT; return ProcessorType.GROOVY_SCRIPT;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(groovyScript);
}
public String getGroovyScript() { public String getGroovyScript() {
return groovyScript; return groovyScript;
} }

15
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/HttpRequestParameterProcessor.java

@ -8,6 +8,7 @@ import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 模型参数处理器Http请求操作 * 模型参数处理器Http请求操作
@ -40,6 +41,20 @@ public class HttpRequestParameterProcessor extends ParameterProcessor {
return ProcessorType.HTTP_REQUEST; return ProcessorType.HTTP_REQUEST;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(httpUrl,
httpAuthBasicUsername,
httpAuthBasicPassword,
httpAuthBearerToken,
httpAuthParameterValues,
httpRequestHeader,
httpRequestHeaderParameterValues,
httpRequestBody,
httpRequestBodyParameterValues
);
}
public HttpMethodType getHttpMethod() { public HttpMethodType getHttpMethod() {
return httpMethod; return httpMethod;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/MathFormulaParameterProcessor.java

@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.po.model.ParameterProcessor; import io.sc.engine.rule.core.po.model.ParameterProcessor;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 模型参数处理器数学表达式操作 * 模型参数处理器数学表达式操作
@ -18,6 +19,11 @@ public class MathFormulaParameterProcessor extends ParameterProcessor {
return ProcessorType.MATH_FORMULA; return ProcessorType.MATH_FORMULA;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(mathFormula);
}
public String getMathFormula() { public String getMathFormula() {
return mathFormula; return mathFormula;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/NumberRangeParameterProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 模型参数处理器数值范围操作 * 模型参数处理器数值范围操作
@ -22,6 +23,11 @@ public class NumberRangeParameterProcessor extends ParameterProcessor {
return ProcessorType.NUMBER_RANGE; return ProcessorType.NUMBER_RANGE;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(numberRangeVar,numberRange);
}
public String getNumberRangeVar() { public String getNumberRangeVar() {
return numberRangeVar; return numberRangeVar;
} }

27
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ObjectPropertiesParameterProcessor.java

@ -2,8 +2,15 @@ package io.sc.engine.rule.core.po.model.processor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.core.type.TypeReference;
import io.sc.engine.rule.core.code.generator.impl.processor.ObjectProperty;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.po.model.ParameterProcessor; import io.sc.engine.rule.core.po.model.ParameterProcessor;
import io.sc.engine.rule.core.util.PlaceHolder;
import io.sc.platform.util.ObjectMapperUtil;
import org.springframework.util.StringUtils;
import java.util.List;
/** /**
* 模型参数处理器条件范围操作 * 模型参数处理器条件范围操作
@ -21,6 +28,26 @@ public class ObjectPropertiesParameterProcessor extends ParameterProcessor {
return ProcessorType.OBJECT_PROPERTIES; return ProcessorType.OBJECT_PROPERTIES;
} }
@Override
public PlaceHolder extractPlaceHolder() {
PlaceHolder result =new PlaceHolder();
result.add(PlaceHolder.extract(objectCondition));
if(StringUtils.hasText(objectProperties)){
try {
List<ObjectProperty> items = ObjectMapperUtil.json().readValue(objectProperties, new TypeReference<List<ObjectProperty>>() {
});
if(items!=null && !items.isEmpty()) {
for (ObjectProperty item : items) {
result.add(PlaceHolder.extract(item.getExpression()));
}
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return result;
}
public String getObjectCondition() { public String getObjectCondition() {
return objectCondition; return objectCondition;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/OptionValueParameterProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 模型参数处理器选项值实体类 * 模型参数处理器选项值实体类
@ -21,6 +22,11 @@ public class OptionValueParameterProcessor extends ParameterProcessor {
return ProcessorType.OPTION_VALUE; return ProcessorType.OPTION_VALUE;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(optionCode);
}
public String getOptionCode() { public String getOptionCode() {
return optionCode; return optionCode;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/PmmlParameterProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 模型参数处理器PMML * 模型参数处理器PMML
@ -21,6 +22,11 @@ public class PmmlParameterProcessor extends ParameterProcessor {
return ProcessorType.PMML; return ProcessorType.PMML;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(pmml);
}
public String getPmml() { public String getPmml() {
return pmml; return pmml;
} }

31
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/RuleSetParameterProcessor.java

@ -1,10 +1,20 @@
package io.sc.engine.rule.core.po.model.processor; package io.sc.engine.rule.core.po.model.processor;
import com.fasterxml.jackson.core.type.TypeReference;
import io.sc.engine.rule.core.ScoreCardItem;
import io.sc.engine.rule.core.code.generator.impl.processor.ConditionRange;
import io.sc.engine.rule.core.code.generator.impl.processor.NumberRange;
import io.sc.engine.rule.core.code.generator.impl.processor.RuleSet;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.po.model.ParameterProcessor; import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
import io.sc.platform.util.ObjectMapperUtil;
import org.springframework.util.StringUtils;
import java.util.List;
/** /**
* 模型参数处理器规则 * 模型参数处理器规则
@ -21,6 +31,27 @@ public class RuleSetParameterProcessor extends ParameterProcessor{
return ProcessorType.RULE_SET; return ProcessorType.RULE_SET;
} }
@Override
public PlaceHolder extractPlaceHolder() {
if(!StringUtils.hasText(ruleSet)){
return new PlaceHolder();
}
try {
PlaceHolder result = new PlaceHolder();
List<RuleSet> ruleSets = ObjectMapperUtil.json().readValue(this.ruleSet, new TypeReference<List<RuleSet>>() {
});
if(ruleSets==null || ruleSets.isEmpty()){
return new PlaceHolder();
}
for(RuleSet ruleSet : ruleSets){
result.add(PlaceHolder.extract(ruleSet.getCondition(),ruleSet.getValue(),ruleSet.getMessage()));
}
return result;
}catch (Exception e){
throw new RuntimeException(e);
}
}
public String getRuleSet() { public String getRuleSet() {
return ruleSet; return ruleSet;
} }

52
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ScoreCardParameterProcessor.java

@ -2,14 +2,61 @@ package io.sc.engine.rule.core.po.model.processor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.core.type.TypeReference;
import io.sc.engine.rule.core.ScoreCardItem;
import io.sc.engine.rule.core.code.generator.impl.processor.ConditionRange;
import io.sc.engine.rule.core.code.generator.impl.processor.NumberRange;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.po.model.ParameterProcessor; import io.sc.engine.rule.core.po.model.ParameterProcessor;
import io.sc.engine.rule.core.util.PlaceHolder;
import io.sc.platform.util.ObjectMapperUtil;
import org.springframework.util.StringUtils;
import java.util.List;
@JsonTypeName("SCORE_CARD") @JsonTypeName("SCORE_CARD")
@JsonIgnoreProperties(ignoreUnknown=true) @JsonIgnoreProperties(ignoreUnknown=true)
public class ScoreCardParameterProcessor extends ParameterProcessor { public class ScoreCardParameterProcessor extends ParameterProcessor {
private String scoreCard; private String scoreCard;
@Override
public ProcessorType getType() {
return ProcessorType.SCORE_CARD;
}
@Override
public PlaceHolder extractPlaceHolder() {
if(!StringUtils.hasText(scoreCard)){
return new PlaceHolder();
}
try {
PlaceHolder result = new PlaceHolder();
List<ScoreCardItem> scoreCardItems = ObjectMapperUtil.json().readValue(this.scoreCard, new TypeReference<List<ScoreCardItem>>() {
});
if(scoreCardItems==null || scoreCardItems.isEmpty()){
return new PlaceHolder();
}
for(ScoreCardItem scoreCardItem : scoreCardItems){
List<ConditionRange> conditionRanges =scoreCardItem.getConditionRange();
if(conditionRanges!=null && !conditionRanges.isEmpty()){
for(ConditionRange conditionRange : conditionRanges){
result.add(PlaceHolder.extract(conditionRange.getCondition()));
result.add(PlaceHolder.extract(conditionRange.getValue()));
}
}
List<NumberRange> numberRanges =scoreCardItem.getNumberRange();
if(numberRanges!=null && !numberRanges.isEmpty()){
for(NumberRange numberRange : numberRanges){
result.add(PlaceHolder.extract(numberRange.getValue()));
}
}
}
return result;
}catch (Exception e){
throw new RuntimeException(e);
}
}
public String getScoreCard() { public String getScoreCard() {
return scoreCard; return scoreCard;
} }
@ -17,9 +64,4 @@ public class ScoreCardParameterProcessor extends ParameterProcessor {
public void setScoreCard(String scoreCard) { public void setScoreCard(String scoreCard) {
this.scoreCard = scoreCard; this.scoreCard = scoreCard;
} }
@Override
public ProcessorType getType() {
return ProcessorType.SCORE_CARD;
}
} }

29
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/SingleRuleParameterProcessor.java

@ -1,10 +1,18 @@
package io.sc.engine.rule.core.po.model.processor; package io.sc.engine.rule.core.po.model.processor;
import com.fasterxml.jackson.core.type.TypeReference;
import io.sc.engine.rule.core.code.generator.impl.processor.RuleSet;
import io.sc.engine.rule.core.code.generator.impl.processor.SingleRule;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.po.model.ParameterProcessor; import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
import io.sc.platform.util.ObjectMapperUtil;
import org.springframework.util.StringUtils;
import java.util.List;
/** /**
* 模型参数处理器单规则 * 模型参数处理器单规则
@ -21,6 +29,27 @@ public class SingleRuleParameterProcessor extends ParameterProcessor{
return ProcessorType.SINGLE_RULE; return ProcessorType.SINGLE_RULE;
} }
@Override
public PlaceHolder extractPlaceHolder() {
if(!StringUtils.hasText(singleRule)){
return new PlaceHolder();
}
try {
PlaceHolder result = new PlaceHolder();
List<SingleRule> singleRules = ObjectMapperUtil.json().readValue(singleRule, new TypeReference<List<SingleRule>>() {
});
if(singleRules==null || singleRules.isEmpty()){
return new PlaceHolder();
}
for(SingleRule singleRule : singleRules){
result.add(PlaceHolder.extract(singleRule.getCondition(),singleRule.getValue(),singleRule.getMessage()));
}
return result;
}catch (Exception e){
throw new RuntimeException(e);
}
}
public String getSingleRule() { public String getSingleRule() {
return singleRule; return singleRule;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/SqlParameterProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 模型参数处理器SQL赋值操作 * 模型参数处理器SQL赋值操作
@ -24,6 +25,11 @@ public class SqlParameterProcessor extends ParameterProcessor {
return ProcessorType.SQL; return ProcessorType.SQL;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(sql,sqlFieldMapping);
}
public String getSqlDatasourceName() { public String getSqlDatasourceName() {
return sqlDatasourceName; return sqlDatasourceName;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/TernaryParameterProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 模型参数处理器三元操作实体类 * 模型参数处理器三元操作实体类
@ -23,6 +24,11 @@ public class TernaryParameterProcessor extends ParameterProcessor {
return ProcessorType.TERNARY; return ProcessorType.TERNARY;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(ternaryCondition,ternaryTrue,ternaryFalse);
}
public String getTernaryCondition() { public String getTernaryCondition() {
return ternaryCondition; return ternaryCondition;
} }

6
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/WhenThenParameterProcessor.java

@ -5,6 +5,7 @@ import io.sc.engine.rule.core.po.model.ParameterProcessor;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.util.PlaceHolder;
/** /**
* 模型参数处理器WhenThen操作 * 模型参数处理器WhenThen操作
@ -23,6 +24,11 @@ public class WhenThenParameterProcessor extends ParameterProcessor {
return ProcessorType.WHEN_THEN; return ProcessorType.WHEN_THEN;
} }
@Override
public PlaceHolder extractPlaceHolder() {
return PlaceHolder.extract(when,then);
}
public String getWhen() { public String getWhen() {
return when; return when;
} }

1
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/GroovyExpressionReplacer.java

@ -4,6 +4,7 @@ import io.sc.platform.util.PlaceHolderExpressionUtil;
import io.sc.platform.util.support.StringLengthDescComparator; import io.sc.platform.util.support.StringLengthDescComparator;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.regex.Matcher; import java.util.regex.Matcher;

61
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/PlaceHolder.java

@ -0,0 +1,61 @@
package io.sc.engine.rule.core.util;
import io.sc.platform.util.PlaceHolderExpressionUtil;
import java.util.LinkedHashSet;
import java.util.Set;
public class PlaceHolder {
private Set<String> variableRefs =new LinkedHashSet<>();
private Set<String> enumRefs =new LinkedHashSet<>();
private Set<String> userFunctionRefs =new LinkedHashSet<>();
public static PlaceHolder extract(String... contents){
if(contents==null || contents.length<=0){
return new PlaceHolder();
}
PlaceHolder result =new PlaceHolder();
for(String content : contents) {
// 抽取变量站位符
result.variableRefs.addAll(PlaceHolderExpressionUtil.extract(content));
result.enumRefs.addAll(PlaceHolderEnumExpressionUtil.extract(content));
result.userFunctionRefs.addAll(UserFunctionExpressionUtil.extract(content));
}
return result;
}
public PlaceHolder add(PlaceHolder placeHolder){
if(placeHolder==null){
return this;
}
variableRefs.addAll(placeHolder.getVariableRefs());
enumRefs.addAll(placeHolder.getEnumRefs());
userFunctionRefs.addAll(placeHolder.getUserFunctionRefs());
return this;
}
public Set<String> getVariableRefs() {
return variableRefs;
}
public void setVariableRefs(Set<String> variableRefs) {
this.variableRefs = variableRefs;
}
public Set<String> getEnumRefs() {
return enumRefs;
}
public void setEnumRefs(Set<String> enumRefs) {
this.enumRefs = enumRefs;
}
public Set<String> getUserFunctionRefs() {
return userFunctionRefs;
}
public void setUserFunctionRefs(Set<String> userFunctionRefs) {
this.userFunctionRefs = userFunctionRefs;
}
}

19
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/PlaceHolderEnumExpressionUtil.java

@ -171,4 +171,23 @@ public class PlaceHolderEnumExpressionUtil {
} }
return expression; return expression;
} }
public static Set<String> extract(String content){
Set<String> result =new LinkedHashSet<>();
if(!StringUtils.hasText(content)){
return result;
}
List<PlaceholderExpression> expressions =parse(content);
if(expressions==null || expressions.isEmpty()) {
return result;
}
for(PlaceholderExpression expression : expressions){
List<PlaceholderExpressionPart> parts =expression.getParts();
if(parts==null || parts.isEmpty()){
continue;
}
result.add(parts.get(0).getName());
}
return result;
}
} }

29
io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/UserFunctionExpressionUtil.java

@ -0,0 +1,29 @@
package io.sc.engine.rule.core.util;
import io.sc.platform.util.CollectionUtil;
import io.sc.platform.util.support.PlaceholderExpression;
import io.sc.platform.util.support.PlaceholderExpressionPart;
import io.sc.platform.util.support.StringLengthDescComparator;
import org.springframework.util.StringUtils;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 占位符表达式工具类
*/
public class UserFunctionExpressionUtil {
private static final Pattern PATTERN =Pattern.compile("UDF\\s.\\s(.+?)\\(");
public static Set<String> extract(String content){
Set<String> result =new LinkedHashSet<>();
if(StringUtils.hasText(content)){
Matcher matcher =PATTERN.matcher(content);
while(matcher.find()){
result.add(matcher.group(1));
}
}
return result;
}
}

4
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/executable/service/impl/ExecuteUnitServiceImpl.java

@ -56,7 +56,7 @@ public class ExecuteUnitServiceImpl implements ExecuteUnitService {
executeUnit.setLibs(LibEntityConverter.toPo(libEntities)); executeUnit.setLibs(LibEntityConverter.toPo(libEntities));
executeUnit.getResource().setTestCases(null);//在获取定义时,不返回测试用例 executeUnit.getResource().setTestCases(null);//在获取定义时,不返回测试用例
executeUnit.optimize();
return executeUnit; return executeUnit;
} }
@ -73,7 +73,7 @@ public class ExecuteUnitServiceImpl implements ExecuteUnitService {
executeUnit.setLib(LibEntityConverter.toPo(libEntity)); executeUnit.setLib(LibEntityConverter.toPo(libEntity));
executeUnit.getLib().setTestCases(null);//在获取定义时,不返回测试用例 executeUnit.getLib().setTestCases(null);//在获取定义时,不返回测试用例
executeUnit.optimize();
return executeUnit; return executeUnit;
} }
return null; return null;

26
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/lib/entity/processor/ConditionRangeIndicatorProcessorEntity.java

@ -2,6 +2,7 @@ package io.sc.engine.rule.server.lib.entity.processor;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import io.sc.engine.rule.core.code.generator.impl.processor.ConditionRange;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.enums.ReplaceMode; import io.sc.engine.rule.core.enums.ReplaceMode;
import io.sc.engine.rule.server.common.service.support.ParameterAndValueType; import io.sc.engine.rule.server.common.service.support.ParameterAndValueType;
@ -65,9 +66,9 @@ public class ConditionRangeIndicatorProcessorEntity extends IndicatorProcessorEn
return json; return json;
} }
try { try {
List<ConditionRangeItem> items = ObjectMapperUtil.json().readValue(json, new TypeReference<List<ConditionRangeItem>>() { List<ConditionRange> items = ObjectMapperUtil.json().readValue(json, new TypeReference<List<ConditionRange>>() {
}); });
for (ConditionRangeItem item : items) { for (ConditionRange item : items) {
item.setCondition(parameterAndValueType.replace(item.getCondition(), mode)); item.setCondition(parameterAndValueType.replace(item.getCondition(), mode));
item.setValue(parameterAndValueType.replace(item.getValue(), mode)); item.setValue(parameterAndValueType.replace(item.getValue(), mode));
} }
@ -76,25 +77,4 @@ public class ConditionRangeIndicatorProcessorEntity extends IndicatorProcessorEn
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
static class ConditionRangeItem {
private String condition;
private String value;
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
} }

7
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/parameter/InOptionParameterEntity.java

@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonTypeName;
import io.sc.engine.rule.core.enums.ParameterType; import io.sc.engine.rule.core.enums.ParameterType;
import io.sc.engine.rule.server.model.entity.*; import io.sc.engine.rule.server.model.entity.*;
import io.sc.engine.rule.server.model.vo.parameter.InOptionParameterVo; import io.sc.engine.rule.server.model.vo.parameter.InOptionParameterVo;
import io.sc.engine.rule.server.resource.entity.ResourceEntity;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import javax.persistence.*; import javax.persistence.*;
@ -103,8 +104,10 @@ public class InOptionParameterEntity extends ParameterEntity {
} }
entity.clearId(); entity.clearId();
entity.setCode("P"+System.currentTimeMillis()); if(args==null || args.length==0 || !ResourceEntity.class.equals(args[0])) {
entity.setName(entity.getName() + "_NEW"); entity.setCode("P" + System.currentTimeMillis());
entity.setName(entity.getName() + "_NEW");
}
return entity; return entity;
} }

26
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/processor/ConditionRangeParameterProcessorEntity.java

@ -2,6 +2,7 @@ package io.sc.engine.rule.server.model.entity.processor;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import io.sc.engine.rule.core.code.generator.impl.processor.ConditionRange;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.enums.ReplaceMode; import io.sc.engine.rule.core.enums.ReplaceMode;
import io.sc.engine.rule.server.common.service.support.ParameterAndValueType; import io.sc.engine.rule.server.common.service.support.ParameterAndValueType;
@ -78,9 +79,9 @@ public class ConditionRangeParameterProcessorEntity extends ParameterProcessorEn
return json; return json;
} }
try { try {
List<ConditionRangeItem> items = ObjectMapperUtil.json().readValue(json, new TypeReference<List<ConditionRangeItem>>() { List<ConditionRange> items = ObjectMapperUtil.json().readValue(json, new TypeReference<List<ConditionRange>>() {
}); });
for (ConditionRangeItem item : items) { for (ConditionRange item : items) {
item.setCondition(parameterAndValueType.replace(item.getCondition(), mode)); item.setCondition(parameterAndValueType.replace(item.getCondition(), mode));
item.setValue(parameterAndValueType.replace(item.getValue(), mode)); item.setValue(parameterAndValueType.replace(item.getValue(), mode));
} }
@ -89,25 +90,4 @@ public class ConditionRangeParameterProcessorEntity extends ParameterProcessorEn
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
static class ConditionRangeItem {
private String condition;
private String value;
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
} }

35
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/processor/ObjectPropertiesParameterProcessorEntity.java

@ -2,6 +2,7 @@ package io.sc.engine.rule.server.model.entity.processor;
import com.fasterxml.jackson.annotation.JsonTypeName; import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import io.sc.engine.rule.core.code.generator.impl.processor.ObjectProperty;
import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.enums.ProcessorType;
import io.sc.engine.rule.core.enums.ReplaceMode; import io.sc.engine.rule.core.enums.ReplaceMode;
import io.sc.engine.rule.server.common.service.support.ParameterAndValueType; import io.sc.engine.rule.server.common.service.support.ParameterAndValueType;
@ -105,9 +106,9 @@ public class ObjectPropertiesParameterProcessorEntity extends ParameterProcessor
return json; return json;
} }
try { try {
List<ObjectPropertiesItem> items = ObjectMapperUtil.json().readValue(json, new TypeReference<List<ObjectPropertiesItem>>() { List<ObjectProperty> items = ObjectMapperUtil.json().readValue(json, new TypeReference<List<ObjectProperty>>() {
}); });
for (ObjectPropertiesItem item : items) { for (ObjectProperty item : items) {
item.setExpression(parameterAndValueType.replace(item.getExpression(), mode)); item.setExpression(parameterAndValueType.replace(item.getExpression(), mode));
} }
return ObjectMapperUtil.json().writeValueAsString(items); return ObjectMapperUtil.json().writeValueAsString(items);
@ -115,34 +116,4 @@ public class ObjectPropertiesParameterProcessorEntity extends ParameterProcessor
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
static class ObjectPropertiesItem {
private String code;
private String name;
private String expression;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getExpression() {
return expression;
}
public void setExpression(String expression) {
this.expression = expression;
}
}
} }

4
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/service/impl/ResourceServiceImpl.java

@ -296,7 +296,9 @@ public class ResourceServiceImpl extends DaoServiceImpl<ResourceEntity, String,
//先找资源 //先找资源
ResourceEntity resourceEntity =this.findById(resourceId); ResourceEntity resourceEntity =this.findById(resourceId);
if(resourceEntity!=null) { if(resourceEntity!=null) {
// 获取指标库
List<LibEntity> libEntities =libService.findByResourceId(resourceEntity.getId()); List<LibEntity> libEntities =libService.findByResourceId(resourceEntity.getId());
// 获取元数据
List<DictionaryEntity> dictionaryEntities =dictionaryService.findDictionaryEntitiesByResourceId(resourceEntity.getId()); List<DictionaryEntity> dictionaryEntities =dictionaryService.findDictionaryEntitiesByResourceId(resourceEntity.getId());
ExecuteUnit4Resource wrapper =new ExecuteUnit4Resource(); ExecuteUnit4Resource wrapper =new ExecuteUnit4Resource();
@ -305,6 +307,7 @@ public class ResourceServiceImpl extends DaoServiceImpl<ResourceEntity, String,
wrapper.setDictionaries(DictionaryEntityConverter.toPo(dictionaryEntities)); wrapper.setDictionaries(DictionaryEntityConverter.toPo(dictionaryEntities));
wrapper.setLibs(LibEntityConverter.toPo(libEntities)); wrapper.setLibs(LibEntityConverter.toPo(libEntities));
wrapper.setFunctions(FunctionEntityConverter.toPo(functionEntities)); wrapper.setFunctions(FunctionEntityConverter.toPo(functionEntities));
wrapper.optimize();
return wrapper; return wrapper;
} }
//再找指标库 //再找指标库
@ -316,6 +319,7 @@ public class ResourceServiceImpl extends DaoServiceImpl<ResourceEntity, String,
wrapper.setLib(LibEntityConverter.toPo(libEntity)); wrapper.setLib(LibEntityConverter.toPo(libEntity));
wrapper.getLib().setTestCases(null); wrapper.getLib().setTestCases(null);
wrapper.setFunctions(FunctionEntityConverter.toPo(functionEntities)); wrapper.setFunctions(FunctionEntityConverter.toPo(functionEntities));
wrapper.optimize();
return wrapper; return wrapper;
} }
} }

29
io.sc.platform.core/src/main/java/UserFunctionExpressionUtil.java

@ -0,0 +1,29 @@
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 占位符表达式工具类
*/
public class UserFunctionExpressionUtil {
private static final Pattern PATTERN =Pattern.compile("UDF\\s*.\\s*(.+?)\\(");
public static List<String> extract(String content){
if(!StringUtils.hasText(content)){
return Collections.emptyList();
}
List<String> result =new ArrayList<>();
Matcher matcher =PATTERN.matcher(content);
while(matcher.find()){
String group =matcher.group(1).trim();
if(StringUtils.hasText(group)){
result.add(group);
}
}
return result;
}
}

19
io.sc.platform.util/src/main/java/io/sc/platform/util/PlaceHolderExpressionUtil.java

@ -171,4 +171,23 @@ public class PlaceHolderExpressionUtil {
} }
return expression; return expression;
} }
public static Set<String> extract(String content){
Set<String> result =new LinkedHashSet<>();
if(!StringUtils.hasText(content)){
return result;
}
List<PlaceholderExpression> expressions =parse(content);
if(expressions==null || expressions.isEmpty()) {
return result;
}
for(PlaceholderExpression expression : expressions){
List<PlaceholderExpressionPart> parts =expression.getParts();
if(parts==null || parts.isEmpty()){
continue;
}
result.add(parts.get(0).getName());
}
return result;
}
} }

Loading…
Cancel
Save