From d524905edb3afd6f754871ff364a5192c8fca232 Mon Sep 17 00:00:00 2001 From: lin <648540858@qq.com> Date: Mon, 19 May 2025 15:52:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AE=BE=E5=A4=87=E5=92=8C?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E5=9C=A8=E7=BA=BF=E7=8A=B6=E6=80=81=E4=B8=8D?= =?UTF-8?q?=E5=90=8C=E7=9A=84=E5=90=8C=E6=AD=A5=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iot/vmp/gb28181/bean/ChannelIdType.java | 23 ------------------- .../vmp/gb28181/dao/DeviceChannelMapper.java | 4 ++++ .../service/impl/DeviceServiceImpl.java | 22 ++++++++++++++---- .../cmd/CatalogResponseMessageHandler.java | 1 + 4 files changed, 22 insertions(+), 28 deletions(-) delete mode 100644 src/main/java/com/genersoft/iot/vmp/gb28181/bean/ChannelIdType.java diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ChannelIdType.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ChannelIdType.java deleted file mode 100644 index 320bbdd03..000000000 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ChannelIdType.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.genersoft.iot.vmp.gb28181.bean; - -/** - * 国标类型编码,国标编码中11-13位为类型编码 - * 详见 附 录 D 编码规则 A - * @author lin - */ -public class ChannelIdType { - /** - * 中心信令控制服务器编码 - */ - public final static String CENTRAL_SIGNALING_CONTROL_SERVER = "200"; - - /** - * 业务分组编码 - */ - public final static String BUSINESS_GROUP = "215"; - - /** - * 虚拟组织编码 - */ - public final static String VIRTUAL_ORGANIZATION = "216"; -} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceChannelMapper.java index f700dad8f..8c02a1084 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceChannelMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceChannelMapper.java @@ -666,4 +666,8 @@ public interface DeviceChannelMapper { " where data_type = 1 and data_device_id=#{dataDeviceId} and device_id = #{channelId}" + " "}) DeviceChannel getOneBySourceChannelId(@Param("dataDeviceId") int dataDeviceId, @Param("channelId") String channelId); + + @Update(value = {"UPDATE wvp_device_channel SET status = 'OFF' WHERE data_type = 1 and data_device_id=#{deviceId}"}) + void offlineByDeviceId(@Param("deviceId") int deviceId); + } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java index d3af2af72..bb07687ba 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java @@ -161,7 +161,10 @@ public class DeviceServiceImpl implements IDeviceService { log.error("[命令发送失败] 查询设备信息: {}", e.getMessage()); } sync(device); - // TODO 如果设备下的通道级联到了其他平台,那么需要发送事件或者notify给上级平台 + }else { + if (!isPlatform(device.getDeviceId())) { + sync(device); + } } // 上线添加订阅 if (device.getSubscribeCycleForCatalog() > 0) { @@ -224,9 +227,11 @@ public class DeviceServiceImpl implements IDeviceService { device.setOnLine(false); redisCatchStorage.updateDevice(device); deviceMapper.update(device); - if (device.getDeviceType() ) - //进行通道离线 -// deviceChannelMapper.offlineByDeviceId(deviceId); + if (!isPlatform(deviceId)) { + // 进行通道离线 + deviceChannelMapper.offlineByDeviceId(device.getId()); + } + // 离线释放所有ssrc List ssrcTransactions = sessionManager.getSsrcTransactionByDeviceId(deviceId); if (ssrcTransactions != null && !ssrcTransactions.isEmpty()) { @@ -256,7 +261,14 @@ public class DeviceServiceImpl implements IDeviceService { } } - private boolean is + private boolean isPlatform(String deviceId) { + GbCode decode = GbCode.decode(deviceId); + if (decode == null) { + return true; + } + int code = Integer.parseInt(decode.getTypeCode()); + return code <= 199; + } @Override public boolean addCatalogSubscribe(Device device) { diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java index 1f6961fb1..8c645a437 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java @@ -131,6 +131,7 @@ public class CatalogResponseMessageHandler extends SIPRequestProcessorParent imp Element itemDevice = deviceListIterator.next(); Element channelDeviceElement = itemDevice.element("DeviceID"); if (channelDeviceElement == null) { + // 总数减一, 避免最后总数不对 无法确定问题 continue; } // 从xml解析内容到 DeviceChannel 对象