|
|
@ -9,6 +9,7 @@ import java.util.*;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 健康度测算公式
|
|
|
|
* 健康度测算公式
|
|
|
|
|
|
|
|
* (#VAR202201070002/#VAR456)/(#VAR123/#VAR456)*100
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
@Getter
|
|
|
|
@Getter
|
|
|
|
public class WmsHealthIndexFormula {
|
|
|
|
public class WmsHealthIndexFormula {
|
|
|
@ -17,7 +18,7 @@ public class WmsHealthIndexFormula {
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private final String organizeCode;
|
|
|
|
private final String organizeCode;
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 健康度指标测算代码 (#VAR202201070002/#VAR456)/(#VAR123/#VAR456)*100%
|
|
|
|
* 健康度指标测算代码 (#VAR202201070002/#VAR456)/(#VAR123/#VAR456) * 100
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
private final String calcFormula;
|
|
|
|
private final String calcFormula;
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -32,6 +33,12 @@ public class WmsHealthIndexFormula {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public WmsHealthIndexFormula(final String organizeCode,final String calcFormula){
|
|
|
|
public WmsHealthIndexFormula(final String organizeCode,final String calcFormula){
|
|
|
|
|
|
|
|
if(null==organizeCode){
|
|
|
|
|
|
|
|
throw new IllegalArgumentException("organizeCode can't be null");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if(null==calcFormula){
|
|
|
|
|
|
|
|
throw new IllegalArgumentException("calcFormula can't be null");
|
|
|
|
|
|
|
|
}
|
|
|
|
this.calcFormula = calcFormula;
|
|
|
|
this.calcFormula = calcFormula;
|
|
|
|
this.organizeCode = organizeCode;
|
|
|
|
this.organizeCode = organizeCode;
|
|
|
|
checkCode();
|
|
|
|
checkCode();
|
|
|
@ -62,12 +69,15 @@ public class WmsHealthIndexFormula {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void addResult(WmsHealthIndexVariable key, WmsHealthIndexVariableValue result){
|
|
|
|
public void addResult(WmsHealthIndexVariable key, WmsHealthIndexVariableValue result){
|
|
|
|
if(null!=result) {
|
|
|
|
if(null!=result && null!=key) {
|
|
|
|
this.results.put(key, result);
|
|
|
|
if(key.isRefresh()) {
|
|
|
|
|
|
|
|
key.changeValue(result);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
results.put(key, result);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public boolean isEmpty(){
|
|
|
|
public boolean isResultEmpty(){
|
|
|
|
return results.isEmpty();
|
|
|
|
return results.isEmpty();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -83,7 +93,7 @@ public class WmsHealthIndexFormula {
|
|
|
|
* 获取单个值对象
|
|
|
|
* 获取单个值对象
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public WmsHealthIndexVariableValue getSingleValue(){
|
|
|
|
public WmsHealthIndexVariableValue getSingleValue(){
|
|
|
|
if(!isEmpty()) {
|
|
|
|
if(!isResultEmpty()) {
|
|
|
|
WmsHealthIndexVariableValue variableValue = com.google.common.collect.Lists
|
|
|
|
WmsHealthIndexVariableValue variableValue = com.google.common.collect.Lists
|
|
|
|
.newArrayList(results.values()).get(0);
|
|
|
|
.newArrayList(results.values()).get(0);
|
|
|
|
return variableValue;
|
|
|
|
return variableValue;
|
|
|
@ -95,11 +105,11 @@ public class WmsHealthIndexFormula {
|
|
|
|
* 根据健康度指标calcFormula,计算SPEL表达式的值
|
|
|
|
* 根据健康度指标calcFormula,计算SPEL表达式的值
|
|
|
|
* @return
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public Integer getSpelResult(){
|
|
|
|
public Double getSpelResult(){
|
|
|
|
if(results.isEmpty()) {
|
|
|
|
if(results.isEmpty()) {
|
|
|
|
return -1;
|
|
|
|
return -1.0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Integer calcResult = 0;
|
|
|
|
Double calcResult = 0.0;
|
|
|
|
int resultSize = results.size();
|
|
|
|
int resultSize = results.size();
|
|
|
|
StandardEvaluationContext ctx = new StandardEvaluationContext();
|
|
|
|
StandardEvaluationContext ctx = new StandardEvaluationContext();
|
|
|
|
ExpressionParser parser = new SpelExpressionParser();
|
|
|
|
ExpressionParser parser = new SpelExpressionParser();
|
|
|
@ -111,15 +121,15 @@ public class WmsHealthIndexFormula {
|
|
|
|
for (WmsHealthIndexVariable varKey : varKeys) {
|
|
|
|
for (WmsHealthIndexVariable varKey : varKeys) {
|
|
|
|
// 取出该变量名称对应的计算结果
|
|
|
|
// 取出该变量名称对应的计算结果
|
|
|
|
WmsHealthIndexVariableValue variableValue = results.get(varKey);
|
|
|
|
WmsHealthIndexVariableValue variableValue = results.get(varKey);
|
|
|
|
Integer value = variableValue.getValue();
|
|
|
|
Double value = variableValue.getValue();
|
|
|
|
ctx.setVariable(varKey.getId().getVariable(), value);
|
|
|
|
ctx.setVariable(varKey.getId().getVariable(), value);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 存在多个变量,则按照SPEL进行运算最后取值
|
|
|
|
// 存在多个变量,则按照SPEL进行运算最后取值
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
calcResult = (Integer) parser.parseExpression(calcFormula)
|
|
|
|
calcResult = (Double) parser.parseExpression(calcFormula)
|
|
|
|
.getValue(ctx);
|
|
|
|
.getValue(ctx);
|
|
|
|
} catch (Exception e) {
|
|
|
|
} catch (Exception e) {
|
|
|
|
calcResult = -1;
|
|
|
|
calcResult = -1.0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return calcResult;
|
|
|
|
return calcResult;
|
|
|
|