Commit 36fda97ebba23425e859ea87ada5beb8687349c1

Authored by panll
Committed by Gitee
2 parents 098dd8a0 cf23816c

!5 优化通道更新逻辑以及添加去重保证数据存入

Merge pull request !5 from panll/temp2
src/main/java/com/genersoft/iot/vmp/conf/security/AnonymousAuthenticationEntryPoint.java
... ... @@ -21,7 +21,7 @@ public class AnonymousAuthenticationEntryPoint implements AuthenticationEntryPoi
21 21  
22 22 @Override
23 23 public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) {
24   - logger.debug("用户需要登录,访问[{}]失败,AuthenticationException=[{}]", request.getRequestURI(), e.getMessage());
  24 +// logger.debug("用户需要登录,访问[{}]失败,AuthenticationException=[{}]", request.getRequestURI(), e.getMessage());
25 25 // 允许跨域
26 26 response.setHeader("Access-Control-Allow-Origin", "*");
27 27 // 允许自定义请求头token(允许head跨域)
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
... ... @@ -255,7 +255,9 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
255 255 continue;
256 256 }
257 257 Element eventElement = itemDevice.element("Event");
258   - DeviceChannel channel = channelContentHander(itemDevice);
  258 + DeviceChannel channel = XmlUtil.channelContentHander(itemDevice);
  259 + channel.setDeviceId(device.getDeviceId());
  260 + logger.debug("收到来自设备【{}】的通道: {}【{}】", device.getDeviceId(), channel.getName(), channel.getChannelId());
