src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java
@@ -74,6 +74,8 @@ private boolean registerKeepIntDialog = false; private int gbDeviceOnline = 0; public Boolean getSavePositionHistory() { return savePositionHistory; } @@ -325,4 +327,12 @@ public void setDocEnable(Boolean docEnable) { this.docEnable = docEnable; } public int getGbDeviceOnline() { return gbDeviceOnline; } public void setGbDeviceOnline(int gbDeviceOnline) { this.gbDeviceOnline = gbDeviceOnline; } } src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java
@@ -62,7 +62,10 @@ } SIPRequest request = (SIPRequest) evt.getRequest(); logger.info("[收到心跳] device: {}, callId: {}", device.getDeviceId(), request.getCallIdHeader().getCallId()); if (userSetting.getGbDeviceOnline() == 0 && !device.isOnLine()) { logger.warn("[收到心跳] 设备离线,心跳不进行回复, device: {}, callId: {}", device.getDeviceId(), request.getCallIdHeader().getCallId()); return; } // 回复200 OK try { responseAck(request, Response.OK); @@ -101,9 +104,10 @@ if (device.isOnLine()) { deviceService.updateDevice(device); }else { // 对于已经离线的设备判断他的注册是否已经过期 if (!deviceService.expire(device)){ device.setOnLine(false); if (userSetting.getGbDeviceOnline() == 1) { // 对于已经离线的设备判断他的注册是否已经过期 device.setOnLine(true); device.setRegisterTime(DateUtil.getNow()); deviceService.online(device, null); } } src/main/resources/all-application.yml
@@ -247,6 +247,10 @@ allowed-origins: - http://localhost:8008 - http://192.168.1.3:8008 # 国标设备离线后的上线策略, # 0: 国标标准实现,设备离线后不回复心跳,知道设备重新注册上线, # 1: 对于离线设备,收到心跳就把设备设置为上线,并更新注册时间为上次这次心跳的时间。防止过期时间判断u异常 gb-device-online: 0 # 关闭在线文档(生产环境建议关闭) springdoc: