wangxiaofei 1 týždeň pred
rodič
commit
d6cca7f829

+ 12 - 2
taphole-iron/src/main/java/com/sckj/iron/service/impl/TIronVisualScreenServiceImpl.java

@@ -649,7 +649,12 @@ public class TIronVisualScreenServiceImpl {
                     }
                 }
                 if (value != null) {
-                    weight1Map.put(minute, value);
+                    if(weight1Map.containsKey(minute)) {
+                        Double oldValue = weight1Map.getOrDefault(minute, 0D);
+                        weight1Map.put(minute, Math.max(value, oldValue));
+                    }else{
+                        weight1Map.put(minute, value);
+                    }
                 }
             }
         }
@@ -671,7 +676,12 @@ public class TIronVisualScreenServiceImpl {
                     }
                 }
                 if (value != null) {
-                    weight2Map.put(minute, value);
+                    if(weight2Map.containsKey(minute)) {
+                        Double oldValue = weight2Map.getOrDefault(minute, 0D);
+                        weight2Map.put(minute, Math.max(value, oldValue));
+                    }else{
+                        weight2Map.put(minute, value);
+                    }
                 }
             }
         }

+ 34 - 34
taphole-iron/src/main/java/com/sckj/iron/socketio/DeviceEventListener.java

@@ -244,7 +244,7 @@ public class DeviceEventListener extends AbstractEventListener { //
     //实时出铁数据
     private TIronData mTIronData;
 
-    //连续计数
+    //连续计数(第一个元素为触发阈值后的记数,其他的为触发阈值记录的数据)
     private Map<String, List<Object>> mWarnCountMap = Collections.synchronizedMap(new LinkedHashMap<>());
 
 
@@ -1542,7 +1542,7 @@ public class DeviceEventListener extends AbstractEventListener { //
                         log.warn("触发急需出铁告警,压差超过阈值: {}", mContext.lookupVariable(ExpressionConstants.stdPressureDiff));
 
                         // 构建异常消息,包含所有记录的数据
-                        String msg = String.format("压差:%skPa,连续超过阈值%skPa", formatWarnData(warnData,"kPa"), StandardConstans.STANDARD_PRESSURE_DIFF);
+                        String msg = String.format("压差:%sk,连续超过阈值%skPa", formatWarnData(warnData,"kPa"), StandardConstans.STANDARD_PRESSURE_DIFF);
                         log.info("[急需出铁预警] 告警消息内容: {}", msg);
                         //触发次数超过配置的次数后发出预警
                         TAudioDTO audioDTO = mAudioMap.get(ExceptionTypeEnum.NEED_TAPHOLE.getCode());
@@ -2131,9 +2131,12 @@ public class DeviceEventListener extends AbstractEventListener { //
                 int stdTempMax = Integer.parseInt(mContext.lookupVariable(ExpressionConstants.stdTempMax).toString());
                 log.info("获取温度标准范围 - 最低: {}℃, 最高: {}℃", stdTempMin, stdTempMax);
 
+                final String tempMinWarn = "tempMinWarn";
+                final String tempMaxWarn = "tempMaxWarn";
+
                 // 温度异常检测
                 if (tempNow < stdTempMin) {
-                    List<Object> warnData = mWarnCountMap.getOrDefault("tempMinWarn", new ArrayList<>());
+                    List<Object> warnData = mWarnCountMap.getOrDefault(tempMinWarn, new ArrayList<>());
                     int count = warnData.isEmpty() ? 0 : ((Number) warnData.get(0)).intValue();
                     count++;
 
@@ -2147,7 +2150,7 @@ public class DeviceEventListener extends AbstractEventListener { //
 
                     warnData.add(tempNow); // 添加当前温度数据
 
-                    mWarnCountMap.put("tempMinWarn", warnData);
+                    mWarnCountMap.put(tempMinWarn, warnData);
                     log.warn("检测到温度偏低 - 当前: {}℃, 标准最低: {}℃, 连续异常次数: {}", tempNow, stdTempMin, count);
 
                     if (count >= StandardConstans.WARN_COUNT) {
@@ -2167,12 +2170,12 @@ public class DeviceEventListener extends AbstractEventListener { //
                         } catch (Exception e) {
                             log.error("处理温度偏低异常时发生错误", e);
                         }
-                        mWarnCountMap.put("tempMinWarn", new ArrayList<>());
+                        mWarnCountMap.put(tempMinWarn, new ArrayList<>());
                         mIronTempLowCount.incrementAndGet();
                         log.info("重置温度偏低计数器,低温异常次数+1");
                     }
                 } else if (tempNow > stdTempMax) {
-                    List<Object> warnData = mWarnCountMap.getOrDefault("tempMaxWarn", new ArrayList<>());
+                    List<Object> warnData = mWarnCountMap.getOrDefault(tempMaxWarn, new ArrayList<>());
                     int count = warnData.isEmpty() ? 0 : ((Number) warnData.get(0)).intValue();
                     count++;
 
@@ -2183,11 +2186,9 @@ public class DeviceEventListener extends AbstractEventListener { //
                         warnData.set(0, count); // 替换第一个元素(索引 0)的值为 count
                     }
 
-
-                    warnData.set(0, count);
                     warnData.add(tempNow); // 添加当前温度数据
 
-                    mWarnCountMap.put("tempMaxWarn", warnData);
+                    mWarnCountMap.put(tempMaxWarn, warnData);
                     log.warn("检测到温度偏高 - 当前: {}℃, 标准最高: {}℃, 连续异常次数: {}", tempNow, stdTempMax, count);
 
                     if (count >= StandardConstans.WARN_COUNT) {
@@ -2207,7 +2208,7 @@ public class DeviceEventListener extends AbstractEventListener { //
                         } catch (Exception e) {
                             log.error("处理温度偏高异常时发生错误", e);
                         }
-                        mWarnCountMap.put("tempMaxWarn", new ArrayList<>());
+                        mWarnCountMap.put(tempMaxWarn,new ArrayList<>());
                         mIronTempHighCount.incrementAndGet();
                         log.info("重置温度偏高计数器,高温异常次数+1");
                         return;
@@ -2218,12 +2219,12 @@ public class DeviceEventListener extends AbstractEventListener { //
                     int oldMinCount = 0;
                     int oldMaxCount = 0;
 
-                    List<Object> minWarnData = mWarnCountMap.getOrDefault("tempMinWarn", new ArrayList<>());
+                    List<Object> minWarnData = mWarnCountMap.getOrDefault(tempMinWarn, new ArrayList<>());
                     if (!minWarnData.isEmpty()) {
                         oldMinCount = ((Number) minWarnData.get(0)).intValue();
                     }
 
-                    List<Object> maxWarnData = mWarnCountMap.getOrDefault("tempMaxWarn", new ArrayList<>());
+                    List<Object> maxWarnData = mWarnCountMap.getOrDefault(tempMaxWarn, new ArrayList<>());
                     if (!maxWarnData.isEmpty()) {
                         oldMaxCount = ((Number) maxWarnData.get(0)).intValue();
                     }
@@ -2232,8 +2233,8 @@ public class DeviceEventListener extends AbstractEventListener { //
                         log.info("温度恢复正常 - 当前: {}℃,重置异常计数器", tempNow);
                     }
 
-                    mWarnCountMap.put("tempMinWarn", new ArrayList<>());
-                    mWarnCountMap.put("tempMaxWarn", new ArrayList<>());
+                    mWarnCountMap.put(tempMinWarn, new ArrayList<>());
+                    mWarnCountMap.put(tempMaxWarn, new ArrayList<>());
                 }
 
                 // 温度数据收集
@@ -2316,12 +2317,17 @@ public class DeviceEventListener extends AbstractEventListener { //
                         log.info("   ├─ 标准流速范围: {}-{}t/min", stdSpeedMin, stdSpeedMax);
                         log.info("   └─ 当前实际流速: {}t/min", rtIronSpeed);
 
+                        final String speedMinWarn = "speedMinWarn";
+                        final String speedMaxWarn = "speedMaxWarn";
+
                         //采用实时速度方法
                         if (rtIronSpeed < stdSpeedMin) {
                             log.warn("⚠️ 【流速异常检测】");
                             log.warn("   └─ 流速偏低: {} < {}", rtIronSpeed, stdSpeedMin);
+                            mWarnCountMap.put(speedMaxWarn, new ArrayList<>());
+                            log.info("   └─ 清除高流速待预警内容");
                             //铁水流速低
-                            List<Object> warnData = mWarnCountMap.getOrDefault("speedMinWarn", new ArrayList<>());
+                            List<Object> warnData = mWarnCountMap.getOrDefault(speedMinWarn, new ArrayList<>());
                             int count = warnData.isEmpty() ? 0 : ((Number) warnData.get(0)).intValue();
                             count++;
 
@@ -2332,10 +2338,9 @@ public class DeviceEventListener extends AbstractEventListener { //
                                 warnData.set(0, count); // 替换第一个元素(索引 0)的值为 count
                             }
 
-
                             warnData.add(rtIronSpeed); // 添加当前流速数据
 
-                            mWarnCountMap.put("speedMinWarn", warnData);
+                            mWarnCountMap.put(speedMinWarn, warnData);
                             log.info("📉 【流速偏低计数更新】");
                             log.info("   └─ 计数: {}/{}", count, StandardConstans.WARN_COUNT);
 
@@ -2347,7 +2352,7 @@ public class DeviceEventListener extends AbstractEventListener { //
                                 //推送预警列表
                                 getExceptionList();
                                 log.info("   ├─ 已推送预警列表更新");
-                                mWarnCountMap.put("speedMinWarn", new ArrayList<>());
+                                mWarnCountMap.put(speedMinWarn, new ArrayList<>());
                                 log.info("   ├─ 已重置流速偏低计数器");
 
                                 if (ironLoading2.get() > 0 || ironLoading3.get() > 0 || ironLoading4.get() > 0) {
@@ -2367,10 +2372,12 @@ public class DeviceEventListener extends AbstractEventListener { //
                                 }
                             }
                         } else if (rtIronSpeed > stdSpeedMax) {
-                            log.warn("⚠️ 【流速异常检测】");
-                            log.warn("   └─ 流速偏高: {} > {}", rtIronSpeed, stdSpeedMax);
+                            log.info("⚠️ 【流速异常检测】");
+                            log.info("   └─ 流速偏高: {} > {}", rtIronSpeed, stdSpeedMax);
+                            mWarnCountMap.put(speedMinWarn, new ArrayList<>());
+                            log.info("   └─ 清除低流速待预警内容");
                             //铁水流速高
-                            List<Object> warnData = mWarnCountMap.getOrDefault("speedMaxWarn", new ArrayList<>());
+                            List<Object> warnData = mWarnCountMap.getOrDefault(speedMaxWarn, new ArrayList<>());
                             int count = warnData.isEmpty() ? 0 : ((Number) warnData.get(0)).intValue();
                             count++;
 
@@ -2381,16 +2388,9 @@ public class DeviceEventListener extends AbstractEventListener { //
                                 warnData.set(0, count); // 替换第一个元素(索引 0)的值为 count
                             }
 
-                            if (warnData.isEmpty()) {
-                                // 如果集合为空,先添加第一个元素
-                                warnData.add(count);
-                            } else {
-                                warnData.set(0, count); // 替换第一个元素(索引 0)的值为 count
-                            }
-
                             warnData.add(rtIronSpeed); // 添加当前流速数据
 
-                            mWarnCountMap.put("speedMaxWarn", warnData);
+                            mWarnCountMap.put(speedMaxWarn, warnData);
                             log.info("📈 【流速偏高计数更新】");
                             log.info("   └─ 计数: {}/{}", count, StandardConstans.WARN_COUNT);
 
@@ -2406,7 +2406,7 @@ public class DeviceEventListener extends AbstractEventListener { //
                                 //推送预警列表
                                 getExceptionList();
                                 log.info("   ├─ 已推送预警列表更新");
-                                mWarnCountMap.put("speedMaxWarn", new ArrayList<>());
+                                mWarnCountMap.put(speedMaxWarn, new ArrayList<>());
                                 log.info("   └─ 已重置流速偏高计数器");
                             }
                         } else {
@@ -2414,12 +2414,12 @@ public class DeviceEventListener extends AbstractEventListener { //
                             int oldMinCount = 0;
                             int oldMaxCount = 0;
 
-                            List<Object> minWarnData = mWarnCountMap.getOrDefault("speedMinWarn", new ArrayList<>());
+                            List<Object> minWarnData = mWarnCountMap.getOrDefault(speedMinWarn, new ArrayList<>());
                             if (!minWarnData.isEmpty()) {
                                 oldMinCount = ((Number) minWarnData.get(0)).intValue();
                             }
 
-                            List<Object> maxWarnData = mWarnCountMap.getOrDefault("speedMaxWarn", new ArrayList<>());
+                            List<Object> maxWarnData = mWarnCountMap.getOrDefault(speedMaxWarn, new ArrayList<>());
                             if (!maxWarnData.isEmpty()) {
                                 oldMaxCount = ((Number) maxWarnData.get(0)).intValue();
                             }
@@ -2433,8 +2433,8 @@ public class DeviceEventListener extends AbstractEventListener { //
                                 log.info("   └─ 当前流速: {}t/min 在 {}-{}t/min 范围内", rtIronSpeed, stdSpeedMin, stdSpeedMax);
                             }
 
-                            mWarnCountMap.put("speedMinWarn", new ArrayList<>());
-                            mWarnCountMap.put("speedMaxWarn", new ArrayList<>());
+                            mWarnCountMap.put(speedMinWarn, new ArrayList<>());
+                            mWarnCountMap.put(speedMaxWarn, new ArrayList<>());
                         }
                     } catch (Exception e) {
                         log.error("❌ 【流速处理异常】", e);