wangxiaofei 1 viikko sitten
vanhempi
commit
09db35ad7a

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

@@ -259,6 +259,7 @@ public class DeviceEventListener extends AbstractEventListener { //
 
     //建议打泥量
     private String mCalcHitMud;
+    private int diffCloseTime;
 
     //铁水高温异常情况次数
     private AtomicInteger mIronTempHighCount = new AtomicInteger(0);
@@ -815,7 +816,7 @@ public class DeviceEventListener extends AbstractEventListener { //
         RealtimeData realtimeData = new RealtimeData();
         realtimeData.setDesc("距离堵口预计还剩");
         realtimeData.setUnit("分钟");
-        int diffCloseTime = 0;
+
 
         if (ironLoading1.get() <= 0) {
             log.info("当前铁口状态: 非出铁状态, 跳过计算");
@@ -842,11 +843,17 @@ public class DeviceEventListener extends AbstractEventListener { //
         double stdIronWeightMax = Double.parseDouble(mContext.lookupVariable(ExpressionConstants.stdIronWeightMax).toString());
         double stdIronSpeedMin = Double.parseDouble(mContext.lookupVariable(ExpressionConstants.stdSpeedMin).toString());
         double stdIronSpeedMax = Double.parseDouble(mContext.lookupVariable(ExpressionConstants.stdSpeedMax).toString());
+        //实时流速
+        double rtIronSpeed = Double.parseDouble(mContext.lookupVariable(ExpressionConstants.rtIronSpeed).toString());
         //实时总铁量
         // BigDecimal totalWeight = rtTotalWeight;
         //平均流速
         BigDecimal avgSpeed = totalWeight.divide(BigDecimal.valueOf(ironElapsedMinute), 2, RoundingMode.HALF_UP);
 
+        if (avgSpeed.doubleValue() < stdIronSpeedMin && rtIronSpeed >= stdIronSpeedMin) {
+            avgSpeed = BigDecimal.valueOf(rtIronSpeed);
+        }
+
         if (avgSpeed.doubleValue() < stdIronSpeedMin || avgSpeed.doubleValue() > stdIronSpeedMax) {
             log.warn("平均流速{}不在速度阈值范围内({}-{}), 不计算剩余时间", avgSpeed, stdIronSpeedMin, stdIronSpeedMax);
             return;
@@ -1116,6 +1123,7 @@ public class DeviceEventListener extends AbstractEventListener { //
             // 2. 重置前端显示
             log.info("🔄 重置前端显示数据...");
             PushData.send2CostTime(new RealtimeData());
+            diffCloseTime = 0;
             PushData.send2CloseTime(new RealtimeData());
             log.info("✅ 前端显示已重置");
 
@@ -1520,7 +1528,7 @@ public class DeviceEventListener extends AbstractEventListener { //
                     List<Object> warnData = mWarnCountMap.getOrDefault(modelKey, new ArrayList<>());
                     int count = warnData.isEmpty() ? 0 : ((Number) warnData.get(0)).intValue();
                     log.info("[急需出铁预警] 当前计数状态 - 当前: {}/{}次, 历史数据: {}",
-                            count, triggerCount, formatWarnData(warnData,"kPa"));
+                            count, triggerCount, formatWarnData(warnData, "kPa"));
 
                     // 增加计数并保存当前数据
                     count++;
@@ -1542,7 +1550,7 @@ public class DeviceEventListener extends AbstractEventListener { //
                         log.warn("触发急需出铁告警,压差超过阈值: {}", mContext.lookupVariable(ExpressionConstants.stdPressureDiff));
 
                         // 构建异常消息,包含所有记录的数据
-                        String msg = String.format("压差:%sk,连续超过阈值%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());
@@ -1586,8 +1594,8 @@ public class DeviceEventListener extends AbstractEventListener { //
         };
     }
 
-    private String formatWarnData(List<Object> warnData,String unit) {
-        if(warnData.isEmpty() || warnData.size() <= 1) {
+    private String formatWarnData(List<Object> warnData, String unit) {
+        if (warnData.isEmpty() || warnData.size() <= 1) {
             return "";
         }
         StringBuilder sb = new StringBuilder();
@@ -2158,7 +2166,7 @@ public class DeviceEventListener extends AbstractEventListener { //
                         try {
                             // 构建包含所有异常数据的消息
                             String exceptionMsg = String.format("温度连续%d次偏低:%s,低于%d℃",
-                                    StandardConstans.WARN_COUNT,formatWarnData(warnData,"℃"), stdTempMin);
+                                    StandardConstans.WARN_COUNT, formatWarnData(warnData, "℃"), stdTempMin);
 
                             PushData.send2Warn(mAudioMap.get(ExceptionTypeEnum.IRON_TEMP_HIGH.getCode()));
                             saveException(ExceptionTypeEnum.IRON_TEMP_HIGH, exceptionMsg);
@@ -2196,7 +2204,7 @@ public class DeviceEventListener extends AbstractEventListener { //
                         try {
                             // 构建包含所有异常数据的消息
                             String exceptionMsg = String.format("温度连续%d次偏高:%s,高于%d℃",
-                                    StandardConstans.WARN_COUNT, formatWarnData(warnData,"℃"), stdTempMax);
+                                    StandardConstans.WARN_COUNT, formatWarnData(warnData, "℃"), stdTempMax);
 
                             PushData.send2Warn(mAudioMap.get(ExceptionTypeEnum.IRON_TEMP_LOW.getCode()));
                             saveException(ExceptionTypeEnum.IRON_TEMP_LOW, exceptionMsg);
@@ -2208,7 +2216,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;
@@ -2360,14 +2368,14 @@ public class DeviceEventListener extends AbstractEventListener { //
                                     log.info("   ├─ 其他铁口状态: 有铁口正在出铁");
                                     saveException(ExceptionTypeEnum.NEED_CLOSURE,
                                             String.format("铁水流速连续%d次偏低:%st,低于%st/min,但其它铁口正在出铁,请将当前铁口堵口",
-                                                    StandardConstans.WARN_COUNT,formatWarnData(warnData,"t/min"), stdSpeedMin));
+                                                    StandardConstans.WARN_COUNT, formatWarnData(warnData, "t/min"), stdSpeedMin));
                                     log.info("   └─ 已保存异常记录: 类型=NEED_CLOSURE");
                                 } else {
                                     //堵口3
                                     log.info("   ├─ 其他铁口状态: 无铁口正在出铁");
                                     saveException(ExceptionTypeEnum.NEED_CLOSURE,
                                             String.format("铁水流速连续%d次偏低:%s,低于%st/min,其他铁口均未出铁,请先将其它铁口打开,再进行堵口",
-                                                    StandardConstans.WARN_COUNT, formatWarnData(warnData,"t/min"), stdSpeedMin));
+                                                    StandardConstans.WARN_COUNT, formatWarnData(warnData, "t/min"), stdSpeedMin));
                                     log.info("   └─ 已保存异常记录: 类型=NEED_CLOSURE");
                                 }
                             }
@@ -2401,7 +2409,7 @@ public class DeviceEventListener extends AbstractEventListener { //
                                 log.info("   ├─ 已发送流速偏高预警音频");
                                 saveException(ExceptionTypeEnum.NEED_CLOSURE,
                                         String.format("铁水流速连续%d次偏高:%s,高于%st/min,建议将当前铁口堵口",
-                                                StandardConstans.WARN_COUNT, formatWarnData(warnData,"t/min"), stdSpeedMax));
+                                                StandardConstans.WARN_COUNT, formatWarnData(warnData, "t/min"), stdSpeedMax));
                                 log.info("   ├─ 已保存异常记录: 类型=NEED_CLOSURE");
                                 //推送预警列表
                                 getExceptionList();
@@ -3149,63 +3157,63 @@ public class DeviceEventListener extends AbstractEventListener { //
      */
     @OnEvent(value = PushData.IRON_CONFIRM)
     public void confirmIron(SocketIOClient client, IronStepDTO message) {
+        log.info("[confirmIron] 开始处理出铁确认请求");
         String userId = validateClientOnline(client);
         if (null == userId) {
+            log.info("[confirmIron] 客户端验证失败,用户未在线");
             return;
         }
 
         if (ObjectUtils.isEmpty(message)) {
-            log.info("请求数据为空");
+            log.info("[confirmIron] 请求数据为空");
             PushData.send2Operation("请求数据为空", 0);
             return;
         }
 
-        log.info("--->userId : {}", userId);
+        log.info("[confirmIron] userId: {}, 接收到的请求数据: stepId={}, identifier={}, data={}",
+                userId, message.getStepId(), message.getIdentifier(), message.getData());
+
+        // 记录当前步骤数量
+        log.info("[confirmIron] 当前步骤总数: {}", mSteps != null ? mSteps.size() : 0);
+
         for (IronStepVO stepDTO : mSteps) {
+            log.info("[confirmIron] 处理主步骤: stepId={}, identifier={}", stepDTO.getStepId(), stepDTO.getIdentifier());
             for (IronStepVO child : stepDTO.getChilds()) {
-                validateManualData(message, userId, child);
+                log.info("[confirmIron] 处理子步骤: stepId={}, identifier={}", child.getStepId(), child.getIdentifier());
+                boolean validated = validateManualData(message, userId, child);
+                log.info("[confirmIron] 子步骤验证结果: stepId={}, result={}", child.getStepId(), validated);
             }
-            validateManualData(message, userId, stepDTO);
+            boolean validated = validateManualData(message, userId, stepDTO);
+            log.info("[confirmIron] 主步骤验证结果: stepId={}, result={}", stepDTO.getStepId(), validated);
         }
 
         setStepResult(mSteps);
+        log.info("[confirmIron] 步骤结果设置完成,推送操作数据");
         PushData.send2Operation(mSteps, ironLoading1.get());
 
+        log.info("[confirmIron] 开始处理特殊步骤逻辑");
         for (IronStepVO stepDTO : mSteps) {
             if (StepConstans.STEP_LQSQCT.equals(stepDTO.getIdentifier()) && stepDTO.getPassResult() == 1) {
+                log.info("[confirmIron] 触发理论重量计算: LQSQCT步骤通过");
                 getTheoryWeight2();
             } else if (StepConstans.STEP_LNCT.equals(stepDTO.getIdentifier()) && stepDTO.getPassResult() == 1) {
-                //炉前出铁操作,10分钟内打开铁口,未打开系统告警并记录
-//                if ("1".equals(scheduleMap.get(TaskNameConstants.TASKNAME_OPEN_WARN).getStatus())) {
-//                    LocalDateTime ldtStartTime = LocalDateTime.now();
-//                    scheduledTaskManager.addTask(scheduleMap.get(TaskNameConstants.TASKNAME_OPEN_WARN).getName(), StandardConstans.STANDARD_OPEN_HOUR * 60, scheduleMap.get(TaskNameConstants.TASKNAME_OPEN_WARN).getPeriod(), TimeUnit.SECONDS, () -> {
-//                        LocalDateTime ldtEndTime = LocalDateTime.now();
-//                        long minutesBetween = Duration.between(ldtStartTime, ldtEndTime).toMinutes();
-//                        log.info("开口预警");
-//                        // 出铁预警,打开系统告警并记录
-//                        PushData.send2Warn(WarnData.warnOpen("急需开口告警", openAlarmUrl));
-//                        taskExecutor.submit(() -> {
-//                            exceptionLogService.add(TExceptionLogCreateValidate.builder().exceptionType(ExceptionTypeEnum.KAI_KOU_CHAO_SHI.getCode()).exceptionDesc(String.format("开口耗时:%s分钟", minutesBetween)).build());
-//                            //推送预警列表
-//                            getExceptionList();
-//                        });
-//                    });
-//                }
-
+                log.info("[confirmIron] 触发炉前出铁操作逻辑: LNCT步骤通过");
+                // 原有的炉前出铁操作逻辑被注释掉
             }
 
             for (IronStepVO child : stepDTO.getChilds()) {
                 if (Objects.equals(child.getIdentifier(), YLGC_STATUS)) {
+                    log.info("[confirmIron] 更新鱼雷罐车状态: identifier={}, passResult={}",
+                            YLGC_STATUS, child.getPassResult());
                     RealtimeData realtimeData = new RealtimeData();
                     realtimeData.setValue(child.getPassResult());
                     realtimeData.setDesc("鱼雷罐车到位状态");
                     mRealtimeStatus.put(YLGC_STATUS, realtimeData);
                     PushData.send2RealtimeStatus(mRealtimeStatus);
                 }
-
-
             }
         }
+        log.info("[confirmIron] 出铁确认请求处理完成");
 
     }
 
@@ -3270,6 +3278,15 @@ public class DeviceEventListener extends AbstractEventListener { //
         PushData.send2IronHitMud(mCalcHitMud);
 
 
+        if (ironLoading1.get() <= 0 && diffCloseTime > 0) {
+            RealtimeData realtimeData = new RealtimeData();
+            realtimeData.setDesc("距离堵口预计还剩");
+            realtimeData.setUnit("分钟");
+            realtimeData.setValue(diffCloseTime);
+            PushData.send2CloseTime(realtimeData);
+        }
+
+
         //异常列表
         //预警列表
         TIronSchedule getExceptionList = mScheduleMap.get(TaskNameConstants.TASKNAME_EXCEPTION_LIST);