Browse Source

3是 机器加账 不能使用u数*币价

LiYi 1 week ago
parent
commit
21f550c1a5

+ 25 - 6
src/main/java/org/jebot/handler/impl/merchant/MerchantAccountBookHandler.java

@@ -14,6 +14,9 @@ import org.jebot.service.dto.UpdateBalance;
 import org.jebot.util.SnowflakeId;
 
 import javax.imageio.ImageIO;
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
 import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.File;
@@ -27,11 +30,11 @@ import static org.jebot.constant.Constant.*;
 public class MerchantAccountBookHandler extends AbstractHandler {
 
 
-    //代收正则表达式
-    private static final Pattern paymentAccount = Pattern.compile("^" + PAYMENT_ACCOUNT_FLAG + "-?\\d+(\\.\\d+)?$");
+    // 代收正则表达式:支持数字和运算符
+    private static final Pattern paymentAccount = Pattern.compile("^" + PAYMENT_ACCOUNT_FLAG + "[0-9+\\-*/.]+$");
 
-    //代付正则表达式
-    private static final Pattern agentAccount = Pattern.compile("^" + AGENT_ACCOUNT_FLAG + "-?\\d+(\\.\\d+)?$");
+    // 代付正则表达式:支持数字和运算符
+    private static final Pattern agentAccount = Pattern.compile("^" + AGENT_ACCOUNT_FLAG + "[0-9+\\-*/.]+$");
 
 
     @Override
@@ -70,7 +73,8 @@ public class MerchantAccountBookHandler extends AbstractHandler {
 
         //代收记账处理
         if (paymentAccount.matcher(messageText).find()) {
-            double paymentAccountAmount = Double.parseDouble(messageText.replace(PAYMENT_ACCOUNT_FLAG, ""));
+            String expr = messageText.replace(PAYMENT_ACCOUNT_FLAG, ""); // 去掉前缀 "代收"
+            double paymentAccountAmount = evalExpression(expr); // 支持表达式
             if (paymentAccountAmount == 0) {
                 return true;
             }
@@ -100,7 +104,8 @@ public class MerchantAccountBookHandler extends AbstractHandler {
 
         //代付处理记账
         if (agentAccount.matcher(messageText).find()) {
-            double agentAccountAmount = Double.parseDouble(messageText.replace(AGENT_ACCOUNT_FLAG, ""));
+            String expr = messageText.replace(AGENT_ACCOUNT_FLAG, ""); // 去掉前缀 "代收"
+            double agentAccountAmount = evalExpression(expr); // 支持表达式
             if (agentAccountAmount == 0) {
                 return true;
             }
@@ -131,4 +136,18 @@ public class MerchantAccountBookHandler extends AbstractHandler {
         return false;
     }
 
+    // 工具方法:支持计算表达式
+    private double evalExpression(String expr) {
+        try {
+            ScriptEngineManager manager = new ScriptEngineManager();
+            ScriptEngine engine = manager.getEngineByName("JavaScript");
+            Object result = engine.eval(expr);
+            return Double.parseDouble(result.toString());
+        } catch (ScriptException e) {
+            log.error("表达式计算失败: {}", expr, e);
+            throw new RuntimeException("金额表达式错误: " + expr);
+        }
+    }
+
+
 }