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