|
@@ -11,6 +11,9 @@ import org.jebot.models.jebot.BotAccountBookHistory;
|
|
import org.jebot.service.dto.UpdateBalance;
|
|
import org.jebot.service.dto.UpdateBalance;
|
|
|
|
|
|
import javax.imageio.ImageIO;
|
|
import javax.imageio.ImageIO;
|
|
|
|
+import javax.script.ScriptEngine;
|
|
|
|
+import javax.script.ScriptEngineManager;
|
|
|
|
+import javax.script.ScriptException;
|
|
import java.awt.*;
|
|
import java.awt.*;
|
|
import java.awt.image.BufferedImage;
|
|
import java.awt.image.BufferedImage;
|
|
import java.io.File;
|
|
import java.io.File;
|
|
@@ -23,11 +26,12 @@ import static org.jebot.constant.Constant.*;
|
|
public class ChannelAccountBookHandler extends AbstractHandler {
|
|
public class ChannelAccountBookHandler 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 + "[0-9+\\-*/.]+$");
|
|
|
|
|
|
- //代付正则表达式
|
|
|
|
- private static final Pattern agentAccount = Pattern.compile("^" + AGENT_ACCOUNT_FLAG + "-?\\d+(\\.\\d+)?$");
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -67,7 +71,8 @@ public class ChannelAccountBookHandler extends AbstractHandler {
|
|
|
|
|
|
//代收处理
|
|
//代收处理
|
|
if (paymentAccount.matcher(messageText).find()) {
|
|
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) {
|
|
if (paymentAccountAmount == 0) {
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
@@ -97,7 +102,8 @@ public class ChannelAccountBookHandler extends AbstractHandler {
|
|
|
|
|
|
//代付处理
|
|
//代付处理
|
|
if (agentAccount.matcher(messageText).find()) {
|
|
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) {
|
|
if (agentAccountAmount == 0) {
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
@@ -128,4 +134,18 @@ public class ChannelAccountBookHandler extends AbstractHandler {
|
|
return false;
|
|
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);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
}
|
|
}
|