259 261 switch (eventElement.getText().toUpperCase()) {
260 262 case "ON" : // 上线
261 263 logger.info("收到来自设备【{}】的通道【{}】上线通知", device.getDeviceId(), channel.getChannelId());
... ... @@ -316,93 +318,6 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
316 318 }
317 319 }
318 320  
319   - public DeviceChannel channelContentHander(Element itemDevice){
320   - Element channdelNameElement = itemDevice.element("Name");
321   - String channelName = channdelNameElement != null ? channdelNameElement.getTextTrim().toString() : "";
322   - Element statusElement = itemDevice.element("Status");
323   - String status = statusElement != null ? statusElement.getTextTrim().toString() : "ON";
324   - DeviceChannel deviceChannel = new DeviceChannel();
325   - deviceChannel.setName(channelName);
326   - Element channdelIdElement = itemDevice.element("DeviceID");
327   - String channelId = channdelIdElement != null ? channdelIdElement.getTextTrim().toString() : "";
328   - deviceChannel.setChannelId(channelId);
329   - // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR的兼容性处理
330   - if (status.equals("ON") || status.equals("On") || status.equals("ONLINE")) {
331   - deviceChannel.setStatus(1);
332   - }
333   - if (status.equals("OFF") || status.equals("Off") || status.equals("OFFLINE")) {
334   - deviceChannel.setStatus(0);
335   - }
336   -
337   - deviceChannel.setManufacture(XmlUtil.getText(itemDevice, "Manufacturer"));
338   - deviceChannel.setModel(XmlUtil.getText(itemDevice, "Model"));
339   - deviceChannel.setOwner(XmlUtil.getText(itemDevice, "Owner"));
340   - deviceChannel.setCivilCode(XmlUtil.getText(itemDevice, "CivilCode"));
341   - deviceChannel.setBlock(XmlUtil.getText(itemDevice, "Block"));
342   - deviceChannel.setAddress(XmlUtil.getText(itemDevice, "Address"));
343   - if (XmlUtil.getText(itemDevice, "Parental") == null
344   - || XmlUtil.getText(itemDevice, "Parental") == "") {
345   - deviceChannel.setParental(0);
346   - } else {
347   - deviceChannel.setParental(Integer.parseInt(XmlUtil.getText(itemDevice, "Parental")));
348   - }
349   - deviceChannel.setParentId(XmlUtil.getText(itemDevice, "ParentID"));
350   - if (XmlUtil.getText(itemDevice, "SafetyWay") == null
351   - || XmlUtil.getText(itemDevice, "SafetyWay") == "") {
352   - deviceChannel.setSafetyWay(0);
353   - } else {
354   - deviceChannel.setSafetyWay(Integer.parseInt(XmlUtil.getText(itemDevice, "SafetyWay")));
355   - }
356   - if (XmlUtil.getText(itemDevice, "RegisterWay") == null
357   - || XmlUtil.getText(itemDevice, "RegisterWay") == "") {
358   - deviceChannel.setRegisterWay(1);
359   - } else {
360   - deviceChannel.setRegisterWay(Integer.parseInt(XmlUtil.getText(itemDevice, "RegisterWay")));
361   - }
362   - deviceChannel.setCertNum(XmlUtil.getText(itemDevice, "CertNum"));
363   - if (XmlUtil.getText(itemDevice, "Certifiable") == null
364   - || XmlUtil.getText(itemDevice, "Certifiable") == "") {
365   - deviceChannel.setCertifiable(0);
366   - } else {
367   - deviceChannel.setCertifiable(Integer.parseInt(XmlUtil.getText(itemDevice, "Certifiable")));
368   - }
369   - if (XmlUtil.getText(itemDevice, "ErrCode") == null
370   - || XmlUtil.getText(itemDevice, "ErrCode") == "") {
371   - deviceChannel.setErrCode(0);
372   - } else {
373   - deviceChannel.setErrCode(Integer.parseInt(XmlUtil.getText(itemDevice, "ErrCode")));
374   - }
375   - deviceChannel.setEndTime(XmlUtil.getText(itemDevice, "EndTime"));
376   - deviceChannel.setSecrecy(XmlUtil.getText(itemDevice, "Secrecy"));
377   - deviceChannel.setIpAddress(XmlUtil.getText(itemDevice, "IPAddress"));
378   - if (XmlUtil.getText(itemDevice, "Port") == null || XmlUtil.getText(itemDevice, "Port") == "") {
379   - deviceChannel.setPort(0);
380   - } else {
381   - deviceChannel.setPort(Integer.parseInt(XmlUtil.getText(itemDevice, "Port")));
382   - }
383   - deviceChannel.setPassword(XmlUtil.getText(itemDevice, "Password"));
384   - if (NumericUtil.isDouble(XmlUtil.getText(itemDevice, "Longitude"))) {
385   - deviceChannel.setLongitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Longitude")));
386   - } else {
387   - deviceChannel.setLongitude(0.00);
388   - }
389   - if (NumericUtil.isDouble(XmlUtil.getText(itemDevice, "Latitude"))) {
390   - deviceChannel.setLatitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Latitude")));
391   - } else {
392   - deviceChannel.setLatitude(0.00);
393   - }
394   - if (XmlUtil.getText(itemDevice, "PTZType") == null
395   - || XmlUtil.getText(itemDevice, "PTZType") == "") {
396   - deviceChannel.setPTZType(0);
397   - } else {
398   - deviceChannel.setPTZType(Integer.parseInt(XmlUtil.getText(itemDevice, "PTZType")));
399   - }
400   - deviceChannel.setHasAudio(true); // 默认含有音频,播放时再检查是否有音频及是否AAC
401   - return deviceChannel;
402   - }
403   -
404   -
405   -
406 321 public void setCmder(SIPCommander cmder) {
407 322 }
408 323  
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
... ... @@ -14,6 +14,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorP
14 14 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
15 15 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
16 16 import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
  17 +import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
17 18 import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
18 19 import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
19 20 import org.dom4j.DocumentException;
... ... @@ -94,85 +95,9 @@ public class CatalogResponseMessageHandler extends SIPRequestProcessorParent imp
94 95 if (channelDeviceElement == null) {
95 96 continue;
96 97 }
97   - String channelDeviceId = channelDeviceElement.getText();
98   - Element channdelNameElement = itemDevice.element("Name");
99   - String channelName = channdelNameElement != null ? channdelNameElement.getTextTrim().toString() : "";
100   - Element statusElement = itemDevice.element("Status");
101   - String status = statusElement != null ? statusElement.getText().toString() : "ON";
102   - DeviceChannel deviceChannel = new DeviceChannel();
103   - deviceChannel.setName(channelName);
  98 + DeviceChannel deviceChannel = XmlUtil.channelContentHander(itemDevice);
