From f5fcc79a2c7e6379a73b14ba4e366ad1654e9475 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期日, 03 七月 2022 07:40:54 +0800 Subject: [PATCH] 优化国标树型展示 --- src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java | 13 web_src/src/components/service/DeviceService.js | 43 + web_src/src/components/common/DeviceTree.vue | 141 ++- src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java | 96 +++ src/main/java/com/genersoft/iot/vmp/gb28181/bean/ChannelIdType.java | 23 src/main/java/com/genersoft/iot/vmp/vmanager/bean/BaseTree.java | 87 ++ src/main/resources/logback-spring-local.xml | 5 web_src/package-lock.json | 78 ++ web_src/src/components/common/DeviceTreeForZtree.vue | 112 +++ src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java | 3 web_src/src/components/dialog/deviceEdit.vue | 6 src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java | 13 sql/mysql.sql | 527 ++++++++-------- web_src/src/components/DeviceList.vue | 6 src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java | 185 +++++ src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java | 35 src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 3 web_src/src/components/live.vue | 20 web_src/static/css/iconfont.css | 28 web_src/package.json | 4 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java | 1 web_src/src/components/map.vue | 72 +- src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java | 19 web_src/static/css/iconfont.woff2 | 0 web_src/src/components/channelList.vue | 301 +++++--- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java | 5 web_src/src/router/index.js | 2 sql/update.sql | 5 src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java | 45 + 29 files changed, 1,341 insertions(+), 537 deletions(-) diff --git a/sql/mysql.sql b/sql/mysql.sql index e23f055..f28e398 100644 --- a/sql/mysql.sql +++ b/sql/mysql.sql @@ -1,13 +1,13 @@ --- MariaDB dump 10.19 Distrib 10.7.3-MariaDB, for Linux (x86_64) +-- MySQL dump 10.13 Distrib 8.0.29, for Linux (x86_64) -- -- Host: 127.0.0.1 Database: wvp3 -- ------------------------------------------------------ --- Server version 8.0.0-dmr +-- Server version 8.0.29-0ubuntu0.22.04.2 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8mb4 */; +/*!50503 SET NAMES utf8mb4 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; @@ -21,34 +21,36 @@ DROP TABLE IF EXISTS `device`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `device` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `deviceId` varchar(50) NOT NULL, - `name` varchar(255) DEFAULT NULL, - `manufacturer` varchar(255) DEFAULT NULL, - `model` varchar(255) DEFAULT NULL, - `firmware` varchar(255) DEFAULT NULL, - `transport` varchar(50) DEFAULT NULL, - `streamMode` varchar(50) DEFAULT NULL, - `online` varchar(50) DEFAULT NULL, - `registerTime` varchar(50) DEFAULT NULL, - `keepaliveTime` varchar(50) DEFAULT NULL, - `ip` varchar(50) NOT NULL, - `createTime` varchar(50) NOT NULL, - `updateTime` varchar(50) NOT NULL, - `port` int(11) NOT NULL, - `expires` int(11) NOT NULL, - `subscribeCycleForCatalog` int(11) NOT NULL, - `subscribeCycleForMobilePosition` int(11) NOT NULL, - `mobilePositionSubmissionInterval` int(11) NOT NULL DEFAULT '5', - `subscribeCycleForAlarm` int(11) NOT NULL, - `hostAddress` varchar(50) NOT NULL, - `charset` varchar(50) NOT NULL, - `ssrcCheck` int(11) DEFAULT '0', - PRIMARY KEY (`id`), - UNIQUE KEY `device_deviceId_uindex` (`deviceId`) -) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=utf8mb4; + `id` int NOT NULL AUTO_INCREMENT, + `deviceId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `manufacturer` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `model` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `firmware` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `transport` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `streamMode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `online` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `registerTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `keepaliveTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `port` int NOT NULL, + `expires` int NOT NULL, + `subscribeCycleForCatalog` int NOT NULL, + `hostAddress` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `charset` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `subscribeCycleForMobilePosition` int DEFAULT NULL, + `mobilePositionSubmissionInterval` int DEFAULT '5', + `subscribeCycleForAlarm` int DEFAULT NULL, + `ssrcCheck` int DEFAULT '0', + `geoCoordSys` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `treeType` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `device_deviceId_uindex` (`deviceId`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -66,20 +68,20 @@ DROP TABLE IF EXISTS `device_alarm`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `device_alarm` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `deviceId` varchar(50) NOT NULL, - `channelId` varchar(50) NOT NULL, - `alarmPriority` varchar(50) NOT NULL, - `alarmMethod` varchar(50) DEFAULT NULL, - `alarmTime` varchar(50) NOT NULL, - `alarmDescription` varchar(255) DEFAULT NULL, - `longitude` double DEFAULT NULL, - `latitude` double DEFAULT NULL, - `alarmType` varchar(50) DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + `id` int NOT NULL AUTO_INCREMENT, + `deviceId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `channelId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `alarmPriority` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `alarmMethod` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `alarmTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `alarmDescription` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `longitude` double DEFAULT NULL, + `latitude` double DEFAULT NULL, + `alarmType` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -97,43 +99,48 @@ DROP TABLE IF EXISTS `device_channel`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `device_channel` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `channelId` varchar(50) NOT NULL, - `name` varchar(255) DEFAULT NULL, - `manufacture` varchar(50) DEFAULT NULL, - `model` varchar(50) DEFAULT NULL, - `owner` varchar(50) DEFAULT NULL, - `civilCode` varchar(50) DEFAULT NULL, - `block` varchar(50) DEFAULT NULL, - `address` varchar(50) DEFAULT NULL, - `parentId` varchar(50) DEFAULT NULL, - `safetyWay` int(11) DEFAULT NULL, - `registerWay` int(11) DEFAULT NULL, - `certNum` varchar(50) DEFAULT NULL, - `certifiable` int(11) DEFAULT NULL, - `errCode` int(11) DEFAULT NULL, - `endTime` varchar(50) DEFAULT NULL, - `secrecy` varchar(50) DEFAULT NULL, - `ipAddress` varchar(50) DEFAULT NULL, - `port` int(11) DEFAULT NULL, - `password` varchar(255) DEFAULT NULL, - `PTZType` int(11) DEFAULT NULL, - `status` int(11) DEFAULT NULL, - `longitude` double DEFAULT NULL, - `latitude` double DEFAULT NULL, - `streamId` varchar(50) DEFAULT NULL, - `deviceId` varchar(50) NOT NULL, - `parental` varchar(50) DEFAULT NULL, - `hasAudio` bit(1) DEFAULT NULL, - `createTime` varchar(50) NOT NULL, - `updateTime` varchar(50) NOT NULL, - `subCount` int(11) DEFAULT '0', - PRIMARY KEY (`id`), - UNIQUE KEY `device_channel_id_uindex` (`id`), - UNIQUE KEY `device_channel_pk` (`channelId`,`deviceId`) -) ENGINE=InnoDB AUTO_INCREMENT=81657 DEFAULT CHARSET=utf8mb4; + `id` int NOT NULL AUTO_INCREMENT, + `channelId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `manufacture` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `model` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `owner` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `civilCode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `block` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `parentId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `safetyWay` int DEFAULT NULL, + `registerWay` int DEFAULT NULL, + `certNum` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `certifiable` int DEFAULT NULL, + `errCode` int DEFAULT NULL, + `endTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `secrecy` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `ipAddress` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `port` int DEFAULT NULL, + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `PTZType` int DEFAULT NULL, + `status` int DEFAULT NULL, + `longitude` double DEFAULT NULL, + `latitude` double DEFAULT NULL, + `streamId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `deviceId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `parental` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `hasAudio` bit(1) DEFAULT NULL, + `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `subCount` int DEFAULT '0', + `longitudeGcj02` double DEFAULT NULL, + `latitudeGcj02` double DEFAULT NULL, + `longitudeWgs84` double DEFAULT NULL, + `latitudeWgs84` double DEFAULT NULL, + `businessGroupId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `device_channel_id_uindex` (`id`) USING BTREE, + UNIQUE KEY `device_channel_pk` (`channelId`,`deviceId`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=19314 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -151,24 +158,24 @@ DROP TABLE IF EXISTS `device_mobile_position`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `device_mobile_position` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `deviceId` varchar(50) NOT NULL, - `channelId` varchar(50) NOT NULL, - `deviceName` varchar(255) DEFAULT NULL, - `time` varchar(50) NOT NULL, - `longitude` double NOT NULL, - `latitude` double NOT NULL, - `altitude` double DEFAULT NULL, - `speed` double DEFAULT NULL, - `direction` double DEFAULT NULL, - `reportSource` varchar(50) DEFAULT NULL, - `geodeticSystem` varchar(50) DEFAULT NULL, - `cnLng` varchar(50) DEFAULT NULL, - `cnLat` varchar(50) DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=6108 DEFAULT CHARSET=utf8mb4; + `id` int NOT NULL AUTO_INCREMENT, + `deviceId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `channelId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `deviceName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `time` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `longitude` double NOT NULL, + `latitude` double NOT NULL, + `altitude` double DEFAULT NULL, + `speed` double DEFAULT NULL, + `direction` double DEFAULT NULL, + `reportSource` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `geodeticSystem` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `cnLng` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `cnLat` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -186,23 +193,23 @@ DROP TABLE IF EXISTS `gb_stream`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `gb_stream` ( - `gbStreamId` int(11) NOT NULL AUTO_INCREMENT, - `app` varchar(255) NOT NULL, - `stream` varchar(255) NOT NULL, - `gbId` varchar(50) NOT NULL, - `name` varchar(255) DEFAULT NULL, - `longitude` double DEFAULT NULL, - `latitude` double DEFAULT NULL, - `streamType` varchar(50) DEFAULT NULL, - `mediaServerId` varchar(50) DEFAULT NULL, - `status` int(11) DEFAULT NULL, - `createStamp` bigint(20) DEFAULT NULL, - PRIMARY KEY (`gbStreamId`) USING BTREE, - UNIQUE KEY `app` (`app`,`stream`) USING BTREE, - UNIQUE KEY `gbId` (`gbId`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=300769 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + `gbStreamId` int NOT NULL AUTO_INCREMENT, + `app` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `stream` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `gbId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `longitude` double DEFAULT NULL, + `latitude` double DEFAULT NULL, + `streamType` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `mediaServerId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `status` int DEFAULT NULL, + `createStamp` bigint DEFAULT NULL, + PRIMARY KEY (`gbStreamId`) USING BTREE, + UNIQUE KEY `app` (`app`,`stream`) USING BTREE, + UNIQUE KEY `gbId` (`gbId`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=301679 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -220,19 +227,19 @@ DROP TABLE IF EXISTS `log`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `log` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` varchar(50) NOT NULL, - `type` varchar(50) NOT NULL, - `uri` varchar(200) NOT NULL, - `address` varchar(50) NOT NULL, - `result` varchar(50) NOT NULL, - `timing` bigint(20) NOT NULL, - `username` varchar(50) NOT NULL, - `createTime` varchar(50) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=1552 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `uri` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `address` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `result` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `timing` bigint NOT NULL, + `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=21611 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -250,34 +257,34 @@ DROP TABLE IF EXISTS `media_server`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `media_server` ( - `id` varchar(255) NOT NULL, - `ip` varchar(50) NOT NULL, - `hookIp` varchar(50) NOT NULL, - `sdpIp` varchar(50) NOT NULL, - `streamIp` varchar(50) NOT NULL, - `httpPort` int(11) NOT NULL, - `httpSSlPort` int(11) NOT NULL, - `rtmpPort` int(11) NOT NULL, - `rtmpSSlPort` int(11) NOT NULL, - `rtpProxyPort` int(11) NOT NULL, - `rtspPort` int(11) NOT NULL, - `rtspSSLPort` int(11) NOT NULL, - `autoConfig` int(11) NOT NULL, - `secret` varchar(50) NOT NULL, - `streamNoneReaderDelayMS` int(11) NOT NULL, - `rtpEnable` int(11) NOT NULL, - `rtpPortRange` varchar(50) NOT NULL, - `sendRtpPortRange` varchar(50) NOT NULL, - `recordAssistPort` int(11) NOT NULL, - `defaultServer` int(11) NOT NULL, - `createTime` varchar(50) NOT NULL, - `updateTime` varchar(50) NOT NULL, - `hookAliveInterval` int(11) NOT NULL, - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `media_server_i` (`ip`,`httpPort`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `hookIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `sdpIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `streamIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `httpPort` int NOT NULL, + `httpSSlPort` int NOT NULL, + `rtmpPort` int NOT NULL, + `rtmpSSlPort` int NOT NULL, + `rtpProxyPort` int NOT NULL, + `rtspPort` int NOT NULL, + `rtspSSLPort` int NOT NULL, + `autoConfig` int NOT NULL, + `secret` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `streamNoneReaderDelayMS` int NOT NULL, + `rtpEnable` int NOT NULL, + `rtpPortRange` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `sendRtpPortRange` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `recordAssistPort` int NOT NULL, + `defaultServer` int NOT NULL, + `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `hookAliveInterval` int NOT NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `media_server_i` (`ip`,`httpPort`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -295,36 +302,36 @@ DROP TABLE IF EXISTS `parent_platform`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `parent_platform` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `enable` int(11) DEFAULT NULL, - `name` varchar(255) DEFAULT NULL, - `serverGBId` varchar(50) NOT NULL, - `serverGBDomain` varchar(50) DEFAULT NULL, - `serverIP` varchar(50) DEFAULT NULL, - `serverPort` int(11) DEFAULT NULL, - `deviceGBId` varchar(50) NOT NULL, - `deviceIp` varchar(50) DEFAULT NULL, - `devicePort` varchar(50) DEFAULT NULL, - `username` varchar(255) DEFAULT NULL, - `password` varchar(50) DEFAULT NULL, - `expires` varchar(50) DEFAULT NULL, - `keepTimeout` varchar(50) DEFAULT NULL, - `transport` varchar(50) DEFAULT NULL, - `characterSet` varchar(50) DEFAULT NULL, - `catalogId` varchar(50) NOT NULL, - `ptz` int(11) DEFAULT NULL, - `rtcp` int(11) DEFAULT NULL, - `status` bit(1) DEFAULT NULL, - `shareAllLiveStream` int(11) DEFAULT NULL, - `startOfflinePush` int(11) DEFAULT '0', - `administrativeDivision` varchar(50) NOT NULL, - `catalogGroup` int(11) DEFAULT '1', - PRIMARY KEY (`id`), - UNIQUE KEY `parent_platform_id_uindex` (`id`), - UNIQUE KEY `parent_platform_pk` (`serverGBId`) -) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + `id` int NOT NULL AUTO_INCREMENT, + `enable` int DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `serverGBId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `serverGBDomain` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `serverIP` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `serverPort` int DEFAULT NULL, + `deviceGBId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `deviceIp` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `devicePort` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `expires` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `keepTimeout` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `transport` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `characterSet` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `catalogId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `ptz` int DEFAULT NULL, + `rtcp` int DEFAULT NULL, + `status` bit(1) DEFAULT NULL, + `shareAllLiveStream` int DEFAULT NULL, + `startOfflinePush` int DEFAULT '0', + `administrativeDivision` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `catalogGroup` int DEFAULT '1', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `parent_platform_id_uindex` (`id`) USING BTREE, + UNIQUE KEY `parent_platform_pk` (`serverGBId`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=31 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -342,14 +349,14 @@ DROP TABLE IF EXISTS `platform_catalog`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `platform_catalog` ( - `id` varchar(50) NOT NULL, - `platformId` varchar(50) NOT NULL, - `name` varchar(255) NOT NULL, - `parentId` varchar(50) DEFAULT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + `id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `platformId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `parentId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -367,14 +374,14 @@ DROP TABLE IF EXISTS `platform_gb_channel`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `platform_gb_channel` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `platformId` varchar(50) NOT NULL, - `catalogId` varchar(50) NOT NULL, - `deviceChannelId` int(11) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=250 DEFAULT CHARSET=utf8mb4; + `id` int NOT NULL AUTO_INCREMENT, + `platformId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `catalogId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `deviceChannelId` int NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=4889 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -392,15 +399,15 @@ DROP TABLE IF EXISTS `platform_gb_stream`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `platform_gb_stream` ( - `platformId` varchar(50) NOT NULL, - `catalogId` varchar(50) NOT NULL, - `gbStreamId` int(11) NOT NULL, - `id` int(11) NOT NULL AUTO_INCREMENT, - PRIMARY KEY (`id`), - UNIQUE KEY `platform_gb_stream_pk` (`platformId`,`catalogId`,`gbStreamId`) -) ENGINE=InnoDB AUTO_INCREMENT=301210 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + `platformId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `catalogId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `gbStreamId` int NOT NULL, + `id` int NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `platform_gb_stream_pk` (`platformId`,`catalogId`,`gbStreamId`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=302077 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -418,29 +425,29 @@ DROP TABLE IF EXISTS `stream_proxy`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `stream_proxy` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `type` varchar(50) NOT NULL, - `app` varchar(255) NOT NULL, - `stream` varchar(255) NOT NULL, - `url` varchar(255) DEFAULT NULL, - `src_url` varchar(255) DEFAULT NULL, - `dst_url` varchar(255) DEFAULT NULL, - `timeout_ms` int(11) DEFAULT NULL, - `ffmpeg_cmd_key` varchar(255) DEFAULT NULL, - `rtp_type` varchar(50) DEFAULT NULL, - `mediaServerId` varchar(50) DEFAULT NULL, - `enable_hls` bit(1) DEFAULT NULL, - `enable_mp4` bit(1) DEFAULT NULL, - `enable` bit(1) NOT NULL, - `status` bit(1) NOT NULL, - `enable_remove_none_reader` bit(1) NOT NULL, - `createTime` varchar(50) NOT NULL, - `name` varchar(255) DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `stream_proxy_pk` (`app`,`stream`) -) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4; + `id` int NOT NULL AUTO_INCREMENT, + `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `app` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `stream` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `src_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `dst_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `timeout_ms` int DEFAULT NULL, + `ffmpeg_cmd_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `rtp_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `mediaServerId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `enable_hls` bit(1) DEFAULT NULL, + `enable_mp4` bit(1) DEFAULT NULL, + `enable` bit(1) NOT NULL, + `status` bit(1) NOT NULL, + `enable_remove_none_reader` bit(1) NOT NULL, + `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `stream_proxy_pk` (`app`,`stream`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -458,21 +465,21 @@ DROP TABLE IF EXISTS `stream_push`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `stream_push` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `app` varchar(255) NOT NULL, - `stream` varchar(255) NOT NULL, - `totalReaderCount` varchar(50) DEFAULT NULL, - `originType` int(11) DEFAULT NULL, - `originTypeStr` varchar(50) DEFAULT NULL, - `createStamp` bigint(20) DEFAULT NULL, - `aliveSecond` int(11) DEFAULT NULL, - `mediaServerId` varchar(50) DEFAULT NULL, - `serverId` varchar(50) not NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `stream_push_pk` (`app`,`stream`) -) ENGINE=InnoDB AUTO_INCREMENT=300838 DEFAULT CHARSET=utf8mb4; + `id` int NOT NULL AUTO_INCREMENT, + `app` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `stream` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `totalReaderCount` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `originType` int DEFAULT NULL, + `originTypeStr` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `createStamp` bigint DEFAULT NULL, + `aliveSecond` int DEFAULT NULL, + `mediaServerId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, + `serverId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `stream_push_pk` (`app`,`stream`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=305291 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -490,17 +497,17 @@ DROP TABLE IF EXISTS `user`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `user` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `username` varchar(255) NOT NULL, - `password` varchar(255) NOT NULL, - `roleId` int(11) NOT NULL, - `createTime` varchar(50) NOT NULL, - `updateTime` varchar(50) NOT NULL, - PRIMARY KEY (`id`) USING BTREE, - UNIQUE KEY `user_username_uindex` (`username`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + `id` int NOT NULL AUTO_INCREMENT, + `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `roleId` int NOT NULL, + `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `user_username_uindex` (`username`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -509,8 +516,7 @@ LOCK TABLES `user` WRITE; /*!40000 ALTER TABLE `user` DISABLE KEYS */; -INSERT INTO `user` VALUES - (1,'admin','21232f297a57a5a743894a0e4a801fc3',1,'2021 - 04 - 13 14:14:57','2021 - 04 - 13 14:14:57'); +INSERT INTO `user` VALUES (1,'admin','21232f297a57a5a743894a0e4a801fc3',1,'2021 - 04 - 13 14:14:57','2021 - 04 - 13 14:14:57'); /*!40000 ALTER TABLE `user` ENABLE KEYS */; UNLOCK TABLES; @@ -520,15 +526,15 @@ DROP TABLE IF EXISTS `user_role`; /*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; +/*!50503 SET character_set_client = utf8mb4 */; CREATE TABLE `user_role` ( - `id` int(11) NOT NULL AUTO_INCREMENT, - `name` varchar(50) NOT NULL, - `authority` varchar(50) NOT NULL, - `createTime` varchar(50) NOT NULL, - `updateTime` varchar(50) NOT NULL, - PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; + `id` int NOT NULL AUTO_INCREMENT, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `authority` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -537,8 +543,7 @@ LOCK TABLES `user_role` WRITE; /*!40000 ALTER TABLE `user_role` DISABLE KEYS */; -INSERT INTO `user_role` VALUES - (1,'admin','0','2021-04-13 14:14:57','2021-04-13 14:14:57'); +INSERT INTO `user_role` VALUES (1,'admin','0','2021-04-13 14:14:57','2021-04-13 14:14:57'); /*!40000 ALTER TABLE `user_role` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -551,4 +556,4 @@ /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2022-04-18 10:50:27 +-- Dump completed on 2022-06-26 17:33:30 diff --git a/sql/update.sql b/sql/update.sql index f78744d..0ab8d29 100644 --- a/sql/update.sql +++ b/sql/update.sql @@ -2,7 +2,10 @@ add serverId varchar(50) not null; alter table device add geoCoordSys varchar(50) not null; +alter table device + add treeType varchar(50) not null; update device set device.geoCoordSys='WGS84'; +update device set device.treeType='CivilCode'; alter table device_channel add longitudeGcj02 double default null; alter table device_channel @@ -11,6 +14,8 @@ add longitudeWgs84 double default null; alter table device_channel add latitudeWgs84 double default null; +alter table device_channel + add businessGroupId varchar(50) default null; 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 new file mode 100644 index 0000000..320bbdd --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ChannelIdType.java @@ -0,0 +1,23 @@ +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/bean/Device.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java index 253520b..880117f 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java @@ -138,6 +138,11 @@ */ private String geoCoordSys; + /** + * 鏍戠被鍨� 鍥芥爣瑙勫畾浜嗕袱绉嶆爲鐨勫睍鐜版柟寮� 琛屾斂鍖哄垝锛欳ivilCode 鍜屼笟鍔″垎缁�:BusinessGroup + */ + private String treeType; + public String getDeviceId() { return deviceId; @@ -338,4 +343,12 @@ public void setGeoCoordSys(String geoCoordSys) { this.geoCoordSys = geoCoordSys; } + + public String getTreeType() { + return treeType; + } + + public void setTreeType(String treeType) { + this.treeType = treeType; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java index 6345277..16ead73 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java @@ -194,6 +194,11 @@ */ private int channelType; + /** + * 涓氬姟鍒嗙粍 + */ + private String businessGroupId; + public int getId() { return id; } @@ -506,4 +511,12 @@ public void setChannelType(int channelType) { this.channelType = channelType; } + + public String getBusinessGroupId() { + return businessGroupId; + } + + public void setBusinessGroupId(String businessGroupId) { + this.businessGroupId = businessGroupId; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java index 2e70ea7..73f9c4f 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java @@ -406,7 +406,10 @@ if (parentPlatform == null) { return false; } - logger.info("[鍙戦�� 绉诲姩浣嶇疆璁㈤槄] {}/{}->{},{}", parentPlatform.getServerGBId(), gpsMsgInfo.getId(), gpsMsgInfo.getLng(), gpsMsgInfo.getLat()); + if (logger.isDebugEnabled()) { + logger.debug("[鍙戦�� 绉诲姩浣嶇疆璁㈤槄] {}/{}->{},{}", parentPlatform.getServerGBId(), gpsMsgInfo.getId(), gpsMsgInfo.getLng(), gpsMsgInfo.getLat()); + } + try { String characterSet = parentPlatform.getCharacterSet(); StringBuffer deviceStatusXml = new StringBuffer(600); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java index c2226a1..622cf07 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java @@ -141,6 +141,7 @@ device.setStreamMode("UDP"); device.setCharset("GB2312"); device.setGeoCoordSys("WGS84"); + device.setTreeType("CivilCode"); device.setDeviceId(deviceId); } device.setIp(received); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java index 5ada1e4..0d34c00 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java @@ -249,23 +249,26 @@ }else { deviceChannel.setParentId(parentId); } - }else { - if (deviceChannel.getChannelId().length() <= 10) { // 姝ゆ椂涓鸿鏀垮尯鍒�, 涓婁笅绾ц鏀垮尯鍒掍娇鐢―eviceId鍏宠仈 - deviceChannel.setParentId(deviceChannel.getChannelId().substring(0, deviceChannel.getChannelId().length() - 2)); - }else if (deviceChannel.getChannelId().length() == 20) { - if (Integer.parseInt(deviceChannel.getChannelId().substring(10, 13)) == 216) { // 铏氭嫙缁勭粐 - deviceChannel.setParentId(businessGroupID); - }else if (Integer.parseInt(device.getDeviceId().substring(10, 13) )== 118) {//NVR 濡傛灉涓婄骇璁惧缂栧彿鏄疦VR鍒欑洿鎺ュ皢NVR鐨勭紪鍙疯缃粰閫氶亾鐨勪笂绾х紪鍙� - deviceChannel.setParentId(device.getDeviceId()); - }else if (deviceChannel.getCivilCode() != null) { - // 璁惧锛� 鏃爌arentId鐨�20浣嶆槸浣跨敤CivilCode琛ㄧず涓婄骇鐨勮澶囷紝 - // 娉細215 涓氬姟鍒嗙粍鏄渶瑕佹湁parentId鐨� - deviceChannel.setParentId(deviceChannel.getCivilCode()); - } - }else { - deviceChannel.setParentId(deviceChannel.getDeviceId()); - } } + deviceChannel.setBusinessGroupId(businessGroupID); + +// else { +// if (deviceChannel.getChannelId().length() <= 10) { // 姝ゆ椂涓鸿鏀垮尯鍒�, 涓婁笅绾ц鏀垮尯鍒掍娇鐢―eviceId鍏宠仈 +// deviceChannel.setParentId(deviceChannel.getChannelId().substring(0, deviceChannel.getChannelId().length() - 2)); +// }else if (deviceChannel.getChannelId().length() == 20) { +// if (Integer.parseInt(deviceChannel.getChannelId().substring(10, 13)) == 216) { // 铏氭嫙缁勭粐 +// deviceChannel.setBusinessGroupId(businessGroupID); +// }else if (Integer.parseInt(device.getDeviceId().substring(10, 13) )== 118) {//NVR 濡傛灉涓婄骇璁惧缂栧彿鏄疦VR鍒欑洿鎺ュ皢NVR鐨勭紪鍙疯缃粰閫氶亾鐨勪笂绾х紪鍙� +// deviceChannel.setParentId(device.getDeviceId()); +// }else if (deviceChannel.getCivilCode() != null) { +// // 璁惧锛� 鏃爌arentId鐨�20浣嶆槸浣跨敤CivilCode琛ㄧず涓婄骇鐨勮澶囷紝 +// // 娉細215 涓氬姟鍒嗙粍鏄渶瑕佹湁parentId鐨� +// deviceChannel.setParentId(deviceChannel.getCivilCode()); +// } +// }else { +// deviceChannel.setParentId(deviceChannel.getDeviceId()); +// } +// } if (XmlUtil.getText(itemDevice, "SafetyWay") == null || XmlUtil.getText(itemDevice, "SafetyWay") == "") { diff --git a/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java b/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java index 72af803..5b43496 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java @@ -1,7 +1,9 @@ package com.genersoft.iot.vmp.service; import com.genersoft.iot.vmp.gb28181.bean.Device; +import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.SyncStatus; +import com.genersoft.iot.vmp.vmanager.bean.BaseTree; import java.util.List; @@ -110,4 +112,21 @@ * @param device 璁惧淇℃伅 */ void updateDevice(Device device); + + /** + * 鏍戝舰鏌ヨ鎺ュ彛 + * @param deviceId 璁惧ID + * @param parentId 鐖禝D + * @param onlyCatalog 鍙幏鍙栫洰褰� + * @return + */ + List<BaseTree<DeviceChannel>> queryVideoDeviceTree(String deviceId, String parentId, boolean onlyCatalog); + + /** + * 鏌ヨ鏍戣妭鐐逛笅鐨勯�氶亾 + * @param deviceId 璁惧ID + * @param parentId 鐖禝D + * @return + */ + List<DeviceChannel> queryVideoDeviceInTreeNode(String deviceId, String parentId); } 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; + } + } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java index 41eca5d..041fdf0 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java @@ -123,7 +123,7 @@ result.onCompletion(()->{ // 鐐规挱缁撴潫鏃惰皟鐢ㄦ埅鍥炬帴鍙� // TODO 搴旇鍦ㄤ笂娴佹椂璋冪敤鏇村ソ锛岀粨鏉熶篃鍙兘鏄敊璇粨鏉� - String path = "static/static/snap/"; + String path = "snap"; String fileName = deviceId + "_" + channelId + ".jpg"; ResponseEntity responseEntity = (ResponseEntity)result.getResult(); if (responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK) { @@ -177,7 +177,6 @@ streamInfo = null; } - } if (streamInfo == null) { diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java index 5c46fb9..69ce4a7 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java @@ -1,5 +1,6 @@ package com.genersoft.iot.vmp.storager.dao; +import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannelInPlatform; import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; @@ -17,10 +18,12 @@ @Insert("INSERT INTO device_channel (channelId, deviceId, name, manufacture, model, owner, civilCode, block, " + "address, parental, parentId, safetyWay, registerWay, certNum, certifiable, errCode, secrecy, " + - "ipAddress, port, password, PTZType, status, streamId, longitude, latitude, longitudeGcj02, latitudeGcj02, longitudeWgs84, latitudeWgs84, createTime, updateTime) " + + "ipAddress, port, password, PTZType, status, streamId, longitude, latitude, longitudeGcj02, latitudeGcj02, " + + "longitudeWgs84, latitudeWgs84, createTime, updateTime, businessGroupId) " + "VALUES ('${channelId}', '${deviceId}', '${name}', '${manufacture}', '${model}', '${owner}', '${civilCode}', '${block}'," + "'${address}', ${parental}, '${parentId}', ${safetyWay}, ${registerWay}, '${certNum}', ${certifiable}, ${errCode}, '${secrecy}', " + - "'${ipAddress}', ${port}, '${password}', ${PTZType}, ${status}, '${streamId}', ${longitude}, ${latitude}, ${longitudeGcj02}, ${latitudeGcj02}, ${longitudeWgs84}, ${latitudeWgs84},'${createTime}', '${updateTime}')") + "'${ipAddress}', ${port}, '${password}', ${PTZType}, ${status}, '${streamId}', ${longitude}, ${latitude}, ${longitudeGcj02}, " + + "${latitudeGcj02}, ${longitudeWgs84}, ${latitudeWgs84},'${createTime}', '${updateTime}', '${businessGroupId}')") int add(DeviceChannel channel); @Update(value = {" <script>" + @@ -54,6 +57,7 @@ "<if test='latitudeGcj02 != null'>, latitudeGcj02=${latitudeGcj02}</if>" + "<if test='longitudeWgs84 != null'>, longitudeWgs84=${longitudeWgs84}</if>" + "<if test='latitudeWgs84 != null'>, latitudeWgs84=${latitudeWgs84}</if>" + + "<if test='businessGroupId != null'>, businessGroupId=#{businessGroupId}</if>" + "WHERE deviceId='${deviceId}' AND channelId='${channelId}'"+ " </script>"}) int update(DeviceChannel channel); @@ -143,7 +147,7 @@ "(channelId, deviceId, name, manufacture, model, owner, civilCode, block, subCount, " + " address, parental, parentId, safetyWay, registerWay, certNum, certifiable, errCode, secrecy, " + " ipAddress, port, password, PTZType, status, streamId, longitude, latitude, longitudeGcj02, latitudeGcj02, " + - " longitudeWgs84, latitudeWgs84, createTime, updateTime) " + + " longitudeWgs84, latitudeWgs84, createTime, updateTime, businessGroupId) " + "values " + "<foreach collection='addChannels' index='index' item='item' separator=','> " + "('${item.channelId}', '${item.deviceId}', '${item.name}', '${item.manufacture}', '${item.model}', " + @@ -152,7 +156,7 @@ "'${item.certNum}', ${item.certifiable}, ${item.errCode}, '${item.secrecy}', " + "'${item.ipAddress}', ${item.port}, '${item.password}', ${item.PTZType}, ${item.status}, " + "'${item.streamId}', ${item.longitude}, ${item.latitude},${item.longitudeGcj02}, " + - "${item.latitudeGcj02},${item.longitudeWgs84}, ${item.latitudeWgs84},'${item.createTime}', '${item.updateTime}')" + + "${item.latitudeGcj02},${item.longitudeWgs84}, ${item.latitudeWgs84},'${item.createTime}', '${item.updateTime}, '${item.businessGroupId}')" + "</foreach> " + "ON DUPLICATE KEY UPDATE " + "updateTime=VALUES(updateTime), " + @@ -183,7 +187,8 @@ "longitudeGcj02=VALUES(longitudeGcj02), " + "latitudeGcj02=VALUES(latitudeGcj02), " + "longitudeWgs84=VALUES(longitudeWgs84), " + - "latitudeWgs84=VALUES(latitudeWgs84) " + + "latitudeWgs84=VALUES(latitudeWgs84), " + + "businessGroupId=VALUES(businessGroupId) " + "</script>") int batchAdd(List<DeviceChannel> addChannels); @@ -221,6 +226,7 @@ "<if test='item.latitudeGcj02 != null'>, latitudeGcj02=${item.latitudeGcj02}</if>" + "<if test='item.longitudeWgs84 != null'>, longitudeWgs84=${item.longitudeWgs84}</if>" + "<if test='item.latitudeWgs84 != null'>, latitudeWgs84=${item.latitudeWgs84}</if>" + + "<if test='item.businessGroupId != null'>, businessGroupId=${item.businessGroupId}</if>" + "WHERE deviceId='${item.deviceId}' AND channelId='${item.channelId}'"+ "</foreach>" + "</script>"}) @@ -277,4 +283,33 @@ @Select("select * from device_channel where longitude*latitude > 0 and deviceId = #{deviceId}") List<DeviceChannel> getAllChannelWithCoordinate(String deviceId); + + + @Select(value = {" <script>" + + "select * " + + "from device_channel " + + "where deviceId=#{deviceId}" + + " <if test='parentId != null' > and left(channelId, ${parentId.length()}) = #{parentId}</if>" + + " <if test='length != null' > and length(channelId)=${length}</if>" + + " </script>"}) + List<DeviceChannel> getChannelsWithCivilCodeAndLength(String deviceId, String parentId, Integer length); + + @Select(value = {" <script>" + + "select * " + + "from device_channel " + + "where deviceId=#{deviceId} and length(channelId)>14 and civilCode=#{parentId}" + + " </script>"}) + List<DeviceChannel> getChannelsByCivilCode(String deviceId, String parentId); + + @Select("select min(length(channelId)) as minLength " + + "from device_channel " + + "where deviceId=#{deviceId}") + Integer getChannelMinLength(String deviceId); + + @Select("select * from device_channel where deviceId=#{deviceId} and civilCode not in " + + "(select civilCode from device_channel where deviceId=#{deviceId} group by civilCode)") + List<DeviceChannel> getChannelWithoutCiviCode(String deviceId); + + @Select("select * from device_channel where deviceId=#{deviceId} and SUBSTRING(channelId, 11, 3)=#{typeCode}") + List<DeviceChannel> getBusinessGroups(String deviceId, String typeCode); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java index 3e15b73..7e8dd3c 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java @@ -39,6 +39,7 @@ "subscribeCycleForAlarm," + "ssrcCheck," + "geoCoordSys," + + "treeType," + "online" + ") VALUES (" + "#{deviceId}," + @@ -63,6 +64,7 @@ "#{subscribeCycleForAlarm}," + "#{ssrcCheck}," + "#{geoCoordSys}," + + "#{treeType}," + "#{online}" + ")") int add(Device device); @@ -90,6 +92,7 @@ "<if test=\"subscribeCycleForAlarm != null\">, subscribeCycleForAlarm=${subscribeCycleForAlarm}</if>" + "<if test=\"ssrcCheck != null\">, ssrcCheck=${ssrcCheck}</if>" + "<if test=\"geoCoordSys != null\">, geoCoordSys=#{geoCoordSys}</if>" + + "<if test=\"treeType != null\">, treeType=#{treeType}</if>" + "WHERE deviceId='${deviceId}'"+ " </script>"}) int update(Device device); diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/BaseTree.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/BaseTree.java new file mode 100644 index 0000000..23690e5 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/BaseTree.java @@ -0,0 +1,87 @@ +package com.genersoft.iot.vmp.vmanager.bean; + +import org.jetbrains.annotations.NotNull; + +import java.text.Collator; +import java.util.Comparator; + +/** + * @author lin + */ +public class BaseTree<T> implements Comparable<BaseTree>{ + private String id; + + private String deviceId; + private String pid; + private String name; + private boolean parent; + + private T basicData; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public T getBasicData() { + return basicData; + } + + public void setBasicData(T basicData) { + this.basicData = basicData; + } + + public boolean isParent() { + return parent; + } + + public void setParent(boolean parent) { + this.parent = parent; + } + + @Override + public int compareTo(@NotNull BaseTree treeNode) { + if (this.parent || treeNode.isParent()) { + if (!this.parent && !treeNode.isParent()) { + Comparator cmp = Collator.getInstance(java.util.Locale.CHINA); + return cmp.compare(treeNode.getName(), this.getName()); + }else { + if (this.isParent()) { + return 1; + }else { + return -1; + } + } + }else{ + Comparator cmp = Collator.getInstance(java.util.Locale.CHINA); + return cmp.compare(treeNode.getName(), this.getName()); + } + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java index 5e1e40b..767e9c4 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java @@ -15,6 +15,7 @@ import com.genersoft.iot.vmp.service.IDeviceService; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; +import com.genersoft.iot.vmp.vmanager.bean.BaseTree; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; @@ -479,4 +480,99 @@ resp.setStatus(HttpServletResponse.SC_NOT_FOUND); } } + + /** + * 鏌ヨ鍥芥爣鏍� + * @param deviceId 璁惧ID + * @param parentId 鐖禝D + * @param page 褰撳墠椤� + * @param count 姣忛〉鏉℃暟 + * @return 鍥芥爣璁惧 + */ + @ApiOperation("鏌ヨ鍥芥爣鏍�") + @ApiImplicitParams({ + @ApiImplicitParam(name = "deviceId", value = "璁惧ID", required = true, dataTypeClass = String.class), + @ApiImplicitParam(name = "parentId", value = "鐖禝D", required = false, dataTypeClass = String.class), + @ApiImplicitParam(name = "onlyCatalog", value = "鍙幏鍙栫洰褰�", required = false, dataTypeClass = Boolean.class), + @ApiImplicitParam(name="page", value = "褰撳墠椤�", required = true, dataTypeClass = Integer.class), + @ApiImplicitParam(name="count", value = "姣忛〉鏉℃暟", required = true, dataTypeClass = Integer.class), + }) + @GetMapping("/tree/{deviceId}") + public ResponseEntity<PageInfo> getTree(@PathVariable String deviceId, @RequestParam(required = false) String parentId, @RequestParam(required = false) Boolean onlyCatalog, int page, int count){ + + + if (page <= 0) { + page = 1; + } + if (onlyCatalog == null) { + onlyCatalog = false; + } + + List<BaseTree<DeviceChannel>> treeData = deviceService.queryVideoDeviceTree(deviceId, parentId, onlyCatalog); + if (treeData == null || (page - 1) * count > treeData.size()) { + PageInfo<BaseTree<DeviceChannel>> pageInfo = new PageInfo<>(); + pageInfo.setPageNum(page); + pageInfo.setTotal(treeData == null? 0 : treeData.size()); + pageInfo.setSize(0); + pageInfo.setList(new ArrayList<>()); + return new ResponseEntity<>(pageInfo,HttpStatus.OK); + } + + int toIndex = Math.min(page * count, treeData.size()); + // 澶勭悊鍒嗛〉 + List<BaseTree<DeviceChannel>> trees = treeData.subList((page - 1) * count, toIndex); + PageInfo<BaseTree<DeviceChannel>> pageInfo = new PageInfo<>(); + pageInfo.setPageNum(page); + pageInfo.setTotal(treeData.size()); + pageInfo.setSize(trees.size()); + pageInfo.setList(trees); + + return new ResponseEntity<>(pageInfo,HttpStatus.OK); + } + + + /** + * 鏌ヨ鍥芥爣鏍戜笅鐨勯�氶亾 + * @param deviceId 璁惧ID + * @param parentId 鐖禝D + * @param page 褰撳墠椤� + * @param count 姣忛〉鏉℃暟 + * @return 鍥芥爣璁惧 + */ + @ApiOperation("鏌ヨ鍥芥爣鏍戜笅鐨勯�氶亾") + @ApiImplicitParams({ + @ApiImplicitParam(name = "deviceId", value = "璁惧ID", required = true, dataTypeClass = String.class), + @ApiImplicitParam(name = "parentId", value = "鐖禝D", required = false, dataTypeClass = String.class), + @ApiImplicitParam(name="page", value = "褰撳墠椤�", required = true, dataTypeClass = Integer.class), + @ApiImplicitParam(name="count", value = "姣忛〉鏉℃暟", required = true, dataTypeClass = Integer.class), + }) + @GetMapping("/tree/channel/{deviceId}") + public ResponseEntity<PageInfo> getChannelInTreeNode(@PathVariable String deviceId, @RequestParam(required = false) String parentId, int page, int count){ + + + if (page <= 0) { + page = 1; + } + + List<DeviceChannel> treeData = deviceService.queryVideoDeviceInTreeNode(deviceId, parentId); + if (treeData == null || (page - 1) * count > treeData.size()) { + PageInfo<BaseTree<DeviceChannel>> pageInfo = new PageInfo<>(); + pageInfo.setPageNum(page); + pageInfo.setTotal(treeData == null? 0 : treeData.size()); + pageInfo.setSize(0); + pageInfo.setList(new ArrayList<>()); + return new ResponseEntity<>(pageInfo,HttpStatus.OK); + } + + int toIndex = Math.min(page * count, treeData.size()); + // 澶勭悊鍒嗛〉 + List<DeviceChannel> trees = treeData.subList((page - 1) * count, toIndex); + PageInfo<DeviceChannel> pageInfo = new PageInfo<>(); + pageInfo.setPageNum(page); + pageInfo.setTotal(treeData.size()); + pageInfo.setSize(trees.size()); + pageInfo.setList(trees); + + return new ResponseEntity<>(pageInfo,HttpStatus.OK); + } } diff --git a/src/main/resources/logback-spring-local.xml b/src/main/resources/logback-spring-local.xml index ec80d2d..9e58355 100644 --- a/src/main/resources/logback-spring-local.xml +++ b/src/main/resources/logback-spring-local.xml @@ -11,6 +11,11 @@ <!--鏍煎紡鍖栬緭鍑猴細%d琛ㄧず鏃ユ湡锛�%thread琛ㄧず绾跨▼鍚嶏紝%-5level锛氱骇鍒粠宸︽樉绀�5涓瓧绗﹀搴�%msg锛氭棩蹇楁秷鎭紝%n鏄崲琛岀 --> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n</pattern> </encoder> + <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> + <!--涓嶵hresholdFilter鐨勫尯鍒�,鍏佽onmatch--> + <!--璁剧疆鏃ュ織绾у埆 鎺ユ敹info绾у埆鐨勬棩蹇�--> + <level>DEBUG</level> + </filter> </appender> <!-- 鎸夌収姣忓ぉ鐢熸垚鏃ュ織鏂囦欢 DEBUG浠ヤ笂绾у埆鐨勬棩蹇�,浠呯敤浜庢祴璇曠幆澧�,姝e紡鐜涓篿nfo绾у埆浠ヤ笂鐨勬棩蹇�--> diff --git a/web_src/package-lock.json b/web_src/package-lock.json index 0d4c886..8e0a324 100644 --- a/web_src/package-lock.json +++ b/web_src/package-lock.json @@ -22,7 +22,9 @@ "vue-clipboards": "^1.3.0", "vue-contextmenujs": "^1.3.13", "vue-cookies": "^1.7.4", - "vue-router": "^3.1.6" + "vue-giant-tree": "^0.1.5", + "vue-router": "^3.1.6", + "vue-ztree-2.0": "^1.0.4" }, "devDependencies": { "autoprefixer": "^7.1.2", @@ -50,7 +52,7 @@ "postcss-url": "^7.2.1", "rimraf": "^2.6.0", "semver": "^5.3.0", - "shelljs": "^0.7.6", + "shelljs": "^0.8.5", "uglifyjs-webpack-plugin": "^1.1.1", "url-loader": "^0.5.8", "vue-loader": "^13.3.0", @@ -115,6 +117,17 @@ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", "dev": true + }, + "node_modules/@ztree/ztree_v3": { + "version": "3.5.48", + "resolved": "https://registry.npmmirror.com/@ztree/ztree_v3/-/ztree_v3-3.5.48.tgz", + "integrity": "sha512-4dSA1g26T3j/O3I89+r/Palg+a+xwMGRS1etZoggnCGBPoOrwW8VGA3zitJCK/Yd7eEMX+LfKTRJjEGiWpoN3w==", + "dependencies": { + "jquery": ">=1.4.4" + }, + "engines": { + "node": ">=0.10.0" + } }, "node_modules/accepts": { "version": "1.3.7", @@ -6034,6 +6047,11 @@ "node": ">=0.10.0" } }, + "node_modules/jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + }, "node_modules/js-base64": { "version": "2.6.4", "resolved": "https://registry.npm.taobao.org/js-base64/download/js-base64-2.6.4.tgz?cache=0&sync_timestamp=1599897619557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-base64%2Fdownload%2Fjs-base64-2.6.4.tgz", @@ -11655,9 +11673,9 @@ } }, "node_modules/shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npm.taobao.org/shelljs/download/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "version": "0.8.5", + "resolved": "https://registry.npmmirror.com/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, "dependencies": { "glob": "^7.0.0", @@ -11668,8 +11686,7 @@ "shjs": "bin/shjs" }, "engines": { - "iojs": "*", - "node": ">=0.11.0" + "node": ">=4" } }, "node_modules/shellwords": { @@ -13068,6 +13085,15 @@ "resolved": "https://registry.npm.taobao.org/vue-cookies/download/vue-cookies-1.7.4.tgz?cache=0&sync_timestamp=1598941352058&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-cookies%2Fdownload%2Fvue-cookies-1.7.4.tgz", "integrity": "sha1-0kHQoEMdoHlYN2UdELTXPnyNPo0=" }, + "node_modules/vue-giant-tree": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/vue-giant-tree/-/vue-giant-tree-0.1.5.tgz", + "integrity": "sha512-P3KEHSZU2NkpWl6frss+sJLO0DLrtarMNLeTV/IGU2/w50rgrlKbKNr/ckK6BBVdWXAJYlYf6HUTNkKvGq5hlg==", + "dependencies": { + "@ztree/ztree_v3": "^3.5.44", + "jquery": "^3.5.1" + } + }, "node_modules/vue-hot-reload-api": { "version": "2.3.4", "resolved": "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz", @@ -13174,6 +13200,11 @@ "resolved": "https://registry.npm.taobao.org/vue-template-es2015-compiler/download/vue-template-es2015-compiler-1.9.1.tgz", "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=", "dev": true + }, + "node_modules/vue-ztree-2.0": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/vue-ztree-2.0/-/vue-ztree-2.0-1.0.4.tgz", + "integrity": "sha512-d7KZsquEYpM0jD/k1uwOMFCd08L6++7zwRESaL2sF43OtRFCump8BxcLpjusBIHpFadPvOSMMnK5P41y+ZiTlA==" }, "node_modules/watchpack": { "version": "1.7.4", @@ -14418,6 +14449,14 @@ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", "dev": true + }, + "@ztree/ztree_v3": { + "version": "3.5.48", + "resolved": "https://registry.npmmirror.com/@ztree/ztree_v3/-/ztree_v3-3.5.48.tgz", + "integrity": "sha512-4dSA1g26T3j/O3I89+r/Palg+a+xwMGRS1etZoggnCGBPoOrwW8VGA3zitJCK/Yd7eEMX+LfKTRJjEGiWpoN3w==", + "requires": { + "jquery": ">=1.4.4" + } }, "accepts": { "version": "1.3.7", @@ -19488,6 +19527,11 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + }, "js-base64": { "version": "2.6.4", "resolved": "https://registry.npm.taobao.org/js-base64/download/js-base64-2.6.4.tgz?cache=0&sync_timestamp=1599897619557&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-base64%2Fdownload%2Fjs-base64-2.6.4.tgz", @@ -24156,9 +24200,9 @@ "dev": true }, "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npm.taobao.org/shelljs/download/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "version": "0.8.5", + "resolved": "https://registry.npmmirror.com/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, "requires": { "glob": "^7.0.0", @@ -25352,6 +25396,15 @@ "resolved": "https://registry.npm.taobao.org/vue-cookies/download/vue-cookies-1.7.4.tgz?cache=0&sync_timestamp=1598941352058&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-cookies%2Fdownload%2Fvue-cookies-1.7.4.tgz", "integrity": "sha1-0kHQoEMdoHlYN2UdELTXPnyNPo0=" }, + "vue-giant-tree": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/vue-giant-tree/-/vue-giant-tree-0.1.5.tgz", + "integrity": "sha512-P3KEHSZU2NkpWl6frss+sJLO0DLrtarMNLeTV/IGU2/w50rgrlKbKNr/ckK6BBVdWXAJYlYf6HUTNkKvGq5hlg==", + "requires": { + "@ztree/ztree_v3": "^3.5.44", + "jquery": "^3.5.1" + } + }, "vue-hot-reload-api": { "version": "2.3.4", "resolved": "https://registry.npm.taobao.org/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz", @@ -25448,6 +25501,11 @@ "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=", "dev": true }, + "vue-ztree-2.0": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/vue-ztree-2.0/-/vue-ztree-2.0-1.0.4.tgz", + "integrity": "sha512-d7KZsquEYpM0jD/k1uwOMFCd08L6++7zwRESaL2sF43OtRFCump8BxcLpjusBIHpFadPvOSMMnK5P41y+ZiTlA==" + }, "watchpack": { "version": "1.7.4", "resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.4.tgz?cache=0&sync_timestamp=1600385388649&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.4.tgz", diff --git a/web_src/package.json b/web_src/package.json index b825f84..d19a58d 100644 --- a/web_src/package.json +++ b/web_src/package.json @@ -24,7 +24,9 @@ "vue-clipboards": "^1.3.0", "vue-contextmenujs": "^1.3.13", "vue-cookies": "^1.7.4", - "vue-router": "^3.1.6" + "vue-giant-tree": "^0.1.5", + "vue-router": "^3.1.6", + "vue-ztree-2.0": "^1.0.4" }, "devDependencies": { "autoprefixer": "^7.1.2", diff --git a/web_src/src/components/DeviceList.vue b/web_src/src/components/DeviceList.vue index 1911d1d..97fa4f2 100644 --- a/web_src/src/components/DeviceList.vue +++ b/web_src/src/components/DeviceList.vue @@ -56,11 +56,11 @@ @mouseover="getTooltipContent(scope.row.deviceId)">鍒锋柊 </el-button> <el-divider direction="vertical"></el-divider> - <el-button type="text" size="medium" icon="el-icon-video-camera" v-bind:disabled="scope.row.online==0" + <el-button type="text" size="medium" icon="el-icon-video-camera" @click="showChannelList(scope.row)">閫氶亾 </el-button> <el-divider direction="vertical"></el-divider> - <el-button size="medium" icon="el-icon-location" v-bind:disabled="scope.row.online==0" type="text" + <el-button size="medium" icon="el-icon-location" type="text" @click="showDevicePosition(scope.row)">瀹氫綅 </el-button> <el-divider direction="vertical"></el-divider> @@ -192,7 +192,7 @@ }, showChannelList: function (row) { - this.$router.push(`/channelList/${row.deviceId}/0/15/1`); + this.$router.push(`/channelList/${row.deviceId}/0`); }, showDevicePosition: function (row) { this.$router.push(`/map?deviceId=${row.deviceId}`); diff --git a/web_src/src/components/channelList.vue b/web_src/src/components/channelList.vue index d27e62b..2a09c5c 100644 --- a/web_src/src/components/channelList.vue +++ b/web_src/src/components/channelList.vue @@ -7,104 +7,116 @@ 閫氶亾鍒楄〃 </div> <div class="page-header-btn"> - 鎼滅储: - <el-input @input="search" style="margin-right: 1rem; width: auto;" size="mini" placeholder="鍏抽敭瀛�" - prefix-icon="el-icon-search" v-model="searchSrt" clearable></el-input> + <div v-if="!showTree" style="display: inline;"> + 鎼滅储: + <el-input @input="search" style="margin-right: 1rem; width: auto;" size="mini" placeholder="鍏抽敭瀛�" + prefix-icon="el-icon-search" v-model="searchSrt" clearable></el-input> - 閫氶亾绫诲瀷: - <el-select size="mini" @change="search" style="margin-right: 1rem;" v-model="channelType" placeholder="璇烽�夋嫨" - default-first-option> - <el-option label="鍏ㄩ儴" value=""></el-option> - <el-option label="璁惧" value="false"></el-option> - <el-option label="瀛愮洰褰�" value="true"></el-option> - </el-select> - 鍦ㄧ嚎鐘舵��: - <el-select size="mini" style="margin-right: 1rem;" @change="search" v-model="online" placeholder="璇烽�夋嫨" - default-first-option> - <el-option label="鍏ㄩ儴" value=""></el-option> - <el-option label="鍦ㄧ嚎" value="true"></el-option> - <el-option label="绂荤嚎" value="false"></el-option> - </el-select> + 閫氶亾绫诲瀷: + <el-select size="mini" @change="search" style="margin-right: 1rem;" v-model="channelType" placeholder="璇烽�夋嫨" + default-first-option> + <el-option label="鍏ㄩ儴" value=""></el-option> + <el-option label="璁惧" value="false"></el-option> + <el-option label="瀛愮洰褰�" value="true"></el-option> + </el-select> + 鍦ㄧ嚎鐘舵��: + <el-select size="mini" style="margin-right: 1rem;" @change="search" v-model="online" placeholder="璇烽�夋嫨" + default-first-option> + <el-option label="鍏ㄩ儴" value=""></el-option> + <el-option label="鍦ㄧ嚎" value="true"></el-option> + <el-option label="绂荤嚎" value="false"></el-option> + </el-select> + </div> <el-button icon="el-icon-refresh-right" circle size="mini" @click="refresh()"></el-button> + <el-button v-if="showTree" icon="iconfont icon-list" circle size="mini" @click="switchList()"></el-button> + <el-button v-if="!showTree" icon="iconfont icon-tree" circle size="mini" @click="switchTree()"></el-button> </div> </div> <devicePlayer ref="devicePlayer" v-loading="isLoging"></devicePlayer> + <el-container v-loading="isLoging" style="height: 82vh;"> + <el-aside width="auto" style="height: 82vh; background-color: #ffffff; overflow: auto" v-if="showTree" > + <DeviceTree ref="deviceTree" :device="device" :onlyCatalog="true" :clickEvent="treeNodeClickEvent" ></DeviceTree> + </el-aside> + <el-main style="padding: 5px;"> + <el-table ref="channelListTable" :data="deviceChannelList" :height="winHeight" style="width: 100%" header-row-class-name="table-header"> + <el-table-column prop="channelId" label="閫氶亾缂栧彿" min-width="200"> + </el-table-column> + <el-table-column prop="deviceId" label="璁惧缂栧彿" min-width="200"> + </el-table-column> + <el-table-column prop="name" label="閫氶亾鍚嶇О" min-width="200"> + </el-table-column> + <el-table-column label="蹇収" min-width="120"> + <template v-slot:default="scope"> + <el-image + :src="getSnap(scope.row)" + :preview-src-list="getBigSnap(scope.row)" + @error="getSnapErrorEvent(scope.row.deviceId, scope.row.channelId)" + :fit="'contain'" + style="width: 60px"> + <div slot="error" class="image-slot"> + <i class="el-icon-picture-outline"></i> + </div> + </el-image> + </template> + </el-table-column> + <el-table-column prop="subCount" label="瀛愯妭鐐规暟" min-width="120"> + </el-table-column> + <el-table-column prop="manufacture" label="鍘傚" min-width="120"> + </el-table-column> + <el-table-column label="浣嶇疆淇℃伅" min-width="200"> + <template slot-scope="scope"> + <span v-if="scope.row.longitude*scope.row.latitude > 0">{{ scope.row.longitude }},<br>{{ scope.row.latitude }}</span> + <span v-if="scope.row.longitude*scope.row.latitude === 0">鏃�</span> + </template> + </el-table-column> + <el-table-column prop="ptztypeText" label="浜戝彴绫诲瀷" min-width="120"/> + <el-table-column label="寮�鍚煶棰�" min-width="120"> + <template slot-scope="scope"> + <el-switch @change="updateChannel(scope.row)" v-model="scope.row.hasAudio" active-color="#409EFF"> + </el-switch> + </template> + </el-table-column> + <el-table-column label="鐘舵��" min-width="120"> + <template slot-scope="scope"> + <div slot="reference" class="name-wrapper"> + <el-tag size="medium" v-if="scope.row.status === 1">鍦ㄧ嚎</el-tag> + <el-tag size="medium" type="info" v-if="scope.row.status === 0">绂荤嚎</el-tag> + </div> + </template> + </el-table-column> + + + <el-table-column label="鎿嶄綔" min-width="280" fixed="right"> + <template slot-scope="scope"> + <el-button size="medium" v-bind:disabled="device == null || device.online === 0" icon="el-icon-video-play" type="text" @click="sendDevicePush(scope.row)">鎾斁</el-button> + <el-button size="medium" v-bind:disabled="device == null || device.online === 0" icon="el-icon-switch-button" type="text" style="color: #f56c6c" v-if="!!scope.row.streamId" + @click="stopDevicePush(scope.row)">鍋滄 + </el-button> + <el-divider direction="vertical"></el-divider> + <el-button size="medium" icon="el-icon-s-open" type="text" v-if="scope.row.subCount > 0 || scope.row.parental === 1" + @click="changeSubchannel(scope.row)">鏌ョ湅 + </el-button> + <el-divider v-if="scope.row.subCount > 0 || scope.row.parental === 1" direction="vertical"></el-divider> + <el-button size="medium" v-bind:disabled="device == null || device.online === 0" icon="el-icon-video-camera" type="text" @click="queryRecords(scope.row)">璁惧褰曞儚 + </el-button> + </template> + </el-table-column> + </el-table> + <el-pagination + style="float: right" + @size-change="handleSizeChange" + @current-change="currentChange" + :current-page="currentPage" + :page-size="count" + :page-sizes="[15, 25, 35, 50]" + layout="total, sizes, prev, pager, next" + :total="total"> + </el-pagination> + </el-main> + </el-container> + <!--璁惧鍒楄〃--> - <el-table ref="channelListTable" :data="deviceChannelList" :height="winHeight" style="width: 100%" header-row-class-name="table-header"> - <el-table-column prop="channelId" label="閫氶亾缂栧彿" min-width="200"> - </el-table-column> - <el-table-column prop="deviceId" label="璁惧缂栧彿" min-width="200"> - </el-table-column> - <el-table-column prop="name" label="閫氶亾鍚嶇О" min-width="200"> - </el-table-column> - <el-table-column label="蹇収" min-width="120"> - <template v-slot:default="scope"> - <el-image - :src="getSnap(scope.row)" - :preview-src-list="getBigSnap(scope.row)" - @error="getSnapErrorEvent(scope.row.deviceId, scope.row.channelId)" - :fit="'contain'" - style="width: 60px"> - <div slot="error" class="image-slot"> - <i class="el-icon-picture-outline"></i> - </div> - </el-image> - </template> - </el-table-column> - <el-table-column prop="subCount" label="瀛愯妭鐐规暟" min-width="120"> - </el-table-column> - <el-table-column prop="manufacture" label="鍘傚" min-width="120"> - </el-table-column> - <el-table-column label="浣嶇疆淇℃伅" min-width="200"> - <template slot-scope="scope"> - <span v-if="scope.row.longitude*scope.row.latitude > 0">{{ scope.row.longitude }},<br>{{ scope.row.latitude }}</span> - <span v-if="scope.row.longitude*scope.row.latitude === 0">鏃�</span> - </template> - </el-table-column> - <el-table-column prop="ptztypeText" label="浜戝彴绫诲瀷" min-width="120"/> - <el-table-column label="寮�鍚煶棰�" min-width="120"> - <template slot-scope="scope"> - <el-switch @change="updateChannel(scope.row)" v-model="scope.row.hasAudio" active-color="#409EFF"> - </el-switch> - </template> - </el-table-column> - <el-table-column label="鐘舵��" min-width="120"> - <template slot-scope="scope"> - <div slot="reference" class="name-wrapper"> - <el-tag size="medium" v-if="scope.row.status === 1">鍦ㄧ嚎</el-tag> - <el-tag size="medium" type="info" v-if="scope.row.status === 0">绂荤嚎</el-tag> - </div> - </template> - </el-table-column> - - <el-table-column label="鎿嶄綔" min-width="280" fixed="right"> - <template slot-scope="scope"> - <!-- <el-button size="mini" icon="el-icon-video-play" v-if="scope.row.parental == 0" @click="sendDevicePush(scope.row)">鎾斁</el-button> --> - <el-button size="medium" icon="el-icon-video-play" type="text" @click="sendDevicePush(scope.row)">鎾斁</el-button> - <el-button size="medium" icon="el-icon-switch-button" type="text" style="color: #f56c6c" v-if="!!scope.row.streamId" - @click="stopDevicePush(scope.row)">鍋滄 - </el-button> - <el-divider direction="vertical"></el-divider> - <el-button size="medium" icon="el-icon-s-open" type="text" v-if="scope.row.subCount > 0 || scope.row.parental === 1" - @click="changeSubchannel(scope.row)">鏌ョ湅 - </el-button> - <el-divider v-if="scope.row.subCount > 0 || scope.row.parental === 1" direction="vertical"></el-divider> - <el-button size="medium" icon="el-icon-video-camera" type="text" @click="queryRecords(scope.row)">璁惧褰曞儚 - </el-button> - </template> - </el-table-column> - </el-table> - <el-pagination - style="float: right" - @size-change="handleSizeChange" - @current-change="currentChange" - :current-page="currentPage" - :page-size="count" - :page-sizes="[15, 25, 35, 50]" - layout="total, sizes, prev, pager, next" - :total="total"> - </el-pagination> </div> </template> @@ -114,12 +126,14 @@ import moment from "moment"; import DviceService from "./service/DeviceService"; import DeviceService from "./service/DeviceService"; +import DeviceTree from "./common/DeviceTree"; export default { name: 'channelList', components: { devicePlayer, - uiHeader + uiHeader, + DeviceTree }, data() { return { @@ -134,12 +148,13 @@ searchSrt: "", channelType: "", online: "", - winHeight: window.innerHeight - 250, - currentPage: parseInt(this.$route.params.page), - count: parseInt(this.$route.params.count), + winHeight: window.innerHeight - 200, + currentPage: 1, + count: 15, total: 0, beforeUrl: "/deviceList", isLoging: false, + showTree: false, loadSnap: {} }; }, @@ -172,19 +187,16 @@ initParam: function () { this.deviceId = this.$route.params.deviceId; this.parentChannelId = this.$route.params.parentChannelId; - this.currentPage = parseInt(this.$route.params.page); - this.count = parseInt(this.$route.params.count); + this.currentPage = 1; + this.count = 15; if (this.parentChannelId == "" || this.parentChannelId == 0) { this.beforeUrl = "/deviceList" } }, currentChange: function (val) { - var url = `/${this.$router.currentRoute.name}/${this.deviceId}/${this.parentChannelId}/${this.count}/${val}` - this.$router.push(url).then(() => { - this.initParam(); - this.initData(); - }) + this.currentPage = val; + this.initData(); }, handleSizeChange: function (val) { this.count = val; @@ -316,28 +328,48 @@ }) }, showSubchannels: function (channelId) { - let that = this; + if (!this.showTree) { + this.$axios({ + method: 'get', + url: `/api/device/query/sub_channels/${this.deviceId}/${this.parentChannelId}/channels`, + params: { + page: this.currentPage, + count: this.count, + query: this.searchSrt, + online: this.online, + channelType: this.channelType + } + }).then( (res) =>{ + this.total = res.data.total; + this.deviceChannelList = res.data.list; + // 闃叉鍑虹幇琛ㄦ牸閿欎綅 + this.$nextTick(() => { + this.$refs.channelListTable.doLayout(); + }) + }).catch(function (error) { + console.log(error); + }); + }else { + this.$axios({ + method: 'get', + url: `/api/device/query/tree/channel/${this.deviceId}`, + params: { + parentId: this.parentChannelId, + page: this.currentPage, + count: this.count, + } + }).then((res)=> { + this.total = res.data.total; + this.deviceChannelList = res.data.list; + // 闃叉鍑虹幇琛ㄦ牸閿欎綅 + this.$nextTick(() => { + this.$refs.channelListTable.doLayout(); + }) + }).catch(function (error) { + console.log(error); + }); + } - this.$axios({ - method: 'get', - url: `/api/device/query/sub_channels/${this.deviceId}/${this.parentChannelId}/channels`, - params: { - page: that.currentPage, - count: that.count, - query: that.searchSrt, - online: that.online, - channelType: that.channelType - } - }).then(function (res) { - that.total = res.data.total; - that.deviceChannelList = res.data.list; - // 闃叉鍑虹幇琛ㄦ牸閿欎綅 - that.$nextTick(() => { - that.$refs.channelListTable.doLayout(); - }) - }).catch(function (error) { - console.log(error); - }); }, search: function () { this.currentPage = 1; @@ -355,6 +387,29 @@ }, refresh: function () { this.initData(); + }, + switchTree: function (){ + this.showTree = true; + this.deviceChannelList = []; + this.parentChannelId = 0; + this.currentPage = 1; + + }, + switchList: function (){ + this.showTree = false; + this.deviceChannelList = []; + this.parentChannelId = 0; + this.currentPage = 1; + this.initData(); + }, + treeNodeClickEvent: function (device, data, isCatalog) { + console.log(device) + if (!!!data.channelId) { + this.parentChannelId = device.deviceId; + }else { + this.parentChannelId = data.channelId; + } + this.initData(); } } diff --git a/web_src/src/components/common/DeviceTree.vue b/web_src/src/components/common/DeviceTree.vue index 73618cc..c701bf0 100644 --- a/web_src/src/components/common/DeviceTree.vue +++ b/web_src/src/components/common/DeviceTree.vue @@ -4,7 +4,7 @@ <el-header>璁惧鍒楄〃</el-header> <el-main style="background-color: #ffffff;"> <div class="device-tree-main-box"> - <el-tree :props="defaultProps" :load="loadNode" lazy @node-click="handleNodeClick"@node-contextmenu="handleContextMenu" style="min-width: 100%; display:inline-block !important;"> + <el-tree ref="gdTree" :props="defaultProps" :load="loadNode" lazy @node-click="handleNodeClick"@node-contextmenu="handleContextMenu" node-key="id" style="min-width: 100%; display:inline-block !important;"> <span class="custom-tree-node" slot-scope="{ node, data }" style="width: 100%"> <span v-if="node.data.type === 0 && node.data.online" title="鍦ㄧ嚎璁惧" class="device-online iconfont icon-jiedianleizhukongzhongxin2"></span> <span v-if="node.data.type === 0 && !node.data.online " title="绂荤嚎璁惧" class="device-offline iconfont icon-jiedianleizhukongzhongxin2"></span> @@ -47,98 +47,112 @@ } }; }, - props: ['clickEvent', 'contextMenuEvent'], + props: ['device', 'onlyCatalog', 'clickEvent', 'contextMenuEvent'], methods: { handleNodeClick(data,node,element) { - console.log("鐐瑰嚮浜嬩欢") - console.log(data) + let deviceNode = this.$refs.gdTree.getNode(data.userData.deviceId) if(typeof (this.clickEvent) == "function") { - this.clickEvent(data.userData) + this.clickEvent(deviceNode.data.userData, data.userData, data.type === 2) } }, handleContextMenu(event,data,node,element) { console.log("鍙抽敭鐐瑰嚮浜嬩欢") + let deviceNode = this.$refs.gdTree.getNode(data.userData.deviceId) if(typeof (this.contextMenuEvent) == "function") { - this.contextMenuEvent(event, data.userData) + this.contextMenuEvent(deviceNode.data.userData, event, data.userData, data.type === 2) } }, loadNode: function(node, resolve){ + console.log(this.device) if (node.level === 0) { - this.deviceService.getAllDeviceList((data)=>{ - console.log(data) - if (data.length > 0) { - let nodeList = [] - for (let i = 0; i < data.length; i++) { - console.log(data[i].name) - let node = { - name: data[i].name || data[i].deviceId, - isLeaf: false, - id: data[i].deviceId, - type: data[i].online, - online: data[i].online === 1, - userData: data[i] - } - nodeList.push(node); - } - resolve(nodeList) - }else { - resolve([]) + if (this.device) { + let node = { + name: this.device.name || this.device.deviceId, + isLeaf: false, + id: this.device.deviceId, + type: this.device.online, + online: this.device.online === 1, + userData: this.device } - }, (list)=>{ + resolve([node]) + }else { + this.deviceService.getAllDeviceList((data)=>{ + console.log(data) + if (data.length > 0) { + let nodeList = [] + for (let i = 0; i < data.length; i++) { + console.log(data[i].name) + let node = { + name: data[i].name || data[i].deviceId, + isLeaf: false, + id: data[i].deviceId, + type: data[i].online, + online: data[i].online === 1, + userData: data[i] + } + nodeList.push(node); + } + resolve(nodeList) + }else { + resolve([]) + } + }, (list)=>{ console.log("璁惧鍔犺浇瀹屾垚") - }, (error)=>{ + }, (error)=>{ - }) - } - if (node.level === 1) { + }) + } + }else { let channelArray = [] - this.deviceService.getAllChannel(true, true, node.data.id, catalogData =>{ + + this.deviceService.getTree(node.data.userData.deviceId, node.data.id, this.onlyCatalog, catalogData =>{ + console.log(catalogData) channelArray = channelArray.concat(catalogData) this.channelDataHandler(channelArray, resolve) },(endCatalogData) => { - this.deviceService.getAllChannel(false, true, node.data.id, channelData => { - channelArray = channelArray.concat(channelData) - this.channelDataHandler(channelArray, resolve) - }, endChannelList => { - }) - }) - }else if (node.level > 1){ - let channelArray = [] - this.deviceService.getAllSubChannel(true, node.data.deviceId, node.data.id, (catalogData)=>{ - channelArray = channelArray.concat(catalogData) - this.channelDataHandler(channelArray, resolve) - }, (endCatalogData)=>{ - this.deviceService.getAllSubChannel(false, node.data.deviceId, node.data.id, (channelData)=>{ - channelArray = channelArray.concat(channelData) - this.channelDataHandler(channelArray, resolve) - }) }) } + }, channelDataHandler: function (data, resolve) { if (data.length > 0) { let nodeList = [] - for (let i = 0; i < data.length; i++) { + for (let i = 0; i <data.length; i++) { + let item = data[i]; let type = 3; - if (data[i].subCount > 0 || data[i].parental === 1) { + if (item.id.length <= 10) { type = 2; - }else if (data[i].ptztype === 1 ) { // 1-鐞冩満;2-鍗婄悆;3-鍥哄畾鏋満;4-閬ユ帶鏋満 - type = 4; - }else if (data[i].ptztype === 2) { - type = 5; - }else if (data[i].ptztype === 3 || data[i].ptztype === 4) { - type = 6; + }else { + if (item.id.length > 14) { + let channelType = item.id.substring(10, 13) + console.log("channelType: " + channelType) + if (channelType === '215' || channelType === '216') { + type = 2; + } + console.log(type) + if (item.basicData.ptztype === 1 ) { // 1-鐞冩満;2-鍗婄悆;3-鍥哄畾鏋満;4-閬ユ帶鏋満 + type = 4; + }else if (item.basicData.ptztype === 2) { + type = 5; + }else if (item.basicData.ptztype === 3 || item.basicData.ptztype === 4) { + type = 6; + } + }else { + if (item.basicData.subCount > 0 || item.basicData.parental === 1) { + type = 2; + } + } } let node = { - name: data[i].name || data[i].channelId, - isLeaf: data[i].subCount === 0, - id: data[i].channelId, - deviceId: data[i].deviceId, + name: item.name || item.basicData.channelId, + isLeaf: type !== 2, + id: item.id, + deviceId: item.deviceId, type: type, - online: data[i].status === 1, - hasGPS: data[i].longitude*data[i].latitude !== 0, - userData: data[i] + online: item.basicData.status === 1, + hasGPS: item.basicData.longitude*item.basicData.latitude !== 0, + userData: item.basicData } nodeList.push(node); } @@ -146,6 +160,9 @@ }else { resolve([]) } + }, + reset: function (){ + this.$forceUpdate(); } }, destroyed() { diff --git a/web_src/src/components/common/DeviceTreeForZtree.vue b/web_src/src/components/common/DeviceTreeForZtree.vue new file mode 100644 index 0000000..6c02bcc --- /dev/null +++ b/web_src/src/components/common/DeviceTreeForZtree.vue @@ -0,0 +1,112 @@ +<template> + <div id="DeviceTree" style="width: 100%;height: 100%; background-color: #FFFFFF; overflow: auto"> + <el-container> + <el-header>璁惧鍒楄〃</el-header> + <el-main style="background-color: #ffffff;"> + <div class="device-tree-main-box"> + <tree + :nodes="nodes" + @onClick="onClick" + @onCheck="onCheck" + @onExpand="onExpand" + @onCreated="handleCreated" + /> + </div> + </el-main> + </el-container> + </div> +</template> + +<script> +import DeviceService from "../service/DeviceService.js"; +import tree from "vue-giant-tree"; + +export default { + name: 'DeviceTreeForZtree', + components: { + tree + }, + data() { + return { + deviceService: new DeviceService(), + device: null, + nodes:[], + setting: { + callback: { + beforeExpand: this.beforeExpand + }, + // async: { + // enable: true, + // type: "get", + // url: `/api/device/query/tree`, + // contentType: "application/json", + // // autoParam: ["pid=parentId"], + // }, + check: { + enable: false, + }, + edit: { + enable: false, + } + }, + defaultProps: { + children: 'children', + label: 'name', + isLeaf: 'isLeaf' + } + }; + }, + props: ['clickEvent', 'contextMenuEvent'], + mounted() { + this.deviceService.getAllDeviceList((data)=>{ + console.log(data) + for (let i = 0; i < data.length; i++) { + console.log(data[i].name) + let node = { + name: data[i].name || data[i].deviceId, + id: data[i].deviceId, + isParent: true, + } + this.nodes.push(node) + } + }, (list)=>{ + console.log("璁惧鍔犺浇瀹屾垚") + }) + }, + methods: { + onClick(evt, treeId, treeNode) { + console.log(evt) + console.log(treeId) + console.log(treeNode) + }, + onCheck(evt, treeId, treeNode) { + console.log(evt) + }, + beforeExpand(treeId, treeNode) { + console.log(treeId) + console.log(treeNode) + return true; + }, + onExpand(evt, treeId, treeNode) { + // console.log(evt) + // console.log(treeId) + // console.log(treeNodes) + }, + handleCreated(ztreeObj) { + console.log(ztreeObj) + } + } +} +</script> + +<style> +.device-tree-main-box{ + text-align: left; +} +.device-online{ + color: #252525; +} +.device-offline{ + color: #727272; +} +</style> diff --git a/web_src/src/components/dialog/deviceEdit.vue b/web_src/src/components/dialog/deviceEdit.vue index ed17d17..773e7c9 100644 --- a/web_src/src/components/dialog/deviceEdit.vue +++ b/web_src/src/components/dialog/deviceEdit.vue @@ -42,6 +42,12 @@ <el-option key="GCJ02" label="GCJ02" value="GCJ02"></el-option> </el-select> </el-form-item> + <el-form-item label="鐩綍缁撴瀯" prop="treeType" > + <el-select v-model="form.treeType" style="float: left; width: 100%" > + <el-option key="WGS84" label="琛屾斂鍖哄垝" value="CivilCode"></el-option> + <el-option key="GCJ02" label="涓氬姟鍒嗙粍" value="BusinessGroup"></el-option> + </el-select> + </el-form-item> <el-form-item label="鐩綍璁㈤槄" title="0涓哄彇娑堣闃�" prop="subscribeCycleForCatalog" > <el-input v-model="form.subscribeCycleForCatalog" clearable ></el-input> </el-form-item> diff --git a/web_src/src/components/live.vue b/web_src/src/components/live.vue index 797be84..1f2d6ca 100644 --- a/web_src/src/components/live.vue +++ b/web_src/src/components/live.vue @@ -107,20 +107,24 @@ console.log(idx); this.clear(idx.substring(idx.length - 1)) }, - clickEvent: function (data) { - if (data.channelId && data.subCount == 0) { - this.sendDevicePush(data) + clickEvent: function (device, data, isCatalog) { + if (data.channelId && !isCatalog) { + if (device.online === 0) { + this.$message.error('璁惧绂荤嚎!涓嶅厑璁哥偣鎾�'); + }else { + this.sendDevicePush(data) + } } }, - contextMenuEvent: function (data) { + contextMenuEvent: function (device, event, data, isCatalog) { }, //閫氱煡璁惧涓婁紶濯掍綋娴� sendDevicePush: function (itemData) { - if (itemData.status === 0) { - this.$message.error('璁惧绂荤嚎!'); - return - } + // if (itemData.status === 0) { + // this.$message.error('璁惧绂荤嚎!'); + // return + // } this.save(itemData) let deviceId = itemData.deviceId; // this.isLoging = true; diff --git a/web_src/src/components/map.vue b/web_src/src/components/map.vue index e9e8628..d4a36cf 100644 --- a/web_src/src/components/map.vue +++ b/web_src/src/components/map.vue @@ -16,7 +16,8 @@ <el-descriptions class="margin-top" :title="channel.name" :column="1" :colon="true" size="mini" :labelStyle="labelStyle" > <el-descriptions-item label="缂栧彿" >{{channel.channelId}}</el-descriptions-item> <el-descriptions-item label="鍨嬪彿">{{channel.model}}</el-descriptions-item> - <el-descriptions-item label="缁忕含搴�" >{{channel.longitude}},{{channel.latitude}}</el-descriptions-item> + <el-descriptions-item label="缁忓害" >{{channel[longitudeStr]}}</el-descriptions-item> + <el-descriptions-item label="绾害" >{{channel[latitudeStr]}}</el-descriptions-item> <el-descriptions-item label="鐢熶骇鍘傚晢">{{channel.manufacture}}</el-descriptions-item> <el-descriptions-item label="琛屾斂鍖哄煙" >{{channel.civilCode}}</el-descriptions-item> <el-descriptions-item label="璁惧褰掑睘" >{{channel.owner}}</el-descriptions-item> @@ -28,7 +29,7 @@ </el-descriptions-item> </el-descriptions> <div style="padding-top: 10px"> - <el-button type="primary" size="small" title="鎾斁" icon="el-icon-video-play" @click="play(channel)"></el-button> + <el-button v-bind:disabled="device == null || device.online === 0" type="primary" size="small" title="鎾斁" icon="el-icon-video-play" @click="play(channel)"></el-button> <el-button type="primary" size="small" title="缂栬緫浣嶇疆" icon="el-icon-edit" @click="edit(channel)"></el-button> <el-button type="primary" size="small" title="杞ㄨ抗鏌ヨ" icon="el-icon-map-location" @click="getTrace(channel)"></el-button> </div> @@ -64,11 +65,14 @@ layer: null, lineLayer: null, channel: null, + device: null, infoBoxId: null, labelStyle: { width: "56px" }, isLoging: false, + longitudeStr: "longitude", + latitudeStr: "latitude", }; }, created() { @@ -78,17 +82,27 @@ setTimeout(()=>{ // 寤惰繜浠ョ瓑寰呭湴鍥惧姞杞藉畬鎴� TODO 鍚庣画淇敼涓洪�氳繃鏄疄闄呰繖锛涚姸鎬佸姞鍥炶皟瀹屾垚 this.deviceService.getAllChannel(false, false, this.$route.query.deviceId, this.channelsHandler) }, 1000) - + } + if (window.mapParam.coordinateSystem == "GCJ-02") { + this.longitudeStr = "longitudeGcj02"; + this.latitudeStr = "latitudeGcj02"; + }else if (window.mapParam.coordinateSystem == "WGS84") { + this.longitudeStr = "longitudeWgs84"; + this.latitudeStr = "latitudeWgs84"; + }else { + this.longitudeStr = "longitude"; + this.latitudeStr = "latitude"; } }, destroyed() { }, methods: { - clickEvent: function (data) { - if (data.channelId && data.subCount == 0) { + clickEvent: function (device, data, isCatalog) { + this.device = device; + if (data.channelId && !isCatalog) { // 鐐瑰嚮閫氶亾 - if (data.longitude * data.latitude === 0) { + if (data[this.longitudeStr] * data[this.latitudeStr] === 0) { this.$message.error('鏈幏鍙栧埌浣嶇疆淇℃伅'); } else { if (this.layer != null) { @@ -96,26 +110,29 @@ } this.closeInfoBox() this.layer = this.$refs.map.addLayer([{ - position: [data.longitude, data.latitude], + position: [data[this.longitudeStr], data[this.latitudeStr]], image: { src: this.getImageByChannel(data), anchor: [0.5, 1] }, data: data }], this.featureClickEvent) - this.$refs.map.panTo([data.longitude, data.latitude], mapParam.maxZoom) + this.$refs.map.panTo([data[this.longitudeStr], data[this.latitudeStr]], mapParam.maxZoom) } } }, - contextmenuEventHandler: function (event, data) { - if (data.channelId && data.subCount == 0) { + contextmenuEventHandler: function (device, event, data, isCatalog) { + console.log(device) + console.log(device.online) + this.device = device; + if (data.channelId && !isCatalog) { // 鐐瑰嚮閫氶亾 this.$contextmenu({ items: [ { label: "鎾斁", icon: "el-icon-video-play", - disabled: false, + disabled: device.online === 0, onClick: () => { this.play(data); } @@ -183,22 +200,11 @@ this.clean() this.closeInfoBox() let params = []; - let longitudeStr; - let latitudeStr; - if (window.mapParam.coordinateSystem == "GCJ-02") { - longitudeStr = "longitudeGcj02"; - latitudeStr = "latitudeGcj02"; - }else if (window.mapParam.coordinateSystem == "WGS84") { - longitudeStr = "longitudeWgs84"; - latitudeStr = "latitudeWgs84"; - }else { - longitudeStr = "longitude"; - latitudeStr = "latitude"; - } + for (let i = 0; i < channels.length; i++) { - let longitude = channels[i][longitudeStr]; - let latitude = channels[i][latitudeStr]; + let longitude = channels[i][this.longitudeStr]; + let latitude = channels[i][this.latitudeStr]; if (longitude * latitude === 0) { continue; } @@ -217,7 +223,7 @@ this.layer = this.$refs.map.addLayer(params, this.featureClickEvent) console.log(4) if (params.length === 1) { - this.$refs.map.panTo([channels[0][longitudeStr], channels[0][latitudeStr]], mapParam.maxZoom) + this.$refs.map.panTo([channels[0][this.longitudeStr], channels[0][this.latitudeStr]], mapParam.maxZoom) } else if (params.length > 1) { this.$refs.map.fit(this.layer) } else { @@ -266,19 +272,7 @@ this.channel = channels[0] } this.$nextTick(() => { - let longitudeStr; - let latitudeStr; - if (window.mapParam.coordinateSystem == "GCJ-02") { - longitudeStr = "longitudeGcj02"; - latitudeStr = "latitudeGcj02"; - }else if (window.mapParam.coordinateSystem == "WGS84") { - longitudeStr = "longitudeWgs84"; - latitudeStr = "latitudeWgs84"; - }else { - longitudeStr = "longitude"; - latitudeStr = "latitude"; - } - let position = [this.channel[longitudeStr], this.channel[latitudeStr]]; + let position = [this.channel[this.longitudeStr], this.channel[this.latitudeStr]]; this.infoBoxId = this.$refs.map.openInfoBox(position, this.$refs.infobox, [0, -50]) }) }, diff --git a/web_src/src/components/service/DeviceService.js b/web_src/src/components/service/DeviceService.js index fb66374..45d4ac2 100644 --- a/web_src/src/components/service/DeviceService.js +++ b/web_src/src/components/service/DeviceService.js @@ -133,6 +133,49 @@ if (typeof (callback) == "function") callback(res.data) }).catch(errorCallback); } + + getTree(deviceId, id, param3, param4) { + + } + + getTree(deviceId, parentId, onlyCatalog, callback, endCallback, errorCallback) { + let currentPage = 1; + let count = 100; + let catalogList = [] + this.getTreeIteration(deviceId, parentId, onlyCatalog, catalogList, currentPage, count, callback, endCallback, errorCallback) + } + + getTreeIteration(deviceId, parentId, onlyCatalog, catalogList, currentPage, count, callback, endCallback, errorCallback) { + this.getTreeInfo(deviceId, parentId, onlyCatalog, currentPage, count, (data) => { + if (data.list) { + if (typeof (callback) == "function") callback(data.list) + catalogList = catalogList.concat(data.list); + if (catalogList.length < data.total) { + currentPage ++ + this.getTreeIteration(deviceId, parentId, onlyCatalog, catalogList, currentPage, count, callback, endCallback, errorCallback) + }else { + if (typeof (endCallback) == "function") endCallback(catalogList) + } + } + }, errorCallback) + } + getTreeInfo(deviceId, parentId, onlyCatalog, currentPage, count, callback, errorCallback) { + if (onlyCatalog == null || typeof onlyCatalog === "undefined") { + onlyCatalog = false; + } + this.$axios({ + method: 'get', + url: `/api/device/query/tree/${deviceId}`, + params:{ + page: currentPage, + count: count, + parentId: parentId, + onlyCatalog: onlyCatalog + } + }).then((res) =>{ + if (typeof (callback) == "function") callback(res.data) + }).catch(errorCallback); + } } export default DeviceService; diff --git a/web_src/src/router/index.js b/web_src/src/router/index.js index 2f44fd8..2c9c6f3 100644 --- a/web_src/src/router/index.js +++ b/web_src/src/router/index.js @@ -59,7 +59,7 @@ component: streamProxyList, }, { - path: '/channelList/:deviceId/:parentChannelId/:count/:page', + path: '/channelList/:deviceId/:parentChannelId/', name: 'channelList', component: channelList, }, diff --git a/web_src/static/css/iconfont.css b/web_src/static/css/iconfont.css index 2a08b07..a09b98e 100644 --- a/web_src/static/css/iconfont.css +++ b/web_src/static/css/iconfont.css @@ -1,6 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 1291092 */ - src: url('iconfont.woff2?t=1650436696596') format('woff2'); + src: url('iconfont.woff2?t=1655453611360') format('woff2'), + url('iconfont.woff?t=1655453611360') format('woff'), + url('iconfont.ttf?t=1655453611360') format('truetype'); } .iconfont { @@ -11,6 +13,30 @@ -moz-osx-font-smoothing: grayscale; } +.icon-list:before { + content: "\e7de"; +} + +.icon-tree:before { + content: "\e7df"; +} + +.icon-shipin:before { + content: "\e7db"; +} + +.icon-shipin1:before { + content: "\e7dc"; +} + +.icon-shipin2:before { + content: "\e7dd"; +} + +.icon-LC_icon_gps_fill:before { + content: "\e7da"; +} + .icon-jiedianleizhukongzhongxin1:before { content: "\e9d0"; } diff --git a/web_src/static/css/iconfont.woff2 b/web_src/static/css/iconfont.woff2 index 7204137..c2fdf69 100644 --- a/web_src/static/css/iconfont.woff2 +++ b/web_src/static/css/iconfont.woff2 Binary files differ -- Gitblit v1.8.0