diff --git a/xhpc-modules/xhpc-order/pom.xml b/xhpc-modules/xhpc-order/pom.xml
index f1a31b0a..d5157f70 100644
--- a/xhpc-modules/xhpc-order/pom.xml
+++ b/xhpc-modules/xhpc-order/pom.xml
@@ -103,11 +103,16 @@
com.ruoyi
ruoyi-common-log
+
+ com.udojava
+ EvalEx
+ 2.7
+
-
-
-
-
+
+
+
+
diff --git a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/Calc.java b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/Calc.java
index 19efaec0..1965fcc4 100644
--- a/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/Calc.java
+++ b/xhpc-modules/xhpc-order/src/main/java/com/xhpc/order/service/impl/Calc.java
@@ -1,50 +1,49 @@
package com.xhpc.order.service.impl;
-import org.springframework.expression.Expression;
-import org.springframework.expression.ExpressionParser;
-import org.springframework.expression.spel.standard.SpelExpressionParser;
-import org.springframework.expression.spel.support.StandardEvaluationContext;
+import com.udojava.evalex.Expression;
import java.io.IOException;
import java.io.Reader;
import java.io.StreamTokenizer;
import java.io.StringReader;
import java.math.BigDecimal;
+import java.math.RoundingMode;
import java.util.HashMap;
import java.util.Map;
+import java.util.regex.Pattern;
public class Calc {
+ private static String regex = "^[a-zA-Z]+$";
+ private static Pattern pattern = Pattern.compile(regex);
+
public static void main(String[] argv) {
- test("-1 + 2", 1);
- test("2 * (3 * (4 + 5)) / 9 / 6", 1);
-// test("max(1, 2 + 3)", 5);
-// test("min(3 - 1, 1)", 1);
+ Map map = new HashMap<>();
+ map.put("T", Double.valueOf(0.7));
+ String ruleExpression = "T + 10%";
+ double rs = eval(ruleExpression, map);
+ System.out.println(rs);
+ System.out.println(0.7 + 0.1);
+ }
+
+ public static double eval(String ruleExpression, Map params) {
- Map map = new HashMap<>();
- map.put("totalPower", new BigDecimal("400000.000000"));
- StandardEvaluationContext stdContext = new StandardEvaluationContext();
- stdContext.setVariables(map);
- String ruleExpression = "#totalPower >= 500000 ? 'e1' : 'e2'";
- // Evaluate the SpEL expression
- ExpressionParser parser = new SpelExpressionParser();
- Expression expression = parser.parseExpression(ruleExpression);
- String rs = expression.getValue(stdContext, String.class);
- System.out.println(rs);
- ruleExpression = "#totalPower + 500000";
- expression = parser.parseExpression(ruleExpression);
- rs = expression.getValue(stdContext, String.class);
- System.out.println(rs);
- ruleExpression = "#totalPower - (0.03% * 2%)";
-// expression = parser.parseExpression(ruleExpression);
-// rs = expression.getValue(stdContext, String.class);
-// System.out.println(rs);
String[] split = ruleExpression.split("[()*/\\-+?]");
for (String splitValue : split) {
- System.out.println(splitValue);
+ if (splitValue.endsWith("%")) {
+ BigDecimal rate = new BigDecimal(splitValue.trim().replace("%", ""));
+ ruleExpression = ruleExpression.replace(splitValue, rate.divide(BigDecimal.valueOf(100)).setScale(2,
+ RoundingMode.HALF_UP).toString());
+ } else {
+ if (pattern.matcher(splitValue.trim()).matches()) {
+ ruleExpression = ruleExpression.replace(splitValue, params.get(splitValue.trim()).toString());
+ }
+ }
}
-
+ Expression expression = new Expression(ruleExpression);
+ expression.setPrecision(3);
+ return expression.eval().doubleValue();
}
private static void test(String s, double x) {
@@ -78,7 +77,6 @@ public class Calc {
* mulop = "*" | "/"
*
*
- * @param s the string to be evaluated.
* @see
* Recursive descent parser.
*/
diff --git a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java
index 36081cc9..a1b85540 100644
--- a/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java
+++ b/xhpc-modules/xhpc-power-pile/src/main/java/com/xhpc/pp/logic/OrderDataLogic.java
@@ -78,7 +78,7 @@ public class OrderDataLogic implements ServiceLogic {
log.error(">>INVALID order [{}] detected. MUST check the system or [{}].<<", orderNo, gunkey);
}
String resultStr = "6815".concat(req.get("seqhex").toString()).concat("0040").concat(orderNo);
- if (r != null && r.getCode() == 200) {
+ if ((r != null && r.getCode() == 200) || (r != null && r.getMsg() != null && r.getMsg().contains("重复结算"))) {
resultStr = resultStr.concat(ServiceResult.HEX_00);
resultStr = resultStr.concat(CRCCalculator.calcCrc(resultStr));
return new ServiceResult(HexUtils.toBytes(resultStr), ServiceResult.OK);