From 6c4da7bebe8040f1d8dea551863eae7bbd4c65a6 Mon Sep 17 00:00:00 2001
From: panlinlin <648540858@qq.com>
Date: 星期四, 14 一月 2021 14:49:38 +0800
Subject: [PATCH] 完成向上级联->通道推送 修复选择通道是查询的bug
---
web_src/src/components/gb28181/chooseChannel.vue | 2
src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java | 13 +
src/main/java/com/genersoft/iot/vmp/storager/dao/PatformChannelMapper.java | 7
src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java | 2
web_src/src/components/gb28181/chooseChannelForGb.vue | 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java | 42 +++++
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java | 8 +
README.md | 2
src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java | 5
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java | 5
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java | 53 +++++++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java | 15 ++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 249 +++++++++++++++++++++--------------
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java | 6
14 files changed, 298 insertions(+), 113 deletions(-)
diff --git a/README.md b/README.md
index ab0d0ca..5e5eb54 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,7 @@
- [X] 娉ㄥ唽
- [X] 蹇冭烦淇濇椿
- [X] 閫氶亾閫夋嫨
- - [ ] 閫氶亾鎺ㄩ��
+ - [X] 閫氶亾鎺ㄩ��
- [ ] 鐐规挱
- [ ] 浜戝彴鎺у埗
- [ ] 娣诲姞RTSP瑙嗛
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java
index ddd964b..0aec885 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/ParentPlatform.java
@@ -94,6 +94,11 @@
*/
private boolean status;
+ /**
+ * 鍦ㄧ嚎鐘舵��
+ */
+ private int channelCount;
+
public boolean isEnable() {
return enable;
@@ -238,4 +243,12 @@
public void setStatus(boolean status) {
this.status = status;
}
+
+ public int getChannelCount() {
+ return channelCount;
+ }
+
+ public void setChannelCount(int channelCount) {
+ this.channelCount = channelCount;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
index 035c157..eb81ed3 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
@@ -9,6 +9,7 @@
import javax.sip.message.Request;
import javax.sip.message.Response;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.alibaba.fastjson.JSON;
import com.genersoft.iot.vmp.gb28181.transmit.response.impl.*;
@@ -72,6 +73,9 @@
@Autowired
private SIPCommander cmder;
+
+ @Autowired
+ private SIPCommanderFroPlatform cmderFroPlatform;
@Autowired
private RedisUtil redis;
@@ -153,6 +157,7 @@
processor.setDeferredResultHolder(deferredResultHolder);
processor.setOffLineDetector(offLineDetector);
processor.setCmder(cmder);
+ processor.setCmderFroPlatform(cmderFroPlatform);
processor.setStorager(storager);
processor.setRedisCatchStorage(redisCatchStorage);
return processor;
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
index 8602468..38d08ec 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
@@ -1,9 +1,12 @@
package com.genersoft.iot.vmp.gb28181.transmit.cmd;
+import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import javax.sip.header.WWWAuthenticateHeader;
+import java.nio.channels.Channel;
+import java.util.List;
public interface ISIPCommanderForPlatform {
@@ -29,4 +32,16 @@
* @return callId(浣滀负鎺ュ彈鍥炲鐨勫垽瀹�)
*/
String keepalive(ParentPlatform parentPlatform);
+
+
+ /**
+ * 鍚戜笂绾у洖澶嶉�氶亾淇℃伅
+ * @param channel 閫氶亾淇℃伅
+ * @param parentPlatform 骞冲彴淇℃伅
+ * @param sn
+ * @param fromTag
+ * @param size
+ * @return
+ */
+ boolean catalogQuery(DeviceChannel channel, ParentPlatform parentPlatform, String sn, String fromTag, int size);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
index befdd95..06b5ad2 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderPlarformProvider.java
@@ -4,22 +4,22 @@
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.Host;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
+import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
import org.springframework.util.DigestUtils;
-import javax.sip.InvalidArgumentException;
-import javax.sip.PeerUnavailableException;
-import javax.sip.SipFactory;
-import javax.sip.SipProvider;
+import javax.sip.*;
import javax.sip.address.Address;
import javax.sip.address.SipURI;
import javax.sip.header.*;
import javax.sip.message.Request;
import javax.validation.constraints.NotNull;
+import java.nio.channels.Channel;
import java.text.ParseException;
import java.util.ArrayList;
+import java.util.List;
import java.util.UUID;
/**
@@ -193,4 +193,38 @@
return registerRequest;
}
+
+ public Request createMessageRequest(ParentPlatform parentPlatform, String content, String fromTag) throws PeerUnavailableException, ParseException, InvalidArgumentException {
+ Request request = null;
+ // sipuri
+ SipURI requestURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(), parentPlatform.getServerIP()+ ":" + parentPlatform.getServerPort());
+ // via
+ ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
+ ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(parentPlatform.getDeviceIp(), Integer.parseInt(parentPlatform.getDevicePort()),
+ parentPlatform.getTransport(), null);
+ viaHeader.setRPort();
+ viaHeaders.add(viaHeader);
+ // from
+ SipURI fromSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getServerGBId(),
+ parentPlatform.getDeviceIp() + ":" + parentPlatform.getDevicePort());
+ Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
+ FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag);
+ // to
+ SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(parentPlatform.getDeviceGBId(), parentPlatform.getServerGBDomain());
+ Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
+ ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress, null);
+ // callid
+ CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
+ : udpSipProvider.getNewCallId();
+ // Forwards
+ MaxForwardsHeader maxForwards = sipFactory.createHeaderFactory().createMaxForwardsHeader(70);
+ // ceq
+ CSeqHeader cSeqHeader = sipFactory.createHeaderFactory().createCSeqHeader(1L, Request.MESSAGE);
+
+ request = sipFactory.createMessageFactory().createRequest(requestURI, Request.MESSAGE, callIdHeader, cSeqHeader, fromHeader,
+ toHeader, viaHeaders, maxForwards);
+ ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("APPLICATION", "MANSCDP+xml");
+ request.setContent(content, contentTypeHeader);
+ return request;
+ }
}
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 19ffd61..2ba84ac 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
@@ -2,6 +2,7 @@
import com.genersoft.iot.vmp.conf.SipConfig;
import com.genersoft.iot.vmp.gb28181.bean.Device;
+import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
@@ -21,7 +22,9 @@
import javax.sip.header.CallIdHeader;
import javax.sip.header.WWWAuthenticateHeader;
import javax.sip.message.Request;
+import java.nio.channels.Channel;
import java.text.ParseException;
+import java.util.List;
import java.util.UUID;
@Component
@@ -156,4 +159,54 @@
}
}
+
+ /**
+ * 鍚戜笂绾у洖澶嶉�氶亾淇℃伅
+ * @param channel 閫氶亾淇℃伅
+ * @param parentPlatform 骞冲彴淇℃伅
+ * @return
+ */
+ @Override
+ public boolean catalogQuery(DeviceChannel channel, ParentPlatform parentPlatform, String sn, String fromTag, int size) {
+
+ if (channel == null || parentPlatform ==null) {
+ return false;
+ }
+ try {
+ StringBuffer catalogXml = new StringBuffer(600);
+ catalogXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n");
+ catalogXml.append("<Response>\r\n");
+ catalogXml.append("<CmdType>Catalog</CmdType>\r\n");
+ catalogXml.append("<SN>" +sn + "</SN>\r\n");
+ catalogXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n");
+ catalogXml.append("<SumNum>" + size + "</SumNum>\r\n");
+ catalogXml.append("<DeviceList Num=\"1\">\r\n");
+ catalogXml.append("<Item>\r\n");
+
+ catalogXml.append("<DeviceID>" + channel.getChannelId() + "</DeviceID>\r\n");
+ catalogXml.append("<Name>" + channel.getName() + "</Name>\r\n");
+ catalogXml.append("<Manufacturer>" + channel.getManufacture() + "</Manufacturer>\r\n");
+ catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n");
+ catalogXml.append("<Owner>" + channel.getOwner() + "</Owner>\r\n");
+ catalogXml.append("<CivilCode>" + channel.getCivilCode() + "</CivilCode>\r\n");
+ catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n");
+ catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n");// TODO 褰撳墠涓嶈兘娣诲姞鍒嗙粍锛� 鎵�浠ユ殏鏃舵病鏈夌埗鑺傜偣
+ catalogXml.append("<ParentID>" + channel.getParentId() + "</ParentID>\r\n"); // TODO 褰撳墠涓嶈兘娣诲姞鍒嗙粍锛� 鎵�浠ユ殏鏃舵病鏈夌埗鑺傜偣
+ catalogXml.append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n");
+ catalogXml.append("<RegisterWay>" + channel.getRegisterWay() + "</RegisterWay>\r\n");
+ catalogXml.append("<Status>" + (channel.getStatus() == 0?"OFF":"ON") + "</Status>\r\n");
+ catalogXml.append("<Info></Info>\r\n");
+
+ catalogXml.append("</Item>\r\n");
+ catalogXml.append("</DeviceList>\r\n");
+ catalogXml.append("</Response>\r\n");
+ Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, catalogXml.toString(), fromTag);
+ transmitRequest(parentPlatform, request);
+
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
index fbdc7e2..1860ec7 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
@@ -7,10 +7,14 @@
import javax.sip.InvalidArgumentException;
import javax.sip.RequestEvent;
import javax.sip.SipException;
+import javax.sip.header.FromHeader;
import javax.sip.message.Request;
import javax.sip.message.Response;
+import com.genersoft.iot.vmp.gb28181.bean.*;
+import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
+import com.genersoft.iot.vmp.vmanager.platform.bean.ChannelReduce;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
@@ -20,10 +24,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import com.genersoft.iot.vmp.common.VideoManagerConstants;
-import com.genersoft.iot.vmp.gb28181.bean.Device;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.RecordInfo;
-import com.genersoft.iot.vmp.gb28181.bean.RecordItem;
import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector;
import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
@@ -46,6 +46,8 @@
private final static Logger logger = LoggerFactory.getLogger(MessageRequestProcessor.class);
private SIPCommander cmder;
+
+ private SIPCommanderFroPlatform cmderFroPlatform;
private IVideoManagerStorager storager;
@@ -163,110 +165,135 @@
Element deviceIdElement = rootElement.element("DeviceID");
String deviceId = deviceIdElement.getText();
Element deviceListElement = rootElement.element("DeviceList");
- if (deviceListElement == null) {
- return;
- }
- Iterator<Element> deviceListIterator = deviceListElement.elementIterator();
- if (deviceListIterator != null) {
- Device device = storager.queryVideoDevice(deviceId);
- if (device == null) {
+ if (deviceListElement == null) { // 瀛樺湪DeviceList鍒欎负鍝嶅簲 catalog锛� 涓嶅瓨鍦―eviceList鍒欎负鏌ヨ璇锋眰
+ // TODO 鍚庣画灏嗕唬鐮佹媶鍒�
+ ParentPlatform parentPlatform = storager.queryParentPlatById(deviceId);
+ if (parentPlatform == null) {
+ response404Ack(evt);
return;
- }
- // 閬嶅巻DeviceList
- while (deviceListIterator.hasNext()) {
- Element itemDevice = deviceListIterator.next();
- Element channelDeviceElement = itemDevice.element("DeviceID");
- if (channelDeviceElement == null) {
- continue;
- }
- String channelDeviceId = channelDeviceElement.getText();
- Element channdelNameElement = itemDevice.element("Name");
- String channelName = channdelNameElement != null ? channdelNameElement.getTextTrim().toString() : "";
- Element statusElement = itemDevice.element("Status");
- String status = statusElement != null ? statusElement.getText().toString() : "ON";
- DeviceChannel deviceChannel = new DeviceChannel();
- deviceChannel.setName(channelName);
- deviceChannel.setChannelId(channelDeviceId);
- // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR鐨勫吋瀹规�у鐞�
- if (status.equals("ON") || status.equals("On") || status.equals("ONLINE")) {
- deviceChannel.setStatus(1);
- }
- if (status.equals("OFF") || status.equals("Off") || status.equals("OFFLINE")) {
- deviceChannel.setStatus(0);
+ }else {
+ // 鍥炲200 OK
+ responseAck(evt);
+
+ Element snElement = rootElement.element("SN");
+ String sn = snElement.getText();
+ FromHeader fromHeader = (FromHeader)evt.getRequest().getHeader(FromHeader.NAME);
+ // 鍑嗗鍥炲閫氶亾淇℃伅
+ List<ChannelReduce> channelReduces = storager.queryChannelListInParentPlatform(parentPlatform.getDeviceGBId());
+ if (channelReduces.size() >0 ) {
+ for (ChannelReduce channelReduce : channelReduces) {
+ DeviceChannel deviceChannel = storager.queryChannel(channelReduce.getDeviceId(), channelReduce.getChannelId());
+ cmderFroPlatform.catalogQuery(deviceChannel, parentPlatform, sn, fromHeader.getTag(), channelReduces.size());
+ }
}
- deviceChannel.setManufacture(XmlUtil.getText(itemDevice, "Manufacturer"));
- deviceChannel.setModel(XmlUtil.getText(itemDevice, "Model"));
- deviceChannel.setOwner(XmlUtil.getText(itemDevice, "Owner"));
- deviceChannel.setCivilCode(XmlUtil.getText(itemDevice, "CivilCode"));
- deviceChannel.setBlock(XmlUtil.getText(itemDevice, "Block"));
- deviceChannel.setAddress(XmlUtil.getText(itemDevice, "Address"));
- if (XmlUtil.getText(itemDevice, "Parental") == null || XmlUtil.getText(itemDevice, "Parental") == "") {
- deviceChannel.setParental(0);
- } else {
- deviceChannel.setParental(Integer.parseInt(XmlUtil.getText(itemDevice, "Parental")));
- }
- deviceChannel.setParentId(XmlUtil.getText(itemDevice, "ParentID"));
- if (XmlUtil.getText(itemDevice, "SafetyWay") == null || XmlUtil.getText(itemDevice, "SafetyWay")== "") {
- deviceChannel.setSafetyWay(0);
- } else {
- deviceChannel.setSafetyWay(Integer.parseInt(XmlUtil.getText(itemDevice, "SafetyWay")));
- }
- if (XmlUtil.getText(itemDevice, "RegisterWay") == null || XmlUtil.getText(itemDevice, "RegisterWay") =="") {
- deviceChannel.setRegisterWay(1);
- } else {
- deviceChannel.setRegisterWay(Integer.parseInt(XmlUtil.getText(itemDevice, "RegisterWay")));
- }
- deviceChannel.setCertNum(XmlUtil.getText(itemDevice, "CertNum"));
- if (XmlUtil.getText(itemDevice, "Certifiable") == null || XmlUtil.getText(itemDevice, "Certifiable") == "") {
- deviceChannel.setCertifiable(0);
- } else {
- deviceChannel.setCertifiable(Integer.parseInt(XmlUtil.getText(itemDevice, "Certifiable")));
- }
- if (XmlUtil.getText(itemDevice, "ErrCode") == null || XmlUtil.getText(itemDevice, "ErrCode") == "") {
- deviceChannel.setErrCode(0);
- } else {
- deviceChannel.setErrCode(Integer.parseInt(XmlUtil.getText(itemDevice, "ErrCode")));
- }
- deviceChannel.setEndTime(XmlUtil.getText(itemDevice, "EndTime"));
- deviceChannel.setSecrecy(XmlUtil.getText(itemDevice, "Secrecy"));
- deviceChannel.setIpAddress(XmlUtil.getText(itemDevice, "IPAddress"));
- if (XmlUtil.getText(itemDevice, "Port") == null || XmlUtil.getText(itemDevice, "Port") =="") {
- deviceChannel.setPort(0);
- } else {
- deviceChannel.setPort(Integer.parseInt(XmlUtil.getText(itemDevice, "Port")));
- }
- deviceChannel.setPassword(XmlUtil.getText(itemDevice, "Password"));
- if (XmlUtil.getText(itemDevice, "Longitude") == null || XmlUtil.getText(itemDevice, "Longitude") == "") {
- deviceChannel.setLongitude(0.00);
- } else {
- deviceChannel.setLongitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Longitude")));
- }
- if (XmlUtil.getText(itemDevice, "Latitude") == null || XmlUtil.getText(itemDevice, "Latitude") =="") {
- deviceChannel.setLatitude(0.00);
- } else {
- deviceChannel.setLatitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Latitude")));
- }
- if (XmlUtil.getText(itemDevice, "PTZType") == null || XmlUtil.getText(itemDevice, "PTZType") == "") {
- deviceChannel.setPTZType(0);
- } else {
- deviceChannel.setPTZType(Integer.parseInt(XmlUtil.getText(itemDevice, "PTZType")));
- }
- deviceChannel.setHasAudio(true); // 榛樿鍚湁闊抽锛屾挱鏀炬椂鍐嶆鏌ユ槸鍚︽湁闊抽鍙婃槸鍚AC
- storager.updateChannel(device.getDeviceId(), deviceChannel);
}
- RequestMessage msg = new RequestMessage();
- msg.setDeviceId(deviceId);
- msg.setType(DeferredResultHolder.CALLBACK_CMD_CATALOG);
- msg.setData(device);
- deferredResultHolder.invokeResult(msg);
- // 鍥炲200 OK
- responseAck(evt);
- if (offLineDetector.isOnline(deviceId)) {
- publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+
+ }else {
+ Iterator<Element> deviceListIterator = deviceListElement.elementIterator();
+ if (deviceListIterator != null) {
+ Device device = storager.queryVideoDevice(deviceId);
+ if (device == null) {
+ return;
+ }
+ // 閬嶅巻DeviceList
+ while (deviceListIterator.hasNext()) {
+ Element itemDevice = deviceListIterator.next();
+ Element channelDeviceElement = itemDevice.element("DeviceID");
+ if (channelDeviceElement == null) {
+ continue;
+ }
+ String channelDeviceId = channelDeviceElement.getText();
+ Element channdelNameElement = itemDevice.element("Name");
+ String channelName = channdelNameElement != null ? channdelNameElement.getTextTrim().toString() : "";
+ Element statusElement = itemDevice.element("Status");
+ String status = statusElement != null ? statusElement.getText().toString() : "ON";
+ DeviceChannel deviceChannel = new DeviceChannel();
+ deviceChannel.setName(channelName);
+ deviceChannel.setChannelId(channelDeviceId);
+ // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR鐨勫吋瀹规�у鐞�
+ if (status.equals("ON") || status.equals("On") || status.equals("ONLINE")) {
+ deviceChannel.setStatus(1);
+ }
+ if (status.equals("OFF") || status.equals("Off") || status.equals("OFFLINE")) {
+ deviceChannel.setStatus(0);
+ }
+
+ deviceChannel.setManufacture(XmlUtil.getText(itemDevice, "Manufacturer"));
+ deviceChannel.setModel(XmlUtil.getText(itemDevice, "Model"));
+ deviceChannel.setOwner(XmlUtil.getText(itemDevice, "Owner"));
+ deviceChannel.setCivilCode(XmlUtil.getText(itemDevice, "CivilCode"));
+ deviceChannel.setBlock(XmlUtil.getText(itemDevice, "Block"));
+ deviceChannel.setAddress(XmlUtil.getText(itemDevice, "Address"));
+ if (XmlUtil.getText(itemDevice, "Parental") == null || XmlUtil.getText(itemDevice, "Parental") == "") {
+ deviceChannel.setParental(0);
+ } else {
+ deviceChannel.setParental(Integer.parseInt(XmlUtil.getText(itemDevice, "Parental")));
+ }
+ deviceChannel.setParentId(XmlUtil.getText(itemDevice, "ParentID"));
+ if (XmlUtil.getText(itemDevice, "SafetyWay") == null || XmlUtil.getText(itemDevice, "SafetyWay")== "") {
+ deviceChannel.setSafetyWay(0);
+ } else {
+ deviceChannel.setSafetyWay(Integer.parseInt(XmlUtil.getText(itemDevice, "SafetyWay")));
+ }
+ if (XmlUtil.getText(itemDevice, "RegisterWay") == null || XmlUtil.getText(itemDevice, "RegisterWay") =="") {
+ deviceChannel.setRegisterWay(1);
+ } else {
+ deviceChannel.setRegisterWay(Integer.parseInt(XmlUtil.getText(itemDevice, "RegisterWay")));
+ }
+ deviceChannel.setCertNum(XmlUtil.getText(itemDevice, "CertNum"));
+ if (XmlUtil.getText(itemDevice, "Certifiable") == null || XmlUtil.getText(itemDevice, "Certifiable") == "") {
+ deviceChannel.setCertifiable(0);
+ } else {
+ deviceChannel.setCertifiable(Integer.parseInt(XmlUtil.getText(itemDevice, "Certifiable")));
+ }
+ if (XmlUtil.getText(itemDevice, "ErrCode") == null || XmlUtil.getText(itemDevice, "ErrCode") == "") {
+ deviceChannel.setErrCode(0);
+ } else {
+ deviceChannel.setErrCode(Integer.parseInt(XmlUtil.getText(itemDevice, "ErrCode")));
+ }
+ deviceChannel.setEndTime(XmlUtil.getText(itemDevice, "EndTime"));
+ deviceChannel.setSecrecy(XmlUtil.getText(itemDevice, "Secrecy"));
+ deviceChannel.setIpAddress(XmlUtil.getText(itemDevice, "IPAddress"));
+ if (XmlUtil.getText(itemDevice, "Port") == null || XmlUtil.getText(itemDevice, "Port") =="") {
+ deviceChannel.setPort(0);
+ } else {
+ deviceChannel.setPort(Integer.parseInt(XmlUtil.getText(itemDevice, "Port")));
+ }
+ deviceChannel.setPassword(XmlUtil.getText(itemDevice, "Password"));
+ if (XmlUtil.getText(itemDevice, "Longitude") == null || XmlUtil.getText(itemDevice, "Longitude") == "") {
+ deviceChannel.setLongitude(0.00);
+ } else {
+ deviceChannel.setLongitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Longitude")));
+ }
+ if (XmlUtil.getText(itemDevice, "Latitude") == null || XmlUtil.getText(itemDevice, "Latitude") =="") {
+ deviceChannel.setLatitude(0.00);
+ } else {
+ deviceChannel.setLatitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Latitude")));
+ }
+ if (XmlUtil.getText(itemDevice, "PTZType") == null || XmlUtil.getText(itemDevice, "PTZType") == "") {
+ deviceChannel.setPTZType(0);
+ } else {
+ deviceChannel.setPTZType(Integer.parseInt(XmlUtil.getText(itemDevice, "PTZType")));
+ }
+ deviceChannel.setHasAudio(true); // 榛樿鍚湁闊抽锛屾挱鏀炬椂鍐嶆鏌ユ槸鍚︽湁闊抽鍙婃槸鍚AC
+ storager.updateChannel(device.getDeviceId(), deviceChannel);
+ }
+
+ RequestMessage msg = new RequestMessage();
+ msg.setDeviceId(deviceId);
+ msg.setType(DeferredResultHolder.CALLBACK_CMD_CATALOG);
+ msg.setData(device);
+ deferredResultHolder.invokeResult(msg);
+ // 鍥炲200 OK
+ responseAck(evt);
+ if (offLineDetector.isOnline(deviceId)) {
+ publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE);
+ }
}
}
+
} catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
e.printStackTrace();
}
@@ -469,6 +496,18 @@
getServerTransaction(evt).sendResponse(response);
}
+ /***
+ * 鍥炲200 OK
+ * @param evt
+ * @throws SipException
+ * @throws InvalidArgumentException
+ * @throws ParseException
+ */
+ private void response404Ack(RequestEvent evt) throws SipException, InvalidArgumentException, ParseException {
+ Response response = getMessageFactory().createResponse(Response.NOT_FOUND, evt.getRequest());
+ getServerTransaction(evt).sendResponse(response);
+ }
+
private Element getRootElement(RequestEvent evt) throws DocumentException {
Request request = evt.getRequest();
SAXReader reader = new SAXReader();
@@ -508,4 +547,12 @@
public void setRedisCatchStorage(IRedisCatchStorage redisCatchStorage) {
this.redisCatchStorage = redisCatchStorage;
}
+
+ public SIPCommanderFroPlatform getCmderFroPlatform() {
+ return cmderFroPlatform;
+ }
+
+ public void setCmderFroPlatform(SIPCommanderFroPlatform cmderFroPlatform) {
+ this.cmderFroPlatform = cmderFroPlatform;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
index 9e986db..970f7a4 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
@@ -210,6 +210,11 @@
*/
PageInfo<ChannelReduce> queryAllChannelList(int page, int count, String query, Boolean online, Boolean channelType, String platformId, Boolean inPlatform);
+ /**
+ * 鏌ヨ璁惧鐨勯�氶亾淇℃伅
+ */
+ List<ChannelReduce> queryChannelListInParentPlatform(String platformId);
+
/**
* 鏇存柊涓婄骇骞冲彴鐨勯�氶亾淇℃伅
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 5b04222..5c871bd 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
@@ -83,19 +83,19 @@
"SELECT * FROM ( "+
" SELECT dc.channelId, dc.deviceId, dc.name, de.manufacturer, de.hostAddress, " +
"(SELECT count(0) FROM device_channel WHERE parentId=dc.channelId) as subCount, " +
- "pc.platformId " +
+ "(SELECT pc.platformId FROM platform_gb_channel pc WHERE pc.deviceId=dc.deviceId AND pc.channelId = dc.channelId ) as platformId " +
"FROM device_channel dc " +
"LEFT JOIN device de ON dc.deviceId = de.deviceId " +
- "LEFT JOIN platform_gb_channel pc on pc.deviceId = dc.deviceId AND pc.channelId = dc.channelId " +
" WHERE 1=1 " +
" <if test=\"query != null\"> AND (dc.channelId LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " +
" <if test=\"online == true\" > AND dc.status=1</if> " +
" <if test=\"online == false\" > AND dc.status=0</if> " +
- " <if test=\"platformId != null and inPlatform == true\"> AND pc.platformId=#{platformId} </if> " +
") dcr" +
" WHERE 1=1 " +
" <if test=\"hasSubChannel!= null and hasSubChannel == true\" > AND subCount >0</if> " +
" <if test=\"hasSubChannel!= null and hasSubChannel == false\" > AND subCount=0</if> " +
+ " <if test=\"platformId != null and inPlatform == true \" > AND platformId='${platformId}'</if> " +
+ " <if test=\"platformId != null and inPlatform == false \" > AND (platformId != '${platformId}' OR platformId is NULL ) </if> " +
" </script>"})
List<ChannelReduce> queryChannelListInAll(String query, Boolean online, Boolean hasSubChannel, String platformId, Boolean inPlatform);
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java
index b0428cc..7075757 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/ParentPlatformMapper.java
@@ -45,7 +45,7 @@
@Delete("DELETE FROM parent_platform WHERE deviceGBId=#{deviceGBId}")
int delParentPlatform(ParentPlatform parentPlatform);
- @Select("SELECT * FROM parent_platform")
+ @Select("SELECT *,( SELECT count(0) FROM platform_gb_channel pc WHERE pc.platformId = pp.deviceGBId) as channelCount FROM parent_platform pp ")
List<ParentPlatform> getParentPlatformList();
@Select("SELECT * FROM parent_platform WHERE enable=#{enable}")
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/PatformChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/PatformChannelMapper.java
index 00b1260..c5e9091 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/PatformChannelMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/PatformChannelMapper.java
@@ -30,8 +30,13 @@
@Delete("<script> "+
- "DELETE FROM platform_gb_channel WHERE deviceAndChannelId in" +
+ "DELETE FROM platform_gb_channel WHERE platformId='${platformId}' AND deviceAndChannelId in" +
"<foreach collection='channelReducesToDel' item='item' open='(' separator=',' close=')' > '${item.deviceId}_${item.channelId}'</foreach>" +
"</script>")
int delChannelForGB(String platformId, List<ChannelReduce> channelReducesToDel);
+
+ @Delete("<script> "+
+ "DELETE FROM platform_gb_channel WHERE platformId='${platformId}'" +
+ "</script>")
+ int cleanChannelForGB(String platformId);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
index aed3026..93d8c83 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
@@ -249,9 +249,12 @@
return result > 0;
}
+ @Transactional
@Override
public boolean deleteParentPlatform(ParentPlatform parentPlatform) {
int result = platformMapper.delParentPlatform(parentPlatform);
+ // 鍒犻櫎鍏宠仈鐨勯�氶亾
+ patformChannelMapper.cleanChannelForGB(parentPlatform.getDeviceGBId());
return result > 0;
}
@@ -286,6 +289,11 @@
return new PageInfo<>(all);
}
+ @Override
+ public List<ChannelReduce> queryChannelListInParentPlatform(String platformId) {
+
+ return deviceChannelMapper.queryChannelListInAll(null, null, null, platformId, true);
+ }
@Override
public int updateChannelForGB(String platformId, List<ChannelReduce> channelReduces) {
diff --git a/web_src/src/components/gb28181/chooseChannel.vue b/web_src/src/components/gb28181/chooseChannel.vue
index 62b39dc..810ebd3 100644
--- a/web_src/src/components/gb28181/chooseChannel.vue
+++ b/web_src/src/components/gb28181/chooseChannel.vue
@@ -1,7 +1,7 @@
<template>
<div id="chooseChannel" v-loading="isLoging">
- <el-dialog title="閫夋嫨閫氶亾" top="2rem" width="70%" :close-on-click-modal="false" :visible.sync="showDialog" :destroy-on-close="true" @close="close()">
+ <el-dialog title="閫夋嫨閫氶亾" v-if="showDialog" top="2rem" width="70%" :close-on-click-modal="false" :visible.sync="showDialog" :destroy-on-close="true" @close="close()">
<el-tabs v-model="tabActiveName" >
<el-tab-pane label="鍥芥爣閫氶亾" name="gbChannel">
<el-container>
diff --git a/web_src/src/components/gb28181/chooseChannelForGb.vue b/web_src/src/components/gb28181/chooseChannelForGb.vue
index c57fe17..ceadc8c 100644
--- a/web_src/src/components/gb28181/chooseChannelForGb.vue
+++ b/web_src/src/components/gb28181/chooseChannelForGb.vue
@@ -41,7 +41,7 @@
<el-table-column prop="manufacturer" label="鍘傚" align="center">
</el-table-column>
</el-table>
- <el-pagination style="float: right;margin-top: 1rem;" @size-change="handleSizeChange" @current-change="currentChange" :current-page="currentPage" :page-size="count" :page-sizes="[15, 20, 30, 50]" layout="total, sizes, prev, pager, next" :total="total">
+ <el-pagination style="float: right;margin-top: 1rem;" @size-change="handleSizeChange" @current-change="currentChange" :current-page="currentPage" :page-size="count" :page-sizes="[10, 20, 30, 50]" layout="total, sizes, prev, pager, next" :total="total">
</el-pagination>
</div>
</template>
--
Gitblit v1.8.0