feat(iot): 信号丢失提醒 & 工单完成检测排除P0
This commit is contained in:
@@ -172,6 +172,15 @@ public class BeaconDetectionRuleProcessor {
|
||||
log.info("[BeaconDetection] 离开确认: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();
|
||||
|
||||
// 1. 检查是否是首次丢失
|
||||
@@ -279,4 +288,19 @@ public class BeaconDetectionRuleProcessor {
|
||||
|
||||
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) {
|
||||
// P0 插队校验:检查当前工单是否属于正在检查的区域
|
||||
if (isSwitchingOrder(deviceId, areaId)) {
|
||||
log.debug("[SignalLoss][P0Interrupt] 检测到工单切换,跳过区域 {} 的超时检查",
|
||||
areaId);
|
||||
// 清理该区域的离岗记录(避免内存泄漏)
|
||||
signalLossRedisDAO.clearLossRecord(deviceId, areaId);
|
||||
return;
|
||||
}
|
||||
|
||||
// 1. 获取配置
|
||||
CleanOrderIntegrationConfigService.AreaDeviceConfigWrapper configWrapper =
|
||||
configService.getConfigWrapperByDeviceId(deviceId);
|
||||
@@ -306,4 +315,19 @@ public class SignalLossRuleProcessor {
|
||||
|
||||
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