فهرست منبع

3是 机器加账 不能使用u数*币价
4是 开关通道不管用
6是 查成率也不管用

LiYi 1 هفته پیش
والد
کامیت
9c4241bcd4

+ 2 - 2
src/main/java/org/jebot/constant/Constant.java

@@ -98,10 +98,10 @@ public class Constant {
     public static final String QUERY_CHANNEL_ORDER_FLAG = "cd";
 
     //启用通道命令标识
-    public static final String ENABLE_CHANNEL_FLAG = "开启";
+    public static final String ENABLE_CHANNEL_FLAG = "开启通道";
 
     //禁用通道命令标识
-    public static final String DISABLE_CHANNEL_FLAG = "关闭";
+    public static final String DISABLE_CHANNEL_FLAG = "关闭通道";
 
     //绑定通道命令标识
     public static final String BIND_CHANNEL_FLAG = "绑定通道";

+ 26 - 6
src/main/java/org/jebot/handler/impl/channel/ChannelAccountBookHandler.java

@@ -11,6 +11,9 @@ import org.jebot.models.jebot.BotAccountBookHistory;
 import org.jebot.service.dto.UpdateBalance;
 
 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;
@@ -23,11 +26,12 @@ import static org.jebot.constant.Constant.*;
 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
@@ -67,7 +71,8 @@ public class ChannelAccountBookHandler 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;
             }
@@ -97,7 +102,8 @@ public class ChannelAccountBookHandler 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;
             }
@@ -128,4 +134,18 @@ public class ChannelAccountBookHandler 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);
+        }
+    }
+
+
 }

+ 1 - 1
src/main/java/org/jebot/handler/impl/channel/ChannelSuccessRateHandler.java

@@ -46,7 +46,7 @@ public class ChannelSuccessRateHandler extends AbstractHandler {
             //获取当前群组绑定的通道
             List<Long> passageIds = botGroups.stream().map(BotGroup::getDataId).collect(Collectors.toList());
 
-            List<PayOrder> payOrderList = payOrderRepository.findPayOrderByPassageAndCreateTime(passageIds, org.jebot.util.DateUtil.getTodayMidnight(currentTime), currentTime);
+            List<PayOrder> payOrderList = payOrderRepository.findPayOrderByPassageAndCreateTimeAll(passageIds, org.jebot.util.DateUtil.getTodayMidnight(currentTime), currentTime);
             if (payOrderList == null || payOrderList.isEmpty()) {
                 botMessage.getTelegramBot().execute(new SendMessage(botMessage.getMessage().chat().id(), "无当日记录"));
                 return true;

+ 3 - 0
src/main/java/org/jebot/repository/xxpay/PayOrderRepository.java

@@ -37,6 +37,9 @@ public interface PayOrderRepository extends JpaRepository<PayOrder, String> {
     @Query("SELECT new org.jebot.models.xxpay.PayOrder( tpo.amount,tpo.mchId,tpo.mchRate,tpo.payPassageRate,tpo.passageId,tpo.status,tpo.createTime) FROM t_pay_order as tpo WHERE tpo.passageId in (:passageIds) and tpo.createTime >= :startTime and tpo.createTime <= :endTime and tpo.status in(2,3)")
     List<PayOrder> findPayOrderByPassageAndCreateTime(List<Long> passageIds, Date startTime, Date endTime);
 
+    @Query("SELECT new org.jebot.models.xxpay.PayOrder( tpo.amount,tpo.mchId,tpo.mchRate,tpo.payPassageRate,tpo.passageId,tpo.status,tpo.createTime) FROM t_pay_order as tpo WHERE tpo.passageId in (:passageIds) and tpo.createTime >= :startTime and tpo.createTime <= :endTime")
+    List<PayOrder> findPayOrderByPassageAndCreateTimeAll(List<Long> passageIds, Date startTime, Date endTime);
+
     @Query("SELECT SUM(tpo.amount) FROM t_pay_order as tpo WHERE tpo.mchId =:mchId AND tpo.createTime >=:createTime and tpo.status in(2,3)")
     BigDecimal findPayOrderAmountByMchIdAndCreateTime(@Param("mchId") Long mchId, @Param("createTime") Date createTime);