|
@@ -198,18 +198,6 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
//出铁步骤
|
|
|
private List<IronStepVO> mSteps;
|
|
|
|
|
|
- //开口超时预警预警音频URL
|
|
|
- private String openAlarmUrl;
|
|
|
-
|
|
|
- //堵口预警音频
|
|
|
- private String closureAlarmUrl;
|
|
|
-
|
|
|
- //急需出铁告警音频
|
|
|
- private String tappingAlramUrl;
|
|
|
-
|
|
|
- //出铁超时音频
|
|
|
- private String tappingTimeoutAlramUrl;
|
|
|
-
|
|
|
//节点标记
|
|
|
private static final String NODE = "node";
|
|
|
|
|
@@ -264,6 +252,9 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
// 模型统一管理
|
|
|
private Map<String, TIronModel> modelMap = new ConcurrentHashMap<>();
|
|
|
|
|
|
+ // 音频统一管理
|
|
|
+ private Map<String, String> audioMap = new ConcurrentHashMap<>();
|
|
|
+
|
|
|
//建议打泥量
|
|
|
private String mCalcHitMud;
|
|
|
|
|
@@ -341,24 +332,11 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
}
|
|
|
|
|
|
private void getAudios() {
|
|
|
- List<TAudio> list = audioService.lambdaQuery().eq(TAudio::getStatus, "1").eq(TAudio::getDelFlag, "1").list();
|
|
|
- if (ObjectUtils.isNotEmpty(list)) {
|
|
|
- for (TAudio tAudio : list) {
|
|
|
- if (ExceptionTypeEnum.JI_XU_DU_KOU.equals(ExceptionTypeEnum.fromCode(tAudio.getExceptionType()))) {
|
|
|
- closureAlarmUrl = SERVER_URL + "/" + GlobalConfig.publicPrefix + File.separator + tAudio.getPath();
|
|
|
- } else if (ExceptionTypeEnum.JI_XU_CHU_TIE.equals(ExceptionTypeEnum.fromCode(tAudio.getExceptionType()))) {
|
|
|
- tappingAlramUrl = SERVER_URL + "/" + GlobalConfig.publicPrefix + File.separator + tAudio.getPath();
|
|
|
- } else if (ExceptionTypeEnum.CHU_TIE_SHI_JIAN_TAI_CHANG.equals(ExceptionTypeEnum.fromCode(tAudio.getExceptionType()))) {
|
|
|
- tappingTimeoutAlramUrl = SERVER_URL + "/" + GlobalConfig.publicPrefix + File.separator + tAudio.getPath();
|
|
|
- } else if (ExceptionTypeEnum.KAI_KOU_CHAO_SHI.equals(ExceptionTypeEnum.fromCode(tAudio.getExceptionType()))) {
|
|
|
- openAlarmUrl = SERVER_URL + "/" + GlobalConfig.publicPrefix + File.separator + tAudio.getPath();
|
|
|
- }
|
|
|
- }
|
|
|
- log.info("openAlarmUrl: " + openAlarmUrl);
|
|
|
- log.info("closureAlarmUrl: " + closureAlarmUrl);
|
|
|
- log.info("tappingAlramUrl: " + tappingAlramUrl);
|
|
|
- log.info("tappingTimeoutAlramUrl: " + tappingTimeoutAlramUrl);
|
|
|
- }
|
|
|
+ audioMap = audioService.lambdaQuery().eq(TAudio::getStatus, "1").eq(TAudio::getDelFlag, "1").list().stream().collect(Collectors.toMap(
|
|
|
+ TAudio::getExceptionType, // 键映射函数
|
|
|
+ audio -> SERVER_URL + "/" + GlobalConfig.publicPrefix + File.separator + audio.getPath(), // 值映射函数
|
|
|
+ (existing, replacement) -> existing // 合并函数
|
|
|
+ ));
|
|
|
}
|
|
|
|
|
|
|
|
@@ -421,7 +399,7 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
*/
|
|
|
@Subscribe
|
|
|
public void onMessageEvent(OPCData opcData) {
|
|
|
- log.debug("subscribe info:{}", opcData);
|
|
|
+ log.info("subscribe info:{}", opcData);
|
|
|
|
|
|
if (ObjectUtils.isNotEmpty(opcData) && ObjectUtils.isNotEmpty(opcData.getIdentifier())) {
|
|
|
//将每一个opc配置的唯一编号添加到环境变量中,方便在表达式中使用
|
|
@@ -736,11 +714,11 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
getExceptionList();
|
|
|
});
|
|
|
} else if (getIronElapsedMinute() > stdIronTimeMax) {
|
|
|
- taskExecutor.submit(() -> {
|
|
|
- saveException(ExceptionTypeEnum.CHU_TIE_SHI_JIAN_TAI_CHANG, String.format("出铁时间:%s分钟", getIronElapsedMinute()));
|
|
|
- //推送预警列表
|
|
|
- getExceptionList();
|
|
|
- });
|
|
|
+// taskExecutor.submit(() -> {
|
|
|
+// saveException(ExceptionTypeEnum.CHU_TIE_SHI_JIAN_TAI_CHANG, String.format("出铁时间:%s分钟", getIronElapsedMinute()));
|
|
|
+// //推送预警列表
|
|
|
+// getExceptionList();
|
|
|
+// });
|
|
|
}
|
|
|
|
|
|
//出铁量多少告警
|
|
@@ -749,16 +727,18 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
|
|
|
if (mTotalWeight.get().doubleValue() < stdIronWeightMin) {
|
|
|
taskExecutor.submit(() -> {
|
|
|
+ PushData.send2Warn(WarnData.warnTapping("出铁量过少", audioMap.get(ExceptionTypeEnum.CHU_TIE_LIANG_TAI_SHAO.getCode())));
|
|
|
saveException(ExceptionTypeEnum.CHU_TIE_LIANG_TAI_SHAO, String.format("出铁量%s吨", mTotalWeight));
|
|
|
//推送预警列表
|
|
|
getExceptionList();
|
|
|
});
|
|
|
} else if (mTotalWeight.get().doubleValue() > stdIronWeightMax) {
|
|
|
- taskExecutor.submit(() -> {
|
|
|
- saveException(ExceptionTypeEnum.CHU_TIE_LIANG_TAI_DUO, String.format("出铁量%s吨", mTotalWeight));
|
|
|
- //推送预警列表
|
|
|
- getExceptionList();
|
|
|
- });
|
|
|
+// taskExecutor.submit(() -> {
|
|
|
+// PushData.send2Warn(WarnData.warnTapping("出铁量过多", audioMap.get(ExceptionTypeEnum.CHU_TIE_LIANG_TAI_DUO.getCode())));
|
|
|
+// saveException(ExceptionTypeEnum.CHU_TIE_LIANG_TAI_DUO, String.format("出铁量%s吨", mTotalWeight));
|
|
|
+// //推送预警列表
|
|
|
+// getExceptionList();
|
|
|
+// });
|
|
|
}
|
|
|
|
|
|
|
|
@@ -816,20 +796,17 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
log.warn("模型1触发堵口告警1");
|
|
|
|
|
|
taskExecutor.submit(() -> {
|
|
|
- saveException(ExceptionTypeEnum.TIE_SHUI_LIU_SU_GUO_KUAI, String.format("流速%s吨/分钟", mContext.lookupVariable(ExpressionConstants.rtIronSpeed)));
|
|
|
+ PushData.send2Warn(WarnData.warnClose("堵口告警1", audioMap.get(ExceptionTypeEnum.JI_XU_DU_KOU1.getCode())));
|
|
|
saveException(ExceptionTypeEnum.JI_XU_DU_KOU, String.format("建议将当前铁口堵口"));
|
|
|
//推送预警列表
|
|
|
getExceptionList();
|
|
|
});
|
|
|
- taskExecutor.submit(() -> {
|
|
|
- PushData.send2Warn(WarnData.warnClose("堵口告警1", closureAlarmUrl));
|
|
|
- });
|
|
|
mWarnCountMap.put(modelKey1, 0);
|
|
|
return;
|
|
|
}
|
|
|
} else {
|
|
|
mWarnCountMap.put(modelKey1, 0);
|
|
|
- PushData.send2CancelWarn(WarnData.warnClose("堵口告警1", closureAlarmUrl));
|
|
|
+ PushData.send2CancelWarn(WarnData.warnClose("取消堵口告警1", ""));
|
|
|
}
|
|
|
|
|
|
String modelExpression2 = modelClosureWarn2.getModelExpression();
|
|
@@ -848,20 +825,17 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
log.warn("模型1触发堵口告警2");
|
|
|
|
|
|
taskExecutor.submit(() -> {
|
|
|
- saveException(ExceptionTypeEnum.TIE_SHUI_LIU_SU_GUO_MAN, String.format("流速%s吨/分钟", mContext.lookupVariable(ExpressionConstants.rtIronSpeed)));
|
|
|
+ PushData.send2Warn(WarnData.warnClose("堵口告警2", audioMap.get(ExceptionTypeEnum.JI_XU_DU_KOU2.getCode())));
|
|
|
saveException(ExceptionTypeEnum.JI_XU_DU_KOU, String.format("建议打开其他铁口,并将当前铁口堵口"));
|
|
|
//推送预警列表
|
|
|
getExceptionList();
|
|
|
});
|
|
|
mWarnCountMap.put(modelKey2, 0);
|
|
|
- taskExecutor.submit(() -> {
|
|
|
- PushData.send2Warn(WarnData.warnClose("堵口告警2", closureAlarmUrl));
|
|
|
- });
|
|
|
return;
|
|
|
}
|
|
|
} else {
|
|
|
mWarnCountMap.put(modelKey2, 0);
|
|
|
- PushData.send2CancelWarn(WarnData.warnClose("堵口告警2", closureAlarmUrl));
|
|
|
+ PushData.send2CancelWarn(WarnData.warnClose("取消堵口告警2", ""));
|
|
|
}
|
|
|
|
|
|
String modelExpression3 = modelClosureWarn3.getModelExpression();
|
|
@@ -880,19 +854,16 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
if (count >= triggerCount3) {
|
|
|
log.warn("模型3触发堵口告警3");
|
|
|
taskExecutor.submit(() -> {
|
|
|
- saveException(ExceptionTypeEnum.TIE_SHUI_LIU_SU_GUO_MAN, String.format("流速%s吨/分钟", mContext.lookupVariable(ExpressionConstants.rtIronSpeed)));
|
|
|
+ PushData.send2Warn(WarnData.warnClose("堵口告警3", audioMap.get(ExceptionTypeEnum.JI_XU_DU_KOU3.getCode())));
|
|
|
saveException(ExceptionTypeEnum.JI_XU_DU_KOU, String.format("建议将当前铁口堵口"));
|
|
|
//推送预警列表
|
|
|
getExceptionList();
|
|
|
});
|
|
|
- taskExecutor.submit(() -> {
|
|
|
- PushData.send2Warn(WarnData.warnClose("堵口告警3", closureAlarmUrl));
|
|
|
- });
|
|
|
mWarnCountMap.put(modelKey3, 0);
|
|
|
}
|
|
|
} else {
|
|
|
mWarnCountMap.put(modelKey3, 0);
|
|
|
- PushData.send2CancelWarn(WarnData.warnClose("堵口告警3", closureAlarmUrl));
|
|
|
+ PushData.send2CancelWarn(WarnData.warnClose("取消堵口告警3",""));
|
|
|
}
|
|
|
} else {
|
|
|
log.info("使用实时速度预警模式");
|
|
@@ -907,23 +878,6 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
};
|
|
|
}
|
|
|
|
|
|
- //开口超时
|
|
|
- @NotNull
|
|
|
- private Runnable runnableOpen() {
|
|
|
- return () -> {
|
|
|
- //出铁时间长短告警
|
|
|
- int stdIronTimeMax = Integer.parseInt(mContext.lookupVariable(ExpressionConstants.stdIronTimeMax).toString());
|
|
|
-
|
|
|
- if (getIronElapsedMinute() > stdIronTimeMax) {
|
|
|
- taskExecutor.submit(() -> {
|
|
|
- saveException(ExceptionTypeEnum.CHU_TIE_SHI_JIAN_TAI_CHANG, String.format("出铁时间:%s分钟", getIronElapsedMinute()));
|
|
|
- //推送预警列表
|
|
|
- getExceptionList();
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- };
|
|
|
- }
|
|
|
|
|
|
//出铁超时
|
|
|
|
|
@@ -943,11 +897,11 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
try {
|
|
|
// 获取标准最大出铁时间配置
|
|
|
int stdIronTimeMax = Integer.parseInt(mContext.lookupVariable(ExpressionConstants.stdIronTimeMax).toString());
|
|
|
- log.debug("获取标准最大出铁时间: {} 分钟", stdIronTimeMax);
|
|
|
+ log.info("获取标准最大出铁时间: {} 分钟", stdIronTimeMax);
|
|
|
|
|
|
// 获取当前出铁时间
|
|
|
int currentIronTime = getIronElapsedMinute();
|
|
|
- log.debug("当前出铁时间: {} 分钟", currentIronTime);
|
|
|
+ log.info("当前出铁时间: {} 分钟", currentIronTime);
|
|
|
|
|
|
// 检查是否超时
|
|
|
if (currentIronTime > stdIronTimeMax) {
|
|
@@ -972,15 +926,15 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- log.debug("出铁超时异常处理任务已提交");
|
|
|
+ log.info("出铁超时异常处理任务已提交");
|
|
|
} else {
|
|
|
- log.debug("出铁时间正常 - 当前: {} 分钟, 标准: {} 分钟", currentIronTime, stdIronTimeMax);
|
|
|
+ log.info("出铁时间正常 - 当前: {} 分钟, 标准: {} 分钟", currentIronTime, stdIronTimeMax);
|
|
|
}
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
log.error("执行出铁超时检查时发生异常", e);
|
|
|
} finally {
|
|
|
- log.debug("出铁超时检查任务完成");
|
|
|
+ log.info("出铁超时检查任务完成");
|
|
|
scheduledTaskManager.cancelTask(scheduleMap.get(TaskNameConstants.TASKNAME_TAPPING_TIMEOUT_WARN).getName());
|
|
|
}
|
|
|
};
|
|
@@ -1018,7 +972,7 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
|
|
|
// 获取最新的出铁数据
|
|
|
TL2Data tappingData = tl2DataService.getTapped1LatestData();
|
|
|
- log.debug("获取最新出铁数据: {}", tappingData != null ? "数据存在" : "数据为空");
|
|
|
+ log.info("获取最新出铁数据: {}", tappingData != null ? "数据存在" : "数据为空");
|
|
|
|
|
|
// 数据有效性检查
|
|
|
if (ObjectUtils.isEmpty(tappingData)) {
|
|
@@ -1054,7 +1008,7 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
}
|
|
|
|
|
|
// 解析并执行表达式
|
|
|
- log.debug("开始解析模型表达式: {}", modelExpression);
|
|
|
+ log.info("开始解析模型表达式: {}", modelExpression);
|
|
|
Expression expression = mParser.parseExpression(modelExpression);
|
|
|
|
|
|
// 设置上下文变量
|
|
@@ -1062,14 +1016,14 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
mContext.setVariable(ExpressionConstants.rtIronWeight, mTotalWeight.get().doubleValue());
|
|
|
mContext.setVariable(ExpressionConstants.rtIronCosttime, getIronElapsedMinute());
|
|
|
|
|
|
- log.debug("表达式变量设置完成 - openDepth: {}, rtIronWeight: {}, rtIronCosttime: {}",
|
|
|
+ log.info("表达式变量设置完成 - openDepth: {}, rtIronWeight: {}, rtIronCosttime: {}",
|
|
|
tappingData.getOpenDepth(),
|
|
|
mTotalWeight.get().doubleValue(),
|
|
|
getIronElapsedMinute());
|
|
|
|
|
|
// 计算打泥量
|
|
|
Object result = expression.getValue(mContext);
|
|
|
- log.debug("表达式计算结果: {}", result);
|
|
|
+ log.info("表达式计算结果: {}", result);
|
|
|
|
|
|
BigDecimal bigDecimal = new BigDecimal(result.toString());
|
|
|
mCalcHitMud = bigDecimal.toBigInteger().toString();
|
|
@@ -1097,7 +1051,7 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
log.info("开始执行急需出铁预警检查 - 当前出铁状态: {}", ironLoading1.get());
|
|
|
|
|
|
if (ironLoading1.get() > 0) {
|
|
|
- log.debug("当前正在出铁中,跳过急需出铁预警检查");
|
|
|
+ log.info("当前正在出铁中,跳过急需出铁预警检查");
|
|
|
return;
|
|
|
}
|
|
|
|
|
@@ -1107,22 +1061,22 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- log.debug("获取到急需出铁预警模型: {}", modelTappingWarn.getModelName());
|
|
|
+ log.info("获取到急需出铁预警模型: {}", modelTappingWarn.getModelName());
|
|
|
|
|
|
String modelExpression = modelTappingWarn.getModelExpression();
|
|
|
if (ObjectUtils.isNotEmpty(modelExpression) && "1".equals(modelTappingWarn.getStatus())) {
|
|
|
- log.debug("开始执行预警表达式: {}", modelExpression);
|
|
|
+ log.info("开始执行预警表达式: {}", modelExpression);
|
|
|
|
|
|
try {
|
|
|
Expression expression = mParser.parseExpression(modelExpression);
|
|
|
Boolean result = expression.getValue(mContext, Boolean.class);
|
|
|
|
|
|
- log.debug("预警表达式执行结果: {}", result);
|
|
|
+ log.info("预警表达式执行结果: {}", result);
|
|
|
|
|
|
String modelKey = modelTappingWarn.getModelName();
|
|
|
int triggerCount = modelTappingWarn.getTriggerCondCount() != null ? modelTappingWarn.getTriggerCondCount() : 1;
|
|
|
|
|
|
- log.debug("触发阈值: {}, 当前计数: {}", triggerCount, mWarnCountMap.getOrDefault(modelKey, 0));
|
|
|
+ log.info("触发阈值: {}, 当前计数: {}", triggerCount, mWarnCountMap.getOrDefault(modelKey, 0));
|
|
|
|
|
|
if (Boolean.TRUE.equals(result)) {
|
|
|
int count = mWarnCountMap.getOrDefault(modelKey, 0) + 1;
|
|
@@ -1134,7 +1088,7 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
log.warn("触发急需出铁告警,压差超过阈值: {}", mContext.lookupVariable(ExpressionConstants.stdPressureDiff));
|
|
|
|
|
|
//触发次数超过配置的次数后发出预警
|
|
|
- PushData.send2Warn(WarnData.warnTapping("急需出铁告警", tappingAlramUrl));
|
|
|
+ PushData.send2Warn(WarnData.warnTapping("急需出铁告警", audioMap.get(ExceptionTypeEnum.JI_XU_CHU_TIE.getCode())));
|
|
|
saveException(ExceptionTypeEnum.JI_XU_CHU_TIE,
|
|
|
String.format("压差超过:%s,请降低送风流量,并操作出铁",
|
|
|
String.valueOf(mContext.lookupVariable(ExpressionConstants.stdPressureDiff))));
|
|
@@ -1158,11 +1112,11 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
log.error("执行急需出铁预警表达式时发生异常", e);
|
|
|
}
|
|
|
} else {
|
|
|
- log.debug("急需出铁预警模型未启用或表达式为空,状态: {}, 表达式: {}",
|
|
|
+ log.info("急需出铁预警模型未启用或表达式为空,状态: {}, 表达式: {}",
|
|
|
modelTappingWarn.getStatus(), modelExpression);
|
|
|
}
|
|
|
|
|
|
- log.debug("急需出铁预警检查完成");
|
|
|
+ log.info("急需出铁预警检查完成");
|
|
|
};
|
|
|
}
|
|
|
|
|
@@ -1297,15 +1251,18 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
//WI5402.PV 1TH-2号车TPC总重
|
|
|
if (ObjectUtils.isNotEmpty(opcData)) {
|
|
|
if (opcData.getPointName().contains(SubscribeTagConstants.TAG_TAPHOLE1_STATUS(opcData.getServerType()))) {
|
|
|
+ //将上一个出铁状态保存
|
|
|
lastIronLoading1.set(ironLoading1.get());
|
|
|
double currentIronState1 = Double.parseDouble(opcData.getData().toString());
|
|
|
+ ironLoading1.set(currentIronState1);
|
|
|
+
|
|
|
if (currentIronState1 > 0) {
|
|
|
//正在出铁出铁状态
|
|
|
log.info("准备调用taphole1Start()");
|
|
|
log.info("开始出铁,设置lastIronLoading1=1,当前出铁状态: {}", currentIronState1);
|
|
|
taphole1Start();
|
|
|
if (firstGetTappingStatus.get()) {
|
|
|
- lastIronLoading1.set(currentIronState1);
|
|
|
+ //lastIronLoading1.set(currentIronState1);
|
|
|
//查询数据库中最新的1号铁口状态
|
|
|
OPCData tappingInfo = opcDataService.lambdaQuery().eq(OPCData::getPointName, opcData.getPointName()).orderByDesc(OPCData::getSourceTime).last("limit 1").one();
|
|
|
if (ObjectUtils.isNotEmpty(tappingInfo) && Double.parseDouble(tappingInfo.getData().toString()) > 0 && "prod".equals(activeProfiles)) {
|
|
@@ -1335,7 +1292,6 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
mTIronData = new TIronData();
|
|
|
mTIronData.setId(tappingInfo.getIronDataId());
|
|
|
//添加之前已出铁时间长度
|
|
|
-
|
|
|
long diffInSeconds = (localDateTimeMillis - tappingInfo.getSourceTime().getTime()) / 1000;
|
|
|
mSecondsElapsed.addAndGet((int) diffInSeconds);
|
|
|
} else {
|
|
@@ -1374,7 +1330,7 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
scheduledTaskManager.addTask(tappingWarn.getName(), tappingWarn.getDelay(), tappingWarn.getPeriod(), TimeUnit.SECONDS, runnableTappingWarn());
|
|
|
}
|
|
|
}
|
|
|
- ironLoading1.set(currentIronState1);
|
|
|
+
|
|
|
//首次启动程序后,检查当前是否为正在出铁
|
|
|
firstGetTappingStatus.set(false);
|
|
|
|
|
@@ -1393,7 +1349,7 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
|
|
|
// 处理温度数据
|
|
|
int tempNow = Integer.parseInt(opcData.getData().toString());
|
|
|
- log.debug("接收到温度数据 - 当前温度: {}℃, 数据来源: {}", tempNow, opcData.getPointName());
|
|
|
+ log.info("接收到温度数据 - 当前温度: {}℃, 数据来源: {}", tempNow, opcData.getPointName());
|
|
|
|
|
|
// 更新最高温度记录
|
|
|
int oldMax = rtTempMax.get();
|
|
@@ -1417,12 +1373,12 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
mContext.setVariable(ExpressionConstants.rtIronTemp, opcData.getData());
|
|
|
int tempDiff = rtTempMax.get() - rtTempMin.get();
|
|
|
mContext.setVariable(ExpressionConstants.rtIronTempDiff, tempDiff);
|
|
|
- log.debug("设置温度变量到上下文 - 当前温度: {}℃, 温差: {}℃", tempNow, tempDiff);
|
|
|
+ log.info("设置温度变量到上下文 - 当前温度: {}℃, 温差: {}℃", tempNow, tempDiff);
|
|
|
|
|
|
// 获取温度标准值
|
|
|
int stdTempMin = Integer.parseInt(mContext.lookupVariable(ExpressionConstants.stdTempMin).toString());
|
|
|
int stdTempMax = Integer.parseInt(mContext.lookupVariable(ExpressionConstants.stdTempMax).toString());
|
|
|
- log.debug("获取温度标准范围 - 最低: {}℃, 最高: {}℃", stdTempMin, stdTempMax);
|
|
|
+ log.info("获取温度标准范围 - 最低: {}℃, 最高: {}℃", stdTempMin, stdTempMax);
|
|
|
|
|
|
// 温度异常检测
|
|
|
if (tempNow < stdTempMin) {
|
|
@@ -1435,6 +1391,7 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
taskExecutor.submit(() -> {
|
|
|
try {
|
|
|
String exceptionMsg = String.format("温度%s℃", tempNow);
|
|
|
+ PushData.send2Warn(WarnData.warnTapping("铁水温度过低", audioMap.get(ExceptionTypeEnum.TIE_SHUI_WEN_DU_GUO_DI.getCode())));
|
|
|
saveException(ExceptionTypeEnum.TIE_SHUI_WEN_DU_GUO_DI, exceptionMsg);
|
|
|
log.warn("已记录温度过低异常: {}", exceptionMsg);
|
|
|
|
|
@@ -1461,6 +1418,7 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
taskExecutor.submit(() -> {
|
|
|
try {
|
|
|
String exceptionMsg = String.format("温度%s℃", tempNow);
|
|
|
+ PushData.send2Warn(WarnData.warnTapping("铁水温度过高", audioMap.get(ExceptionTypeEnum.TIE_SHUI_WEN_DU_GUO_GAO.getCode())));
|
|
|
saveException(ExceptionTypeEnum.TIE_SHUI_WEN_DU_GUO_GAO, exceptionMsg);
|
|
|
log.warn("已记录温度过高异常: {}", exceptionMsg);
|
|
|
|
|
@@ -1493,7 +1451,7 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
// 温度数据收集
|
|
|
if (ironLoading1.get() > 0) {
|
|
|
tempList.add(tempNow);
|
|
|
- log.debug("出铁中,添加温度到历史记录 - 当前温度: {}℃,历史记录数: {}", tempNow, tempList.size());
|
|
|
+ log.info("出铁中,添加温度到历史记录 - 当前温度: {}℃,历史记录数: {}", tempNow, tempList.size());
|
|
|
} else {
|
|
|
int oldSize = tempList.size();
|
|
|
if (oldSize > 0) {
|
|
@@ -1533,11 +1491,13 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
log.info("流速过低计数: {}/3", count);
|
|
|
|
|
|
if (count >= warnCount) {
|
|
|
+ PushData.send2Warn(WarnData.warnTapping("铁水流速过慢", audioMap.get(ExceptionTypeEnum.TIE_SHUI_LIU_SU_GUO_MAN.getCode())));
|
|
|
log.error("触发流速过低预警");
|
|
|
saveException(ExceptionTypeEnum.TIE_SHUI_LIU_SU_GUO_MAN, String.format("流速%s吨/分钟", mContext.lookupVariable(ExpressionConstants.rtIronSpeed)));
|
|
|
//推送预警列表
|
|
|
getExceptionList();
|
|
|
mWarnCountMap.put("speedMinWarn", 0);
|
|
|
+
|
|
|
}
|
|
|
} else if (rtIronSpeed > stdSpeedMax) {
|
|
|
log.warn("流速过高: {} > {}", rtIronSpeed, stdSpeedMax);
|
|
@@ -1547,14 +1507,14 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
log.info("流速过高计数: {}/3", count);
|
|
|
if (count >= warnCount) {
|
|
|
log.error("触发流速过高预警");
|
|
|
- //堵口一
|
|
|
+ PushData.send2Warn(WarnData.warnTapping("铁水流速过快", audioMap.get(ExceptionTypeEnum.TIE_SHUI_LIU_SU_GUO_KUAI.getCode())));
|
|
|
saveException(ExceptionTypeEnum.TIE_SHUI_LIU_SU_GUO_KUAI, String.format("流速%s吨/分钟", mContext.lookupVariable(ExpressionConstants.rtIronSpeed)));
|
|
|
//推送预警列表
|
|
|
getExceptionList();
|
|
|
mWarnCountMap.put("speedMaxWarn", 0);
|
|
|
}
|
|
|
} else {
|
|
|
- log.debug("流速正常: {} 在 {}-{} 范围内", rtIronSpeed, stdSpeedMin, stdSpeedMax);
|
|
|
+ log.info("流速正常: {} 在 {}-{} 范围内", rtIronSpeed, stdSpeedMin, stdSpeedMax);
|
|
|
mWarnCountMap.put("speedMinWarn", 0);
|
|
|
mWarnCountMap.put("speedMaxWarn", 0);
|
|
|
}
|
|
@@ -1568,68 +1528,35 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
} else if (opcData.getPointName().contains(SubscribeTagConstants.TAG_TAPHOLE4_STATUS(opcData.getServerType()))) {
|
|
|
ironLoading4.set(Double.parseDouble(opcData.getData().toString()));
|
|
|
// mContext.setVariable(ExpressionConstants.rtIronState4, ironLoading4.get());
|
|
|
- } else if (opcData.getPointName().contains(SubscribeTagConstants.TAG_IRON_WEIGHT11(opcData.getServerType()))) {
|
|
|
+ } else if (opcData.getPointName().contains(SubscribeTagConstants.TAG_IRON_WEIGHT11(opcData.getServerType()))
|
|
|
+ || opcData.getPointName().contains(SubscribeTagConstants.TAG_IRON_WEIGHT12(opcData.getServerType()))
|
|
|
+ ) {
|
|
|
// 1号车铁水流量递增值
|
|
|
BigDecimal bigDecimalNew = new BigDecimal(opcData.getData().toString());
|
|
|
- if (bigDecimalNew.compareTo(BigDecimal.ZERO) >= 0) {
|
|
|
- if (ironLoading1.get() > 0) {
|
|
|
- RealtimeData realtimeData = new RealtimeData();
|
|
|
+ RealtimeData realtimeData = new RealtimeData();
|
|
|
+ if (ironLoading1.get() > 0) {
|
|
|
+ if(opcData.getPointName().contains(SubscribeTagConstants.TAG_IRON_WEIGHT11(opcData.getServerType()))){
|
|
|
realtimeData.setValue(1);
|
|
|
- realtimeData.setDesc("摆动溜嘴的摆动方向");
|
|
|
- realtimeData.setExtra(opcData.getData());
|
|
|
- mRealtimeStatus.put(BDLZ_STATUS, realtimeData);
|
|
|
-
|
|
|
- if (ironWeight1Pre.subtract(bigDecimalNew).compareTo(new java.math.BigDecimal("130")) > 0) {
|
|
|
+ }else{
|
|
|
+ realtimeData.setValue(2);
|
|
|
+ }
|
|
|
+ if (bigDecimalNew.compareTo(BigDecimal.ZERO) >= 0) {
|
|
|
+ if (ironWeight1Pre.subtract(bigDecimalNew).compareTo(new BigDecimal("130")) > 0) {
|
|
|
mTotalWeight.updateAndGet(prev -> prev.add(ironWeight1Pre));
|
|
|
log.info("铁水总流量:{},1号线铁水满载流量:{},下一个流量:{}", mTotalWeight.get(), ironWeight1Pre, bigDecimalNew);
|
|
|
}
|
|
|
-
|
|
|
- } else {
|
|
|
- RealtimeData realtimeData = new RealtimeData();
|
|
|
- realtimeData.setValue(0);
|
|
|
- realtimeData.setDesc("摆动溜嘴的摆动方向");
|
|
|
- realtimeData.setExtra(opcData.getData());
|
|
|
- mRealtimeStatus.put(BDLZ_STATUS, realtimeData);
|
|
|
}
|
|
|
-
|
|
|
ironWeight1Pre = bigDecimalNew;
|
|
|
- } else {
|
|
|
- // 罐车卸载,累计最大值到总量
|
|
|
-// mTotalWeight = mTotalWeight.add(ironWeight1Max);
|
|
|
-// ironWeight1Max = BigDecimal.ZERO;
|
|
|
-// ironWeight1Current = BigDecimal.ZERO;
|
|
|
+ }else{
|
|
|
+ realtimeData.setValue(0);
|
|
|
}
|
|
|
- } else if (opcData.getPointName().contains(SubscribeTagConstants.TAG_IRON_WEIGHT12(opcData.getServerType()))) {
|
|
|
- // 2号车铁水流量递增值
|
|
|
- BigDecimal bigDecimalNew = new BigDecimal(opcData.getData().toString());
|
|
|
- if (bigDecimalNew.compareTo(BigDecimal.ZERO) >= 0) {
|
|
|
- if (ironLoading1.get() > 0) {
|
|
|
- RealtimeData realtimeData = new RealtimeData();
|
|
|
- realtimeData.setValue(2);
|
|
|
- realtimeData.setDesc("摆动溜嘴的摆动方向");
|
|
|
- realtimeData.setExtra(opcData.getData());
|
|
|
- mRealtimeStatus.put(BDLZ_STATUS, realtimeData);
|
|
|
|
|
|
- if (ironWeight2Pre.subtract(bigDecimalNew).compareTo(new java.math.BigDecimal("130")) > 0) {
|
|
|
- mTotalWeight.updateAndGet(prev -> prev.add(ironWeight2Pre));
|
|
|
- log.info("铁水总流量:{},2号线铁水满载流量:{},下一个流量:{}", mTotalWeight.get(), ironWeight2Pre, bigDecimalNew);
|
|
|
- }
|
|
|
- } else {
|
|
|
- RealtimeData realtimeData = new RealtimeData();
|
|
|
- realtimeData.setValue(0);
|
|
|
- realtimeData.setDesc("摆动溜嘴的摆动方向");
|
|
|
- realtimeData.setExtra(opcData.getData());
|
|
|
- mRealtimeStatus.put(BDLZ_STATUS, realtimeData);
|
|
|
- }
|
|
|
- ironWeight2Pre = bigDecimalNew;
|
|
|
- } else {
|
|
|
-// mTotalWeight = mTotalWeight.add(ironWeight2Max);
|
|
|
-// ironWeight2Max = BigDecimal.ZERO;
|
|
|
-// ironWeight2Current = BigDecimal.ZERO;
|
|
|
- }
|
|
|
- } else if (opcData.getPointName().contains(SubscribeTagConstants.TAG_NSZSW(opcData.getServerType()))) {
|
|
|
- //四高炉南水渣粒化泵供水总管温度
|
|
|
+ realtimeData.setDesc("摆动溜嘴的摆动方向");
|
|
|
+ realtimeData.setExtra(opcData.getData());
|
|
|
+ mRealtimeStatus.put(BDLZ_STATUS, realtimeData);
|
|
|
|
|
|
+ } else if (opcData.getPointName().contains(SubscribeTagConstants.TAG_NSZSW(opcData.getServerType()))) {
|
|
|
+ //四高炉南水渣粒化泵供水总管温度
|
|
|
double temp = Double.parseDouble(opcData.getData().toString());
|
|
|
if (lastChuzTemps.size() >= warnCount) {
|
|
|
lastChuzTemps.removeFirst();
|
|
@@ -1652,7 +1579,9 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
chuzTime = LocalDateUtils.formatDate(opcData.getSourceTime());
|
|
|
}
|
|
|
} else {
|
|
|
- chuzTime = "";
|
|
|
+ if(ironLoading1.get() <= 0){
|
|
|
+ chuzTime = "";
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
RealtimeData realtimeData = new RealtimeData();
|
|
@@ -1684,12 +1613,12 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
}
|
|
|
} else if (opcData.getPointName().contains(SubscribeTagConstants.TAG_KKJ_STATUS(opcData.getServerType()))) {
|
|
|
//开口机状态
|
|
|
- log.debug("开始处理开口机状态数据 - 点位名称: {}", opcData.getPointName());
|
|
|
+ log.info("开始处理开口机状态数据 - 点位名称: {}", opcData.getPointName());
|
|
|
|
|
|
RealtimeData realtimeData = new RealtimeData();
|
|
|
//开口机角度
|
|
|
double kkjjd = Double.parseDouble(opcData.getData().toString());
|
|
|
- log.debug("解析开口机角度 - 原始数据: {}, 解析后角度: {}°", opcData.getData(), kkjjd);
|
|
|
+ log.info("解析开口机角度 - 原始数据: {}, 解析后角度: {}°", opcData.getData(), kkjjd);
|
|
|
|
|
|
boolean isWorking = kkjjd >= StandardConstans.STANDARD_OPEN_MACHINE_LOCATION;
|
|
|
realtimeData.setValue(isWorking ? 1 : 0);
|
|
@@ -1711,23 +1640,21 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
Date openMachineEndTime = opcData.getServerTime();
|
|
|
// 计算两个日期的时间差(毫秒)
|
|
|
long timeDiff = openMachineEndTime.getTime() - openMachineStartTime.getTime();
|
|
|
- log.debug("开口机工作结束 - 开始时间:{}, 结束时间:{}, 时间差:{}ms",
|
|
|
+ log.info("开口机工作结束 - 开始时间:{}, 结束时间:{}, 时间差:{}ms",
|
|
|
openMachineStartTime, openMachineEndTime, timeDiff);
|
|
|
|
|
|
if (timeDiff >= 0) {
|
|
|
// 将时间差转换为分钟
|
|
|
long minutesDiff = timeDiff / (60 * 1000);
|
|
|
- log.debug("开口机工作时长计算 - 总时长:{}分钟, 标准时长:{}分钟",
|
|
|
+ log.info("开口机工作时长计算 - 总时长:{}分钟, 标准时长:{}分钟",
|
|
|
minutesDiff, StandardConstans.STANDARD_OPEN_HOUR);
|
|
|
|
|
|
if (minutesDiff > StandardConstans.STANDARD_OPEN_HOUR) {
|
|
|
log.warn("开口机超时告警触发 - 实际耗时:{}分钟 > 标准:{}分钟",
|
|
|
minutesDiff, StandardConstans.STANDARD_OPEN_HOUR);
|
|
|
-
|
|
|
String warnMsg = String.format("开口耗时:%s分钟", minutesDiff);
|
|
|
- WarnData.warnOpen(warnMsg, openAlarmUrl);
|
|
|
+ WarnData.warnOpen(warnMsg, audioMap.get(ExceptionTypeEnum.KAI_KOU_CHAO_SHI.getCode()));
|
|
|
log.warn("已发送开口机超时预警: {}", warnMsg);
|
|
|
-
|
|
|
saveException(ExceptionTypeEnum.KAI_KOU_CHAO_SHI, warnMsg);
|
|
|
log.warn("已记录开口机超时异常: {}", warnMsg);
|
|
|
} else {
|
|
@@ -1739,7 +1666,7 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
openMachineStartTime, openMachineEndTime);
|
|
|
}
|
|
|
}
|
|
|
- log.debug("重置开口机开始时间 - 原开始时间:{}", openMachineStartTime);
|
|
|
+ log.info("重置开口机开始时间 - 原开始时间:{}", openMachineStartTime);
|
|
|
openMachineStartTime = null;
|
|
|
}
|
|
|
} else if (opcData.getPointName().contains(SubscribeTagConstants.TAG_NPXZYY(opcData.getServerType()))) {
|
|
@@ -1751,6 +1678,7 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
realtimeData.setDesc("泥炮堵口状态");
|
|
|
realtimeData.setExtra(opcData.getData());
|
|
|
mRealtimeStatus.put(NPDK_STATUS, realtimeData);
|
|
|
+ //mContext.setVariable(NPDK_STATUS, realtimeData);
|
|
|
log.info("泥炮堵口状态更新 - 压力值:{}, 标准阈值:{}, 堵口状态:{}, 时间:{}",
|
|
|
pressureValue, StandardConstans.STANDARD_MUD_MACHINE_PRESSURE,
|
|
|
isBlocked ? "已堵口" : "未堵口", opcData.getServerTime());
|
|
@@ -1857,7 +1785,7 @@ public class DeviceEventListener extends AbstractEventListener { //
|
|
|
log.info("状态同步完成,lastIronLoading1已更新为: {}", lastIronLoading1.get());
|
|
|
return;
|
|
|
}
|
|
|
- log.info("常规状态同步,lastIronLoading1从 {} 更新为 {}", lastIronLoading1.get(), ironLoading1.get());
|
|
|
+ //log.info("常规状态同步,lastIronLoading1从 {} 更新为 {}", lastIronLoading1.get(), ironLoading1.get());
|
|
|
//lastIronLoading1.set(ironLoading1.get());
|
|
|
}
|
|
|
|