104 99 deviceChannel.setDeviceId(device.getDeviceId());
105   - String now = this.format.format(new Date(System.currentTimeMillis()));
106   - deviceChannel.setCreateTime(now);
107   - deviceChannel.setUpdateTime(now);
108   - deviceChannel.setChannelId(channelDeviceId);
109   - // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR的兼容性处理
110   - if (status.equals("ON") || status.equals("On") || status.equals("ONLINE")) {
111   - deviceChannel.setStatus(1);
112   - }
113   - if (status.equals("OFF") || status.equals("Off") || status.equals("OFFLINE")) {
114   - deviceChannel.setStatus(0);
115   - }
116   -
117   - deviceChannel.setManufacture(getText(itemDevice, "Manufacturer"));
118   - deviceChannel.setModel(getText(itemDevice, "Model"));
119   - deviceChannel.setOwner(getText(itemDevice, "Owner"));
120   - deviceChannel.setCivilCode(getText(itemDevice, "CivilCode"));
121   - deviceChannel.setBlock(getText(itemDevice, "Block"));
122   - deviceChannel.setAddress(getText(itemDevice, "Address"));
123   - if (getText(itemDevice, "Parental") == null || getText(itemDevice, "Parental") == "") {
124   - deviceChannel.setParental(0);
125   - } else {
126   - deviceChannel.setParental(Integer.parseInt(getText(itemDevice, "Parental")));
127   - }
128   - deviceChannel.setParentId(getText(itemDevice, "ParentID"));
129   - if (getText(itemDevice, "SafetyWay") == null || getText(itemDevice, "SafetyWay") == "") {
130   - deviceChannel.setSafetyWay(0);
131   - } else {
132   - deviceChannel.setSafetyWay(Integer.parseInt(getText(itemDevice, "SafetyWay")));
133   - }
134   - if (getText(itemDevice, "RegisterWay") == null || getText(itemDevice, "RegisterWay") == "") {
135   - deviceChannel.setRegisterWay(1);
136   - } else {
137   - deviceChannel.setRegisterWay(Integer.parseInt(getText(itemDevice, "RegisterWay")));
138   - }
139   - deviceChannel.setCertNum(getText(itemDevice, "CertNum"));
140   - if (getText(itemDevice, "Certifiable") == null || getText(itemDevice, "Certifiable") == "") {
141   - deviceChannel.setCertifiable(0);
142   - } else {
143   - deviceChannel.setCertifiable(Integer.parseInt(getText(itemDevice, "Certifiable")));
144   - }
145   - if (getText(itemDevice, "ErrCode") == null || getText(itemDevice, "ErrCode") == "") {
146   - deviceChannel.setErrCode(0);
147   - } else {
148   - deviceChannel.setErrCode(Integer.parseInt(getText(itemDevice, "ErrCode")));
149   - }
150   - deviceChannel.setEndTime(getText(itemDevice, "EndTime"));
151   - deviceChannel.setSecrecy(getText(itemDevice, "Secrecy"));
152   - deviceChannel.setIpAddress(getText(itemDevice, "IPAddress"));
153   - if (getText(itemDevice, "Port") == null || getText(itemDevice, "Port") == "") {
154   - deviceChannel.setPort(0);
155   - } else {
156   - deviceChannel.setPort(Integer.parseInt(getText(itemDevice, "Port")));
157   - }
158   - deviceChannel.setPassword(getText(itemDevice, "Password"));
159   - if (NumericUtil.isDouble(getText(itemDevice, "Longitude"))) {
160   - deviceChannel.setLongitude(Double.parseDouble(getText(itemDevice, "Longitude")));
161   - } else {
162   - deviceChannel.setLongitude(0.00);
163   - }
164   - if (NumericUtil.isDouble(getText(itemDevice, "Latitude"))) {
165   - deviceChannel.setLatitude(Double.parseDouble(getText(itemDevice, "Latitude")));
166   - } else {
167   - deviceChannel.setLatitude(0.00);
168   - }
169   - Element InfoNode = channelDeviceElement.element("Info");
170   - if (getText(InfoNode, "PTZType") == null || getText(InfoNode, "PTZType") == "") {
171   - deviceChannel.setPTZType(0);
172   - } else {
173   - deviceChannel.setPTZType(Integer.parseInt(getText(InfoNode, "PTZType")));
174   - }
175   - deviceChannel.setHasAudio(true); // 默认含有音频,播放时再检查是否有音频及是否AAC
  100 + logger.debug("收到来自设备【{}】的通道: {}【{}】", device.getDeviceId(), deviceChannel.getName(), deviceChannel.getChannelId());
