From 7d888274150e9415ae0fc16e67fefd1cdb4a69cc Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期四, 20 一月 2022 16:48:30 +0800
Subject: [PATCH] 处理服务重启或设备重新上线时的订阅,优化通道导入重复的处理
---
src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java | 13 ++
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java | 6 +
src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java | 2
src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java | 73 +++++++++++++
src/main/java/com/genersoft/iot/vmp/conf/runner/SipDeviceRunner.java | 14 ++
web_src/src/components/PushVideoList.vue | 2
web_src/src/components/dialog/jessibuca.vue | 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java | 7 -
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java | 2
web_src/src/components/dialog/importChannelShowErrorData.vue | 64 ++++++++++++
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java | 22 ++++
src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java | 5
src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java | 3
web_src/src/components/dialog/importChannel.vue | 44 ++++++++
14 files changed, 234 insertions(+), 25 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java b/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
index 10dfc08..c9572ae 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
@@ -3,7 +3,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
-import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
import java.util.Map;
@@ -40,4 +39,8 @@
}
}
+ public boolean contains(String key) {
+ return futureMap.get(key) != null;
+ }
+
}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/runner/SipDeviceRunner.java b/src/main/java/com/genersoft/iot/vmp/conf/runner/SipDeviceRunner.java
index 26b0a5c..da4e2ed 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/runner/SipDeviceRunner.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/runner/SipDeviceRunner.java
@@ -1,7 +1,8 @@
package com.genersoft.iot.vmp.conf.runner;
-import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.conf.UserSetup;
+import com.genersoft.iot.vmp.gb28181.bean.Device;
+import com.genersoft.iot.vmp.service.IDeviceService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import org.springframework.beans.factory.annotation.Autowired;
@@ -28,6 +29,9 @@
@Autowired
private UserSetup userSetup;
+ @Autowired
+ private IDeviceService deviceService;
+
@Override
public void run(String... args) throws Exception {
// 璇诲彇redis娌℃湁蹇冭烦淇℃伅鐨勫垯璁剧疆涓虹绾匡紝绛夋敹鍒颁笅娆″績璺宠缃负鍦ㄧ嚎
@@ -36,9 +40,15 @@
List<String> onlineForAll = redisCatchStorage.getOnlineForAll();
for (String deviceId : onlineForAll) {
storager.online(deviceId);
+ Device device = redisCatchStorage.getDevice(deviceId);
+ if (device != null && device.getSubscribeCycleForCatalog() > 0) {
+ // 鏌ヨ鍦ㄧ嚎璁惧閭d簺寮�鍚簡璁㈤槄锛屼负璁惧寮�鍚畾鏃剁殑鐩綍璁㈤槄
+ deviceService.addCatalogSubscribe(device);
+ }
}
// 閲嶇疆cseq璁℃暟
redisCatchStorage.resetAllCSEQ();
- // TODO 鏌ヨ鍦ㄧ嚎璁惧閭d簺寮�鍚簡璁㈤槄锛屼负璁惧寮�鍚畾鏃剁殑鐩綍璁㈤槄
+
+
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
index 5f0d14d..c0de8de 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
@@ -35,6 +35,9 @@
@Autowired
private IVideoManagerStorager storager;
+
+ @Autowired
+ private IDeviceService deviceService;
@Autowired
private RedisUtil redis;
@@ -57,6 +60,7 @@
logger.debug("璁惧涓婄嚎浜嬩欢瑙﹀彂锛宒eviceId锛�" + event.getDevice().getDeviceId() + ",from:" + event.getFrom());
}
Device device = event.getDevice();
+ if (device == null) return;
String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetup.getServerId() + "_" + event.getDevice().getDeviceId();
switch (event.getFrom()) {
@@ -84,15 +88,18 @@
}
device.setOnline(1);
- Device deviceInstore = storager.queryVideoDevice(device.getDeviceId());
- if (deviceInstore != null && deviceInstore.getOnline() == 0) {
+ Device deviceInStore = storager.queryVideoDevice(device.getDeviceId());
+ if (deviceInStore != null && deviceInStore.getOnline() == 0) {
List<DeviceChannel> deviceChannelList = storager.queryOnlineChannelsByDeviceId(device.getDeviceId());
eventPublisher.catalogEventPublish(null, deviceChannelList, CatalogEvent.ON);
}
// 澶勭悊涓婄嚎鐩戝惉
storager.updateDevice(device);
- // TODO 涓婄嚎娣诲姞璁㈤槄
+ // 涓婄嚎娣诲姞璁㈤槄
+ if (device.getSubscribeCycleForCatalog() > 0) {
+ deviceService.addCatalogSubscribe(device);
+ }
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
index a3523fd..52442cc 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
@@ -18,6 +18,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
import java.util.*;
@@ -76,12 +77,12 @@
}else if (event.getGbStreams() != null) {
if (platforms.size() > 0) {
for (GbStream gbStream : event.getGbStreams()) {
+ if (gbStream == null || StringUtils.isEmpty(gbStream.getGbId())) continue;
List<ParentPlatform> parentPlatformsForGB = storager.queryPlatFormListForStreamWithGBId(gbStream.getApp(),gbStream.getStream(), platforms);
parentPlatformMap.put(gbStream.getGbId(), parentPlatformsForGB);
}
}
}
-
}
switch (event.getType()) {
case CatalogEvent.ON:
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
index 48c4939..ac77f7b 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
@@ -41,6 +41,8 @@
public static final String CALLBACK_CMD_STOP = "CALLBACK_STOP";
+ public static final String UPLOAD_FILE_CHANNEL = "UPLOAD_FILE_CHANNEL";
+
public static final String CALLBACK_CMD_MOBILEPOSITION = "CALLBACK_MOBILEPOSITION";
public static final String CALLBACK_CMD_PRESETQUERY = "CALLBACK_PRESETQUERY";
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
index 13335d6..8d0bdd2 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
@@ -80,17 +80,14 @@
Element rootElement = getRootElement(evt);
String cmd = XmlUtil.getText(rootElement, "CmdType");
if (CmdType.MOBILE_POSITION.equals(cmd)) {
- logger.info("鎺ユ敹鍒癕obilePosition璁㈤槄");
processNotifyMobilePosition(evt, rootElement);
// } else if (CmdType.ALARM.equals(cmd)) {
// logger.info("鎺ユ敹鍒癆larm璁㈤槄");
// processNotifyAlarm(evt, rootElement);
} else if (CmdType.CATALOG.equals(cmd)) {
- logger.info("鎺ユ敹鍒癈atalog璁㈤槄");
processNotifyCatalogList(evt, rootElement);
} else {
logger.info("鎺ユ敹鍒版秷鎭細" + cmd);
-// responseAck(evt, Response.OK);
Response response = null;
response = getMessageFactory().createResponse(200, request);
@@ -132,7 +129,7 @@
SubscribeInfo subscribeInfo = new SubscribeInfo(evt, platformId);
String sn = XmlUtil.getText(rootElement, "SN");
String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_MobilePosition_" + platformId;
-
+ logger.info("鎺ユ敹鍒皗}鐨凪obilePosition璁㈤槄", platformId);
StringBuilder resultXml = new StringBuilder(200);
resultXml.append("<?xml version=\"1.0\" ?>\r\n")
.append("<Response>\r\n")
@@ -182,7 +179,7 @@
SubscribeInfo subscribeInfo = new SubscribeInfo(evt, platformId);
String sn = XmlUtil.getText(rootElement, "SN");
String key = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetup.getServerId() + "_Catalog_" + platformId;
-
+ logger.info("鎺ユ敹鍒皗}鐨凜atalog璁㈤槄", platformId);
StringBuilder resultXml = new StringBuilder(200);
resultXml.append("<?xml version=\"1.0\" ?>\r\n")
.append("<Response>\r\n")
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
index 1159484..66407a1 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -30,11 +30,15 @@
if (device == null || device.getSubscribeCycleForCatalog() < 0) {
return false;
}
+ if (dynamicTask.contains(device.getDeviceId())) {
+ logger.info("[娣诲姞鐩綍璁㈤槄] 璁惧{}鐨勭洰褰曡闃呬互瀛樺湪", device.getDeviceId());
+ return false;
+ }
+ logger.info("[娣诲姞鐩綍璁㈤槄] 璁惧{}", device.getDeviceId());
// 娣诲姞鐩綍璁㈤槄
CatalogSubscribeTask catalogSubscribeTask = new CatalogSubscribeTask(device, sipCommander);
catalogSubscribeTask.run();
// 鎻愬墠寮�濮嬪埛鏂拌闃�
- // TODO 浣跨敤jain sip鐨勫綋鏃跺埛鏂拌闃�
int subscribeCycleForCatalog = device.getSubscribeCycleForCatalog();
// 璁剧疆鏈�灏忓�间负30
subscribeCycleForCatalog = Math.max(subscribeCycleForCatalog, 30);
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
index a68f5e9..16924df 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java
@@ -14,15 +14,23 @@
public class StreamPushUploadFileHandler extends AnalysisEventListener<StreamPushExcelDto> {
+ private ErrorDataHandler errorDataHandler;
private IStreamPushService pushService;
private String defaultMediaServerId;
private List<StreamPushItem> streamPushItems = new ArrayList<>();
private Set<String> streamPushStreamSet = new HashSet<>();
private Set<String> streamPushGBSet = new HashSet<>();
+ private List<String> errorStreamList = new ArrayList<>();
+ private List<String> errorGBList = new ArrayList<>();
- public StreamPushUploadFileHandler(IStreamPushService pushService, String defaultMediaServerId) {
+ public StreamPushUploadFileHandler(IStreamPushService pushService, String defaultMediaServerId, ErrorDataHandler errorDataHandler) {
this.pushService = pushService;
this.defaultMediaServerId = defaultMediaServerId;
+ this.errorDataHandler = errorDataHandler;
+ }
+
+ public interface ErrorDataHandler{
+ void handle(List<String> streams, List<String> gbId);
}
@Override
@@ -32,9 +40,16 @@
|| StringUtils.isEmpty(streamPushExcelDto.getGbId())) {
return;
}
+ if (streamPushGBSet.contains(streamPushExcelDto.getGbId())) {
+ errorGBList.add(streamPushExcelDto.getGbId());
+ }
+ if (streamPushStreamSet.contains(streamPushExcelDto.getApp() + streamPushExcelDto.getStream())) {
+ errorStreamList.add(streamPushExcelDto.getApp() + "/" + streamPushExcelDto.getStream());
+ }
if (streamPushGBSet.contains(streamPushExcelDto.getGbId()) || streamPushStreamSet.contains(streamPushExcelDto.getApp() + streamPushExcelDto.getStream())) {
return;
}
+
StreamPushItem streamPushItem = new StreamPushItem();
streamPushItem.setApp(streamPushExcelDto.getApp());
streamPushItem.setStream(streamPushExcelDto.getStream());
@@ -60,8 +75,11 @@
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
// 杩欓噷涔熻淇濆瓨鏁版嵁锛岀‘淇濇渶鍚庨仐鐣欑殑鏁版嵁涔熷瓨鍌ㄥ埌鏁版嵁搴�
- pushService.batchAdd(streamPushItems);
+ if (streamPushItems.size() > 0) {
+ pushService.batchAdd(streamPushItems);
+ }
streamPushGBSet.clear();
streamPushStreamSet.clear();
+ errorDataHandler.handle(errorStreamList, errorGBList);
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
index 8a99d62..9a5d3be 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamPushMapper.java
@@ -50,7 +50,7 @@
StreamPushItem selectOne(String app, String stream);
@Insert("<script>" +
- "INSERT INTO stream_push (app, stream, totalReaderCount, originType, originTypeStr, " +
+ "REPLACE INTO stream_push (app, stream, totalReaderCount, originType, originTypeStr, " +
"createStamp, aliveSecond, mediaServerId) " +
"VALUES <foreach collection='streamPushItems' item='item' index='index' separator=','>" +
"( '${item.app}', '${item.stream}', '${item.totalReaderCount}', '${item.originType}', " +
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java
index 0c80d11..c0fafd3 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java
@@ -4,11 +4,14 @@
import com.alibaba.excel.ExcelReader;
import com.alibaba.excel.read.metadata.ReadSheet;
import com.genersoft.iot.vmp.gb28181.bean.GbStream;
+import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
+import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
import com.genersoft.iot.vmp.service.IMediaServerService;
import com.genersoft.iot.vmp.service.IStreamPushService;
import com.genersoft.iot.vmp.service.impl.StreamPushUploadFileHandler;
import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto;
+import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -18,12 +21,19 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.async.DeferredResult;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
@Api(tags = "鎺ㄦ祦淇℃伅绠$悊")
@Controller
@@ -38,6 +48,9 @@
@Autowired
private IMediaServerService mediaServerService;
+
+ @Autowired
+ private DeferredResultHolder resultHolder;
@ApiOperation("鎺ㄦ祦鍒楄〃鏌ヨ")
@ApiImplicitParams({
@@ -103,10 +116,44 @@
}
@PostMapping(value = "upload")
@ResponseBody
- public String uploadChannelFile(@RequestParam(value = "file") MultipartFile file){
+ public DeferredResult<ResponseEntity<WVPResult<Object>>> uploadChannelFile(@RequestParam(value = "file") MultipartFile file){
+
+
+ // 鏈�澶氬鐞嗘枃浠朵竴涓皬鏃�
+ DeferredResult<ResponseEntity<WVPResult<Object>>> result = new DeferredResult<>(60*60*1000L);
+ // 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ
+ String key = DeferredResultHolder.UPLOAD_FILE_CHANNEL;
+ String uuid = UUID.randomUUID().toString();
+
if (file.isEmpty()) {
- return "fail";
+ logger.warn("閫氶亾瀵煎叆鏂囦欢涓虹┖");
+ WVPResult<Object> wvpResult = new WVPResult<>();
+ wvpResult.setCode(-1);
+ wvpResult.setMsg("鏂囦欢涓虹┖");
+ result.setResult(ResponseEntity.status(HttpStatus.BAD_REQUEST).body(wvpResult));
+ return result;
}
+ // 鍚屾椂鍙鐞嗕竴涓枃浠�
+ if (resultHolder.exist(key, null)) {
+ logger.warn("宸叉湁瀵煎叆浠诲姟姝e湪鎵ц");
+ WVPResult<Object> wvpResult = new WVPResult<>();
+ wvpResult.setCode(-1);
+ wvpResult.setMsg("宸叉湁瀵煎叆浠诲姟姝e湪鎵ц");
+ result.setResult(ResponseEntity.status(HttpStatus.TOO_MANY_REQUESTS).body(wvpResult));
+ return result;
+ }
+
+ resultHolder.put(key, uuid, result);
+ result.onTimeout(()->{
+ logger.warn("閫氶亾瀵煎叆瓒呮椂锛屽彲鑳芥枃浠惰繃澶�");
+ RequestMessage msg = new RequestMessage();
+ msg.setKey(key);
+ WVPResult<Object> wvpResult = new WVPResult<>();
+ wvpResult.setCode(-1);
+ wvpResult.setMsg("瀵煎叆瓒呮椂锛屽彲鑳芥枃浠惰繃澶�");
+ msg.setData(wvpResult);
+ resultHolder.invokeAllResult(msg);
+ });
//鑾峰彇鏂囦欢娴�
InputStream inputStream = null;
try {
@@ -117,11 +164,29 @@
}
//浼犲叆鍙傛暟
ExcelReader excelReader = EasyExcel.read(inputStream, StreamPushExcelDto.class,
- new StreamPushUploadFileHandler(streamPushService, mediaServerService.getDefaultMediaServer().getId())).build();
+ new StreamPushUploadFileHandler(streamPushService, mediaServerService.getDefaultMediaServer().getId(), (errorStreams, errorGBs)->{
+ logger.info("閫氶亾瀵煎叆鎴愬姛锛屽瓨鍦ㄩ噸澶岮pp+Stream涓簕}涓紝瀛樺湪鍥芥爣ID涓簕}涓�", errorStreams.size(), errorGBs.size());
+ RequestMessage msg = new RequestMessage();
+ msg.setKey(key);
+ WVPResult<Map<String, List<String>>> wvpResult = new WVPResult<>();
+ if (errorStreams.size() == 0 && errorGBs.size() == 0) {
+ wvpResult.setCode(0);
+ wvpResult.setMsg("鎴愬姛");
+ }else {
+ wvpResult.setCode(1);
+ wvpResult.setMsg("瀵煎叆鎴愬姛銆備絾鏄瓨鍦ㄩ噸澶嶆暟鎹�");
+ Map<String, List<String>> errorData = new HashMap<>();
+ errorData.put("gbId", errorGBs);
+ errorData.put("stream", errorStreams);
+ wvpResult.setData(errorData);
+ }
+ msg.setData(wvpResult);
+ resultHolder.invokeAllResult(msg);
+ })).build();
ReadSheet readSheet = EasyExcel.readSheet(0).build();
excelReader.read(readSheet);
excelReader.finish();
- return "success";
+ return result;
}
diff --git a/web_src/src/components/PushVideoList.vue b/web_src/src/components/PushVideoList.vue
index b519fb4..44372df 100644
--- a/web_src/src/components/PushVideoList.vue
+++ b/web_src/src/components/PushVideoList.vue
@@ -127,8 +127,6 @@
count: that.count
}
}).then(function (res) {
- console.log(res);
- console.log(res.data.list);
that.total = res.data.total;
that.pushList = res.data.list;
that.getDeviceListLoading = false;
diff --git a/web_src/src/components/dialog/importChannel.vue b/web_src/src/components/dialog/importChannel.vue
index ac5ce05..922809e 100644
--- a/web_src/src/components/dialog/importChannel.vue
+++ b/web_src/src/components/dialog/importChannel.vue
@@ -16,6 +16,8 @@
drag
:action="uploadUrl"
name="file"
+ :on-success="successHook"
+ :on-error="errorHook"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div>
@@ -23,14 +25,19 @@
</el-upload>
</div>
</el-dialog>
+ <ShowErrorData ref="showErrorData" :gbIds="errorGBIds" :streams="errorStreams" ></ShowErrorData>
</div>
</template>
<script>
+import ShowErrorData from './importChannelShowErrorData.vue'
+
export default {
name: "importChannel",
- computed: {},
+ components: {
+ ShowErrorData,
+ },
created() {},
data() {
return {
@@ -38,6 +45,8 @@
showDialog: false,
isLoging: false,
isEdit: false,
+ errorStreams: null,
+ errorGBIds: null,
uploadUrl: process.env.NODE_ENV === 'development'?`debug/api/push/upload`:`api/push/upload`,
};
},
@@ -73,8 +82,35 @@
},
close: function () {
this.showDialog = false;
- this.$refs.form.resetFields();
},
+ successHook: function(response, file, fileList){
+ if (response.code === 0) {
+ this.$message({
+ showClose: true,
+ message: response.msg,
+ type: "success",
+ });
+ }else if (response.code === 1) {
+ this.errorGBIds = response.data.gbId
+ this.errorStreams = response.data.stream
+ console.log(this.$refs)
+ console.log(this.$refs.showErrorData)
+ this.$refs.showErrorData.openDialog()
+ }else {
+ this.$message({
+ showClose: true,
+ message: response.msg,
+ type: "error",
+ });
+ }
+ },
+ errorHook: function (err, file, fileList) {
+ this.$message({
+ showClose: true,
+ message: err,
+ type: "error",
+ });
+ }
},
};
</script>
@@ -82,4 +118,8 @@
.upload-box{
text-align: center;
}
+.errDataBox{
+ max-height: 15rem;
+ overflow: auto;
+}
</style>
diff --git a/web_src/src/components/dialog/importChannelShowErrorData.vue b/web_src/src/components/dialog/importChannelShowErrorData.vue
new file mode 100644
index 0000000..5194b7e
--- /dev/null
+++ b/web_src/src/components/dialog/importChannelShowErrorData.vue
@@ -0,0 +1,64 @@
+<template>
+ <div id="importChannelShowErrorData" v-loading="isLoging">
+ <el-dialog
+ title="瀵煎叆閫氶亾鏁版嵁鎴愬姛锛屼絾鏁版嵁瀛樺湪閲嶅"
+ width="30rem"
+ top="2rem"
+ :append-to-body="true"
+ :close-on-click-modal="false"
+ :visible.sync="showDialog"
+ :destroy-on-close="true"
+ @close="close()"
+ >
+ <div >
+ 閲嶅鍥芥爣ID:
+ <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy" title="鐐瑰嚮鎷疯礉" v-clipboard="gbIds.join(',')" @success="$message({type:'success', message:'鎴愬姛鎷疯礉鍒扮矘璐存澘'})">澶嶅埗</el-button>
+ <ul class="errDataBox">
+ <li v-for="id in gbIds" >
+ {{ id }}
+ </li>
+ </ul>
+ </div>
+
+ <div >
+ 閲嶅App/stream:
+ <el-button style="float: right;" type="primary" size="mini" icon="el-icon-document-copy" title="鐐瑰嚮鎷疯礉" v-clipboard="streams.join(',')" @success="$message({type:'success', message:'鎴愬姛鎷疯礉鍒扮矘璐存澘'})">澶嶅埗</el-button>
+ <ul class="errDataBox">
+ <li v-for="id in streams" >
+ {{ id }}
+ </li>
+ </ul>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+
+export default {
+ name: "importChannelShowErrorData",
+ computed: {},
+ created() {},
+ props: ['gbIds', 'streams'],
+ data() {
+ return {
+ isLoging: false,
+ showDialog: false,
+ };
+ },
+ methods: {
+ openDialog: function () {
+ this.showDialog = true;
+ },
+ close: function () {
+ this.showDialog = false;
+ },
+ },
+};
+</script>
+<style>
+.errDataBox{
+ max-height: 15rem;
+ overflow: auto;
+}
+</style>
diff --git a/web_src/src/components/dialog/jessibuca.vue b/web_src/src/components/dialog/jessibuca.vue
index 7e9e009..c073719 100644
--- a/web_src/src/components/dialog/jessibuca.vue
+++ b/web_src/src/components/dialog/jessibuca.vue
@@ -78,7 +78,7 @@
this.jessibuca = new window.Jessibuca(Object.assign(
{
container: this.$refs.container,
- videoBuffer: 0.5, // 鏈�澶х紦鍐叉椂闀匡紝鍗曚綅绉�
+ videoBuffer: 0.2, // 鏈�澶х紦鍐叉椂闀匡紝鍗曚綅绉�
isResize: true,
isFlv: true,
decoder: "./static/js/jessibuca/index.js",
--
Gitblit v1.8.0