Commit 26cd7dbaf9394ff26f5229b18cfdb72c203a6bc3

Authored by gaofw189
1 parent 72a1f122

修复WVP作为下级平台接收DeviceStatus指令固定响应的问题

src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java
@@ -64,7 +64,7 @@ public interface ISIPCommanderForPlatform { @@ -64,7 +64,7 @@ public interface ISIPCommanderForPlatform {
64 * @param fromTag 64 * @param fromTag
65 * @return 65 * @return
66 */ 66 */
67 - void deviceStatusResponse(ParentPlatform parentPlatform, String sn, String fromTag) throws SipException, InvalidArgumentException, ParseException; 67 + void deviceStatusResponse(ParentPlatform parentPlatform,String channelId, String sn, String fromTag,int status) throws SipException, InvalidArgumentException, ParseException;
68 68
69 /** 69 /**
70 * 向上级回复移动位置订阅消息 70 * 向上级回复移动位置订阅消息
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -287,19 +287,20 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { @@ -287,19 +287,20 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
287 * @return 287 * @return
288 */ 288 */
289 @Override 289 @Override
290 - public void deviceStatusResponse(ParentPlatform parentPlatform, String sn, String fromTag) throws SipException, InvalidArgumentException, ParseException { 290 + public void deviceStatusResponse(ParentPlatform parentPlatform,String channelId, String sn, String fromTag,int status) throws SipException, InvalidArgumentException, ParseException {
291 if (parentPlatform == null) { 291 if (parentPlatform == null) {
292 return ; 292 return ;
293 } 293 }
  294 + String statusStr = (status==1)?"ONLINE":"OFFLINE";
294 String characterSet = parentPlatform.getCharacterSet(); 295 String characterSet = parentPlatform.getCharacterSet();
295 StringBuffer deviceStatusXml = new StringBuffer(600); 296 StringBuffer deviceStatusXml = new StringBuffer(600);
296 deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n"); 297 deviceStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n");
297 deviceStatusXml.append("<Response>\r\n"); 298 deviceStatusXml.append("<Response>\r\n");
298 deviceStatusXml.append("<CmdType>DeviceStatus</CmdType>\r\n"); 299 deviceStatusXml.append("<CmdType>DeviceStatus</CmdType>\r\n");
299 deviceStatusXml.append("<SN>" +sn + "</SN>\r\n"); 300 deviceStatusXml.append("<SN>" +sn + "</SN>\r\n");
300 - deviceStatusXml.append("<DeviceID>" + parentPlatform.getDeviceGBId() + "</DeviceID>\r\n"); 301 + deviceStatusXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
301 deviceStatusXml.append("<Result>OK</Result>\r\n"); 302 deviceStatusXml.append("<Result>OK</Result>\r\n");
302 - deviceStatusXml.append("<Online>ONLINE</Online>\r\n"); 303 + deviceStatusXml.append("<Online>"+statusStr+"</Online>\r\n");
303 deviceStatusXml.append("<Status>OK</Status>\r\n"); 304 deviceStatusXml.append("<Status>OK</Status>\r\n");
304 deviceStatusXml.append("</Response>\r\n"); 305 deviceStatusXml.append("</Response>\r\n");
305 306
@@ -307,7 +308,6 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { @@ -307,7 +308,6 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform {
307 308
308 Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, deviceStatusXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader); 309 Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, deviceStatusXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader);
309 sipSender.transmitRequest(parentPlatform.getDeviceIp(), request); 310 sipSender.transmitRequest(parentPlatform.getDeviceIp(), request);
310 -  
311 } 311 }
312 312
313 @Override 313 @Override
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java
@@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query. @@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.
2 2
3 import com.genersoft.iot.vmp.conf.SipConfig; 3 import com.genersoft.iot.vmp.conf.SipConfig;
4 import com.genersoft.iot.vmp.gb28181.bean.Device; 4 import com.genersoft.iot.vmp.gb28181.bean.Device;
  5 +import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
5 import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; 6 import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
6 import com.genersoft.iot.vmp.gb28181.event.EventPublisher; 7 import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
7 import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; 8 import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
@@ -24,6 +25,8 @@ import javax.sip.header.FromHeader; @@ -24,6 +25,8 @@ import javax.sip.header.FromHeader;
24 import javax.sip.message.Response; 25 import javax.sip.message.Response;
25 import java.text.ParseException; 26 import java.text.ParseException;
26 27
  28 +import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText;
  29 +
27 @Component 30 @Component
28 public class DeviceStatusQueryMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler { 31 public class DeviceStatusQueryMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
29 32
@@ -62,13 +65,19 @@ public class DeviceStatusQueryMessageHandler extends SIPRequestProcessorParent i @@ -62,13 +65,19 @@ public class DeviceStatusQueryMessageHandler extends SIPRequestProcessorParent i
62 FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME); 65 FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME);
63 // 回复200 OK 66 // 回复200 OK
64 try { 67 try {
65 - responseAck((SIPRequest) evt.getRequest(), Response.OK); 68 + responseAck((SIPRequest) evt.getRequest(), Response.OK);
66 } catch (SipException | InvalidArgumentException | ParseException e) { 69 } catch (SipException | InvalidArgumentException | ParseException e) {
67 logger.error("[命令发送失败] 国标级联 DeviceStatus查询回复200OK: {}", e.getMessage()); 70 logger.error("[命令发送失败] 国标级联 DeviceStatus查询回复200OK: {}", e.getMessage());
68 } 71 }
69 String sn = rootElement.element("SN").getText(); 72 String sn = rootElement.element("SN").getText();
  73 + String channelId = getText(rootElement, "DeviceID");
  74 + DeviceChannel deviceChannel = storager.queryChannelInParentPlatform(parentPlatform.getServerGBId(), channelId);
  75 + if (deviceChannel ==null){
  76 + logger.error("[平台没有该通道的使用权限]:platformId"+parentPlatform.getServerGBId()+" deviceID:"+channelId);
  77 + return;
  78 + }
70 try { 79 try {
71 - cmderFroPlatform.deviceStatusResponse(parentPlatform, sn, fromHeader.getTag()); 80 + cmderFroPlatform.deviceStatusResponse(parentPlatform,channelId, sn, fromHeader.getTag(),deviceChannel.getStatus());
72 } catch (SipException | InvalidArgumentException | ParseException e) { 81 } catch (SipException | InvalidArgumentException | ParseException e) {
73 logger.error("[命令发送失败] 国标级联 DeviceStatus查询回复: {}", e.getMessage()); 82 logger.error("[命令发送失败] 国标级联 DeviceStatus查询回复: {}", e.getMessage());
74 } 83 }