176 101 channelList.add(deviceChannel);
177 102 }
178 103  
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
... ... @@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.gb28181.utils;
2 2  
3 3 import com.alibaba.fastjson.JSONArray;
4 4 import com.alibaba.fastjson.JSONObject;
  5 +import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
5 6 import org.dom4j.Attribute;
6 7 import org.dom4j.Document;
7 8 import org.dom4j.DocumentException;
... ... @@ -178,4 +179,89 @@ public class XmlUtil {
178 179 Document xml = reader.read(new ByteArrayInputStream(content));
179 180 return xml.getRootElement();
180 181 }
  182 +
  183 + public static DeviceChannel channelContentHander(Element itemDevice){
  184 + Element channdelNameElement = itemDevice.element("Name");
  185 + String channelName = channdelNameElement != null ? channdelNameElement.getTextTrim().toString() : "";
  186 + Element statusElement = itemDevice.element("Status");
  187 + String status = statusElement != null ? statusElement.getTextTrim().toString() : "ON";
  188 + DeviceChannel deviceChannel = new DeviceChannel();
  189 + deviceChannel.setName(channelName);
  190 + Element channdelIdElement = itemDevice.element("DeviceID");
  191 + String channelId = channdelIdElement != null ? channdelIdElement.getTextTrim().toString() : "";
  192 + deviceChannel.setChannelId(channelId);
  193 + // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR的兼容性处理
  194 + if (status.equals("ON") || status.equals("On") || status.equals("ONLINE")) {
  195 + deviceChannel.setStatus(1);
  196 + }
  197 + if (status.equals("OFF") || status.equals("Off") || status.equals("OFFLINE")) {
  198 + deviceChannel.setStatus(0);
  199 + }
  200 +
  201 + deviceChannel.setManufacture(XmlUtil.getText(itemDevice, "Manufacturer"));
  202 + deviceChannel.setModel(XmlUtil.getText(itemDevice, "Model"));
  203 + deviceChannel.setOwner(XmlUtil.getText(itemDevice, "Owner"));
  204 + deviceChannel.setCivilCode(XmlUtil.getText(itemDevice, "CivilCode"));
  205 + deviceChannel.setBlock(XmlUtil.getText(itemDevice, "Block"));
  206 + deviceChannel.setAddress(XmlUtil.getText(itemDevice, "Address"));
  207 + if (XmlUtil.getText(itemDevice, "Parental") == null
  208 + || XmlUtil.getText(itemDevice, "Parental") == "") {
  209 + deviceChannel.setParental(0);
  210 + } else {
  211 + deviceChannel.setParental(Integer.parseInt(XmlUtil.getText(itemDevice, "Parental")));
  212 + }
  213 + deviceChannel.setParentId(XmlUtil.getText(itemDevice, "ParentID"));
  214 + if (XmlUtil.getText(itemDevice, "SafetyWay") == null
  215 + || XmlUtil.getText(itemDevice, "SafetyWay") == "") {
  216 + deviceChannel.setSafetyWay(0);
  217 + } else {
  218 + deviceChannel.setSafetyWay(Integer.parseInt(XmlUtil.getText(itemDevice, "SafetyWay")));
  219 + }
  220 + if (XmlUtil.getText(itemDevice, "RegisterWay") == null
  221 + || XmlUtil.getText(itemDevice, "RegisterWay") == "") {
  222 + deviceChannel.setRegisterWay(1);
  223 + } else {
  224 + deviceChannel.setRegisterWay(Integer.parseInt(XmlUtil.getText(itemDevice, "RegisterWay")));
  225 + }
  226 + deviceChannel.setCertNum(XmlUtil.getText(itemDevice, "CertNum"));
  227 + if (XmlUtil.getText(itemDevice, "Certifiable") == null
  228 + || XmlUtil.getText(itemDevice, "Certifiable") == "") {
  229 + deviceChannel.setCertifiable(0);
  230 + } else {
  231 + deviceChannel.setCertifiable(Integer.parseInt(XmlUtil.getText(itemDevice, "Certifiable")));
  232 + }
  233 + if (XmlUtil.getText(itemDevice, "ErrCode") == null
  234 + || XmlUtil.getText(itemDevice, "ErrCode") == "") {
  235 + deviceChannel.setErrCode(0);
  236 + } else {
  237 + deviceChannel.setErrCode(Integer.parseInt(XmlUtil.getText(itemDevice, "ErrCode")));
  238 + }
  239 + deviceChannel.setEndTime(XmlUtil.getText(itemDevice, "EndTime"));
  240 + deviceChannel.setSecrecy(XmlUtil.getText(itemDevice, "Secrecy"));
  241 + deviceChannel.setIpAddress(XmlUtil.getText(itemDevice, "IPAddress"));
  242 + if (XmlUtil.getText(itemDevice, "Port") == null || XmlUtil.getText(itemDevice, "Port") == "") {
  243 + deviceChannel.setPort(0);
  244 + } else {
  245 + deviceChannel.setPort(Integer.parseInt(XmlUtil.getText(itemDevice, "Port")));
  246 + }
  247 + deviceChannel.setPassword(XmlUtil.getText(itemDevice, "Password"));
  248 + if (NumericUtil.isDouble(XmlUtil.getText(itemDevice, "Longitude"))) {
  249 + deviceChannel.setLongitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Longitude")));
  250 + } else {
  251 + deviceChannel.setLongitude(0.00);
  252 + }
  253 + if (NumericUtil.isDouble(XmlUtil.getText(itemDevice, "Latitude"))) {
  254 + deviceChannel.setLatitude(Double.parseDouble(XmlUtil.getText(itemDevice, "Latitude")));
  255 + } else {
  256 + deviceChannel.setLatitude(0.00);
  257 + }
  258 + if (XmlUtil.getText(itemDevice, "PTZType") == null
  259 + || XmlUtil.getText(itemDevice, "PTZType") == "") {
  260 + deviceChannel.setPTZType(0);
  261 + } else {
  262 + deviceChannel.setPTZType(Integer.parseInt(XmlUtil.getText(itemDevice, "PTZType")));
  263 + }
  264 + deviceChannel.setHasAudio(true); // 默认含有音频,播放时再检查是否有音频及是否AAC
  265 + return deviceChannel;
  266 + }
