Commit 93d69d54768a5536635a9228bcd437b01d86babf

Authored by 648540858
1 parent 20622d20

添加国标级联目录分组分组加快通道传输速度

src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java
... ... @@ -134,6 +134,16 @@ public class ParentPlatform {
134 134 */
135 135 private boolean startOfflinePush;
136 136  
  137 + /**
  138 + * 目录分组-每次向上级发送通道信息时单个包携带的通道数量,取值1,2,4,8
  139 + */
  140 + private int catalogGroup;
  141 +
  142 + /**
  143 + * 行政区划
  144 + */
  145 + private String administrativeDivision;
  146 +
137 147 public Integer getId() {
138 148 return id;
139 149 }
... ... @@ -342,4 +352,20 @@ public class ParentPlatform {
342 352 public void setStartOfflinePush(boolean startOfflinePush) {
343 353 this.startOfflinePush = startOfflinePush;
344 354 }
  355 +
  356 + public int getCatalogGroup() {
  357 + return catalogGroup;
  358 + }
  359 +
  360 + public void setCatalogGroup(int catalogGroup) {
  361 + this.catalogGroup = catalogGroup;
  362 + }
  363 +
  364 + public String getAdministrativeDivision() {
  365 + return administrativeDivision;
  366 + }
  367 +
  368 + public void setAdministrativeDivision(String administrativeDivision) {
  369 + this.administrativeDivision = administrativeDivision;
  370 + }
345 371 }
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/CatalogSubscribeTask.java
... ... @@ -10,6 +10,8 @@ import org.springframework.scheduling.annotation.Async;
10 10 import javax.sip.Dialog;
11 11 import javax.sip.DialogState;
12 12 import javax.sip.ResponseEvent;
  13 +import java.util.Timer;
  14 +import java.util.TimerTask;
13 15  
14 16 /**
15 17 * 目录订阅任务
... ... @@ -20,6 +22,8 @@ public class CatalogSubscribeTask implements ISubscribeTask {
20 22 private final ISIPCommander sipCommander;
21 23 private Dialog dialog;
22 24  
  25 + private Timer timer ;
  26 +
23 27 public CatalogSubscribeTask(Device device, ISIPCommander sipCommander) {
24 28 this.device = device;
25 29 this.sipCommander = sipCommander;
... ... @@ -27,6 +31,10 @@ public class CatalogSubscribeTask implements ISubscribeTask {
27 31  
28 32 @Override
29 33 public void run() {
  34 + if (timer != null ) {
  35 + timer.cancel();
  36 + timer = null;
  37 + }
30 38 sipCommander.catalogSubscribe(device, dialog, eventResult -> {
31 39 if (eventResult.dialog != null || eventResult.dialog.getState().equals(DialogState.CONFIRMED)) {
32 40 dialog = eventResult.dialog;
... ... @@ -43,6 +51,13 @@ public class CatalogSubscribeTask implements ISubscribeTask {
43 51 dialog = null;
44 52 // 失败
45 53 logger.warn("[目录订阅]失败,信令发送失败: {}-{} ", device.getDeviceId(), eventResult.msg);
  54 + timer = new Timer();
  55 + timer.schedule(new TimerTask() {
  56 + @Override
  57 + public void run() {
  58 + CatalogSubscribeTask.this.run();
  59 + }
  60 + }, 2000);
46 61 });
47 62 }
48 63  
... ... @@ -56,9 +71,13 @@ public class CatalogSubscribeTask implements ISubscribeTask {
56 71 * TERMINATED-> Terminated Dialog状态-终止
57 72 */
58 73 logger.info("取消目录订阅时dialog状态为{}", DialogState.CONFIRMED);
  74 + if (timer != null ) {
  75 + timer.cancel();
  76 + timer = null;
  77 + }
59 78 if (dialog != null && dialog.getState().equals(DialogState.CONFIRMED)) {
60 79 device.setSubscribeCycleForCatalog(0);
61   - sipCommander.mobilePositionSubscribe(device, dialog, eventResult -> {
  80 + sipCommander.catalogSubscribe(device, dialog, eventResult -> {
62 81 ResponseEvent event = (ResponseEvent) eventResult.event;
63 82 if (event.getResponse().getRawContent() != null) {
64 83 // 成功
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
... ... @@ -32,6 +32,7 @@ import javax.sip.header.*;
32 32 import javax.sip.message.Request;
33 33 import java.lang.reflect.Field;
34 34 import java.text.ParseException;
  35 +import java.util.ArrayList;
35 36 import java.util.HashSet;
36 37 import java.util.List;
37 38 import java.util.UUID;
... ... @@ -215,7 +216,11 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
215 216 return false;
216 217 }
217 218 try {
218   - String catalogXml = getCatalogXml(channel, sn, parentPlatform, size);
  219 + List<DeviceChannel> channels = new ArrayList<>();
  220 + if (channel != null) {
  221 + channels.add(channel);
  222 + }
  223 + String catalogXml = getCatalogXml(channels, sn, parentPlatform, size);
219 224  
220 225 // callid
221 226 CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
... ... @@ -239,7 +244,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
239 244 sendCatalogResponse(channels, parentPlatform, sn, fromTag, 0);
240 245 return true;
241 246 }
242   - private String getCatalogXml(DeviceChannel channel, String sn, ParentPlatform parentPlatform, int size) {
  247 + private String getCatalogXml(List<DeviceChannel> channels, String sn, ParentPlatform parentPlatform, int size) {
243 248 String characterSet = parentPlatform.getCharacterSet();
244 249 StringBuffer catalogXml = new StringBuffer(600);
245 250 catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet +"\"?>\r\n");
... ... @@ -248,34 +253,35 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
248 253 catalogXml.append("<SN>" +sn + "</SN>\r\n");
249 254 catalogXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
250 255 catalogXml.append("<SumNum>" + size + "</SumNum>\r\n");
251   - catalogXml.append("<DeviceList Num=\"1\">\r\n");
252   - catalogXml.append("<Item>\r\n");
253   - if (channel != null) {
254   - catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n");
255   - catalogXml.append("<Name>" + channel.getName() + "</Name>\r\n");
256   - catalogXml.append("<Manufacturer>" + channel.getManufacture() + "</Manufacturer>\r\n");
257   - catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n");
258   - catalogXml.append("<Owner>" + channel.getOwner() + "</Owner>\r\n");
259   - catalogXml.append("<CivilCode>" + channel.getCivilCode() + "</CivilCode>\r\n");
260   - catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n");
261   - catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n");
262   - if (channel.getParentId() != null) {
263   - catalogXml.append("<ParentID>" + channel.getParentId() + "</ParentID>\r\n");
  256 + catalogXml.append("<DeviceList Num=\"" + channels.size() +"\">\r\n");
  257 + if (channels.size() > 0) {
  258 + for (DeviceChannel channel : channels) {
  259 + catalogXml.append("<Item>\r\n");
  260 + catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n");
  261 + catalogXml.append("<Name>" + channel.getName() + "</Name>\r\n");
  262 + catalogXml.append("<Manufacturer>" + channel.getManufacture() + "</Manufacturer>\r\n");
  263 + catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n");
  264 + catalogXml.append("<Owner>" + channel.getOwner() + "</Owner>\r\n");
  265 + catalogXml.append("<CivilCode>" + channel.getCivilCode() + "</CivilCode>\r\n");
  266 + catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n");
  267 + catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n");
  268 + if (channel.getParentId() != null) {
  269 + catalogXml.append("<ParentID>" + channel.getParentId() + "</ParentID>\r\n");
  270 + }
  271 + catalogXml.append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n");
  272 + catalogXml.append("<RegisterWay>" + channel.getRegisterWay() + "</RegisterWay>\r\n");
  273 + catalogXml.append("<Status>" + (channel.getStatus() == 0?"OFF":"ON") + "</Status>\r\n");
  274 + catalogXml.append("<Longitude>" + channel.getLongitude() + "</Longitude>\r\n");
  275 + catalogXml.append("<Latitude>" + channel.getLatitude() + "</Latitude>\r\n");
  276 + catalogXml.append("<IPAddress>" + channel.getIpAddress() + "</IPAddress>\r\n");
  277 + catalogXml.append("<Port>" + channel.getPort() + "</Port>\r\n");
  278 + catalogXml.append("<Info>\r\n");
  279 + catalogXml.append("<PTZType>" + channel.getPTZType() + "</PTZType>\r\n");
  280 + catalogXml.append("</Info>\r\n");
  281 + catalogXml.append("</Item>\r\n");
264 282 }
265   - catalogXml.append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n");
266   - catalogXml.append("<RegisterWay>" + channel.getRegisterWay() + "</RegisterWay>\r\n");
267   - catalogXml.append("<Status>" + (channel.getStatus() == 0?"OFF":"ON") + "</Status>\r\n");
268   - catalogXml.append("<Longitude>" + channel.getLongitude() + "</Longitude>\r\n");
269   - catalogXml.append("<Latitude>" + channel.getLatitude() + "</Latitude>\r\n");
270   - catalogXml.append("<IPAddress>" + channel.getIpAddress() + "</IPAddress>\r\n");
271   - catalogXml.append("<Port>" + channel.getPort() + "</Port>\r\n");
272   - catalogXml.append("<Info>\r\n");
273   - catalogXml.append("<PTZType>" + channel.getPTZType() + "</PTZType>\r\n");
274   - catalogXml.append("</Info>\r\n");
275 283 }
276 284  
277   -
278   - catalogXml.append("</Item>\r\n");
279 285 catalogXml.append("</DeviceList>\r\n");
280 286 catalogXml.append("</Response>\r\n");
281 287 return catalogXml.toString();
... ... @@ -286,15 +292,21 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
286 292 return;
287 293 }
288 294 try {
289   - DeviceChannel deviceChannel = channels.get(index);
290   - String catalogXml = getCatalogXml(deviceChannel, sn, parentPlatform, channels.size());
  295 + List<DeviceChannel> deviceChannels;
  296 + if (index + parentPlatform.getCatalogGroup() < channels.size() - 1) {
  297 + deviceChannels = channels.subList(index, index + parentPlatform.getCatalogGroup());
  298 + }else {
  299 + deviceChannels = channels.subList(index, channels.size());
  300 + }
  301 +
  302 + String catalogXml = getCatalogXml(deviceChannels, sn, parentPlatform, channels.size());
291 303 // callid
292 304 CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
293 305 : udpSipProvider.getNewCallId();
294 306  
295 307 Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, catalogXml, fromTag, callIdHeader);
296 308 transmitRequest(parentPlatform, request, null, eventResult -> {
297   - int indexNext = index + 1;
  309 + int indexNext = index + parentPlatform.getCatalogGroup();
298 310 sendCatalogResponse(channels, parentPlatform, sn, fromTag, indexNext);
299 311 });
300 312 } catch (SipException | ParseException | InvalidArgumentException e) {
... ... @@ -432,13 +444,21 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
432 444 if (index >= deviceChannels.size()) {
433 445 return true;
434 446 }
  447 + List<DeviceChannel> channels;
  448 + if (index + parentPlatform.getCatalogGroup() < deviceChannels.size() - 1) {
  449 + channels = deviceChannels.subList(index, index + parentPlatform.getCatalogGroup());
  450 + }else {
  451 + channels = deviceChannels.subList(index, deviceChannels.size());
  452 + }
435 453 try {
436 454 Integer finalIndex = index;
437   - String catalogXmlContent = getCatalogXmlContentForCatalogAddOrUpdate(parentPlatform, deviceChannels.get(index ), deviceChannels.size(), type, subscribeInfo);
  455 + String catalogXmlContent = getCatalogXmlContentForCatalogAddOrUpdate(parentPlatform, channels,
  456 + deviceChannels.size(), type, subscribeInfo);
438 457 sendNotify(parentPlatform, catalogXmlContent, subscribeInfo, eventResult -> {
439 458 logger.error("发送NOTIFY通知消息失败。错误:{} {}", eventResult.statusCode, eventResult.msg);
440 459 }, (eventResult -> {
441   - sendNotifyForCatalogAddOrUpdate(type, parentPlatform, deviceChannels, subscribeInfo, finalIndex + 1);
  460 + sendNotifyForCatalogAddOrUpdate(type, parentPlatform, deviceChannels, subscribeInfo,
  461 + finalIndex + parentPlatform.getCatalogGroup());
442 462 }));
443 463 } catch (SipException | ParseException e) {
444 464 e.printStackTrace();
... ... @@ -500,11 +520,9 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
500 520  
501 521 }
502 522  
503   - private String getCatalogXmlContentForCatalogAddOrUpdate(ParentPlatform parentPlatform, DeviceChannel channel, int sumNum, String type, SubscribeInfo subscribeInfo) {
  523 + private String getCatalogXmlContentForCatalogAddOrUpdate(ParentPlatform parentPlatform, List<DeviceChannel> channels, int sumNum, String type, SubscribeInfo subscribeInfo) {
504 524 StringBuffer catalogXml = new StringBuffer(600);
505   - if (parentPlatform.getServerGBId().equals(channel.getParentId())) {
506   - channel.setParentId(parentPlatform.getDeviceGBId());
507   - }
  525 +
508 526 String characterSet = parentPlatform.getCharacterSet();
509 527 catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
510 528 catalogXml.append("<Notify>\r\n");
... ... @@ -512,26 +530,33 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
512 530 catalogXml.append("<SN>" + (int) ((Math.random() * 9 + 1) * 100000) + "</SN>\r\n");
513 531 catalogXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
514 532 catalogXml.append("<SumNum>1</SumNum>\r\n");
515   - catalogXml.append("<DeviceList Num=\"1\">\r\n");
516   - catalogXml.append("<Item>\r\n");
517   - catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n");
518   - catalogXml.append("<Name>" + channel.getName() + "</Name>\r\n");
519   - catalogXml.append("<Manufacturer>" + channel.getManufacture() + "</Manufacturer>\r\n");
520   - catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n");
521   - catalogXml.append("<Owner>0</Owner>\r\n");
522   - catalogXml.append("<CivilCode>CivilCode</CivilCode>\r\n");
523   - catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n");
524   - catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n");
525   - if (channel.getParentId() != null) {
526   - catalogXml.append("<ParentID>" + channel.getParentId() + "</ParentID>\r\n");
527   - }
528   - catalogXml.append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n");
529   - catalogXml.append("<RegisterWay>" + channel.getRegisterWay() + "</RegisterWay>\r\n");
530   - catalogXml.append("<Status>" + (channel.getStatus() == 0 ? "OFF" : "ON") + "</Status>\r\n");
531   - if (!"presence".equals(subscribeInfo.getEventType())) {
532   - catalogXml.append("<Event>" + type + "</Event>\r\n");
533   - }
534   - catalogXml.append("</Item>\r\n");
  533 + catalogXml.append("<DeviceList Num=\"" + channels.size() + "\">\r\n");
  534 + if (channels.size() > 0) {
  535 + for (DeviceChannel channel : channels) {
  536 + if (parentPlatform.getServerGBId().equals(channel.getParentId())) {
  537 + channel.setParentId(parentPlatform.getDeviceGBId());
  538 + }
  539 + catalogXml.append("<Item>\r\n");
  540 + catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n");
  541 + catalogXml.append("<Name>" + channel.getName() + "</Name>\r\n");
  542 + catalogXml.append("<Manufacturer>" + channel.getManufacture() + "</Manufacturer>\r\n");
  543 + catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n");
  544 + catalogXml.append("<Owner>0</Owner>\r\n");
  545 + catalogXml.append("<CivilCode>CivilCode</CivilCode>\r\n");
  546 + catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n");
  547 + catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n");
  548 + if (channel.getParentId() != null) {
  549 + catalogXml.append("<ParentID>" + channel.getParentId() + "</ParentID>\r\n");
  550 + }
  551 + catalogXml.append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n");
  552 + catalogXml.append("<RegisterWay>" + channel.getRegisterWay() + "</RegisterWay>\r\n");
  553 + catalogXml.append("<Status>" + (channel.getStatus() == 0 ? "OFF" : "ON") + "</Status>\r\n");
  554 + if (!"presence".equals(subscribeInfo.getEventType())) {
  555 + catalogXml.append("<Event>" + type + "</Event>\r\n");
  556 + }
  557 + catalogXml.append("</Item>\r\n");
  558 + }
  559 + }
535 560 catalogXml.append("</DeviceList>\r\n");
536 561 catalogXml.append("</Notify>\r\n");
537 562 return catalogXml.toString();
... ... @@ -553,13 +578,20 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
553 578 if (index >= deviceChannels.size()) {
554 579 return true;
555 580 }
  581 + List<DeviceChannel> channels;
  582 + if (index + parentPlatform.getCatalogGroup() < deviceChannels.size() - 1) {
  583 + channels = deviceChannels.subList(index, index + parentPlatform.getCatalogGroup());
  584 + }else {
  585 + channels = deviceChannels.subList(index, deviceChannels.size());
  586 + }
556 587 try {
557 588 Integer finalIndex = index;
558   - String catalogXmlContent = getCatalogXmlContentForCatalogOther(parentPlatform, deviceChannels.get(index), type);
  589 + String catalogXmlContent = getCatalogXmlContentForCatalogOther(parentPlatform, channels, type);
559 590 sendNotify(parentPlatform, catalogXmlContent, subscribeInfo, eventResult -> {
560 591 logger.error("发送NOTIFY通知消息失败。错误:{} {}", eventResult.statusCode, eventResult.msg);
561 592 }, (eventResult -> {
562   - sendNotifyForCatalogOther(type, parentPlatform, deviceChannels, subscribeInfo, finalIndex + 1);
  593 + sendNotifyForCatalogOther(type, parentPlatform, deviceChannels, subscribeInfo,
  594 + finalIndex + parentPlatform.getCatalogGroup());
563 595 }));
564 596 } catch (SipException e) {
565 597 e.printStackTrace();
... ... @@ -574,10 +606,8 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
574 606 return true;
575 607 }
576 608  
577   - private String getCatalogXmlContentForCatalogOther(ParentPlatform parentPlatform, DeviceChannel channel, String type) {
578   - if (parentPlatform.getServerGBId().equals(channel.getParentId())) {
579   - channel.setParentId(parentPlatform.getDeviceGBId());
580   - }
  609 + private String getCatalogXmlContentForCatalogOther(ParentPlatform parentPlatform, List<DeviceChannel> channels, String type) {
  610 +
581 611 String characterSet = parentPlatform.getCharacterSet();
582 612 StringBuffer catalogXml = new StringBuffer(600);
583 613 catalogXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
... ... @@ -586,11 +616,18 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
586 616 catalogXml.append("<SN>" + (int) ((Math.random() * 9 + 1) * 100000) + "</SN>\r\n");
587 617 catalogXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
588 618 catalogXml.append("<SumNum>1</SumNum>\r\n");
589   - catalogXml.append("<DeviceList Num=\"1\">\r\n");
590   - catalogXml.append("<Item>\r\n");
591   - catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n");
592   - catalogXml.append("<Event>" + type + "</Event>\r\n");
593   - catalogXml.append("</Item>\r\n");
  619 + catalogXml.append("<DeviceList Num=\" " + channels.size() + " \">\r\n");
  620 + if (channels.size() > 0) {
  621 + for (DeviceChannel channel : channels) {
  622 + if (parentPlatform.getServerGBId().equals(channel.getParentId())) {
  623 + channel.setParentId(parentPlatform.getDeviceGBId());
  624 + }
  625 + catalogXml.append("<Item>\r\n");
  626 + catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n");
  627 + catalogXml.append("<Event>" + type + "</Event>\r\n");
  628 + catalogXml.append("</Item>\r\n");
  629 + }
  630 + }
594 631 catalogXml.append("</DeviceList>\r\n");
595 632 catalogXml.append("</Notify>\r\n");
596 633 return catalogXml.toString();
... ...
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
... ... @@ -41,10 +41,6 @@ public class DeviceServiceImpl implements IDeviceService {
41 41 if (device == null || device.getSubscribeCycleForCatalog() < 0) {
42 42 return false;
43 43 }
44   - CatalogSubscribeTask task = (CatalogSubscribeTask)dynamicTask.get(device.getDeviceId() + "catalog");
45   - if (task != null && task.getDialogState() != null && task.getDialogState().equals(DialogState.CONFIRMED)) { // 已存在不需要再次添加
46   - return true;
47   - }
48 44 logger.info("[添加目录订阅] 设备{}", device.getDeviceId());
49 45 // 添加目录订阅
50 46 CatalogSubscribeTask catalogSubscribeTask = new CatalogSubscribeTask(device, sipCommander);
... ... @@ -71,10 +67,6 @@ public class DeviceServiceImpl implements IDeviceService {
71 67 return false;
72 68 }
73 69 logger.info("[添加移动位置订阅] 设备{}", device.getDeviceId());
74   - MobilePositionSubscribeTask task = (MobilePositionSubscribeTask)dynamicTask.get(device.getDeviceId() + "mobile_position");
75   - if (task != null && task.getDialogState() != null && task.getDialogState().equals(DialogState.CONFIRMED)) { // 已存在不需要再次添加
76   - return true;
77   - }
78 70 // 添加目录订阅
79 71 MobilePositionSubscribeTask mobilePositionSubscribeTask = new MobilePositionSubscribeTask(device, sipCommander);
80 72 // 提前开始刷新订阅
... ... @@ -106,7 +98,7 @@ public class DeviceServiceImpl implements IDeviceService {
106 98  
107 99 @Override
108 100 public void sync(Device device) {
109   - if (catalogResponseMessageHandler.getChannelSyncProgress(device.getDeviceId()) != null) {
  101 + if (catalogResponseMessageHandler.isSyncRunning(device.getDeviceId())) {
110 102 logger.info("开启同步时发现同步已经存在");
111 103 return;
112 104 }
... ...
src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java
... ... @@ -16,10 +16,10 @@ public interface ParentPlatformMapper {
16 16  
17 17 @Insert("INSERT INTO parent_platform (enable, name, serverGBId, serverGBDomain, serverIP, serverPort, deviceGBId, deviceIp, " +
18 18 " devicePort, username, password, expires, keepTimeout, transport, characterSet, ptz, rtcp, " +
19   - " status, shareAllLiveStream, startOfflinePush, catalogId) " +
  19 + " status, shareAllLiveStream, startOfflinePush, catalogId, administrativeDivision, catalogGroup) " +
20 20 " VALUES (${enable}, '${name}', '${serverGBId}', '${serverGBDomain}', '${serverIP}', ${serverPort}, '${deviceGBId}', '${deviceIp}', " +
21 21 " '${devicePort}', '${username}', '${password}', '${expires}', '${keepTimeout}', '${transport}', '${characterSet}', ${ptz}, ${rtcp}, " +
22   - " ${status}, ${shareAllLiveStream}, ${startOfflinePush}, #{catalogId})")
  22 + " ${status}, ${shareAllLiveStream}, ${startOfflinePush}, #{catalogId}, #{administrativeDivision}, #{catalogGroup})")
23 23 int addParentPlatform(ParentPlatform parentPlatform);
24 24  
25 25 @Update("UPDATE parent_platform " +
... ... @@ -43,6 +43,8 @@ public interface ParentPlatformMapper {
43 43 "status=#{status}, " +
44 44 "shareAllLiveStream=#{shareAllLiveStream}, " +
45 45 "startOfflinePush=${startOfflinePush}, " +
  46 + "catalogGroup=#{catalogGroup}, " +
  47 + "administrativeDivision=#{administrativeDivision}, " +
46 48 "catalogId=#{catalogId} " +
47 49 "WHERE id=#{id}")
48 50 int updateParentPlatform(ParentPlatform parentPlatform);
... ...
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
... ... @@ -520,6 +520,12 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
520 520 @Override
521 521 public boolean updateParentPlatform(ParentPlatform parentPlatform) {
522 522 int result = 0;
  523 + if (parentPlatform.getCatalogGroup() == 0) {
  524 + parentPlatform.setCatalogGroup(1);
  525 + }
  526 + if (parentPlatform.getAdministrativeDivision() == null) {
  527 + parentPlatform.setAdministrativeDivision(parentPlatform.getDeviceGBId().substring(0,6));
  528 + }
523 529 ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId()); // .getDeviceGBId());
524 530 if (parentPlatform.getId() == null ) {
525 531 if (parentPlatform.getCatalogId() == null) {
... ... @@ -539,6 +545,7 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
539 545 parentPlatformCatch.setId(parentPlatform.getServerGBId());
540 546 redisCatchStorage.delPlatformCatchInfo(parentPlatById.getServerGBId());
541 547 }
  548 +
542 549 result = platformMapper.updateParentPlatform(parentPlatform);
543 550 }
544 551 // 更新缓存
... ...
web_src/src/components/dialog/platformEdit.vue
... ... @@ -63,6 +63,18 @@
63 63 <el-option label="TCP" value="TCP"></el-option>
64 64 </el-select>
65 65 </el-form-item>
  66 + <el-form-item label="目录分组" prop="catalogGroup">
  67 + <el-select
  68 + v-model="platform.catalogGroup"
  69 + style="width: 100%"
  70 + placeholder="请选择目录分组"
  71 + >
  72 + <el-option label="1" value="1"></el-option>
  73 + <el-option label="2" value="2"></el-option>
  74 + <el-option label="4" value="4"></el-option>
  75 + <el-option label="8" value="8"></el-option>
  76 + </el-select>
  77 + </el-form-item>
66 78 <el-form-item label="字符集" prop="characterSet">
67 79 <el-select
68 80 v-model="platform.characterSet"
... ... @@ -140,6 +152,7 @@ export default {
140 152 characterSet: "GB2312",
141 153 shareAllLiveStream: false,
142 154 startOfflinePush: false,
  155 + catalogGroup: 1,
143 156 },
144 157 rules: {
145 158 name: [{ required: true, message: "请输入平台名称", trigger: "blur" }],
... ... @@ -202,6 +215,7 @@ export default {
202 215 this.platform.shareAllLiveStream = platform.shareAllLiveStream;
203 216 this.platform.catalogId = platform.catalogId;
204 217 this.platform.startOfflinePush = platform.startOfflinePush;
  218 + this.platform.catalogGroup = platform.catalogGroup;
205 219 this.onSubmit_text = "保存";
206 220 this.saveUrl = "/api/platform/save";
207 221 }
... ... @@ -270,6 +284,7 @@ export default {
270 284 characterSet: "GB2312",
271 285 shareAllLiveStream: false,
272 286 startOfflinePush: false,
  287 + catalogGroup: 1,
273 288 }
274 289 },
275 290 deviceGBIdExit: async function (deviceGbId) {
... ...