feat(iot): 信号丢失提醒 & 工单完成检测排除P0
This commit is contained in:
@@ -172,6 +172,15 @@ public class BeaconDetectionRuleProcessor {
|
|||||||
log.info("[BeaconDetection] 离开确认:deviceId={}, areaId={}, window={}",
|
log.info("[BeaconDetection] 离开确认:deviceId={}, areaId={}, window={}",
|
||||||
deviceId, areaId, window);
|
deviceId, areaId, window);
|
||||||
|
|
||||||
|
// P0 插队校验:检查当前工单是否属于正在检查的区域
|
||||||
|
if (isSwitchingOrder(deviceId, areaId)) {
|
||||||
|
log.debug("[BeaconDetection][P0Interrupt] 检测到工单切换,跳过区域 {} 的离岗处理",
|
||||||
|
areaId);
|
||||||
|
// 清理该区域的离岗记录(避免内存泄漏)
|
||||||
|
signalLossRedisDAO.clearLossRecord(deviceId, areaId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
BeaconPresenceConfig.ExitConfig exitConfig = beaconConfig.getExit();
|
BeaconPresenceConfig.ExitConfig exitConfig = beaconConfig.getExit();
|
||||||
|
|
||||||
// 1. 检查是否是首次丢失
|
// 1. 检查是否是首次丢失
|
||||||
@@ -279,4 +288,19 @@ public class BeaconDetectionRuleProcessor {
|
|||||||
|
|
||||||
return RssiSlidingWindowDetector.AreaState.OUT_AREA;
|
return RssiSlidingWindowDetector.AreaState.OUT_AREA;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查是否正在切换工单(P0 插队场景)
|
||||||
|
* <p>
|
||||||
|
* 如果当前工单的区域ID与正在检查的区域不一致,说明保洁员已切换到其他区域的工单
|
||||||
|
*
|
||||||
|
* @param deviceId 设备ID
|
||||||
|
* @param areaId 正在检查的区域ID
|
||||||
|
* @return true-工单切换场景,false-正常离岗场景
|
||||||
|
*/
|
||||||
|
private boolean isSwitchingOrder(Long deviceId, Long areaId) {
|
||||||
|
DeviceCurrentOrderRedisDAO.OrderCacheInfo currentOrder =
|
||||||
|
deviceCurrentOrderRedisDAO.getCurrentOrder(deviceId);
|
||||||
|
return currentOrder != null && !currentOrder.getAreaId().equals(areaId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,6 +112,15 @@ public class SignalLossRuleProcessor {
|
|||||||
* 检查单个设备的离岗超时
|
* 检查单个设备的离岗超时
|
||||||
*/
|
*/
|
||||||
private void checkTimeoutForDevice(Long deviceId, Long areaId) {
|
private void checkTimeoutForDevice(Long deviceId, Long areaId) {
|
||||||
|
// P0 插队校验:检查当前工单是否属于正在检查的区域
|
||||||
|
if (isSwitchingOrder(deviceId, areaId)) {
|
||||||
|
log.debug("[SignalLoss][P0Interrupt] 检测到工单切换,跳过区域 {} 的超时检查",
|
||||||
|
areaId);
|
||||||
|
// 清理该区域的离岗记录(避免内存泄漏)
|
||||||
|
signalLossRedisDAO.clearLossRecord(deviceId, areaId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 1. 获取配置
|
// 1. 获取配置
|
||||||
CleanOrderIntegrationConfigService.AreaDeviceConfigWrapper configWrapper =
|
CleanOrderIntegrationConfigService.AreaDeviceConfigWrapper configWrapper =
|
||||||
configService.getConfigWrapperByDeviceId(deviceId);
|
configService.getConfigWrapperByDeviceId(deviceId);
|
||||||
@@ -306,4 +315,19 @@ public class SignalLossRuleProcessor {
|
|||||||
|
|
||||||
publishAuditEvent("TTS_REQUEST", deviceId, null, null, text, data);
|
publishAuditEvent("TTS_REQUEST", deviceId, null, null, text, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 检查是否正在切换工单(P0 插队场景)
|
||||||
|
* <p>
|
||||||
|
* 如果当前工单的区域ID与正在检查的区域不一致,说明保洁员已切换到其他区域的工单
|
||||||
|
*
|
||||||
|
* @param deviceId 设备ID
|
||||||
|
* @param areaId 正在检查的区域ID
|
||||||
|
* @return true-工单切换场景,false-正常离岗场景
|
||||||
|
*/
|
||||||
|
private boolean isSwitchingOrder(Long deviceId, Long areaId) {
|
||||||
|
DeviceCurrentOrderRedisDAO.OrderCacheInfo currentOrder =
|
||||||
|
deviceCurrentOrderRedisDAO.getCurrentOrder(deviceId);
|
||||||
|
return currentOrder != null && !currentOrder.getAreaId().equals(areaId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user