Commit a42dda2bd3cc1cf8c20cc61e7ad9211eadecbaf3

Authored by 648540858
1 parent 2157bb02

规范数据库,添加必要约束,优化通道批量导入功能

@@ -231,6 +231,14 @@ @@ -231,6 +231,14 @@
231 <!-- <version>1.0.8</version>--> 231 <!-- <version>1.0.8</version>-->
232 <!-- </dependency>--> 232 <!-- </dependency>-->
233 233
  234 + <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
  235 + <dependency>
  236 + <groupId>com.google.guava</groupId>
  237 + <artifactId>guava</artifactId>
  238 + <version>31.0.1-jre</version>
  239 + </dependency>
  240 +
  241 +
234 <dependency> 242 <dependency>
235 <groupId>org.springframework.boot</groupId> 243 <groupId>org.springframework.boot</groupId>
236 <artifactId>spring-boot-starter-test</artifactId> 244 <artifactId>spring-boot-starter-test</artifactId>
sql/mysql.sql
@@ -53,7 +53,6 @@ CREATE TABLE `device` ( @@ -53,7 +53,6 @@ CREATE TABLE `device` (
53 53
54 LOCK TABLES `device` WRITE; 54 LOCK TABLES `device` WRITE;
55 /*!40000 ALTER TABLE `device` DISABLE KEYS */; 55 /*!40000 ALTER TABLE `device` DISABLE KEYS */;
56 -INSERT INTO `device` VALUES (1,'34020000002000000005','DH-NVR5864-I','Dahua','DH-NVR5864-I','4.001.0000000.3,2020-10-22','UDP','UDP','1','2022-02-22 11:05:10','2022-02-22 11:42:10','192.168.1.19','2022-02-22 10:17:24','2022-02-22 11:42:10',5060,3600,0,'192.168.1.19:5060','gb2312');  
57 /*!40000 ALTER TABLE `device` ENABLE KEYS */; 56 /*!40000 ALTER TABLE `device` ENABLE KEYS */;
58 UNLOCK TABLES; 57 UNLOCK TABLES;
59 58
@@ -126,7 +125,8 @@ CREATE TABLE `device_channel` ( @@ -126,7 +125,8 @@ CREATE TABLE `device_channel` (
126 `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, 125 `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
127 `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, 126 `updateTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
128 `subCount` int DEFAULT '0', 127 `subCount` int DEFAULT '0',
129 - PRIMARY KEY (`channelId`,`deviceId`) USING BTREE 128 + PRIMARY KEY (`channelId`,`deviceId`) USING BTREE,
  129 + UNIQUE KEY `device_channel_pk` (`channelId`,`deviceId`)
130 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; 130 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
131 /*!40101 SET character_set_client = @saved_cs_client */; 131 /*!40101 SET character_set_client = @saved_cs_client */;
132 132
@@ -136,7 +136,6 @@ CREATE TABLE `device_channel` ( @@ -136,7 +136,6 @@ CREATE TABLE `device_channel` (
136 136
137 LOCK TABLES `device_channel` WRITE; 137 LOCK TABLES `device_channel` WRITE;
138 /*!40000 ALTER TABLE `device_channel` DISABLE KEYS */; 138 /*!40000 ALTER TABLE `device_channel` DISABLE KEYS */;
139 -INSERT INTO `device_channel` VALUES ('34020000001310000001','通道1','Dahua','DH-NVR5864-I','0','340200','','axy','34020000002000000005',0,1,'',0,0,NULL,'0','192.168.1.17',37777,'',0,1,0,0,NULL,'34020000002000000005','0',NULL,'','',0),('34020000001310000065','GB_Chn_065','Dahua','DH-NVR5864-I','0','340200','','axy','34020000002000000005',0,1,'',0,0,NULL,'0','',0,'',0,1,0,0,NULL,'34020000002000000005','0',NULL,'','',0);  
140 /*!40000 ALTER TABLE `device_channel` ENABLE KEYS */; 139 /*!40000 ALTER TABLE `device_channel` ENABLE KEYS */;
141 UNLOCK TABLES; 140 UNLOCK TABLES;
142 141
@@ -183,7 +182,7 @@ DROP TABLE IF EXISTS `gb_stream`; @@ -183,7 +182,7 @@ DROP TABLE IF EXISTS `gb_stream`;
183 /*!40101 SET @saved_cs_client = @@character_set_client */; 182 /*!40101 SET @saved_cs_client = @@character_set_client */;
184 /*!50503 SET character_set_client = utf8mb4 */; 183 /*!50503 SET character_set_client = utf8mb4 */;
185 CREATE TABLE `gb_stream` ( 184 CREATE TABLE `gb_stream` (
186 - `id` int NOT NULL AUTO_INCREMENT, 185 + `gbStreamId` int NOT NULL AUTO_INCREMENT,
187 `app` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, 186 `app` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
188 `stream` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, 187 `stream` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
189 `gbId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, 188 `gbId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
@@ -194,10 +193,10 @@ CREATE TABLE `gb_stream` ( @@ -194,10 +193,10 @@ CREATE TABLE `gb_stream` (
194 `mediaServerId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, 193 `mediaServerId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
195 `status` int DEFAULT NULL, 194 `status` int DEFAULT NULL,
196 `createStamp` bigint DEFAULT NULL, 195 `createStamp` bigint DEFAULT NULL,
197 - PRIMARY KEY (`id`) USING BTREE, 196 + PRIMARY KEY (`gbStreamId`) USING BTREE,
198 UNIQUE KEY `app` (`app`,`stream`) USING BTREE, 197 UNIQUE KEY `app` (`app`,`stream`) USING BTREE,
199 UNIQUE KEY `gbId` (`gbId`) USING BTREE 198 UNIQUE KEY `gbId` (`gbId`) USING BTREE
200 -) ENGINE=InnoDB AUTO_INCREMENT=77 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; 199 +) ENGINE=InnoDB AUTO_INCREMENT=291 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
201 /*!40101 SET character_set_client = @saved_cs_client */; 200 /*!40101 SET character_set_client = @saved_cs_client */;
202 201
203 -- 202 --
@@ -206,7 +205,6 @@ CREATE TABLE `gb_stream` ( @@ -206,7 +205,6 @@ CREATE TABLE `gb_stream` (
206 205
207 LOCK TABLES `gb_stream` WRITE; 206 LOCK TABLES `gb_stream` WRITE;
208 /*!40000 ALTER TABLE `gb_stream` DISABLE KEYS */; 207 /*!40000 ALTER TABLE `gb_stream` DISABLE KEYS */;
209 -INSERT INTO `gb_stream` VALUES (74,'1000','10000000_000','34020000002000000001','测试1',0,0,'push','FQ3TF8yT83wh5Wvz',0,1645500864142),(75,'1000','10000001_000','34020000012000000002','测试2',0,0,'push','FQ3TF8yT83wh5Wvz',0,1645500864142),(76,'1000','10000002_000','34020000022000000003','测试3',0,0,'push','FQ3TF8yT83wh5Wvz',0,1645500864142);  
210 /*!40000 ALTER TABLE `gb_stream` ENABLE KEYS */; 208 /*!40000 ALTER TABLE `gb_stream` ENABLE KEYS */;
211 UNLOCK TABLES; 209 UNLOCK TABLES;
212 210
@@ -228,7 +226,7 @@ CREATE TABLE `log` ( @@ -228,7 +226,7 @@ CREATE TABLE `log` (
228 `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, 226 `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
229 `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, 227 `createTime` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
230 PRIMARY KEY (`id`) USING BTREE 228 PRIMARY KEY (`id`) USING BTREE
231 -) ENGINE=InnoDB AUTO_INCREMENT=206 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; 229 +) ENGINE=InnoDB AUTO_INCREMENT=245 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
232 /*!40101 SET character_set_client = @saved_cs_client */; 230 /*!40101 SET character_set_client = @saved_cs_client */;
233 231
234 -- 232 --
@@ -237,7 +235,6 @@ CREATE TABLE `log` ( @@ -237,7 +235,6 @@ CREATE TABLE `log` (
237 235
238 LOCK TABLES `log` WRITE; 236 LOCK TABLES `log` WRITE;
239 /*!40000 ALTER TABLE `log` DISABLE KEYS */; 237 /*!40000 ALTER TABLE `log` DISABLE KEYS */;
240 -INSERT INTO `log` VALUES (163,'登录','GET','/api/user/login','127.0.0.1','200 OK',243,'admin','2022-02-22 10:18:15'),(164,'开始点播','GET','/api/play/start/34020000002000000005/34020000001310000001','127.0.0.1','200 OK',77,'admin','2022-02-22 10:18:35'),(165,'[设备查询] 同步设备通道','POST','/api/device/query/devices/34020000002000000005/sync','127.0.0.1','200 OK',10,'admin','2022-02-22 10:18:47'),(166,'开始点播','GET','/api/play/start/34020000002000000005/34020000001310000065','127.0.0.1','200 OK',19,'admin','2022-02-22 10:18:50'),(167,'停止点播','GET','/api/play/stop/34020000002000000005/34020000001310000065','127.0.0.1','200 OK',159,'admin','2022-02-22 10:19:08'),(168,'保存代理','POST','/api/proxy/save','127.0.0.1','200 OK',305,'admin','2022-02-22 10:22:02'),(169,'保存代理','POST','/api/proxy/save','127.0.0.1','200 OK',142,'admin','2022-02-22 10:22:28'),(170,'添加上级平台','POST','/api/platform/save','127.0.0.1','200 OK',11,'admin','2022-02-22 10:22:57'),(171,'登录','GET','/api/user/login','127.0.0.1','200 OK',255,'admin','2022-02-22 10:26:31'),(172,'移除代理','DELETE','/api/proxy/del','127.0.0.1','200 OK',40,'admin','2022-02-22 10:26:44'),(173,'保存代理','POST','/api/proxy/save','127.0.0.1','200 OK',139,'admin','2022-02-22 10:26:51'),(174,'登录','GET','/api/user/login','127.0.0.1','200 OK',657,'admin','2022-02-22 10:28:21'),(175,'登录','GET','/api/user/login','127.0.0.1','200 OK',302,'admin','2022-02-22 11:04:24'),(176,'移除代理','DELETE','/api/proxy/del','127.0.0.1','200 OK',33,'admin','2022-02-22 11:04:34'),(177,'移除代理','DELETE','/api/proxy/del','127.0.0.1','200 OK',17,'admin','2022-02-22 11:04:35'),(178,'保存代理','POST','/api/proxy/save','127.0.0.1','200 OK',186,'admin','2022-02-22 11:04:44'),(179,'登录','GET','/api/user/login','127.0.0.1','200 OK',258,'admin','2022-02-22 11:05:05'),(180,'保存代理','POST','/api/proxy/save','127.0.0.1','200 OK',97,'admin','2022-02-22 11:05:51'),(181,'登录','GET','/api/user/login','127.0.0.1','200 OK',300,'admin','2022-02-22 11:11:30'),(182,'保存代理','POST','/api/proxy/save','127.0.0.1','200 OK',145,'admin','2022-02-22 11:12:00'),(183,'登录','GET','/api/user/login','127.0.0.1','200 OK',264,'admin','2022-02-22 11:12:42'),(184,'保存代理','POST','/api/proxy/save','127.0.0.1','200 OK',41793,'admin','2022-02-22 11:13:42'),(185,'登录','GET','/api/user/login','127.0.0.1','200 OK',245,'admin','2022-02-22 11:13:58'),(186,'保存代理','POST','/api/proxy/save','127.0.0.1','200 OK',86,'admin','2022-02-22 11:14:11'),(187,'登录','GET','/api/user/login','127.0.0.1','200 OK',293,'admin','2022-02-22 11:31:52'),(188,'向上级平台添加国标通道','POST','/api/platform/update_channel_for_gb','127.0.0.1','200 OK',14,'admin','2022-02-22 11:34:55'),(189,'向上级平台添加国标通道','POST','/api/platform/update_channel_for_gb','127.0.0.1','200 OK',11,'admin','2022-02-22 11:35:02'),(190,'保存代理','POST','/api/proxy/save','127.0.0.1','200 OK',16,'admin','2022-02-22 11:37:00'),(191,'登录','GET','/api/user/login','127.0.0.1','200 OK',340,'admin','2022-02-22 11:38:15'),(192,'停用代理','GET','/api/proxy/stop','127.0.0.1','200 OK',16,'admin','2022-02-22 11:38:20'),(193,'停用代理','GET','/api/proxy/stop','127.0.0.1','200 OK',10,'admin','2022-02-22 11:38:28'),(194,'登录','GET','/api/user/login','127.0.0.1','200 OK',288,'admin','2022-02-22 11:39:34'),(195,'停用代理','GET','/api/proxy/stop','127.0.0.1','200 OK',29,'admin','2022-02-22 11:39:36'),(196,'启用代理','GET','/api/proxy/start','127.0.0.1','200 OK',594,'admin','2022-02-22 11:39:38'),(197,'停用代理','GET','/api/proxy/stop','127.0.0.1','200 OK',16,'admin','2022-02-22 11:39:43'),(198,'停用代理','GET','/api/proxy/stop','127.0.0.1','200 OK',27,'admin','2022-02-22 11:41:30'),(199,'停用代理','GET','/api/proxy/stop','127.0.0.1','200 OK',17,'admin','2022-02-22 11:41:42'),(200,'启用代理','GET','/api/proxy/start','127.0.0.1','200 OK',9,'admin','2022-02-22 11:41:44'),(201,'启用代理','GET','/api/proxy/start','127.0.0.1','200 OK',6,'admin','2022-02-22 11:41:47'),(202,'启用代理','GET','/api/proxy/start','127.0.0.1','200 OK',67,'admin','2022-02-22 11:41:48'),(203,'移除代理','DELETE','/api/proxy/del','127.0.0.1','200 OK',14,'admin','2022-02-22 11:41:51'),(204,'移除代理','DELETE','/api/proxy/del','127.0.0.1','200 OK',16,'admin','2022-02-22 11:41:52'),(205,'移除代理','DELETE','/api/proxy/del','127.0.0.1','200 OK',14,'admin','2022-02-22 11:41:53');  
241 /*!40000 ALTER TABLE `log` ENABLE KEYS */; 238 /*!40000 ALTER TABLE `log` ENABLE KEYS */;
242 UNLOCK TABLES; 239 UNLOCK TABLES;
243 240
@@ -283,7 +280,6 @@ CREATE TABLE `media_server` ( @@ -283,7 +280,6 @@ CREATE TABLE `media_server` (
283 280
284 LOCK TABLES `media_server` WRITE; 281 LOCK TABLES `media_server` WRITE;
285 /*!40000 ALTER TABLE `media_server` DISABLE KEYS */; 282 /*!40000 ALTER TABLE `media_server` DISABLE KEYS */;
286 -INSERT INTO `media_server` VALUES ('FQ3TF8yT83wh5Wvz','192.168.1.3','192.168.1.3','192.168.1.3','192.168.1.3',6080,0,10935,0,10000,10554,0,1,'035c73f7-bb6b-4889-a715-d9eb2d1925cc',18000,1,'30000,30500','30000,30500',18081,1,'2022-02-22 11:39:33','2022-02-22 11:39:33',30);  
287 /*!40000 ALTER TABLE `media_server` ENABLE KEYS */; 283 /*!40000 ALTER TABLE `media_server` ENABLE KEYS */;
288 UNLOCK TABLES; 284 UNLOCK TABLES;
289 285
@@ -316,8 +312,10 @@ CREATE TABLE `parent_platform` ( @@ -316,8 +312,10 @@ CREATE TABLE `parent_platform` (
316 `rtcp` int DEFAULT NULL, 312 `rtcp` int DEFAULT NULL,
317 `status` bit(1) DEFAULT NULL, 313 `status` bit(1) DEFAULT NULL,
318 `shareAllLiveStream` int DEFAULT NULL, 314 `shareAllLiveStream` int DEFAULT NULL,
319 - PRIMARY KEY (`id`,`serverGBId`) USING BTREE  
320 -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; 315 + PRIMARY KEY (`id`),
  316 + UNIQUE KEY `parent_platform_id_uindex` (`id`),
  317 + UNIQUE KEY `parent_platform_pk` (`serverGBId`)
  318 +) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
321 /*!40101 SET character_set_client = @saved_cs_client */; 319 /*!40101 SET character_set_client = @saved_cs_client */;
322 320
323 -- 321 --
@@ -326,7 +324,6 @@ CREATE TABLE `parent_platform` ( @@ -326,7 +324,6 @@ CREATE TABLE `parent_platform` (
326 324
327 LOCK TABLES `parent_platform` WRITE; 325 LOCK TABLES `parent_platform` WRITE;
328 /*!40000 ALTER TABLE `parent_platform` DISABLE KEYS */; 326 /*!40000 ALTER TABLE `parent_platform` DISABLE KEYS */;
329 -INSERT INTO `parent_platform` VALUES (4,0,'11111','111111111111111','1111111111','11.111.11.11',2342,'34020000013000000001','192.168.1.3','15060','34020000013000000001','12345678','300','60','UDP','GB2312','111111111111111',1,0,_binary '\0',0),(5,0,'2222','222222222222222','2222222222','222.22.2.2',2222,'34020000013000000001','192.168.1.3','15060','34020000013000000001','12345678','300','60','UDP','GB2312','222222222222222',1,0,_binary '\0',0);  
330 /*!40000 ALTER TABLE `parent_platform` ENABLE KEYS */; 327 /*!40000 ALTER TABLE `parent_platform` ENABLE KEYS */;
331 UNLOCK TABLES; 328 UNLOCK TABLES;
332 329
@@ -379,7 +376,6 @@ CREATE TABLE `platform_gb_channel` ( @@ -379,7 +376,6 @@ CREATE TABLE `platform_gb_channel` (
379 376
380 LOCK TABLES `platform_gb_channel` WRITE; 377 LOCK TABLES `platform_gb_channel` WRITE;
381 /*!40000 ALTER TABLE `platform_gb_channel` DISABLE KEYS */; 378 /*!40000 ALTER TABLE `platform_gb_channel` DISABLE KEYS */;
382 -INSERT INTO `platform_gb_channel` VALUES (1,'34020000001310000001','34020000002000000005','111111111111111','34020000002000000005_34020000001310000001','111111111111111'),(2,'34020000001310000065','34020000002000000005','222222222222222','34020000002000000005_34020000001310000065','222222222222222');  
383 /*!40000 ALTER TABLE `platform_gb_channel` ENABLE KEYS */; 379 /*!40000 ALTER TABLE `platform_gb_channel` ENABLE KEYS */;
384 UNLOCK TABLES; 380 UNLOCK TABLES;
385 381
@@ -395,8 +391,9 @@ CREATE TABLE `platform_gb_stream` ( @@ -395,8 +391,9 @@ CREATE TABLE `platform_gb_stream` (
395 `catalogId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, 391 `catalogId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
396 `gbStreamId` int NOT NULL, 392 `gbStreamId` int NOT NULL,
397 `id` int NOT NULL AUTO_INCREMENT, 393 `id` int NOT NULL AUTO_INCREMENT,
398 - PRIMARY KEY (`id`)  
399 -) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC; 394 + PRIMARY KEY (`id`),
  395 + UNIQUE KEY `platform_gb_stream_pk` (`platformId`,`catalogId`,`gbStreamId`)
  396 +) ENGINE=InnoDB AUTO_INCREMENT=256 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
400 /*!40101 SET character_set_client = @saved_cs_client */; 397 /*!40101 SET character_set_client = @saved_cs_client */;
401 398
402 -- 399 --
@@ -405,7 +402,6 @@ CREATE TABLE `platform_gb_stream` ( @@ -405,7 +402,6 @@ CREATE TABLE `platform_gb_stream` (
405 402
406 LOCK TABLES `platform_gb_stream` WRITE; 403 LOCK TABLES `platform_gb_stream` WRITE;
407 /*!40000 ALTER TABLE `platform_gb_stream` DISABLE KEYS */; 404 /*!40000 ALTER TABLE `platform_gb_stream` DISABLE KEYS */;
408 -INSERT INTO `platform_gb_stream` VALUES ('111111111111111','111111111111111',70,35),('111111111111111','111111111111111',71,36),('111111111111111','111111111111111',72,37),('222222222222222','222222222222222',73,38),('111111111111111','111111111111111',74,39),('111111111111111','111111111111111',75,40),('111111111111111','111111111111111',76,41);  
409 /*!40000 ALTER TABLE `platform_gb_stream` ENABLE KEYS */; 405 /*!40000 ALTER TABLE `platform_gb_stream` ENABLE KEYS */;
410 UNLOCK TABLES; 406 UNLOCK TABLES;
411 407
@@ -434,7 +430,8 @@ CREATE TABLE `stream_proxy` ( @@ -434,7 +430,8 @@ CREATE TABLE `stream_proxy` (
434 `status` bit(1) NOT NULL, 430 `status` bit(1) NOT NULL,
435 `enable_remove_none_reader` bit(1) NOT NULL, 431 `enable_remove_none_reader` bit(1) NOT NULL,
436 `createTime` varchar(50) COLLATE utf8mb4_general_ci NOT NULL, 432 `createTime` varchar(50) COLLATE utf8mb4_general_ci NOT NULL,
437 - PRIMARY KEY (`id`) 433 + PRIMARY KEY (`id`),
  434 + UNIQUE KEY `stream_proxy_pk` (`app`,`stream`)
438 ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; 435 ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
439 /*!40101 SET character_set_client = @saved_cs_client */; 436 /*!40101 SET character_set_client = @saved_cs_client */;
440 437
@@ -466,7 +463,7 @@ CREATE TABLE `stream_push` ( @@ -466,7 +463,7 @@ CREATE TABLE `stream_push` (
466 `mediaServerId` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, 463 `mediaServerId` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL,
467 PRIMARY KEY (`id`), 464 PRIMARY KEY (`id`),
468 UNIQUE KEY `stream_push_pk` (`app`,`stream`) 465 UNIQUE KEY `stream_push_pk` (`app`,`stream`)
469 -) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; 466 +) ENGINE=InnoDB AUTO_INCREMENT=310 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
470 /*!40101 SET character_set_client = @saved_cs_client */; 467 /*!40101 SET character_set_client = @saved_cs_client */;
471 468
472 -- 469 --
@@ -475,7 +472,6 @@ CREATE TABLE `stream_push` ( @@ -475,7 +472,6 @@ CREATE TABLE `stream_push` (
475 472
476 LOCK TABLES `stream_push` WRITE; 473 LOCK TABLES `stream_push` WRITE;
477 /*!40000 ALTER TABLE `stream_push` DISABLE KEYS */; 474 /*!40000 ALTER TABLE `stream_push` DISABLE KEYS */;
478 -INSERT INTO `stream_push` VALUES (13,'1000','10000000_000','0',2,'rtsp_push',1645500864142,NULL,'FQ3TF8yT83wh5Wvz'),(14,'1000','10000001_000','0',2,'rtsp_push',1645500864142,NULL,'FQ3TF8yT83wh5Wvz'),(15,'1000','10000002_000','0',2,'rtsp_push',1645500864142,NULL,'FQ3TF8yT83wh5Wvz');  
479 /*!40000 ALTER TABLE `stream_push` ENABLE KEYS */; 475 /*!40000 ALTER TABLE `stream_push` ENABLE KEYS */;
480 UNLOCK TABLES; 476 UNLOCK TABLES;
481 477
@@ -544,4 +540,4 @@ UNLOCK TABLES; @@ -544,4 +540,4 @@ UNLOCK TABLES;
544 /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 540 /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
545 /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; 541 /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
546 542
547 --- Dump completed on 2022-02-22 11:43:00 543 +-- Dump completed on 2022-02-24 16:52:12
src/main/java/com/genersoft/iot/vmp/gb28181/bean/GbStream.java
@@ -5,7 +5,7 @@ package com.genersoft.iot.vmp.gb28181.bean; @@ -5,7 +5,7 @@ package com.genersoft.iot.vmp.gb28181.bean;
5 */ 5 */
6 public class GbStream extends PlatformGbStream{ 6 public class GbStream extends PlatformGbStream{
7 7
8 - private int id; 8 + private Integer gbStreamId;
9 private String app; 9 private String app;
10 private String stream; 10 private String stream;
11 private String gbId; 11 private String gbId;
@@ -20,12 +20,13 @@ public class GbStream extends PlatformGbStream{ @@ -20,12 +20,13 @@ public class GbStream extends PlatformGbStream{
20 */ 20 */
21 public Long createStamp; 21 public Long createStamp;
22 22
23 - public int getId() {  
24 - return id; 23 + @Override
  24 + public Integer getGbStreamId() {
  25 + return gbStreamId;
25 } 26 }
26 27
27 - public void setId(int id) {  
28 - this.id = id; 28 + public void setGbStreamId(Integer gbStreamId) {
  29 + this.gbStreamId = gbStreamId;
29 } 30 }
30 31
31 public String getApp() { 32 public String getApp() {
src/main/java/com/genersoft/iot/vmp/gb28181/bean/PlatformGbStream.java
1 package com.genersoft.iot.vmp.gb28181.bean; 1 package com.genersoft.iot.vmp.gb28181.bean;
2 2
3 public class PlatformGbStream { 3 public class PlatformGbStream {
4 - private String gbStreamId; 4 + private Integer gbStreamId;
5 private String platformId; 5 private String platformId;
6 private String catalogId; 6 private String catalogId;
7 7
8 - public String getGbStreamId() { 8 + public Integer getGbStreamId() {
9 return gbStreamId; 9 return gbStreamId;
10 } 10 }
11 11
12 - public void setGbStreamId(String gbStreamId) { 12 + public void setGbStreamId(Integer gbStreamId) {
13 this.gbStreamId = gbStreamId; 13 this.gbStreamId = gbStreamId;
14 } 14 }
15 15
src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamPushItem.java
@@ -9,6 +9,11 @@ import java.util.List; @@ -9,6 +9,11 @@ import java.util.List;
9 public class StreamPushItem extends GbStream implements Comparable<StreamPushItem>{ 9 public class StreamPushItem extends GbStream implements Comparable<StreamPushItem>{
10 10
11 /** 11 /**
  12 + * id
  13 + */
  14 + private Integer id;
  15 +
  16 + /**
12 * 应用名 17 * 应用名
13 */ 18 */
14 private String app; 19 private String app;
@@ -111,6 +116,13 @@ public class StreamPushItem extends GbStream implements Comparable&lt;StreamPushIte @@ -111,6 +116,13 @@ public class StreamPushItem extends GbStream implements Comparable&lt;StreamPushIte
111 } 116 }
112 } 117 }
113 118
  119 + public Integer getId() {
  120 + return id;
  121 + }
  122 +
  123 + public void setId(Integer id) {
  124 + this.id = id;
  125 + }
114 126
115 public String getApp() { 127 public String getApp() {
116 return app; 128 return app;
src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java
@@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto; @@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
9 import com.github.pagehelper.PageInfo; 9 import com.github.pagehelper.PageInfo;
10 10
11 import java.util.List; 11 import java.util.List;
  12 +import java.util.Map;
12 13
13 public interface IStreamPushService { 14 public interface IStreamPushService {
14 15
@@ -69,5 +70,5 @@ public interface IStreamPushService { @@ -69,5 +70,5 @@ public interface IStreamPushService {
69 70
70 boolean batchStop(List<GbStream> streamPushItems); 71 boolean batchStop(List<GbStream> streamPushItems);
71 72
72 - void batchAddForUpload(String platformId, String catalogId, List<StreamPushItem> streamPushItems); 73 + void batchAddForUpload(List<StreamPushItem> streamPushItems, Map<String, List<String[]>> streamPushItemsForAll);
73 } 74 }
src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java
@@ -159,7 +159,9 @@ public class GbStreamServiceImpl implements IGbStreamService { @@ -159,7 +159,9 @@ public class GbStreamServiceImpl implements IGbStreamService {
159 List<ParentPlatform> parentPlatforms = platformGbStreamMapper.selectByAppAndStream(gs.getApp(), gs.getStream()); 159 List<ParentPlatform> parentPlatforms = platformGbStreamMapper.selectByAppAndStream(gs.getApp(), gs.getStream());
160 if (parentPlatforms.size() > 0) { 160 if (parentPlatforms.size() > 0) {
161 for (ParentPlatform parentPlatform : parentPlatforms) { 161 for (ParentPlatform parentPlatform : parentPlatforms) {
162 - eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), gs, type); 162 + if (parentPlatform != null) {
  163 + eventPublisher.catalogEventPublishForStream(parentPlatform.getServerGBId(), gs, type);
  164 + }
163 } 165 }
164 } 166 }
165 } 167 }
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
@@ -28,6 +28,7 @@ import org.springframework.stereotype.Service; @@ -28,6 +28,7 @@ import org.springframework.stereotype.Service;
28 import org.springframework.util.StringUtils; 28 import org.springframework.util.StringUtils;
29 29
30 import java.util.*; 30 import java.util.*;
  31 +import java.util.stream.Collectors;
31 32
32 @Service 33 @Service
33 public class StreamPushServiceImpl implements IStreamPushService { 34 public class StreamPushServiceImpl implements IStreamPushService {
@@ -359,23 +360,63 @@ public class StreamPushServiceImpl implements IStreamPushService { @@ -359,23 +360,63 @@ public class StreamPushServiceImpl implements IStreamPushService {
359 } 360 }
360 361
361 @Override 362 @Override
362 - public void batchAddForUpload(String platformId, String catalogId, List<StreamPushItem> streamPushItems) { 363 + public void batchAddForUpload(List<StreamPushItem> streamPushItems, Map<String, List<String[]>> streamPushItemsForAll ) {
  364 + // 存储数据到stream_push表
363 streamPushMapper.addAll(streamPushItems); 365 streamPushMapper.addAll(streamPushItems);
364 - gbStreamMapper.batchAdd(streamPushItems);  
365 - if (platformId != null) {  
366 - ParentPlatform platform = parentPlatformMapper.getParentPlatByServerGBId(platformId);  
367 - if (platform != null) {  
368 - if (catalogId == null) {  
369 - catalogId = platform.getCatalogId();  
370 - }else {  
371 - PlatformCatalog catalog = platformCatalogMapper.select(catalogId);  
372 - if (catalog == null) {  
373 - return; 366 + List<StreamPushItem> streamPushItemForGbStream = streamPushItems.stream()
  367 + .filter(streamPushItem-> streamPushItem.getId() != null)
  368 + .collect(Collectors.toList());
  369 + // 存储数据到gb_stream表, id会返回到streamPushItemForGbStream里
  370 + if (streamPushItemForGbStream.size() > 0) {
  371 + gbStreamMapper.batchAdd(streamPushItemForGbStream);
  372 + }
  373 + // 去除没有ID也就是没有存储到数据库的数据
  374 + List<StreamPushItem> streamPushItemsForPlatform = streamPushItemForGbStream.stream()
  375 + .filter(streamPushItem-> streamPushItem.getGbStreamId() != null)
  376 + .collect(Collectors.toList());
  377 +
  378 + if (streamPushItemsForPlatform.size() > 0) {
  379 + List<StreamPushItem> streamPushItemListFroPlatform = new ArrayList<>();
  380 + Map<String, List<StreamPushItem>> platformForEvent = new HashMap<>();
  381 + // 遍历存储结果,查找app+Stream->platformId+catalogId的对应关系,然后执行批量写入
  382 + for (StreamPushItem streamPushItem : streamPushItemsForPlatform) {
  383 + List<String[]> platFormInfoList = streamPushItemsForAll.get(streamPushItem.getApp() + streamPushItem.getStream());
  384 + if (platFormInfoList != null) {
  385 + if (platFormInfoList.size() > 0) {
  386 + for (String[] platFormInfoArray : platFormInfoList) {
  387 + StreamPushItem streamPushItemForPlatform = new StreamPushItem();
  388 + streamPushItemForPlatform.setGbStreamId(streamPushItem.getGbStreamId());
  389 + if (platFormInfoArray.length > 0) {
  390 + // 数组 platFormInfoArray 0 为平台ID。 1为目录ID
  391 + streamPushItemForPlatform.setPlatformId(platFormInfoArray[0]);
  392 +
  393 + List<StreamPushItem> streamPushItemsInPlatform = platformForEvent.get(streamPushItem.getPlatformId());
  394 + if (streamPushItemsInPlatform == null) {
  395 + streamPushItemsInPlatform = new ArrayList<>();
  396 + platformForEvent.put(platFormInfoArray[0], streamPushItemsInPlatform);
  397 + }
  398 + // 为发送通知整理数据
  399 + streamPushItemForPlatform.setApp(streamPushItem.getApp());
  400 + streamPushItemForPlatform.setStream(streamPushItem.getStream());
  401 + streamPushItemForPlatform.setGbId(streamPushItem.getGbId());
  402 + streamPushItemsInPlatform.add(streamPushItemForPlatform);
  403 + }
  404 + if (platFormInfoArray.length > 1) {
  405 + streamPushItemForPlatform.setCatalogId(platFormInfoArray[1]);
  406 + }
  407 + streamPushItemListFroPlatform.add(streamPushItemForPlatform);
  408 +
  409 +
  410 + }
374 } 411 }
  412 +
375 } 413 }
376 - List<GbStream> gbStreamList = gbStreamMapper.selectAllForAppAndStream(streamPushItems);  
377 - platformGbStreamMapper.batchAdd(platformId, catalogId, gbStreamList);  
378 - eventPublisher.catalogEventPublishForStream(platformId, streamPushItems.toArray(new GbStream[0]), CatalogEvent.ADD); 414 + }
  415 + platformGbStreamMapper.batchAdd(streamPushItemListFroPlatform);
  416 + // 发送通知
  417 + for (String platformId : platformForEvent.keySet()) {
  418 + eventPublisher.catalogEventPublishForStream(
  419 + platformId, platformForEvent.get(platformId).toArray(new GbStream[0]), CatalogEvent.ADD);
379 } 420 }
380 } 421 }
381 } 422 }
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
@@ -5,21 +5,45 @@ import com.alibaba.excel.event.AnalysisEventListener; @@ -5,21 +5,45 @@ import com.alibaba.excel.event.AnalysisEventListener;
5 import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; 5 import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
6 import com.genersoft.iot.vmp.service.IStreamPushService; 6 import com.genersoft.iot.vmp.service.IStreamPushService;
7 import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto; 7 import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
  8 +import com.google.common.collect.BiMap;
  9 +import com.google.common.collect.HashBiMap;
8 import org.springframework.util.StringUtils; 10 import org.springframework.util.StringUtils;
9 11
10 import java.util.*; 12 import java.util.*;
11 13
12 public class StreamPushUploadFileHandler extends AnalysisEventListener<StreamPushExcelDto> { 14 public class StreamPushUploadFileHandler extends AnalysisEventListener<StreamPushExcelDto> {
13 15
  16 + // 错误数据的回调,用于将错误数据发送给页面
14 private ErrorDataHandler errorDataHandler; 17 private ErrorDataHandler errorDataHandler;
  18 +
  19 + // 推流的业务类用于存储数据
15 private IStreamPushService pushService; 20 private IStreamPushService pushService;
  21 +
  22 + // 默认流媒体节点ID
16 private String defaultMediaServerId; 23 private String defaultMediaServerId;
  24 +
  25 + // 用于存储不加过滤的所有数据
17 private List<StreamPushItem> streamPushItems = new ArrayList<>(); 26 private List<StreamPushItem> streamPushItems = new ArrayList<>();
18 - private Map<String, UploadData> streamPushItemsForPlatform = new HashMap<>(); 27 +
  28 + // 用于存储更具APP+Stream过滤后的数据,可以直接存入stream_push表与gb_stream表
  29 + private Map<String,StreamPushItem> streamPushItemForSave = new HashMap<>();
  30 +
  31 + // 用于存储按照APP+Stream为KEY, 平台ID+目录Id 为value的数据,用于存储到gb_stream表后获取app+Stream对应的平台与目录信息,然后存入关联表
  32 + private Map<String, List<String[]>> streamPushItemsForPlatform = new HashMap<>();
  33 +
  34 + // 用于判断文件是否存在重复的app+Stream+平台ID
19 private Set<String> streamPushStreamSet = new HashSet<>(); 35 private Set<String> streamPushStreamSet = new HashSet<>();
20 - private Map<String,String> streamPushGBMap = new HashMap<>(); 36 +
  37 + // 用于存储APP+Stream->国标ID 的数据结构, 数据一一对应,全局判断APP+Stream->国标ID是否存在不对应
  38 + private BiMap<String,String> gBMap = HashBiMap.create();
  39 +
  40 + // 记录错误的APP+Stream
21 private List<String> errorStreamList = new ArrayList<>(); 41 private List<String> errorStreamList = new ArrayList<>();
  42 +
  43 +
  44 + // 记录错误的国标ID
22 private List<String> errorGBList = new ArrayList<>(); 45 private List<String> errorGBList = new ArrayList<>();
  46 +
23 // 读取数量计数器 47 // 读取数量计数器
24 private int loadedSize = 0; 48 private int loadedSize = 0;
25 49
@@ -33,16 +57,6 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener&lt;StreamPus @@ -33,16 +57,6 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener&lt;StreamPus
33 void handle(List<String> streams, List<String> gbId); 57 void handle(List<String> streams, List<String> gbId);
34 } 58 }
35 59
36 - private class UploadData{  
37 - public String platformId;  
38 - public Map<String, List<StreamPushItem>> catalogData = new HashMap<>();  
39 - public List<StreamPushItem> streamPushItems = new ArrayList<>();  
40 -  
41 - public UploadData(String platformId) {  
42 - this.platformId = platformId;  
43 - }  
44 - }  
45 -  
46 @Override 60 @Override
47 public void invoke(StreamPushExcelDto streamPushExcelDto, AnalysisContext analysisContext) { 61 public void invoke(StreamPushExcelDto streamPushExcelDto, AnalysisContext analysisContext) {
48 if (StringUtils.isEmpty(streamPushExcelDto.getApp()) 62 if (StringUtils.isEmpty(streamPushExcelDto.getApp())
@@ -50,18 +64,28 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener&lt;StreamPus @@ -50,18 +64,28 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener&lt;StreamPus
50 || StringUtils.isEmpty(streamPushExcelDto.getGbId())) { 64 || StringUtils.isEmpty(streamPushExcelDto.getGbId())) {
51 return; 65 return;
52 } 66 }
53 - if (streamPushGBMap.get(streamPushExcelDto.getApp() + streamPushExcelDto.getStream()) == null) {  
54 - streamPushGBMap.put(streamPushExcelDto.getApp() + streamPushExcelDto.getStream(), streamPushExcelDto.getGbId());  
55 67
  68 + if (gBMap.get(streamPushExcelDto.getApp() + streamPushExcelDto.getStream()) == null) {
  69 + try {
  70 + gBMap.put(streamPushExcelDto.getApp() + streamPushExcelDto.getStream(), streamPushExcelDto.getGbId());
  71 + }catch (IllegalArgumentException e) {
  72 + e.printStackTrace();
  73 + errorGBList.add(streamPushExcelDto.getGbId() + "(不同的app+stream使用了相同的国标ID)");
  74 + return;
  75 + }
56 }else { 76 }else {
57 - if (!streamPushGBMap.get(streamPushExcelDto.getApp() + streamPushExcelDto.getStream()).equals(streamPushExcelDto.getGbId())) {  
58 - errorGBList.add(streamPushExcelDto.getGbId() + "(同一组app+stream使用了不同国标ID)"); 77 + if (!gBMap.get(streamPushExcelDto.getApp() + streamPushExcelDto.getStream()).equals(streamPushExcelDto.getGbId())) {
  78 + errorGBList.add(streamPushExcelDto.getGbId() + "(同一组app+stream使用了不同的国标ID)");
59 return; 79 return;
60 } 80 }
61 } 81 }
  82 +
62 if (streamPushStreamSet.contains(streamPushExcelDto.getApp() + streamPushExcelDto.getStream() + streamPushExcelDto.getPlatformId())) { 83 if (streamPushStreamSet.contains(streamPushExcelDto.getApp() + streamPushExcelDto.getStream() + streamPushExcelDto.getPlatformId())) {
63 - errorStreamList.add(streamPushExcelDto.getApp() + "/" + streamPushExcelDto.getStream()+ "/" + streamPushExcelDto.getPlatformId() + "(同一组app+stream添加在了同一个平台下)"); 84 + errorStreamList.add(streamPushExcelDto.getApp() + "/" + streamPushExcelDto.getStream()+ "/" +
  85 + streamPushExcelDto.getPlatformId() + "(同一组app+stream添加在了同一个平台下)");
64 return; 86 return;
  87 + }else {
  88 + streamPushStreamSet.add(streamPushExcelDto.getApp()+streamPushExcelDto.getStream() + streamPushExcelDto.getPlatformId());
65 } 89 }
66 90
67 StreamPushItem streamPushItem = new StreamPushItem(); 91 StreamPushItem streamPushItem = new StreamPushItem();
@@ -78,32 +102,31 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener&lt;StreamPus @@ -78,32 +102,31 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener&lt;StreamPus
78 streamPushItem.setTotalReaderCount("0"); 102 streamPushItem.setTotalReaderCount("0");
79 streamPushItem.setPlatformId(streamPushExcelDto.getPlatformId()); 103 streamPushItem.setPlatformId(streamPushExcelDto.getPlatformId());
80 streamPushItem.setCatalogId(streamPushExcelDto.getCatalogId()); 104 streamPushItem.setCatalogId(streamPushExcelDto.getCatalogId());
81 - if (StringUtils.isEmpty(streamPushExcelDto.getPlatformId())) {  
82 - streamPushItems.add(streamPushItem);  
83 - }else {  
84 - UploadData uploadData = streamPushItemsForPlatform.get(streamPushExcelDto.getPlatformId());  
85 - if (uploadData == null) {  
86 - uploadData = new UploadData(streamPushExcelDto.getPlatformId());  
87 - streamPushItemsForPlatform.put(streamPushExcelDto.getPlatformId(), uploadData); 105 +
  106 + // 存入所有的通道信息
  107 + streamPushItems.add(streamPushItem);
  108 + streamPushItemForSave.put(streamPushItem.getApp() + streamPushItem.getStream(), streamPushItem);
  109 +
  110 + if (!StringUtils.isEmpty(streamPushExcelDto.getPlatformId())) {
  111 + List<String[]> platformList = streamPushItemsForPlatform.get(streamPushItem.getApp() + streamPushItem.getStream());
  112 + if (platformList == null) {
  113 + platformList = new ArrayList<>();
  114 + streamPushItemsForPlatform.put(streamPushItem.getApp() + streamPushItem.getStream(), platformList);
88 } 115 }
89 - if (!StringUtils.isEmpty(streamPushExcelDto.getCatalogId())) {  
90 - List<StreamPushItem> streamPushItems = uploadData.catalogData.get(streamPushExcelDto.getCatalogId());  
91 - if (streamPushItems == null) {  
92 - streamPushItems = new ArrayList<>();  
93 - uploadData.catalogData.put(streamPushExcelDto.getCatalogId(), streamPushItems);  
94 - }  
95 - streamPushItems.add(streamPushItem);  
96 - }else {  
97 - uploadData.streamPushItems.add(streamPushItem); 116 + String platformId = streamPushExcelDto.getPlatformId();
  117 + String catalogId = streamPushExcelDto.getCatalogId();
  118 + if (StringUtils.isEmpty(streamPushExcelDto.getCatalogId())) {
  119 + catalogId = null;
98 } 120 }
99 - 121 + String[] platFormInfoArray = new String[]{platformId, catalogId};
  122 + platformList.add(platFormInfoArray);
100 } 123 }
101 124
102 - streamPushStreamSet.add(streamPushExcelDto.getApp()+streamPushExcelDto.getStream() + streamPushExcelDto.getPlatformId());  
103 loadedSize ++; 125 loadedSize ++;
104 if (loadedSize > 1000) { 126 if (loadedSize > 1000) {
105 saveData(); 127 saveData();
106 streamPushItems.clear(); 128 streamPushItems.clear();
  129 + streamPushItemForSave.clear();
107 streamPushItemsForPlatform.clear(); 130 streamPushItemsForPlatform.clear();
108 loadedSize = 0; 131 loadedSize = 0;
109 } 132 }
@@ -114,30 +137,18 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener&lt;StreamPus @@ -114,30 +137,18 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener&lt;StreamPus
114 public void doAfterAllAnalysed(AnalysisContext analysisContext) { 137 public void doAfterAllAnalysed(AnalysisContext analysisContext) {
115 // 这里也要保存数据,确保最后遗留的数据也存储到数据库 138 // 这里也要保存数据,确保最后遗留的数据也存储到数据库
116 saveData(); 139 saveData();
117 - streamPushGBMap.clear(); 140 + streamPushItems.clear();
  141 + streamPushItemForSave.clear();
  142 + gBMap.clear();
118 streamPushStreamSet.clear(); 143 streamPushStreamSet.clear();
  144 + streamPushItemsForPlatform.clear();
119 errorDataHandler.handle(errorStreamList, errorGBList); 145 errorDataHandler.handle(errorStreamList, errorGBList);
120 } 146 }
121 147
122 private void saveData(){ 148 private void saveData(){
123 - if (streamPushItems.size() > 0) {  
124 - pushService.batchAddForUpload(null, null, streamPushItems);  
125 - }  
126 - // 处理已分配到平台的流  
127 - if (streamPushItemsForPlatform.size() > 0){  
128 - for (String platformId : streamPushItemsForPlatform.keySet()) {  
129 - UploadData uploadData = streamPushItemsForPlatform.get(platformId);  
130 - if (uploadData.streamPushItems.size() > 0) {  
131 - pushService.batchAddForUpload(platformId, null, uploadData.streamPushItems);  
132 - }  
133 - if (uploadData.catalogData.size() > 0) {  
134 - for (String catalogId : uploadData.catalogData.keySet()) {  
135 - if (uploadData.catalogData.get(catalogId).size() > 0) {  
136 - pushService.batchAddForUpload(platformId, catalogId, uploadData.catalogData.get(catalogId));  
137 - }  
138 - }  
139 - }  
140 - } 149 + if (streamPushItemForSave.size() > 0) {
  150 + // 向数据库查询是否存在重复的app
  151 + pushService.batchAddForUpload(new ArrayList<>(streamPushItemForSave.values()), streamPushItemsForPlatform);
141 } 152 }
142 } 153 }
143 } 154 }
src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
@@ -41,15 +41,15 @@ public interface GbStreamMapper { @@ -41,15 +41,15 @@ public interface GbStreamMapper {
41 "SELECT gs.* FROM gb_stream gs " + 41 "SELECT gs.* FROM gb_stream gs " +
42 "WHERE " + 42 "WHERE " +
43 "1=1 " + 43 "1=1 " +
44 - " <if test='catalogId != null'> AND gs.id in" + 44 + " <if test='catalogId != null'> AND gs.gbStreamId in" +
45 "(select pgs.gbStreamId from platform_gb_stream pgs where pgs.platformId = #{platformId} and pgs.catalogId=#{catalogId})</if> " + 45 "(select pgs.gbStreamId from platform_gb_stream pgs where pgs.platformId = #{platformId} and pgs.catalogId=#{catalogId})</if> " +
46 - " <if test='catalogId == null'> AND gs.id not in" + 46 + " <if test='catalogId == null'> AND gs.gbStreamId not in" +
47 "(select pgs.gbStreamId from platform_gb_stream pgs where pgs.platformId = #{platformId}) </if> " + 47 "(select pgs.gbStreamId from platform_gb_stream pgs where pgs.platformId = #{platformId}) </if> " +
48 " <if test='query != null'> AND (gs.app LIKE '%${query}%' OR gs.stream LIKE '%${query}%' OR gs.gbId LIKE '%${query}%' OR gs.name LIKE '%${query}%')</if> " + 48 " <if test='query != null'> AND (gs.app LIKE '%${query}%' OR gs.stream LIKE '%${query}%' OR gs.gbId LIKE '%${query}%' OR gs.name LIKE '%${query}%')</if> " +
49 " <if test='pushing == true' > AND gs.status=1</if>" + 49 " <if test='pushing == true' > AND gs.status=1</if>" +
50 " <if test='pushing == false' > AND gs.status=0</if>" + 50 " <if test='pushing == false' > AND gs.status=0</if>" +
51 " <if test='mediaServerId != null' > AND gs.mediaServerId=#{mediaServerId} </if>" + 51 " <if test='mediaServerId != null' > AND gs.mediaServerId=#{mediaServerId} </if>" +
52 - " order by gs.id asc " + 52 + " order by gs.gbStreamId asc " +
53 "</script>") 53 "</script>")
54 List<GbStream> selectAll(String platformId, String catalogId, String query, Boolean pushing, String mediaServerId); 54 List<GbStream> selectAll(String platformId, String catalogId, String query, Boolean pushing, String mediaServerId);
55 55
@@ -60,18 +60,18 @@ public interface GbStreamMapper { @@ -60,18 +60,18 @@ public interface GbStreamMapper {
60 List<GbStream> selectByGBId(String gbId); 60 List<GbStream> selectByGBId(String gbId);
61 61
62 @Select("SELECT gs.*, pgs.platformId as platformId, pgs.catalogId as catalogId FROM gb_stream gs " + 62 @Select("SELECT gs.*, pgs.platformId as platformId, pgs.catalogId as catalogId FROM gb_stream gs " +
63 - "LEFT JOIN platform_gb_stream pgs ON gs.id = pgs.catalogId " + 63 + "LEFT JOIN platform_gb_stream pgs ON gs.gbStreamId = pgs.catalogId " +
64 "WHERE gs.gbId = '${gbId}' AND pgs.platformId = '${platformId}'") 64 "WHERE gs.gbId = '${gbId}' AND pgs.platformId = '${platformId}'")
65 GbStream queryStreamInPlatform(String platformId, String gbId); 65 GbStream queryStreamInPlatform(String platformId, String gbId);
66 66
67 @Select("SELECT gs.*, pgs.platformId as platformId, pgs.catalogId as catalogId FROM gb_stream gs " + 67 @Select("SELECT gs.*, pgs.platformId as platformId, pgs.catalogId as catalogId FROM gb_stream gs " +
68 - "LEFT JOIN platform_gb_stream pgs ON gs.id = pgs.gbStreamId " + 68 + "LEFT JOIN platform_gb_stream pgs ON gs.gbStreamId = pgs.gbStreamId " +
69 "WHERE pgs.platformId = #{platformId}") 69 "WHERE pgs.platformId = #{platformId}")
70 List<GbStream> queryGbStreamListInPlatform(String platformId); 70 List<GbStream> queryGbStreamListInPlatform(String platformId);
71 71
72 72
73 @Select("SELECT gs.* FROM gb_stream gs LEFT JOIN platform_gb_stream pgs " + 73 @Select("SELECT gs.* FROM gb_stream gs LEFT JOIN platform_gb_stream pgs " +
74 - "ON gs.id = pgs.gbStreamId WHERE pgs.gbStreamId is NULL") 74 + "ON gs.gbStreamId = pgs.gbStreamId WHERE pgs.gbStreamId is NULL")
75 List<GbStream> queryStreamNotInPlatform(); 75 List<GbStream> queryStreamNotInPlatform();
76 76
77 @Update("UPDATE gb_stream " + 77 @Update("UPDATE gb_stream " +
@@ -104,7 +104,7 @@ public interface GbStreamMapper { @@ -104,7 +104,7 @@ public interface GbStreamMapper {
104 void batchDelForGbStream(List<GbStream> gbStreams); 104 void batchDelForGbStream(List<GbStream> gbStreams);
105 105
106 @Insert("<script> " + 106 @Insert("<script> " +
107 - "REPLACE into gb_stream " + 107 + "INSERT IGNORE into gb_stream " +
108 "(app, stream, gbId, name, " + 108 "(app, stream, gbId, name, " +
109 "longitude, latitude, streamType, mediaServerId, status, createStamp)" + 109 "longitude, latitude, streamType, mediaServerId, status, createStamp)" +
110 "values " + 110 "values " +
@@ -114,6 +114,7 @@ public interface GbStreamMapper { @@ -114,6 +114,7 @@ public interface GbStreamMapper {
114 "'${item.mediaServerId}', ${item.status}, ${item.createStamp}) "+ 114 "'${item.mediaServerId}', ${item.status}, ${item.createStamp}) "+
115 "</foreach> " + 115 "</foreach> " +
116 "</script>") 116 "</script>")
  117 + @Options(useGeneratedKeys = true, keyProperty = "gbStreamId", keyColumn = "gbStreamId")
117 void batchAdd(List<StreamPushItem> subList); 118 void batchAdd(List<StreamPushItem> subList);
118 119
119 @Update({"<script>" + 120 @Update({"<script>" +
src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java
@@ -17,21 +17,21 @@ import java.util.List; @@ -17,21 +17,21 @@ import java.util.List;
17 public interface PlatformGbStreamMapper { 17 public interface PlatformGbStreamMapper {
18 18
19 @Insert("REPLACE INTO platform_gb_stream (gbStreamId, platformId, catalogId) VALUES" + 19 @Insert("REPLACE INTO platform_gb_stream (gbStreamId, platformId, catalogId) VALUES" +
20 - "( #{id}, #{platformId}, #{catalogId})") 20 + "( #{gbStreamId}, #{platformId}, #{catalogId})")
21 int add(PlatformGbStream platformGbStream); 21 int add(PlatformGbStream platformGbStream);
22 22
23 23
24 @Insert("<script> " + 24 @Insert("<script> " +
25 - "REPLACE into platform_gb_stream " + 25 + "INSERT into platform_gb_stream " +
26 "(gbStreamId, platformId, catalogId) " + 26 "(gbStreamId, platformId, catalogId) " +
27 "values " + 27 "values " +
28 "<foreach collection='streamPushItems' index='index' item='item' separator=','> " + 28 "<foreach collection='streamPushItems' index='index' item='item' separator=','> " +
29 - "(#{item.id}, #{platformId}, #{catalogId})" + 29 + "(${item.gbStreamId}, '${item.platformId}', '${item.catalogId}')" +
30 "</foreach> " + 30 "</foreach> " +
31 "</script>") 31 "</script>")
32 - int batchAdd(String platformId, String catalogId, List<GbStream> streamPushItems); 32 + int batchAdd(List<StreamPushItem> streamPushItems);
33 33
34 - @Delete("DELETE FROM platform_gb_stream WHERE gbStreamId = (select id from gb_stream where app=#{app} AND stream=#{stream})") 34 + @Delete("DELETE FROM platform_gb_stream WHERE gbStreamId = (select gbStreamId from gb_stream where app=#{app} AND stream=#{stream})")
35 int delByAppAndStream(String app, String stream); 35 int delByAppAndStream(String app, String stream);
36 36
37 @Delete("DELETE FROM platform_gb_stream WHERE platformId=#{platformId}") 37 @Delete("DELETE FROM platform_gb_stream WHERE platformId=#{platformId}")
@@ -42,28 +42,28 @@ public interface PlatformGbStreamMapper { @@ -42,28 +42,28 @@ public interface PlatformGbStreamMapper {
42 "FROM " + 42 "FROM " +
43 "platform_gb_stream pgs " + 43 "platform_gb_stream pgs " +
44 "LEFT JOIN parent_platform pp ON pp.serverGBId = pgs.platformId " + 44 "LEFT JOIN parent_platform pp ON pp.serverGBId = pgs.platformId " +
45 - "LEFT JOIN gb_stream gs ON gs.id = pgs.gbStreamId " + 45 + "LEFT JOIN gb_stream gs ON gs.gbStreamId = pgs.gbStreamId " +
46 "WHERE " + 46 "WHERE " +
47 "gs.app =#{app} " + 47 "gs.app =#{app} " +
48 "AND gs.stream =#{stream} ") 48 "AND gs.stream =#{stream} ")
49 List<ParentPlatform> selectByAppAndStream(String app, String stream); 49 List<ParentPlatform> selectByAppAndStream(String app, String stream);
50 50
51 @Select("SELECT pgs.*, gs.gbId FROM platform_gb_stream pgs " + 51 @Select("SELECT pgs.*, gs.gbId FROM platform_gb_stream pgs " +
52 - "LEFT JOIN gb_stream gs ON pgs.gbStreamId = gs.id " + 52 + "LEFT JOIN gb_stream gs ON pgs.gbStreamId = gs.gbStreamId " +
53 "WHERE gs.app=#{app} AND gs.stream=#{stream} AND pgs.platformId=#{serverGBId}") 53 "WHERE gs.app=#{app} AND gs.stream=#{stream} AND pgs.platformId=#{serverGBId}")
54 StreamProxyItem selectOne(String app, String stream, String serverGBId); 54 StreamProxyItem selectOne(String app, String stream, String serverGBId);
55 55
56 @Select("select gs.* \n" + 56 @Select("select gs.* \n" +
57 "from gb_stream gs\n" + 57 "from gb_stream gs\n" +
58 " left join platform_gb_stream pgs\n" + 58 " left join platform_gb_stream pgs\n" +
59 - " on gs.id = pgs.gbStreamId\n" + 59 + " on gs.gbStreamId = pgs.gbStreamId\n" +
60 "where pgs.platformId=#{platformId} and pgs.catalogId=#{catalogId}") 60 "where pgs.platformId=#{platformId} and pgs.catalogId=#{catalogId}")
61 List<GbStream> queryChannelInParentPlatformAndCatalog(String platformId, String catalogId); 61 List<GbStream> queryChannelInParentPlatformAndCatalog(String platformId, String catalogId);
62 62
63 @Select("select gs.gbId as id, gs.name as name, pgs.platformId as platformId, pgs.catalogId as catalogId , 0 as childrenCount, 2 as type\n" + 63 @Select("select gs.gbId as id, gs.name as name, pgs.platformId as platformId, pgs.catalogId as catalogId , 0 as childrenCount, 2 as type\n" +
64 "from gb_stream gs\n" + 64 "from gb_stream gs\n" +
65 " left join platform_gb_stream pgs\n" + 65 " left join platform_gb_stream pgs\n" +
66 - " on gs.id = pgs.gbStreamId\n" + 66 + " on gs.gbStreamId = pgs.gbStreamId\n" +
67 "where pgs.platformId=#{platformId} and pgs.catalogId=#{catalogId}") 67 "where pgs.platformId=#{platformId} and pgs.catalogId=#{catalogId}")
68 List<PlatformCatalog> queryChannelInParentPlatformAndCatalogForCatalog(String platformId, String catalogId); 68 List<PlatformCatalog> queryChannelInParentPlatformAndCatalogForCatalog(String platformId, String catalogId);
69 69
@@ -78,7 +78,7 @@ public interface PlatformGbStreamMapper { @@ -78,7 +78,7 @@ public interface PlatformGbStreamMapper {
78 "left join platform_gb_stream pgs on " + 78 "left join platform_gb_stream pgs on " +
79 "pp.serverGBId = pgs.platformId " + 79 "pp.serverGBId = pgs.platformId " +
80 "left join gb_stream gs " + 80 "left join gb_stream gs " +
81 - "gs.id = pgs.gbStreamId " + 81 + "gs.gbStreamId = pgs.gbStreamId " +
82 "WHERE " + 82 "WHERE " +
83 "gs.app = #{app} " + 83 "gs.app = #{app} " +
84 "AND gs.stream = #{stream}" + 84 "AND gs.stream = #{stream}" +
@@ -93,7 +93,7 @@ public interface PlatformGbStreamMapper { @@ -93,7 +93,7 @@ public interface PlatformGbStreamMapper {
93 @Delete("<script> "+ 93 @Delete("<script> "+
94 "DELETE FROM platform_gb_stream where gbStreamId in " + 94 "DELETE FROM platform_gb_stream where gbStreamId in " +
95 "<foreach collection='gbStreams' item='item' open='(' separator=',' close=')' >" + 95 "<foreach collection='gbStreams' item='item' open='(' separator=',' close=')' >" +
96 - "#{item.id}" + 96 + "#{item.gbStreamId}" +
97 "</foreach>" + 97 "</foreach>" +
98 "</script>") 98 "</script>")
99 void delByGbStreams(List<GbStream> gbStreams); 99 void delByGbStreams(List<GbStream> gbStreams);
@@ -101,7 +101,7 @@ public interface PlatformGbStreamMapper { @@ -101,7 +101,7 @@ public interface PlatformGbStreamMapper {
101 @Delete("<script> "+ 101 @Delete("<script> "+
102 "DELETE FROM platform_gb_stream where platformId=#{platformId} and gbStreamId in " + 102 "DELETE FROM platform_gb_stream where platformId=#{platformId} and gbStreamId in " +
103 "<foreach collection='gbStreams' item='item' open='(' separator=',' close=')'>" + 103 "<foreach collection='gbStreams' item='item' open='(' separator=',' close=')'>" +
104 - "#{item.id} " + 104 + "#{item.gbStreamId} " +
105 "</foreach>" + 105 "</foreach>" +
106 "</script>") 106 "</script>")
107 void delByAppAndStreamsByPlatformId(List<GbStream> gbStreams, String platformId); 107 void delByAppAndStreamsByPlatformId(List<GbStream> gbStreams, String platformId);
src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
@@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.storager.dao; @@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.storager.dao;
3 import com.genersoft.iot.vmp.gb28181.bean.GbStream; 3 import com.genersoft.iot.vmp.gb28181.bean.GbStream;
4 import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; 4 import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
5 import org.apache.ibatis.annotations.*; 5 import org.apache.ibatis.annotations.*;
  6 +import org.omg.PortableInterceptor.INACTIVE;
6 import org.springframework.stereotype.Repository; 7 import org.springframework.stereotype.Repository;
7 8
8 import java.util.Collection; 9 import java.util.Collection;
@@ -61,39 +62,37 @@ public interface StreamPushMapper { @@ -61,39 +62,37 @@ public interface StreamPushMapper {
61 @Select(value = {" <script>" + 62 @Select(value = {" <script>" +
62 "SELECT " + 63 "SELECT " +
63 "st.*, " + 64 "st.*, " +
64 - "pgs.gbId, pgs.status, pgs.name, pgs.longitude, pgs.latitude , pgs.id " + 65 + "gs.gbId, gs.status, gs.name, gs.longitude, gs.latitude, gs.gbStreamId " +
65 "from " + 66 "from " +
66 "stream_push st " + 67 "stream_push st " +
67 - "LEFT JOIN gb_stream pgs " +  
68 - "on st.app = pgs.app AND st.stream = pgs.stream " + 68 + "LEFT JOIN gb_stream gs " +
  69 + "on st.app = gs.app AND st.stream = gs.stream " +
69 "WHERE " + 70 "WHERE " +
70 "1=1 " + 71 "1=1 " +
71 - " <if test='query != null'> AND (st.app LIKE '%${query}%' OR st.stream LIKE '%${query}%' OR pgs.gbId LIKE '%${query}%' OR pgs.name LIKE '%${query}%')</if> " +  
72 - " <if test='pushing == true' > AND (pgs.gbId is null OR pgs.status=1)</if>" +  
73 - " <if test='pushing == false' > AND pgs.status=0</if>" + 72 + " <if test='query != null'> AND (st.app LIKE '%${query}%' OR st.stream LIKE '%${query}%' OR gs.gbId LIKE '%${query}%' OR gs.name LIKE '%${query}%')</if> " +
  73 + " <if test='pushing == true' > AND (gs.gbId is null OR gs.status=1)</if>" +
  74 + " <if test='pushing == false' > AND gs.status=0</if>" +
74 " <if test='mediaServerId != null' > AND st.mediaServerId=#{mediaServerId} </if>" + 75 " <if test='mediaServerId != null' > AND st.mediaServerId=#{mediaServerId} </if>" +
75 "order by st.createStamp desc" + 76 "order by st.createStamp desc" +
76 " </script>"}) 77 " </script>"})
77 List<StreamPushItem> selectAllForList(String query, Boolean pushing, String mediaServerId); 78 List<StreamPushItem> selectAllForList(String query, Boolean pushing, String mediaServerId);
78 79
79 - @Select("SELECT st.*, pgs.gbId, pgs.status, pgs.name, pgs.longitude, pgs.latitude FROM stream_push st LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream order by st.createStamp desc") 80 + @Select("SELECT st.*, gs.gbId, gs.status, gs.name, gs.longitude, gs.latitude FROM stream_push st LEFT JOIN gb_stream gs on st.app = gs.app AND st.stream = gs.stream order by st.createStamp desc")
80 List<StreamPushItem> selectAll(); 81 List<StreamPushItem> selectAll();
81 82
82 - @Select("SELECT st.*, pgs.gbId, pgs.status, pgs.name, pgs.longitude, pgs.latitude FROM stream_push st LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream WHERE st.enable=${enable}")  
83 - List<StreamPushItem> selectForEnable(boolean enable);  
84 -  
85 - @Select("SELECT st.*, pgs.gbId, pgs.status, pgs.name, pgs.longitude, pgs.latitude FROM stream_push st LEFT JOIN gb_stream pgs on st.app = pgs.app AND st.stream = pgs.stream WHERE st.app=#{app} AND st.stream=#{stream}") 83 + @Select("SELECT st.*, gs.gbId, gs.status, gs.name, gs.longitude, gs.latitude FROM stream_push st LEFT JOIN gb_stream gs on st.app = gs.app AND st.stream = gs.stream WHERE st.app=#{app} AND st.stream=#{stream}")
86 StreamPushItem selectOne(String app, String stream); 84 StreamPushItem selectOne(String app, String stream);
87 85
88 @Insert("<script>" + 86 @Insert("<script>" +
89 - "REPLACE INTO stream_push (app, stream, totalReaderCount, originType, originTypeStr, " + 87 + "Insert IGNORE INTO stream_push (app, stream, totalReaderCount, originType, originTypeStr, " +
90 "createStamp, aliveSecond, mediaServerId) " + 88 "createStamp, aliveSecond, mediaServerId) " +
91 "VALUES <foreach collection='streamPushItems' item='item' index='index' separator=','>" + 89 "VALUES <foreach collection='streamPushItems' item='item' index='index' separator=','>" +
92 "( '${item.app}', '${item.stream}', '${item.totalReaderCount}', #{item.originType}, " + 90 "( '${item.app}', '${item.stream}', '${item.totalReaderCount}', #{item.originType}, " +
93 "'${item.originTypeStr}',#{item.createStamp}, #{item.aliveSecond}, '${item.mediaServerId}' )" + 91 "'${item.originTypeStr}',#{item.createStamp}, #{item.aliveSecond}, '${item.mediaServerId}' )" +
94 " </foreach>" + 92 " </foreach>" +
95 "</script>") 93 "</script>")
96 - void addAll(List<StreamPushItem> streamPushItems); 94 + @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
  95 + int addAll(List<StreamPushItem> streamPushItems);
97 96
98 @Delete("DELETE FROM stream_push") 97 @Delete("DELETE FROM stream_push")
99 void clear(); 98 void clear();
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
@@ -748,7 +748,7 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager { @@ -748,7 +748,7 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager {
748 return false; 748 return false;
749 } 749 }
750 } 750 }
751 - }else { 751 + } else {
752 //事务回滚 752 //事务回滚
753 dataSourceTransactionManager.rollback(transactionStatus); 753 dataSourceTransactionManager.rollback(transactionStatus);
754 return false; 754 return false;