Browse Source

前端核心发布: 8.2.80

基础框架发布: 8.2.18
  1) 规则引擎中,修复资源深度复制时, 选项参数不应该加 NEW。
main
wangshaoping 2 weeks ago
parent
commit
e01dc1c4e3
  1. 129
      io.sc.engine.rule.core/src/main/java/io/sc/engine/rule/core/code/ExecuteUnit4Resource.java
  2. 1
      io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/executable/controller/ExecuteUnitWebController.java

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

@ -1,16 +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 com.fasterxml.jackson.core.JsonProcessingException;
import io.sc.engine.rule.core.po.lib.Indicator; 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.IndicatorLib;
import io.sc.engine.rule.core.po.lib.IndicatorProcessor;
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.Model;
import io.sc.engine.rule.core.po.model.Parameter; 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.model.parameter.IndicatorParameter;
import io.sc.engine.rule.core.po.resource.ModelResource; 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 io.sc.engine.rule.core.util.PlaceHolder;
import io.sc.platform.util.ObjectMapperUtil;
import java.util.*; import java.util.*;
@ -41,19 +43,7 @@ public class ExecuteUnit4Resource extends ExecuteUnit{
} }
public void optimize(){ public void optimize(){
if(1==1) return; //optimizeLibs();
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(){ private void optimizeLibs(){
@ -64,52 +54,127 @@ public class ExecuteUnit4Resource extends ExecuteUnit{
if(parameters==null || parameters.isEmpty()){ if(parameters==null || parameters.isEmpty()){
return; return;
} }
List<IndicatorLib> requiredLibs =new ArrayList<>(); Map<LibId,Set<String>> cache =new HashMap<>();
for(Parameter parameter : parameters){ for(Parameter parameter : parameters){
if(parameter instanceof IndicatorParameter){ if(parameter instanceof IndicatorParameter){
IndicatorParameter indicatorParameter =(IndicatorParameter)parameter; IndicatorParameter indicatorParameter =(IndicatorParameter)parameter;
String libCode =indicatorParameter.getLibCode(); String libCode =indicatorParameter.getLibCode();
Integer libVersion =indicatorParameter.getLibVersion(); Integer libVersion =indicatorParameter.getLibVersion();
String indicatorCode =indicatorParameter.getIndicatorCode();
findRefIndicators(requiredLibs,indicatorParameter.getLibCode(),indicatorParameter.getLibVersion(),indicatorParameter.getIndicatorCode()); LibId libId =new LibId(libCode,libVersion);
String indicatorCode =indicatorParameter.getIndicatorCode();
} Set<String> requiredIndicatorCodes =cache.get(libId);
if(requiredIndicatorCodes==null){
requiredIndicatorCodes =new LinkedHashSet<>();
cache.put(libId,requiredIndicatorCodes);
} }
IndicatorLib lib =findLib(libCode,libVersion);
if(lib!=null) {
findRefIndicators(lib, indicatorCode, requiredIndicatorCodes);
} }
} }
private void optimizeDictionaries(){
} }
resetLibs(cache);
private void optimizeFunctions(){ }
} }
private Lib findLib(String code, Integer version){ private IndicatorLib findLib(String code, Integer version){
if(libs==null && libs.isEmpty()){ return null; } if(libs==null && libs.isEmpty()){ return null; }
for(Lib lib : libs) { for(Lib lib : libs) {
if(lib.getCode().equals(code) && lib.getVersion().equals(version)){ return lib; } if(lib.getCode().equals(code) && lib.getVersion().equals(version)){
if(lib instanceof IndicatorLib) {
return (IndicatorLib)lib;
}
}
} }
return null; return null;
} }
private List<Indicator> findIndicatorsByLib(String libCode, Integer libVersion){ private void findRefIndicators(IndicatorLib lib, String indicatorCode, Set<String> requiredCodes){
if(libs==null && libs.isEmpty()){ List<Indicator> indicators =lib.getIndicators();
return Collections.emptyList(); if(indicators!=null && !indicators.isEmpty()){
for(Indicator indicator : indicators){
if(indicator.getCode().equals(indicatorCode)){
if(requiredCodes.contains(indicatorCode)){
continue;
}
requiredCodes.add(indicatorCode);
List<IndicatorProcessor> processors =indicator.getProcessors();
if(processors!=null && !processors.isEmpty()){
for(IndicatorProcessor processor : processors){
PlaceHolder placeHolder =processor.extractPlaceHolder();
Set<String> refs =placeHolder.getVariableRefs();
for(String ref : refs){
findRefIndicators(lib,ref,requiredCodes);
}
}
}
}
}
}
}
private void resetLibs(Map<LibId,Set<String>> requiredMap){
if(libs==null || libs.isEmpty()){
return;
} }
for(Lib lib : libs){ for(Lib lib : libs){
if(lib instanceof IndicatorLib){ if(lib instanceof IndicatorLib){
List<Indicator> minIndicators =new ArrayList<>(); // 需要的最小化指标集
Set<String> minIndicatorCodes =requiredMap.get(new LibId(lib.getCode(),lib.getVersion()));
IndicatorLib indicatorLib =(IndicatorLib)lib; IndicatorLib indicatorLib =(IndicatorLib)lib;
return indicatorLib.getIndicators(); List<Indicator> indicators =indicatorLib.getIndicators();
if(indicators!=null && !indicators.isEmpty()){
for(Indicator indicator : indicators){
if(minIndicatorCodes.contains(indicator.getCode())){
minIndicators.add(indicator);
}
}
} }
indicatorLib.setIndicators(minIndicators);
} }
return Collections.emptyList();
} }
}
static class LibId {
private String code;
private Integer version;
public LibId(String code, Integer version){
this.code =code;
this.version =version;
}
private void findRefIndicators(List<IndicatorLib> requiredLibs, String libCode, Integer libVersion, String indicatorCode){ public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
LibId libID = (LibId) o;
return Objects.equals(code, libID.code) && Objects.equals(version, libID.version);
}
@Override
public int hashCode() {
return Objects.hash(code, version);
}
} }
} }

1
io.sc.engine.rule.server/src/main/java/io/sc/engine/rule/server/executable/controller/ExecuteUnitWebController.java

@ -61,7 +61,6 @@ public class ExecuteUnitWebController {
@PostMapping(value="validateGroovySourceCode") @PostMapping(value="validateGroovySourceCode")
public void validateGroovySourceCode(@RequestBody Map<String,String> body) throws Exception{ public void validateGroovySourceCode(@RequestBody Map<String,String> body) throws Exception{
System.out.println(body.get("script"));
executableUnitService.validateGroovySourceCode(body.get("script")); executableUnitService.validateGroovySourceCode(body.get("script"));
} }
} }

Loading…
Cancel
Save