From 50dde470ec18f292e8e58547ef1c4a4cbd4138b2 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期三, 24 九月 2025 15:08:54 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java |   44 +++++++++++++++++++++++++++++++++++---------
 1 files changed, 35 insertions(+), 9 deletions(-)

diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
index 1f7f61c..f696f2d 100644
--- a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
+++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/iotda/utils/listener/IotMessageListener.java
@@ -10,6 +10,8 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.integration.api.model.*;
+import com.ruoyi.integration.drainage.TCECUtil;
+import com.ruoyi.integration.drainage.model.NotificationChargeOrderInfoResult;
 import com.ruoyi.integration.iotda.constant.SendTagConstant;
 import com.ruoyi.integration.iotda.enums.ServiceIdMenu;
 import com.ruoyi.integration.iotda.model.*;
@@ -29,6 +31,8 @@
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -54,7 +58,9 @@
     
     @Resource
     private ChargingMessageUtil chargingMessageUtil;
-    
+
+    private final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(100, 500, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
+
     
     
     
@@ -116,23 +122,43 @@
                 break;
             case SendTagConstant.PING:
                 long PING = System.currentTimeMillis();
-                
                 PingMessage pingMessage = JSON.parseObject(content.toJSONString(),PingMessage.class);
-                //存储缓存中,5分钟有效
-//                redisTemplate.opsForValue().set("ping:" + pingMessage.getCharging_pile_code() + pingMessage.getCharging_gun_code(), pingMessage, 5, TimeUnit.MINUTES);
-                
+                String fullName = pingMessage.getCharging_pile_code() + pingMessage.getCharging_gun_code();
+                //主动丢弃一次心跳数据,用于降低调华为接口评率,防止被限流
+                boolean heartRate = redisTemplate.hasKey("HeartRate:" + fullName);
+                if(heartRate){
+                    redisTemplate.delete("HeartRate:" + fullName);
+                    break;
+                }
+                redisTemplate.opsForValue().set("HeartRate:" + fullName, System.currentTimeMillis());
                 // 响应硬件
                 Pong pong = new Pong();
                 pong.setCharging_pile_code(pingMessage.getCharging_pile_code());
                 pong.setCharging_gun_code(pingMessage.getCharging_gun_code());
                 pong.setCharging_gun_status(0);
                 iotMessageProduce.sendMessage(pong.getCharging_pile_code(), ServiceIdMenu.PONG.getKey(), messageUtil.pong(pong));
-    
-    
-                Long time = (Long) redisTemplate.opsForHash().get("charging_gun_online", (pingMessage.getCharging_pile_code() + pingMessage.getCharging_gun_code()));
+
+                //缓解高并发调华为接口触发限流
+//                threadPoolExecutor.execute(()->{
+//                    long longValue = Double.valueOf(Math.random() * 1000).longValue();
+//                    System.err.println("随机等待" + longValue + "毫秒:" + fullName);
+//                    try {
+//                        Thread.sleep(longValue);
+//                    } catch (InterruptedException e) {
+//                        throw new RuntimeException(e);
+//                    }
+//
+//                    // 响应硬件
+//                    Pong pong = new Pong();
+//                    pong.setCharging_pile_code(pingMessage.getCharging_pile_code());
+//                    pong.setCharging_gun_code(pingMessage.getCharging_gun_code());
+//                    pong.setCharging_gun_status(0);
+//                    iotMessageProduce.sendMessage(pong.getCharging_pile_code(), ServiceIdMenu.PONG.getKey(), messageUtil.pong(pong));
+//                });
+
+                Long time = (Long) redisTemplate.opsForHash().get("charging_gun_online", fullName);
                 //小于1分钟才处理数据,防止频繁查询数据
                 if(null != time && (System.currentTimeMillis() - time) < 60000){
-                    log.warn("PING消息处理:{} 毫秒", System.currentTimeMillis() - PING);
                     break;
                 }
                 

--
Gitblit v1.7.1