Quellcode durchsuchen

公式
1、结果为运算值 并有元素导致计算失败问题处理

LHB vor 1 Tag
Ursprung
Commit
7049e5f920

+ 8 - 1
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/DivisionNode.java

@@ -1,10 +1,12 @@
 package com.jfireel.expression.node.impl;
 
 import com.jfireel.expression.token.Operator;
+import com.jfireel.expression.util.ValueUtil;
 import com.jfireel.expression.util.number.DivisionUtil;
 import com.mixsmart.utils.StringUtils;
 
 import java.math.BigDecimal;
+import java.util.List;
 import java.util.Map;
 
 public class DivisionNode extends OperatorResultNode {
@@ -16,13 +18,18 @@ public class DivisionNode extends OperatorResultNode {
     @Override
     public Object calculate(Map<String, Object> variables) {
         Object leftValue = leftOperand.calculate(variables);
+        Object rightValue = rightOperand.calculate(variables);
+        if (leftValue instanceof List || rightValue instanceof List) {
+            Object[] leftAndRight = ValueUtil.obtain(leftOperand.calculate(variables), rightOperand.calculate(variables));
+            leftValue = leftAndRight[0];
+            rightValue = leftAndRight[1];
+        }
         if (leftValue instanceof String && StringUtils.isNumber(leftValue)) {
             leftValue = new BigDecimal(leftValue.toString());
         }
         if (leftValue instanceof Number == false) {
             return null;
         }
-        Object rightValue = rightOperand.calculate(variables);
         if (rightValue instanceof String && StringUtils.isNumber(rightValue)) {
             rightValue = new BigDecimal(rightValue.toString());
         }

+ 5 - 0
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/MinusNode.java

@@ -2,6 +2,7 @@ package com.jfireel.expression.node.impl;
 
 import com.jfireel.expression.Expression;
 import com.jfireel.expression.token.Operator;
+import com.jfireel.expression.util.ValueUtil;
 import com.jfireel.expression.util.number.SubtractUtil;
 import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.StringUtils;
@@ -24,6 +25,10 @@ public class MinusNode extends OperatorResultNode {
             return CustomFunction.dXd(rightValue, leftValue);
         }else if(leftStr.contains(COLON)&&rightStr.contains(COLON)){
             return fraction(leftStr)-fraction(rightStr);
+        }else if (leftValue instanceof List || rightValue instanceof List) {
+            Object[] leftAndRight = ValueUtil.obtain(leftOperand.calculate(variables), rightOperand.calculate(variables));
+            leftValue = leftAndRight[0];
+            rightValue = leftAndRight[1];
         }
         if (leftValue instanceof String ) {
             if(StringUtils.isNumber(leftValue)){

+ 7 - 0
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/MutliNode.java

@@ -2,6 +2,7 @@ package com.jfireel.expression.node.impl;
 
 import com.jfireel.expression.Expression;
 import com.jfireel.expression.token.Operator;
+import com.jfireel.expression.util.ValueUtil;
 import com.jfireel.expression.util.number.MultiplyUtil;
 import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.StringUtils;
@@ -9,6 +10,7 @@ import com.mixsmart.utils.StringUtils;
 import java.math.BigDecimal;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
@@ -34,6 +36,11 @@ public class MutliNode extends OperatorResultNode {
             String leftValueStr = Collections.nCopies(n, leftValue).stream().map(StringUtils::handleNull).collect(Collectors.joining("*"));
             return CustomFunction.dXd(rightValue, leftValueStr, 1, 1);
         }
+        if (leftValue instanceof List || rightValue instanceof List) {
+            Object[] leftAndRight = ValueUtil.obtain(leftOperand.calculate(variables), rightOperand.calculate(variables));
+            leftValue = leftAndRight[0];
+            rightValue = leftAndRight[1];
+        }
         if (leftValue instanceof String && StringUtils.isNumber(leftValue)) {
             leftValue = new BigDecimal(leftValue.toString());
         }

+ 7 - 0
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/PlusNode.java

@@ -1,8 +1,10 @@
 package com.jfireel.expression.node.impl;
 
 import com.jfireel.expression.token.Operator;
+import com.jfireel.expression.util.ValueUtil;
 import com.jfireel.expression.util.number.PlusUtil;
 
+import java.util.List;
 import java.util.Map;
 
 public class PlusNode extends OperatorResultNode {
@@ -22,6 +24,11 @@ public class PlusNode extends OperatorResultNode {
     public Object calculate(Map<String, Object> variables) {
         Object leftValue = leftOperand.calculate(variables);
         Object rightValue = rightOperand.calculate(variables);
+        if (leftValue instanceof List || rightValue instanceof List) {
+            Object[] leftAndRight = ValueUtil.obtain(leftOperand.calculate(variables), rightOperand.calculate(variables));
+            leftValue = leftAndRight[0];
+            rightValue = leftAndRight[1];
+        }
         if (leftValue instanceof String || rightValue instanceof String) {
             StringBuilder cache = LOCAL.get();
             if (leftValue != null) {