From e78c402a248ff252ee93e724396c62d806087fab Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期日, 03 七月 2022 10:32:33 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/wvp-28181-2.0' into commercial --- src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java | 185 +++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 181 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java index ec30cd4..9d376fb 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java @@ -1,9 +1,7 @@ package com.genersoft.iot.vmp.service.impl; import com.genersoft.iot.vmp.conf.DynamicTask; -import com.genersoft.iot.vmp.gb28181.bean.Device; -import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; -import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction; +import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander; @@ -12,20 +10,23 @@ import com.genersoft.iot.vmp.service.IDeviceService; import com.genersoft.iot.vmp.gb28181.task.impl.CatalogSubscribeTask; import com.genersoft.iot.vmp.gb28181.task.impl.MobilePositionSubscribeTask; -import com.genersoft.iot.vmp.gb28181.bean.SyncStatus; import com.genersoft.iot.vmp.service.IMediaServerService; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; import com.genersoft.iot.vmp.storager.dao.DeviceMapper; import com.genersoft.iot.vmp.utils.DateUtil; +import com.genersoft.iot.vmp.vmanager.bean.BaseTree; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.support.incrementer.AbstractIdentityColumnMaxValueIncrementer; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.time.Instant; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; @@ -341,4 +342,180 @@ } storage.updateChannels(device.getDeviceId(), deviceChannels); } + + + @Override + public List<BaseTree<DeviceChannel>> queryVideoDeviceTree(String deviceId, String parentId, boolean onlyCatalog) { + Device device = deviceMapper.getDeviceByDeviceId(deviceId); + if (device == null) { + return null; + } + if (parentId == null || parentId.equals(deviceId)) { + // 瀛楁牴鑺傜偣寮�濮嬫煡璇� + List<DeviceChannel> rootNodes = getRootNodes(deviceId, "CivilCode".equals(device.getTreeType()), true, !onlyCatalog); + return transportChannelsToTree(rootNodes, ""); + } + + if ("CivilCode".equals(device.getTreeType())) { + if (parentId.length()%2 != 0) { + return null; + } + // 浣跨敤琛屾斂鍖哄垝灞曠ず鏍� + if (parentId.length() > 10) { + // TODO 鍙兘鏄鏀垮尯鍒掍笌涓氬姟鍒嗙粍娣锋潅鐨勬儏褰� + return null; + } + + if (parentId.length() == 10 ) { + if (onlyCatalog) { + return null; + } + // parentId涓鸿涓氱紪鐮侊紝 鍏朵笅涓嶄細鍐嶆湁琛屾斂鍖哄垝 + List<DeviceChannel> channels = deviceChannelMapper.getChannelsByCivilCode(deviceId, parentId); + List<BaseTree<DeviceChannel>> trees = transportChannelsToTree(channels, parentId); + return trees; + } + // 鏌ヨ鍏朵笅鐨勮鏀垮尯鍒掑拰鎽勫儚鏈� + List<DeviceChannel> channelsForCivilCode = deviceChannelMapper.getChannelsWithCivilCodeAndLength(deviceId, parentId, parentId.length() + 2); + if (!onlyCatalog) { + List<DeviceChannel> channels = deviceChannelMapper.getChannelsByCivilCode(deviceId, parentId); + channelsForCivilCode.addAll(channels); + } + List<BaseTree<DeviceChannel>> trees = transportChannelsToTree(channelsForCivilCode, parentId); + return trees; + + } + // 浣跨敤涓氬姟鍒嗙粍灞曠ず鏍� + if ("BusinessGroup".equals(device.getTreeType())) { + if (parentId.length() < 14 ) { + return null; + } + List<DeviceChannel> deviceChannels = deviceChannelMapper.queryChannels(deviceId, parentId, null, null, null); + List<BaseTree<DeviceChannel>> trees = transportChannelsToTree(deviceChannels, parentId); + return trees; + } + + return null; + } + + @Override + public List<DeviceChannel> queryVideoDeviceInTreeNode(String deviceId, String parentId) { + Device device = deviceMapper.getDeviceByDeviceId(deviceId); + if (device == null) { + return null; + } + if (parentId == null || parentId.equals(deviceId)) { + // 瀛楁牴鑺傜偣寮�濮嬫煡璇� + List<DeviceChannel> rootNodes = getRootNodes(deviceId, "CivilCode".equals(device.getTreeType()), false, true); + return rootNodes; + } + + if ("CivilCode".equals(device.getTreeType())) { + if (parentId.length()%2 != 0) { + return null; + } + // 浣跨敤琛屾斂鍖哄垝灞曠ず鏍� + if (parentId.length() > 10) { + // TODO 鍙兘鏄鏀垮尯鍒掍笌涓氬姟鍒嗙粍娣锋潅鐨勬儏褰� + return null; + } + + if (parentId.length() == 10 ) { + // parentId涓鸿涓氱紪鐮侊紝 鍏朵笅涓嶄細鍐嶆湁琛屾斂鍖哄垝 + List<DeviceChannel> channels = deviceChannelMapper.getChannelsByCivilCode(deviceId, parentId); + return channels; + } + // 鏌ヨ鍏朵笅鐨勮鏀垮尯鍒掑拰鎽勫儚鏈� + List<DeviceChannel> channels = deviceChannelMapper.getChannelsByCivilCode(deviceId, parentId); + return channels; + + } + // 浣跨敤涓氬姟鍒嗙粍灞曠ず鏍� + if ("BusinessGroup".equals(device.getTreeType())) { + if (parentId.length() < 14 ) { + return null; + } + List<DeviceChannel> deviceChannels = deviceChannelMapper.queryChannels(deviceId, parentId, null, null, null); + return deviceChannels; + } + + return null; + } + + private List<BaseTree<DeviceChannel>> transportChannelsToTree(List<DeviceChannel> channels, String parentId) { + if (channels == null) { + return null; + } + List<BaseTree<DeviceChannel>> treeNotes = new ArrayList<>(); + if (channels.size() == 0) { + return treeNotes; + } + for (DeviceChannel channel : channels) { + + BaseTree<DeviceChannel> node = new BaseTree<>(); + node.setId(channel.getChannelId()); + node.setDeviceId(channel.getDeviceId()); + node.setName(channel.getName()); + node.setPid(parentId); + node.setBasicData(channel); + node.setParent(false); + if (channel.getChannelId().length() > 8) { + String gbCodeType = channel.getChannelId().substring(10, 13); + node.setParent(gbCodeType.equals(ChannelIdType.BUSINESS_GROUP) || gbCodeType.equals(ChannelIdType.VIRTUAL_ORGANIZATION) ); + }else { + node.setParent(true); + } + treeNotes.add(node); + } + Collections.sort(treeNotes); + return treeNotes; + } + + private List<DeviceChannel> getRootNodes(String deviceId, boolean isCivilCode, boolean haveCatalog, boolean haveChannel) { + if (!haveCatalog && !haveChannel) { + return null; + } + List<DeviceChannel> result = new ArrayList<>(); + if (isCivilCode) { + // 浣跨敤琛屾斂鍖哄垝 + Integer length= deviceChannelMapper.getChannelMinLength(deviceId); + if (length == null) { + return null; + } + if (length <= 10) { + if (haveCatalog) { + List<DeviceChannel> provinceNode = deviceChannelMapper.getChannelsWithCivilCodeAndLength(deviceId, null, length); + if (provinceNode != null && provinceNode.size() > 0) { + result.addAll(provinceNode); + } + } + + if (haveChannel) { + // 鏌ヨ閭d簺civilCode涓嶅湪閫氶亾涓殑涓嶈鑼冮�氶亾锛屾斁缃湪鏍圭洰褰� + List<DeviceChannel> nonstandardNode = deviceChannelMapper.getChannelWithoutCiviCode(deviceId); + if (nonstandardNode != null && nonstandardNode.size() > 0) { + result.addAll(nonstandardNode); + } + } + }else { + if (haveChannel) { + List<DeviceChannel> deviceChannels = deviceChannelMapper.queryChannels(deviceId, null, null, null, null); + if (deviceChannels != null && deviceChannels.size() > 0) { + result.addAll(deviceChannels); + } + } + } + + }else { + // 浣跨敤涓氬姟鍒嗙粍+铏氭嫙缁勭粐 + + // 鍙幏鍙栦笟鍔″垎缁� + List<DeviceChannel> deviceChannels = deviceChannelMapper.getBusinessGroups(deviceId, ChannelIdType.BUSINESS_GROUP); + if (deviceChannels != null && deviceChannels.size() > 0) { + result.addAll(deviceChannels); + } + } + return result; + } + } -- Gitblit v1.8.0