diff --git a/app.platform/build.gradle b/app.platform/build.gradle index 8de830e0..d898be0f 100644 --- a/app.platform/build.gradle +++ b/app.platform/build.gradle @@ -1,4 +1,4 @@ -yapply plugin: 'war' +apply plugin: 'war' apply plugin: 'com.google.cloud.tools.jib' apply from: "build-common.gradle" diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit.java index 7c756ced..d20c50e2 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit.java +++ b/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 functions; //自定义函数 public abstract String getType(); + public abstract void optimize(); public List getDictionaries() { return dictionaries; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Lib.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Lib.java index d909e148..fc26bafe 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Lib.java +++ b/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"; } + @Override + public void optimize() { + + } + public Lib getLib() { return lib; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Resource.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Resource.java index a93dd11c..3b559e34 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Resource.java +++ b/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; 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.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.util.PlaceHolder; -import java.util.List; +import java.util.*; @JsonPropertyOrder({"type","resource","libs","dictionaries","functions"}) public class ExecuteUnit4Resource extends ExecuteUnit{ @@ -31,4 +39,77 @@ public class ExecuteUnit4Resource extends ExecuteUnit{ public void setLibs(List libs) { this.libs = libs; } + + public void optimize(){ + if(1==1) return; + if(resource instanceof ModelResource){ + ModelResource modelResource =(ModelResource) resource; + Model model =modelResource.getModel(); + List 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 parameters =model.getAllParameters(); + if(parameters==null || parameters.isEmpty()){ + return; + } + List 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 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 requiredLibs, String libCode, Integer libVersion, String indicatorCode){ + + } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/IndicatorProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/IndicatorProcessor.java index 6afaad81..1d05117a 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/IndicatorProcessor.java +++ b/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.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 指标处理器 @@ -26,11 +27,13 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; @JsonSubTypes.Type(value=SqlIndicatorProcessor.class), //SQL赋值处理器 @JsonSubTypes.Type(value=HttpRequestIndicatorProcessor.class) //Http请求处理器 }) -public class IndicatorProcessor { +public abstract class IndicatorProcessor { protected ProcessorType type; //类型 protected String id; //ID,主键 protected String description; //描述 protected Integer order; //排序 + + public abstract PlaceHolder extractPlaceHolder(); @JsonIgnore public ProcessorType getType() { diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ArithmeticIndicatorProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ArithmeticIndicatorProcessor.java index ce9f0932..7532bf5a 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ArithmeticIndicatorProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 指标处理器(算数运算操作) @@ -21,6 +22,11 @@ public class ArithmeticIndicatorProcessor extends IndicatorProcessor { return ProcessorType.ARITHMETIC; } + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(arithmetic); + } + public String getArithmetic() { return arithmetic; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ConditionRangeIndicatorProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ConditionRangeIndicatorProcessor.java index b1fcc577..e1cc209d 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ConditionRangeIndicatorProcessor.java +++ b/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; +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.po.lib.IndicatorProcessor; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 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; } + @Override + public PlaceHolder extractPlaceHolder() { + if(!StringUtils.hasText(conditionRange)){ + return new PlaceHolder(); + } + try { + List items = ObjectMapperUtil.json().readValue(conditionRange, new TypeReference>() { + }); + 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() { return conditionRange; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/EmptyIndicatorProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/EmptyIndicatorProcessor.java index d1e083af..424b4208 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/EmptyIndicatorProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 指标处理器(空操作) @@ -18,4 +19,9 @@ public class EmptyIndicatorProcessor extends IndicatorProcessor { public ProcessorType getType() { return ProcessorType.EMPTY; } + + @Override + public PlaceHolder extractPlaceHolder() { + return new PlaceHolder(); + } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/GroovyScriptIndicatorProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/GroovyScriptIndicatorProcessor.java index 9cdc66bc..e8776e3c 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/GroovyScriptIndicatorProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 指标处理器(脚本代码操作) @@ -21,6 +22,11 @@ public class GroovyScriptIndicatorProcessor extends IndicatorProcessor { return ProcessorType.GROOVY_SCRIPT; } + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(groovyScript); + } + public String getGroovyScript() { return groovyScript; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/HttpRequestIndicatorProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/HttpRequestIndicatorProcessor.java index 6c082eb6..ca382db7 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/HttpRequestIndicatorProcessor.java +++ b/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.ProcessorType; import io.sc.engine.rule.core.po.lib.IndicatorProcessor; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 指标处理器(SQL赋值操作) @@ -39,6 +40,20 @@ public class HttpRequestIndicatorProcessor extends IndicatorProcessor { return ProcessorType.HTTP_REQUEST; } + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(httpUrl, + httpAuthBasicUsername, + httpAuthBasicPassword, + httpAuthBearerToken, + httpAuthParameterValues, + httpRequestHeader, + httpRequestHeaderParameterValues, + httpRequestBody, + httpRequestBodyParameterValues + ); + } + public HttpMethodType getHttpMethod() { return httpMethod; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/MathFormulaIndicatorProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/MathFormulaIndicatorProcessor.java index 98860232..58ae9a68 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/MathFormulaIndicatorProcessor.java +++ b/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.po.lib.IndicatorProcessor; 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; } + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(mathFormula); + } + public String getMathFormula() { return mathFormula; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/NumberRangeIndicatorProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/NumberRangeIndicatorProcessor.java index 32156fa7..c62a2fc1 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/NumberRangeIndicatorProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 指标处理器(数值范围操作) @@ -21,6 +22,11 @@ public class NumberRangeIndicatorProcessor extends IndicatorProcessor { public ProcessorType getType() { return ProcessorType.NUMBER_RANGE; } + + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(numberRangeVar,numberRange); + } public String getNumberRangeVar() { return numberRangeVar; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ObjectPropertiesIndicatorProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ObjectPropertiesIndicatorProcessor.java index 35c0573f..1b6860a4 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/ObjectPropertiesIndicatorProcessor.java +++ b/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.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.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; } + @Override + public PlaceHolder extractPlaceHolder() { + PlaceHolder result =new PlaceHolder(); + result.add(PlaceHolder.extract(objectCondition)); + if(StringUtils.hasText(objectProperties)){ + try { + List items = ObjectMapperUtil.json().readValue(objectProperties, new TypeReference>() { + }); + 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() { return objectCondition; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/SqlIndicatorProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/SqlIndicatorProcessor.java index 18700501..7ed9c6fe 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/SqlIndicatorProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 指标处理器(SQL赋值操作) @@ -23,6 +24,11 @@ public class SqlIndicatorProcessor extends IndicatorProcessor { public ProcessorType getType() { return ProcessorType.SQL; } + + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(sql,sqlFieldMapping); + } public String getSqlDatasourceName() { return sqlDatasourceName; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/TernaryIndicatorProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/TernaryIndicatorProcessor.java index f6e5e4a5..bee009dc 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/TernaryIndicatorProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 指标处理器(三元操作) @@ -22,7 +23,13 @@ public class TernaryIndicatorProcessor extends IndicatorProcessor { public ProcessorType getType() { return ProcessorType.TERNARY; } - + + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(ternaryCondition,ternaryTrue,ternaryFalse); + } + + public String getTernaryCondition() { return ternaryCondition; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/WhenThenIndicatorProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/WhenThenIndicatorProcessor.java index bbcd0675..8259a1e9 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/lib/processor/WhenThenIndicatorProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 指标处理器(WhenThen操作) @@ -22,6 +23,11 @@ public class WhenThenIndicatorProcessor extends IndicatorProcessor { public ProcessorType getType() { return ProcessorType.WHEN_THEN; } + + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(when,then); + } public String getWhen() { return when; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/Model.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/Model.java index a40e9219..16e167ed 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/Model.java +++ b/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; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import io.sc.engine.rule.core.enums.ExecuteMode; @@ -66,6 +67,23 @@ public class Model { } return null; } + + @JsonIgnore + public List getAllParameterProcessors(){ + List parameters =getAllParameters(); + if(parameters==null || parameters.isEmpty()){ + return Collections.emptyList(); + } + List result =new ArrayList<>(); + for(Parameter parameter : parameters){ + List processors =parameter.getProcessors(); + if(processors==null || processors.isEmpty()){ + continue; + } + result.addAll(processors); + } + return result; + } @JsonIgnore public List getParameterOptionsByOptionParameterCode(String code){ diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/ParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/ParameterProcessor.java index e172c39b..d4e0984d 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/ParameterProcessor.java +++ b/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.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 参数处理器 @@ -44,6 +45,8 @@ public abstract class ParameterProcessor { @JsonIgnore public abstract ProcessorType getType(); + public abstract PlaceHolder extractPlaceHolder(); + public String getId() { return id; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ArithmeticParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ArithmeticParameterProcessor.java index e3b0afd6..c5ae2a9a 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ArithmeticParameterProcessor.java +++ b/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.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; } + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(arithmetic); + } + public String getArithmetic() { return arithmetic; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ConditionRangeParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ConditionRangeParameterProcessor.java index a71dc6bb..bd37f367 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ConditionRangeParameterProcessor.java +++ b/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; +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.po.model.ParameterProcessor; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 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; /** * 模型参数处理器(条件范围操作) @@ -20,7 +27,28 @@ public class ConditionRangeParameterProcessor extends ParameterProcessor { public ProcessorType getType() { return ProcessorType.CONDITION_RANGE; } - + + @Override + public PlaceHolder extractPlaceHolder() { + if(!StringUtils.hasText(conditionRange)){ + return new PlaceHolder(); + } + try { + List items = ObjectMapperUtil.json().readValue(conditionRange, new TypeReference>() { + }); + 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() { return conditionRange; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTable2CParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTable2CParameterProcessor.java index cb61a97b..141bb23c 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTable2CParameterProcessor.java +++ b/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; +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.po.model.ParameterProcessor; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 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; /** * 模型参数处理器(简单决策表) @@ -20,7 +28,30 @@ public class DecisionTable2CParameterProcessor extends ParameterProcessor { public ProcessorType getType() { return ProcessorType.DECISION_TABLE_2C; } - + + @Override + public PlaceHolder extractPlaceHolder() { + if(!StringUtils.hasText(decisionTable2C)){ + return new PlaceHolder(); + } + try { + List> items = ObjectMapperUtil.json().readValue(decisionTable2C, new TypeReference>>() { + }); + if(items!=null && !items.isEmpty()) { + PlaceHolder result = new PlaceHolder(); + for (Map item : items) { + for (Map.Entry entry : item.entrySet()) { + result.add(PlaceHolder.extract(entry.getValue())); + } + } + return result; + } + return new PlaceHolder(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + public String getDecisionTable2C() { return decisionTable2C; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTableParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTableParameterProcessor.java index 3600ef04..2bb82bd6 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTableParameterProcessor.java +++ b/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; +import com.fasterxml.jackson.core.type.TypeReference; import io.sc.engine.rule.core.enums.ProcessorType; import io.sc.engine.rule.core.po.model.ParameterProcessor; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 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; /** * 模型参数处理器(决策表) @@ -20,6 +27,29 @@ public class DecisionTableParameterProcessor extends ParameterProcessor { public ProcessorType getType() { return ProcessorType.DECISION_TABLE; } + + @Override + public PlaceHolder extractPlaceHolder() { + if(!StringUtils.hasText(decisionTable)){ + return new PlaceHolder(); + } + try { + List> items = ObjectMapperUtil.json().readValue(decisionTable, new TypeReference>>() { + }); + if(items!=null && !items.isEmpty()) { + PlaceHolder result = new PlaceHolder(); + for (Map item : items) { + for (Map.Entry entry : item.entrySet()) { + result.add(PlaceHolder.extract(entry.getValue())); + } + } + return result; + } + return new PlaceHolder(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } public String getDecisionTable() { return decisionTable; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTreeParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTreeParameterProcessor.java index 66ddeb08..e2f2183d 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/DecisionTreeParameterProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 模型参数处理器(决策树) @@ -20,7 +21,12 @@ public class DecisionTreeParameterProcessor extends ParameterProcessor { public ProcessorType getType() { return ProcessorType.DECISION_TREE; } - + + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(decisionTree); + } + public String getDecisionTree() { return decisionTree; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/EmptyParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/EmptyParameterProcessor.java index 26c7506c..8e2d5385 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/EmptyParameterProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 模型参数处理器(空操作) @@ -18,4 +19,9 @@ public class EmptyParameterProcessor extends ParameterProcessor { public ProcessorType getType() { return ProcessorType.EMPTY; } + + @Override + public PlaceHolder extractPlaceHolder() { + return new PlaceHolder(); + } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ExecutionFlowParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ExecutionFlowParameterProcessor.java index 4122e401..5d889b19 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ExecutionFlowParameterProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 模型参数处理器(执行流) @@ -20,6 +21,11 @@ public class ExecutionFlowParameterProcessor extends ParameterProcessor { public ProcessorType getType() { return ProcessorType.EXECUTION_FLOW; } + + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(executionFlow); + } public String getExecutionFlow() { return executionFlow; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/GroovyScriptParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/GroovyScriptParameterProcessor.java index c3a330b1..fe9cc0dd 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/GroovyScriptParameterProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 模型参数处理器(脚本代码操作) @@ -20,6 +21,11 @@ public class GroovyScriptParameterProcessor extends ParameterProcessor { public ProcessorType getType() { return ProcessorType.GROOVY_SCRIPT; } + + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(groovyScript); + } public String getGroovyScript() { return groovyScript; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/HttpRequestParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/HttpRequestParameterProcessor.java index 12e1665e..dd4f3973 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/HttpRequestParameterProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 模型参数处理器(Http请求操作) @@ -40,6 +41,20 @@ public class HttpRequestParameterProcessor extends ParameterProcessor { return ProcessorType.HTTP_REQUEST; } + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(httpUrl, + httpAuthBasicUsername, + httpAuthBasicPassword, + httpAuthBearerToken, + httpAuthParameterValues, + httpRequestHeader, + httpRequestHeaderParameterValues, + httpRequestBody, + httpRequestBodyParameterValues + ); + } + public HttpMethodType getHttpMethod() { return httpMethod; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/MathFormulaParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/MathFormulaParameterProcessor.java index 94d8d56d..6c6d957e 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/MathFormulaParameterProcessor.java +++ b/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 io.sc.engine.rule.core.enums.ProcessorType; 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; } + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(mathFormula); + } + public String getMathFormula() { return mathFormula; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/NumberRangeParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/NumberRangeParameterProcessor.java index 88256ea9..a5bd92fb 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/NumberRangeParameterProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 模型参数处理器(数值范围操作) @@ -21,6 +22,11 @@ public class NumberRangeParameterProcessor extends ParameterProcessor { public ProcessorType getType() { return ProcessorType.NUMBER_RANGE; } + + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(numberRangeVar,numberRange); + } public String getNumberRangeVar() { return numberRangeVar; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ObjectPropertiesParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ObjectPropertiesParameterProcessor.java index 35f4bf04..6dbf264d 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ObjectPropertiesParameterProcessor.java +++ b/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.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.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; } + @Override + public PlaceHolder extractPlaceHolder() { + PlaceHolder result =new PlaceHolder(); + result.add(PlaceHolder.extract(objectCondition)); + if(StringUtils.hasText(objectProperties)){ + try { + List items = ObjectMapperUtil.json().readValue(objectProperties, new TypeReference>() { + }); + 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() { return objectCondition; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/OptionValueParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/OptionValueParameterProcessor.java index 9143e284..1bf9943c 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/OptionValueParameterProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 模型参数处理器(选项值)实体类 @@ -20,6 +21,11 @@ public class OptionValueParameterProcessor extends ParameterProcessor { public ProcessorType getType() { return ProcessorType.OPTION_VALUE; } + + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(optionCode); + } public String getOptionCode() { return optionCode; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/PmmlParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/PmmlParameterProcessor.java index 2a7f1ce5..4f6f8fb9 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/PmmlParameterProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 模型参数处理器(PMML) @@ -20,6 +21,11 @@ public class PmmlParameterProcessor extends ParameterProcessor { public ProcessorType getType() { return ProcessorType.PMML; } + + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(pmml); + } public String getPmml() { return pmml; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/RuleSetParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/RuleSetParameterProcessor.java index 1f588920..f1df8b28 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/RuleSetParameterProcessor.java +++ b/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; +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.po.model.ParameterProcessor; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 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; } + @Override + public PlaceHolder extractPlaceHolder() { + if(!StringUtils.hasText(ruleSet)){ + return new PlaceHolder(); + } + try { + PlaceHolder result = new PlaceHolder(); + List ruleSets = ObjectMapperUtil.json().readValue(this.ruleSet, new TypeReference>() { + }); + 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() { return ruleSet; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ScoreCardParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ScoreCardParameterProcessor.java index 86c03d28..a673569a 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/ScoreCardParameterProcessor.java +++ b/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.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.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") @JsonIgnoreProperties(ignoreUnknown=true) public class ScoreCardParameterProcessor extends ParameterProcessor { 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 scoreCardItems = ObjectMapperUtil.json().readValue(this.scoreCard, new TypeReference>() { + }); + if(scoreCardItems==null || scoreCardItems.isEmpty()){ + return new PlaceHolder(); + } + for(ScoreCardItem scoreCardItem : scoreCardItems){ + List 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 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() { return scoreCard; } @@ -17,9 +64,4 @@ public class ScoreCardParameterProcessor extends ParameterProcessor { public void setScoreCard(String scoreCard) { this.scoreCard = scoreCard; } - - @Override - public ProcessorType getType() { - return ProcessorType.SCORE_CARD; - } -} +} \ No newline at end of file diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/SingleRuleParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/SingleRuleParameterProcessor.java index 0bfd1393..6978bf23 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/SingleRuleParameterProcessor.java +++ b/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; +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.po.model.ParameterProcessor; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 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; } + @Override + public PlaceHolder extractPlaceHolder() { + if(!StringUtils.hasText(singleRule)){ + return new PlaceHolder(); + } + try { + PlaceHolder result = new PlaceHolder(); + List singleRules = ObjectMapperUtil.json().readValue(singleRule, new TypeReference>() { + }); + 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() { return singleRule; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/SqlParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/SqlParameterProcessor.java index e98cc7f4..d55be9ce 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/SqlParameterProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 模型参数处理器(SQL赋值操作) @@ -24,6 +25,11 @@ public class SqlParameterProcessor extends ParameterProcessor { return ProcessorType.SQL; } + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(sql,sqlFieldMapping); + } + public String getSqlDatasourceName() { return sqlDatasourceName; } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/TernaryParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/TernaryParameterProcessor.java index 13d785bc..94757a3a 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/TernaryParameterProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 模型参数处理器(三元操作)实体类 @@ -22,6 +23,11 @@ public class TernaryParameterProcessor extends ParameterProcessor { public ProcessorType getType() { return ProcessorType.TERNARY; } + + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(ternaryCondition,ternaryTrue,ternaryFalse); + } public String getTernaryCondition() { return ternaryCondition; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/WhenThenParameterProcessor.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/WhenThenParameterProcessor.java index 7e666214..9a14108a 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/po/model/processor/WhenThenParameterProcessor.java +++ b/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.JsonTypeName; +import io.sc.engine.rule.core.util.PlaceHolder; /** * 模型参数处理器(WhenThen操作) @@ -22,6 +23,11 @@ public class WhenThenParameterProcessor extends ParameterProcessor { public ProcessorType getType() { return ProcessorType.WHEN_THEN; } + + @Override + public PlaceHolder extractPlaceHolder() { + return PlaceHolder.extract(when,then); + } public String getWhen() { return when; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/GroovyExpressionReplacer.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/GroovyExpressionReplacer.java index f4e7777c..5de3d205 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/GroovyExpressionReplacer.java +++ b/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 org.springframework.util.StringUtils; +import java.util.List; import java.util.Map; import java.util.TreeMap; import java.util.regex.Matcher; diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/PlaceHolder.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/PlaceHolder.java new file mode 100644 index 00000000..65c5cf68 --- /dev/null +++ b/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 variableRefs =new LinkedHashSet<>(); + private Set enumRefs =new LinkedHashSet<>(); + private Set 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 getVariableRefs() { + return variableRefs; + } + + public void setVariableRefs(Set variableRefs) { + this.variableRefs = variableRefs; + } + + public Set getEnumRefs() { + return enumRefs; + } + + public void setEnumRefs(Set enumRefs) { + this.enumRefs = enumRefs; + } + + public Set getUserFunctionRefs() { + return userFunctionRefs; + } + + public void setUserFunctionRefs(Set userFunctionRefs) { + this.userFunctionRefs = userFunctionRefs; + } +} diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/PlaceHolderEnumExpressionUtil.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/PlaceHolderEnumExpressionUtil.java index cf721d8f..7b72a452 100644 --- a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/PlaceHolderEnumExpressionUtil.java +++ b/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; } + + public static Set extract(String content){ + Set result =new LinkedHashSet<>(); + if(!StringUtils.hasText(content)){ + return result; + } + List expressions =parse(content); + if(expressions==null || expressions.isEmpty()) { + return result; + } + for(PlaceholderExpression expression : expressions){ + List parts =expression.getParts(); + if(parts==null || parts.isEmpty()){ + continue; + } + result.add(parts.get(0).getName()); + } + return result; + } } diff --git a/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/UserFunctionExpressionUtil.java b/io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/util/UserFunctionExpressionUtil.java new file mode 100644 index 00000000..ab8340f6 --- /dev/null +++ b/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 extract(String content){ + Set result =new LinkedHashSet<>(); + if(StringUtils.hasText(content)){ + Matcher matcher =PATTERN.matcher(content); + while(matcher.find()){ + result.add(matcher.group(1)); + } + } + return result; + } +} diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/executable/service/impl/ExecuteUnitServiceImpl.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/executable/service/impl/ExecuteUnitServiceImpl.java index 0b257dfc..f069db1a 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/executable/service/impl/ExecuteUnitServiceImpl.java +++ b/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.getResource().setTestCases(null);//在获取定义时,不返回测试用例 - + executeUnit.optimize(); return executeUnit; } @@ -73,7 +73,7 @@ public class ExecuteUnitServiceImpl implements ExecuteUnitService { executeUnit.setLib(LibEntityConverter.toPo(libEntity)); executeUnit.getLib().setTestCases(null);//在获取定义时,不返回测试用例 - + executeUnit.optimize(); return executeUnit; } return null; diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/lib/entity/processor/ConditionRangeIndicatorProcessorEntity.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/lib/entity/processor/ConditionRangeIndicatorProcessorEntity.java index dafa1e44..f8cf0776 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/lib/entity/processor/ConditionRangeIndicatorProcessorEntity.java +++ b/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.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.ReplaceMode; import io.sc.engine.rule.server.common.service.support.ParameterAndValueType; @@ -65,9 +66,9 @@ public class ConditionRangeIndicatorProcessorEntity extends IndicatorProcessorEn return json; } try { - List items = ObjectMapperUtil.json().readValue(json, new TypeReference>() { + List items = ObjectMapperUtil.json().readValue(json, new TypeReference>() { }); - for (ConditionRangeItem item : items) { + for (ConditionRange item : items) { item.setCondition(parameterAndValueType.replace(item.getCondition(), mode)); item.setValue(parameterAndValueType.replace(item.getValue(), mode)); } @@ -76,25 +77,4 @@ public class ConditionRangeIndicatorProcessorEntity extends IndicatorProcessorEn 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; - } - } } diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/parameter/InOptionParameterEntity.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/parameter/InOptionParameterEntity.java index 8cf57a13..6e6bcadb 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/parameter/InOptionParameterEntity.java +++ b/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.server.model.entity.*; 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 javax.persistence.*; @@ -103,8 +104,10 @@ public class InOptionParameterEntity extends ParameterEntity { } entity.clearId(); - entity.setCode("P"+System.currentTimeMillis()); - entity.setName(entity.getName() + "_NEW"); + if(args==null || args.length==0 || !ResourceEntity.class.equals(args[0])) { + entity.setCode("P" + System.currentTimeMillis()); + entity.setName(entity.getName() + "_NEW"); + } return entity; } diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/processor/ConditionRangeParameterProcessorEntity.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/processor/ConditionRangeParameterProcessorEntity.java index 5af02549..f17e3c80 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/processor/ConditionRangeParameterProcessorEntity.java +++ b/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.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.ReplaceMode; import io.sc.engine.rule.server.common.service.support.ParameterAndValueType; @@ -78,9 +79,9 @@ public class ConditionRangeParameterProcessorEntity extends ParameterProcessorEn return json; } try { - List items = ObjectMapperUtil.json().readValue(json, new TypeReference>() { + List items = ObjectMapperUtil.json().readValue(json, new TypeReference>() { }); - for (ConditionRangeItem item : items) { + for (ConditionRange item : items) { item.setCondition(parameterAndValueType.replace(item.getCondition(), mode)); item.setValue(parameterAndValueType.replace(item.getValue(), mode)); } @@ -89,25 +90,4 @@ public class ConditionRangeParameterProcessorEntity extends ParameterProcessorEn 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; - } - } } diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/processor/ObjectPropertiesParameterProcessorEntity.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/processor/ObjectPropertiesParameterProcessorEntity.java index 2f17a6cc..b0ab9fc1 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/model/entity/processor/ObjectPropertiesParameterProcessorEntity.java +++ b/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.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.ReplaceMode; import io.sc.engine.rule.server.common.service.support.ParameterAndValueType; @@ -105,9 +106,9 @@ public class ObjectPropertiesParameterProcessorEntity extends ParameterProcessor return json; } try { - List items = ObjectMapperUtil.json().readValue(json, new TypeReference>() { + List items = ObjectMapperUtil.json().readValue(json, new TypeReference>() { }); - for (ObjectPropertiesItem item : items) { + for (ObjectProperty item : items) { item.setExpression(parameterAndValueType.replace(item.getExpression(), mode)); } return ObjectMapperUtil.json().writeValueAsString(items); @@ -115,34 +116,4 @@ public class ObjectPropertiesParameterProcessorEntity extends ParameterProcessor 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; - } - } } diff --git a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/service/impl/ResourceServiceImpl.java b/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/service/impl/ResourceServiceImpl.java index b2c54789..b849393c 100644 --- a/io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/resource/service/impl/ResourceServiceImpl.java +++ b/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 libEntities =libService.findByResourceId(resourceEntity.getId()); + // 获取元数据 List dictionaryEntities =dictionaryService.findDictionaryEntitiesByResourceId(resourceEntity.getId()); ExecuteUnit4Resource wrapper =new ExecuteUnit4Resource(); @@ -305,6 +307,7 @@ public class ResourceServiceImpl extends DaoServiceImpl extract(String content){ + if(!StringUtils.hasText(content)){ + return Collections.emptyList(); + } + List 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; + } +} diff --git a/io.sc.platform.util/src/main/java/io/sc/platform/util/PlaceHolderExpressionUtil.java b/io.sc.platform.util/src/main/java/io/sc/platform/util/PlaceHolderExpressionUtil.java index 1d6182d8..bc66b4dd 100644 --- a/io.sc.platform.util/src/main/java/io/sc/platform/util/PlaceHolderExpressionUtil.java +++ b/io.sc.platform.util/src/main/java/io/sc/platform/util/PlaceHolderExpressionUtil.java @@ -171,4 +171,23 @@ public class PlaceHolderExpressionUtil { } return expression; } + + public static Set extract(String content){ + Set result =new LinkedHashSet<>(); + if(!StringUtils.hasText(content)){ + return result; + } + List expressions =parse(content); + if(expressions==null || expressions.isEmpty()) { + return result; + } + for(PlaceholderExpression expression : expressions){ + List parts =expression.getParts(); + if(parts==null || parts.isEmpty()){ + continue; + } + result.add(parts.get(0).getName()); + } + return result; + } }