181 267 }
... ...
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
... ... @@ -24,10 +24,7 @@ import org.springframework.transaction.annotation.Transactional;
24 24 import org.springframework.util.StringUtils;
25 25  
26 26 import java.text.SimpleDateFormat;
27   -import java.util.ArrayList;
28   -import java.util.HashMap;
29   -import java.util.List;
30   -import java.util.Map;
  27 +import java.util.*;
31 28  
32 29 /**
33 30 * @description:视频设备数据存储-jdbc实现
... ... @@ -227,21 +224,41 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager {
227 224 @Override
228 225 public boolean resetChannels(String deviceId, List<DeviceChannel> deviceChannelList) {
229 226 TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);
  227 + // 数据去重
  228 + List<DeviceChannel> channels = new ArrayList<>();
  229 + StringBuilder stringBuilder = new StringBuilder();
  230 + if (deviceChannelList.size() > 1) {
  231 + // 数据去重
  232 + Set<String> gbIdSet = new HashSet<>();
  233 + for (DeviceChannel deviceChannel : deviceChannelList) {
  234 + if (!gbIdSet.contains(deviceChannel.getChannelId())) {
  235 + gbIdSet.add(deviceChannel.getChannelId());
  236 + channels.add(deviceChannel);
  237 + }else {
  238 + stringBuilder.append(deviceChannel.getChannelId() + ",");
  239 + }
  240 + }
  241 + }else {
  242 + channels = deviceChannelList;
  243 + }
  244 + if (stringBuilder.length() > 0) {
  245 + logger.debug("[目录查询]收到的数据存在重复: {}" , stringBuilder);
  246 + }
230 247 try {
231 248 int cleanChannelsResult = deviceChannelMapper.cleanChannelsByDeviceId(deviceId);
232 249 int limitCount = 300;
233   - boolean result = cleanChannelsResult <0;
234   - if (!result && deviceChannelList.size() > 0) {
235   - if (deviceChannelList.size() > limitCount) {
236   - for (int i = 0; i < deviceChannelList.size(); i += limitCount) {
  250 + boolean result = cleanChannelsResult < 0;
  251 + if (!result && channels.size() > 0) {
  252 + if (channels.size() > limitCount) {
  253 + for (int i = 0; i < channels.size(); i += limitCount) {
237 254 int toIndex = i + limitCount;
238   - if (i + limitCount > deviceChannelList.size()) {
239   - toIndex = deviceChannelList.size();
  255 + if (i + limitCount > channels.size()) {
  256 + toIndex = channels.size();
240 257 }
241   - result = result || deviceChannelMapper.batchAdd(deviceChannelList.subList(i, toIndex)) < 0;
  258 + result = result || deviceChannelMapper.batchAdd(channels.subList(i, toIndex)) < 0;
242 259 }
243 260 }else {
244   - result = result || deviceChannelMapper.batchAdd(deviceChannelList) < 0;
  261 + result = result || deviceChannelMapper.batchAdd(channels) < 0;
245 262 }
246 263 }
247 264 if (result) {
... ...
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
... ... @@ -150,7 +150,8 @@ public class DeviceQuery {
150 150 Device device = storager.queryVideoDevice(deviceId);
151 151 String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + deviceId;
152 152 String uuid = UUID.randomUUID().toString();
153   - DeferredResult<ResponseEntity<Device>> result = new DeferredResult<ResponseEntity<Device>>(15*1000L);
  153 + // 默认超时时间为30分钟
  154 + DeferredResult<ResponseEntity<Device>> result = new DeferredResult<ResponseEntity<Device>>(30*60*1000L);
154 155 result.onTimeout(()->{
155 156 logger.warn("设备[{}]通道信息同步超时", deviceId);
156 157 // 释放rtpserver
... ... @@ -163,6 +164,7 @@ public class DeviceQuery {
163 164 wvpResult.setMsg("更新超时");
164 165 msg.setData(wvpResult);
165 166 resultHolder.invokeAllResult(msg);
  167 +
166 168 });
167 169 // 等待其他相同请求返回时一起返回
168 170 if (resultHolder.exist(key, null)) {
... ...
web_src/src/components/DeviceList.vue
... ... @@ -213,8 +213,13 @@
213 213 that.$refs[itemData.deviceId + 'refbtn' ].loading = false;
214 214 }).catch(function(e) {
215 215 console.error(e)
  216 + that.$message({
  217 + showClose: true,
  218 + message: e,
  219 + type: 'error'
  220 + });
216 221 that.$refs[itemData.deviceId + 'refbtn' ].loading = false;
217   - });;
  222 + });
218 223 },
219 224 //通知设备上传媒体流
220 225 sendDevicePush: function(itemData) {
... ...