From 12fa3b4c8da2af13a710400d64c9fe6d5d6b1e5e Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期三, 23 十一月 2022 09:57:17 +0800 Subject: [PATCH] Merge branch 'wvp-28181-2.0' --- src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java | 14 + src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java | 8 src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java | 33 +- src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java | 9 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java | 12 src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java | 8 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java | 11 web_src/src/components/dialog/chooseChannelForGb.vue | 49 ++- src/main/java/com/genersoft/iot/vmp/service/IPlatformChannelService.java | 7 src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java | 15 - web_src/src/components/dialog/SyncChannelProgress.vue | 48 +-- sql/mysql.sql | 2 src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java | 10 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/bean/UpdateChannelParam.java | 11 doc/README.md | 20 web_src/src/components/dialog/StreamProxyEdit.vue | 80 +++--- src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java | 27 + src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java | 20 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/bean/GbStreamParam.java | 11 web_src/src/components/StreamProxyList.vue | 69 ++--- src/main/java/com/genersoft/iot/vmp/conf/GlobalExceptionHandler.java | 10 src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java | 1 src/main/resources/all-application.yml | 2 web_src/src/components/dialog/chooseChannelForStream.vue | 45 ++- src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java | 3 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java | 31 ++ src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 1 src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java | 6 src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java | 23 + src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java | 5 src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java | 2 sql/update.sql | 5 src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java | 34 ++ src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java | 34 -- src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java | 1 35 files changed, 404 insertions(+), 263 deletions(-) diff --git a/doc/README.md b/doc/README.md index 635a4a5..0fb5b86 100644 --- a/doc/README.md +++ b/doc/README.md @@ -21,22 +21,22 @@ - [X] 瀹炴椂瑙嗛煶棰戠偣鎾� - [X] 璁惧鎺у埗 - [X] 浜戝彴鎺у埗 - - [ ] 杩滅▼鍚姩 - - [ ] 褰曞儚鎺у埗 - - [ ] 鎶ヨ甯冮槻/鎾ら槻 - - [ ] 鎶ヨ澶嶄綅 + - [X] 杩滅▼鍚姩 + - [X] 褰曞儚鎺у埗 + - [X] 鎶ヨ甯冮槻/鎾ら槻 + - [X] 鎶ヨ澶嶄綅 - [X] 寮哄埗鍏抽敭甯� - - [ ] 鎷夋鏀惧ぇ - - [ ] 鎷夋缂╁皬 - - [ ] 鐪嬪畧浣嶆帶鍒� - - [ ] 璁惧閰嶇疆 + - [X] 鎷夋鏀惧ぇ + - [X] 鎷夋缂╁皬 + - [X] 鐪嬪畧浣嶆帶鍒� + - [X] 璁惧閰嶇疆 - [X] 鎶ヨ浜嬩欢閫氱煡鍜屽垎鍙� - [X] 璁惧鐩綍璁㈤槄 - [X] 缃戠粶璁惧淇℃伅鏌ヨ - [X] 璁惧鐩綍鏌ヨ - [X] 璁惧鐘舵�佹煡璇� - - [ ] 璁惧閰嶇疆鏌ヨ - - [ ] 璁惧棰勭疆浣嶆煡璇� + - [X] 璁惧閰嶇疆鏌ヨ + - [X] 璁惧棰勭疆浣嶆煡璇� - [X] 鐘舵�佷俊鎭姤閫� - [X] 璁惧瑙嗛煶棰戞枃浠舵绱� - [X] 鍘嗗彶瑙嗛煶棰戠殑鍥炴斁 diff --git a/sql/mysql.sql b/sql/mysql.sql index b5ca016..869482c 100644 --- a/sql/mysql.sql +++ b/sql/mysql.sql @@ -446,7 +446,7 @@ `ffmpeg_cmd_key` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `rtp_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, `mediaServerId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `enable_hls` bit(1) DEFAULT NULL, + `enable_audio` bit(1) DEFAULT NULL, `enable_mp4` bit(1) DEFAULT NULL, `enable` bit(1) NOT NULL, `status` bit(1) NOT NULL, diff --git a/sql/update.sql b/sql/update.sql index 405cb3a..877e247 100644 --- a/sql/update.sql +++ b/sql/update.sql @@ -36,3 +36,8 @@ alter table device modify hostAddress varchar(50) null; + +alter table stream_proxy + change enable_hls enable_audio bit null; + + diff --git a/src/main/java/com/genersoft/iot/vmp/conf/GlobalExceptionHandler.java b/src/main/java/com/genersoft/iot/vmp/conf/GlobalExceptionHandler.java index 0c7c3d2..728afb9 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/GlobalExceptionHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/GlobalExceptionHandler.java @@ -1,12 +1,12 @@ package com.genersoft.iot.vmp.conf; import com.genersoft.iot.vmp.conf.exception.ControllerException; -import com.genersoft.iot.vmp.gb28181.event.alarm.AlarmEventListener; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; import com.genersoft.iot.vmp.vmanager.bean.WVPResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; @@ -40,8 +40,8 @@ */ @ExceptionHandler(ControllerException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - public WVPResult<String> exceptionHandler(ControllerException e) { - return WVPResult.fail(e.getCode(), e.getMsg()); + public ResponseEntity<WVPResult<String>> exceptionHandler(ControllerException e) { + return new ResponseEntity<>(WVPResult.fail(e.getCode(), e.getMsg()), HttpStatus.OK); } /** @@ -51,7 +51,7 @@ */ @ExceptionHandler(BadCredentialsException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) - public WVPResult<String> exceptionHandler(BadCredentialsException e) { - return WVPResult.fail(ErrorCode.ERROR100.getCode(), e.getMessage()); + public ResponseEntity<WVPResult<String>> exceptionHandler(BadCredentialsException e) { + return new ResponseEntity<>(WVPResult.fail(ErrorCode.ERROR100.getCode(), e.getMessage()), HttpStatus.OK); } } diff --git a/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java b/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java index 7f54ec7..a2d3054 100644 --- a/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java +++ b/src/main/java/com/genersoft/iot/vmp/conf/UserSetting.java @@ -41,6 +41,8 @@ private Boolean gbSendStreamStrict = Boolean.FALSE; + private Boolean syncChannelOnDeviceOnline = Boolean.FALSE; + private String serverId = "000000"; private String thirdPartyGBIdReg = "[\\s\\S]*"; @@ -186,4 +188,12 @@ public void setGbSendStreamStrict(Boolean gbSendStreamStrict) { this.gbSendStreamStrict = gbSendStreamStrict; } + + public Boolean getSyncChannelOnDeviceOnline() { + return syncChannelOnDeviceOnline; + } + + public void setSyncChannelOnDeviceOnline(Boolean syncChannelOnDeviceOnline) { + this.syncChannelOnDeviceOnline = syncChannelOnDeviceOnline; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java index 7a4e669..36bf05f 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java @@ -2,7 +2,9 @@ import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException; -import com.genersoft.iot.vmp.gb28181.bean.*; +import com.genersoft.iot.vmp.gb28181.bean.Device; +import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm; +import com.genersoft.iot.vmp.gb28181.bean.InviteStreamCallback; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; @@ -10,10 +12,7 @@ import gov.nist.javax.sip.message.SIPRequest; import javax.sip.InvalidArgumentException; -import javax.sip.PeerUnavailableException; import javax.sip.SipException; -import javax.sip.message.Message; -import javax.sip.message.Request; import java.text.ParseException; import javax.sip.message.Message; import javax.sip.message.Request; @@ -234,7 +233,7 @@ */ void deviceConfigCmd(Device device); - /** + /** * 璁惧閰嶇疆鍛戒护锛歜asicParam * * @param device 瑙嗛璁惧 @@ -245,7 +244,7 @@ * @param heartBeatCount 蹇冭烦瓒呮椂娆℃暟锛堝彲閫夛級 */ void deviceBasicConfigCmd(Device device, String channelId, String name, String expiration, String heartBeatInterval, String heartBeatCount, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException; - + /** * 鏌ヨ璁惧鐘舵�� * diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java index c153933..feaaf90 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java @@ -646,6 +646,7 @@ // 淇敼鏁版嵁 streamProxyService.stop(param.getApp(), param.getStream()); }else { + // 鏃犱汉瑙傜湅涓嶅仛澶勭悊 ret.put("close", false); } return ret; diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java index 80f2940..7315422 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java @@ -239,14 +239,13 @@ } public JSONObject addFFmpegSource(MediaServerItem mediaServerItem, String src_url, String dst_url, String timeout_ms, - boolean enable_hls, boolean enable_mp4, String ffmpeg_cmd_key){ + boolean enable_audio, boolean enable_mp4, String ffmpeg_cmd_key){ logger.info(src_url); logger.info(dst_url); Map<String, Object> param = new HashMap<>(); param.put("src_url", src_url); param.put("dst_url", dst_url); param.put("timeout_ms", timeout_ms); - param.put("enable_hls", enable_hls); param.put("enable_mp4", enable_mp4); param.put("ffmpeg_cmd_key", ffmpeg_cmd_key); return sendPost(mediaServerItem, "addFFmpegSource",param, null); @@ -294,19 +293,14 @@ return sendPost(mediaServerItem, "restartServer",null, null); } - public JSONObject addStreamProxy(MediaServerItem mediaServerItem, String app, String stream, String url, boolean enable_hls, boolean enable_mp4, String rtp_type) { + public JSONObject addStreamProxy(MediaServerItem mediaServerItem, String app, String stream, String url, boolean enable_audio, boolean enable_mp4, String rtp_type) { Map<String, Object> param = new HashMap<>(); param.put("vhost", "__defaultVhost__"); param.put("app", app); param.put("stream", stream); param.put("url", url); - param.put("enable_hls", enable_hls?1:0); param.put("enable_mp4", enable_mp4?1:0); - param.put("enable_rtmp", 1); - param.put("enable_fmp4", 1); - param.put("enable_audio", 1); - param.put("enable_rtsp", 1); - param.put("add_mute_audio", 1); + param.put("enable_audio", enable_audio?1:0); param.put("rtp_type", rtp_type); return sendPost(mediaServerItem, "addStreamProxy",param, null); } diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java index ea0bdca..b0e74e8 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/dto/StreamProxyItem.java @@ -31,8 +31,8 @@ private String rtp_type; @Schema(description = "鏄惁鍚敤") private boolean enable; - @Schema(description = "鏄惁鍚敤HLS") - private boolean enable_hls; + @Schema(description = "鏄惁鍚敤闊抽") + private boolean enable_audio; @Schema(description = "鏄惁鍚敤MP4") private boolean enable_mp4; @Schema(description = "鏄惁 鏃犱汉瑙傜湅鏃跺垹闄�") @@ -40,8 +40,6 @@ @Schema(description = "鏄惁 鏃犱汉瑙傜湅鏃惰嚜鍔ㄥ仠鐢�") private boolean enable_disable_none_reader; - @Schema(description = "涓婄骇骞冲彴鍥芥爣ID") - private String platformGbId; @Schema(description = "鍒涘缓鏃堕棿") private String createTime; @@ -139,14 +137,6 @@ this.enable = enable; } - public boolean isEnable_hls() { - return enable_hls; - } - - public void setEnable_hls(boolean enable_hls) { - this.enable_hls = enable_hls; - } - public boolean isEnable_mp4() { return enable_mp4; } @@ -155,19 +145,12 @@ this.enable_mp4 = enable_mp4; } - - public String getPlatformGbId() { - return platformGbId; - } - - public void setPlatformGbId(String platformGbId) { - this.platformGbId = platformGbId; - } - + @Override public String getCreateTime() { return createTime; } + @Override public void setCreateTime(String createTime) { this.createTime = createTime; } @@ -187,4 +170,12 @@ public void setEnable_disable_none_reader(boolean enable_disable_none_reader) { this.enable_disable_none_reader = enable_disable_none_reader; } + + public boolean isEnable_audio() { + return enable_audio; + } + + public void setEnable_audio(boolean enable_audio) { + this.enable_audio = enable_audio; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java b/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java index 3f58735..31e568a 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java @@ -3,6 +3,7 @@ import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; +import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; import java.util.List; @@ -38,4 +39,11 @@ * @return */ ResourceBaceInfo getOverview(); + + /** + * 鏌ヨ鎵�鏈夋湭鍒嗛厤鐨勯�氶亾 + * @param platformId + * @return + */ + List<ChannelReduce> queryAllChannelList(String platformId); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java b/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java index ffbba00..314a389 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java @@ -55,4 +55,18 @@ int updateGbIdOrName(List<StreamPushItem> streamPushItemForUpdate); DeviceChannel getDeviceChannelListByStreamWithStatus(GbStream gbStream, String catalogId, ParentPlatform platform); + + /** + * 鏌ヨ鎵�鏈夋湭鍒嗛厤鐨勯�氶亾 + * @param platformId + * @return + */ + List<GbStream> getAllGBChannels(String platformId); + + /** + * 绉婚櫎鎵�鏈夊叧鑱旂殑閫氶亾 + * @param platformId + * @param catalogId + */ + void delAllPlatformInfo(String platformId, String catalogId); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/IPlatformChannelService.java b/src/main/java/com/genersoft/iot/vmp/service/IPlatformChannelService.java index 739e6b8..49d7428 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IPlatformChannelService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IPlatformChannelService.java @@ -19,4 +19,11 @@ */ int updateChannelForGB(String platformId, List<ChannelReduce> channelReduces, String catalogId); + /** + * 绉婚櫎鐩綍涓嬬殑鎵�鏈夐�氶亾 + * @param platformId + * @param catalogId + * @return + */ + int delAllChannelForGB(String platformId, String catalogId); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java index 41b55dd..9db2d68 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java @@ -10,6 +10,7 @@ import com.genersoft.iot.vmp.storager.dao.DeviceMapper; import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; +import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -168,4 +169,12 @@ public ResourceBaceInfo getOverview() { return channelMapper.getOverview(); } + + + @Override + public List<ChannelReduce> queryAllChannelList(String platformId) { + return channelMapper.queryChannelListInAll(null, null, null, platformId, null); + } + + } 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 ac48e4d..d25e537 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 @@ -1,6 +1,7 @@ package com.genersoft.iot.vmp.service.impl; import com.genersoft.iot.vmp.conf.DynamicTask; +import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask; @@ -12,7 +13,6 @@ import com.genersoft.iot.vmp.service.IDeviceService; import com.genersoft.iot.vmp.service.IMediaServerService; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; -import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; import com.genersoft.iot.vmp.storager.dao.DeviceMapper; import com.genersoft.iot.vmp.storager.dao.PlatformChannelMapper; @@ -78,7 +78,7 @@ TransactionDefinition transactionDefinition; @Autowired - private IVideoManagerStorage storage; + private UserSetting userSetting; @Autowired private ISIPCommander commander; @@ -120,16 +120,18 @@ if(device.getOnline() == 0){ device.setOnline(1); device.setCreateTime(now); - logger.info("[璁惧涓婄嚎,绂荤嚎鐘舵�佷笅閲嶆柊娉ㄥ唽]: {}锛屾煡璇㈣澶囦俊鎭互鍙婇�氶亾淇℃伅", device.getDeviceId()); deviceMapper.update(device); redisCatchStorage.updateDevice(device); - try { - commander.deviceInfoQuery(device); - } catch (InvalidArgumentException | SipException | ParseException e) { - logger.error("[鍛戒护鍙戦�佸け璐 鏌ヨ璁惧淇℃伅: {}", e.getMessage()); + if (userSetting.getSyncChannelOnDeviceOnline()) { + logger.info("[璁惧涓婄嚎,绂荤嚎鐘舵�佷笅閲嶆柊娉ㄥ唽]: {}锛屾煡璇㈣澶囦俊鎭互鍙婇�氶亾淇℃伅", device.getDeviceId()); + try { + commander.deviceInfoQuery(device); + } catch (InvalidArgumentException | SipException | ParseException e) { + logger.error("[鍛戒护鍙戦�佸け璐 鏌ヨ璁惧淇℃伅: {}", e.getMessage()); + } + sync(device); + // TODO 濡傛灉璁惧涓嬬殑閫氶亾绾ц仈鍒颁簡鍏朵粬骞冲彴锛岄偅涔堥渶瑕佸彂閫佷簨浠舵垨鑰卬otify缁欎笂绾у钩鍙� } - sync(device); - // TODO 濡傛灉璁惧涓嬬殑閫氶亾绾ц仈鍒颁簡鍏朵粬骞冲彴锛岄偅涔堥渶瑕佸彂閫佷簨浠舵垨鑰卬otify缁欎笂绾у钩鍙� }else { if (deviceChannelMapper.queryAllChannels(device.getDeviceId()).size() == 0) { logger.info("[璁惧涓婄嚎]: {}锛岄�氶亾鏁颁负0,鏌ヨ閫氶亾淇℃伅", device.getDeviceId()); diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java index da11b16..dc9d927 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java @@ -4,11 +4,11 @@ import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; +import com.genersoft.iot.vmp.service.IGbStreamService; import com.genersoft.iot.vmp.storager.dao.GbStreamMapper; import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper; import com.genersoft.iot.vmp.storager.dao.PlatformCatalogMapper; import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper; -import com.genersoft.iot.vmp.service.IGbStreamService; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.slf4j.Logger; @@ -19,7 +19,6 @@ import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; @@ -230,4 +229,35 @@ deviceChannel.setSecrecy("0"); return deviceChannel; } + + @Override + public List<GbStream> getAllGBChannels(String platformId) { + + return gbStreamMapper.selectAll(platformId, null, null, null); + + } + + @Override + public void delAllPlatformInfo(String platformId, String catalogId) { + if (platformId == null) { + return ; + } + ParentPlatform platform = platformMapper.getParentPlatByServerGBId(platformId); + if (platform == null) { + return ; + } + if (ObjectUtils.isEmpty(catalogId)) { + catalogId = platform.getDeviceGBId(); + } + if (platformGbStreamMapper.delByPlatformAndCatalogId(platformId, catalogId) > 0) { + List<GbStream> gbStreams = platformGbStreamMapper.queryChannelInParentPlatformAndCatalog(platformId, catalogId); + List<DeviceChannel> deviceChannelList = new ArrayList<>(); + for (GbStream gbStream : gbStreams) { + DeviceChannel deviceChannel = new DeviceChannel(); + deviceChannel.setChannelId(gbStream.getGbId()); + deviceChannelList.add(deviceChannel); + } + eventPublisher.catalogEventPublish(platformId, deviceChannelList, CatalogEvent.DEL); + } + } } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java index 22d195e..601ff5d 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlatformChannelServiceImpl.java @@ -16,6 +16,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; import java.util.ArrayList; import java.util.HashMap; @@ -105,4 +106,26 @@ } return deviceChannelList; } + + @Override + public int delAllChannelForGB(String platformId, String catalogId) { + + int result; + if (platformId == null) { + return 0; + } + ParentPlatform platform = platformMapper.getParentPlatByServerGBId(platformId); + if (platform == null) { + return 0; + } + if (ObjectUtils.isEmpty(catalogId)) { + catalogId = platform.getDeviceGBId(); + } + + if ((result = platformChannelMapper.delChannelForGBByCatalogId(platformId, catalogId)) > 0) { + List<DeviceChannel> deviceChannels = platformChannelMapper.queryAllChannelInCatalog(platformId, catalogId); + eventPublisher.catalogEventPublish(platformId, deviceChannels, CatalogEvent.DEL); + } + return result; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java index 45ad08c..b9693a0 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java @@ -5,23 +5,22 @@ import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.conf.exception.ControllerException; -import com.genersoft.iot.vmp.gb28181.bean.GbStream; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; -import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; +import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; import com.genersoft.iot.vmp.service.IGbStreamService; import com.genersoft.iot.vmp.service.IMediaServerService; import com.genersoft.iot.vmp.service.IMediaService; +import com.genersoft.iot.vmp.service.IStreamProxyService; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import com.genersoft.iot.vmp.storager.dao.GbStreamMapper; import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper; import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper; import com.genersoft.iot.vmp.storager.dao.StreamProxyMapper; -import com.genersoft.iot.vmp.service.IStreamProxyService; import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; @@ -35,7 +34,9 @@ import org.springframework.transaction.TransactionStatus; import org.springframework.util.ObjectUtils; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * 瑙嗛浠g悊涓氬姟 @@ -101,7 +102,6 @@ param.getStream() ); param.setDst_url(dstUrl); StringBuffer resultMsg = new StringBuffer(); - boolean streamLive = false; param.setMediaServerId(mediaInfo.getId()); boolean saveResult; // 鏇存柊 @@ -118,7 +118,6 @@ if (param.isEnable()) { JSONObject jsonObject = addStreamProxyToZlm(param); if (jsonObject == null || jsonObject.getInteger("code") != 0) { - streamLive = false; resultMsg.append(", 浣嗘槸鍚敤澶辫触锛岃妫�鏌ユ祦鍦板潃鏄惁鍙敤"); param.setEnable(false); // 鐩存帴绉婚櫎 @@ -128,26 +127,10 @@ updateStreamProxy(param); } - }else { - streamLive = true; resultForStreamInfo = mediaService.getStreamInfoByAppAndStream( mediaInfo, param.getApp(), param.getStream(), null, null); - } - } - if ( !ObjectUtils.isEmpty(param.getPlatformGbId()) && streamLive) { - List<GbStream> gbStreams = new ArrayList<>(); - gbStreams.add(param); - if (gbStreamService.addPlatformInfo(gbStreams, param.getPlatformGbId(), param.getCatalogId())){ - return resultForStreamInfo; - }else { - resultMsg.append(", 鍏宠仈鍥芥爣骞冲彴[ " + param.getPlatformGbId() + " ]澶辫触"); - throw new ControllerException(ErrorCode.ERROR100.getCode(), resultMsg.toString()); - } - }else { - if (!streamLive) { - throw new ControllerException(ErrorCode.ERROR100.getCode(), resultMsg.toString()); } } return resultForStreamInfo; @@ -239,10 +222,10 @@ } if ("default".equals(param.getType())){ result = zlmresTfulUtils.addStreamProxy(mediaServerItem, param.getApp(), param.getStream(), param.getUrl(), - param.isEnable_hls(), param.isEnable_mp4(), param.getRtp_type()); + param.isEnable_audio(), param.isEnable_mp4(), param.getRtp_type()); }else if ("ffmpeg".equals(param.getType())) { result = zlmresTfulUtils.addFFmpegSource(mediaServerItem, param.getSrc_url(), param.getDst_url(), - param.getTimeout_ms() + "", param.isEnable_hls(), param.isEnable_mp4(), + param.getTimeout_ms() + "", param.isEnable_audio(), param.isEnable_mp4(), param.getFfmpeg_cmd_key()); } return result; @@ -295,6 +278,9 @@ result = true; streamProxy.setEnable(true); updateStreamProxy(streamProxy); + }else { + logger.info("鍚敤浠g悊澶辫触锛� {}/{}->{}({})", app, stream, jsonObject.getString("msg"), + streamProxy.getSrc_url() == null? streamProxy.getUrl():streamProxy.getSrc_url()); } } return result; 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 ff20cef..53072b2 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 @@ -1,6 +1,5 @@ package com.genersoft.iot.vmp.storager.dao; -import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannelInPlatform; import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java index 8a5d455..6ea852e 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java @@ -5,7 +5,6 @@ import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; -import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto; import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Repository; @@ -169,4 +168,5 @@ @Select("SELECT status FROM stream_push WHERE app=#{app} AND stream=#{stream}") Boolean selectStatusForPush(String app, String stream); + } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java index e048f31..120ecb3 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java @@ -57,6 +57,9 @@ @Select("SELECT dc.* FROM platform_gb_channel pgc left join device_channel dc on dc.id = pgc.deviceChannelId WHERE dc.channelId='${channelId}' and pgc.platformId='${platformId}'") List<DeviceChannel> queryChannelInParentPlatform(String platformId, String channelId); + @Select("SELECT dc.* FROM platform_gb_channel pgc left join device_channel dc on dc.id = pgc.deviceChannelId WHERE pgc.platformId='${platformId}' and pgc.catalogId=#{catalogId}") + List<DeviceChannel> queryAllChannelInCatalog(String platformId, String catalogId); + @Select(" select dc.channelId as id, dc.name as name, pgc.platformId as platformId, pgc.catalogId as parentId, 0 as childrenCount, 1 as type " + " from device_channel dc left join platform_gb_channel pgc on dc.id = pgc.deviceChannelId " + " where pgc.platformId=#{platformId} and pgc.catalogId=#{catalogId}") @@ -99,4 +102,9 @@ "DELETE FROM platform_gb_channel WHERE platformId=#{serverGBId}" + "</script>") void delByPlatformId(String serverGBId); + + @Delete("<script> " + + "DELETE FROM platform_gb_channel WHERE platformId=#{platformId} and catalogId=#{catalogId}" + + "</script>") + int delChannelForGBByCatalogId(String platformId, String catalogId); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java index 98afd6b..13094b9 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformGbStreamMapper.java @@ -105,4 +105,7 @@ "</foreach>" + "</script>") void delByAppAndStreamsByPlatformId(List<GbStream> gbStreams, String platformId); + + @Delete("DELETE FROM platform_gb_stream WHERE platformId=#{platformId} and catalogId=#{catalogId}") + int delByPlatformAndCatalogId(String platformId, String catalogId); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java index 448a358..4ed214d 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/StreamProxyMapper.java @@ -12,9 +12,9 @@ public interface StreamProxyMapper { @Insert("INSERT INTO stream_proxy (type, name, app, stream,mediaServerId, url, src_url, dst_url, " + - "timeout_ms, ffmpeg_cmd_key, rtp_type, enable_hls, enable_mp4, enable, status, enable_remove_none_reader, enable_disable_none_reader, createTime) VALUES" + + "timeout_ms, ffmpeg_cmd_key, rtp_type, enable_audio, enable_mp4, enable, status, enable_remove_none_reader, enable_disable_none_reader, createTime) VALUES" + "('${type}','${name}', '${app}', '${stream}', '${mediaServerId}','${url}', '${src_url}', '${dst_url}', " + - "'${timeout_ms}', '${ffmpeg_cmd_key}', '${rtp_type}', ${enable_hls}, ${enable_mp4}, ${enable}, ${status}, " + + "'${timeout_ms}', '${ffmpeg_cmd_key}', '${rtp_type}', ${enable_audio}, ${enable_mp4}, ${enable}, ${status}, " + "${enable_remove_none_reader}, ${enable_disable_none_reader}, '${createTime}' )") int add(StreamProxyItem streamProxyDto); @@ -30,7 +30,7 @@ "timeout_ms=#{timeout_ms}, " + "ffmpeg_cmd_key=#{ffmpeg_cmd_key}, " + "rtp_type=#{rtp_type}, " + - "enable_hls=#{enable_hls}, " + + "enable_audio=#{enable_audio}, " + "enable=#{enable}, " + "status=#{status}, " + "enable_remove_none_reader=#{enable_remove_none_reader}, " + diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java index 79edcf8..377b20f 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java @@ -1,13 +1,11 @@ package com.genersoft.iot.vmp.storager.impl; -import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; -import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; import com.genersoft.iot.vmp.service.IGbStreamService; import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; @@ -28,7 +26,6 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -761,18 +758,6 @@ return gbStreamMapper.updateStreamGPS(gpsMsgInfos); } - private List<DeviceChannel> getDeviceChannelListByChannelReduceList(List<ChannelReduce> channelReduces, String catalogId) { - List<DeviceChannel> deviceChannelList = new ArrayList<>(); - if (channelReduces.size() > 0){ - for (ChannelReduce channelReduce : channelReduces) { - DeviceChannel deviceChannel = queryChannel(channelReduce.getDeviceId(), channelReduce.getChannelId()); - deviceChannel.setParental(1); - deviceChannel.setParentId(catalogId); - deviceChannelList.add(deviceChannel); - } - } - return deviceChannelList; - } private DeviceChannel getDeviceChannelByCatalog(PlatformCatalog catalog) { ParentPlatform platform = platformMapper.getParentPlatByServerGBId(catalog.getPlatformId()); diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java index 3ba032a..447944a 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java @@ -1,9 +1,9 @@ package com.genersoft.iot.vmp.vmanager.gb28181.gbStream; import com.genersoft.iot.vmp.gb28181.bean.GbStream; +import com.genersoft.iot.vmp.service.IGbStreamService; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import com.genersoft.iot.vmp.vmanager.gb28181.gbStream.bean.GbStreamParam; -import com.genersoft.iot.vmp.service.IGbStreamService; import com.github.pagehelper.PageInfo; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -12,8 +12,9 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; + +import java.util.List; @Tag(name = "瑙嗛娴佸叧鑱斿埌绾ц仈骞冲彴") @CrossOrigin @@ -76,11 +77,14 @@ @Operation(summary = "绉婚櫎鍥芥爣鍏宠仈") @DeleteMapping(value = "/del") @ResponseBody - public Object del(@RequestBody GbStreamParam gbStreamParam){ - if (gbStreamService.delPlatformInfo(gbStreamParam.getPlatformId(), gbStreamParam.getGbStreams())) { - return "success"; + public void del(@RequestBody GbStreamParam gbStreamParam){ + + if (gbStreamParam.getGbStreams() == null || gbStreamParam.getGbStreams().size() == 0) { + if (gbStreamParam.isAll()) { + gbStreamService.delAllPlatformInfo(gbStreamParam.getPlatformId(), gbStreamParam.getCatalogId()); + } }else { - return "fail"; + gbStreamService.delPlatformInfo(gbStreamParam.getPlatformId(), gbStreamParam.getGbStreams()); } } @@ -93,11 +97,14 @@ @Operation(summary = "淇濆瓨鍥芥爣鍏宠仈") @PostMapping(value = "/add") @ResponseBody - public Object add(@RequestBody GbStreamParam gbStreamParam){ - if (gbStreamService.addPlatformInfo(gbStreamParam.getGbStreams(), gbStreamParam.getPlatformId(), gbStreamParam.getCatalogId())) { - return "success"; + public void add(@RequestBody GbStreamParam gbStreamParam){ + if (gbStreamParam.getGbStreams() == null || gbStreamParam.getGbStreams().size() == 0) { + if (gbStreamParam.isAll()) { + List<GbStream> allGBChannels = gbStreamService.getAllGBChannels(gbStreamParam.getPlatformId()); + gbStreamService.addPlatformInfo(allGBChannels, gbStreamParam.getPlatformId(), gbStreamParam.getCatalogId()); + } }else { - return "fail"; + gbStreamService.addPlatformInfo(gbStreamParam.getGbStreams(), gbStreamParam.getPlatformId(), gbStreamParam.getCatalogId()); } } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/bean/GbStreamParam.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/bean/GbStreamParam.java index 161f2e7..3705c70 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/bean/GbStreamParam.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/bean/GbStreamParam.java @@ -14,6 +14,9 @@ @Schema(description = "鐩綍ID") private String catalogId; + @Schema(description = "鍏宠仈鎵�鏈夐�氶亾") + private boolean all; + @Schema(description = "娴佸浗鏍囦俊鎭垪琛�") private List<GbStream> gbStreams; @@ -40,4 +43,12 @@ public void setGbStreams(List<GbStream> gbStreams) { this.gbStreams = gbStreams; } + + public boolean isAll() { + return all; + } + + public void setAll(boolean all) { + this.all = all; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java index 3bd8aec..40b65c3 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/PlatformController.java @@ -10,8 +10,7 @@ import com.genersoft.iot.vmp.gb28181.bean.PlatformCatalog; import com.genersoft.iot.vmp.gb28181.bean.SubscribeHolder; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; -import com.genersoft.iot.vmp.service.IPlatformChannelService; -import com.genersoft.iot.vmp.service.IPlatformService; +import com.genersoft.iot.vmp.service.*; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import com.genersoft.iot.vmp.utils.DateUtil; @@ -71,6 +70,12 @@ @Autowired private IPlatformService platformService; + + @Autowired + private IDeviceChannelService deviceChannelService; + + @Autowired + private IGbStreamService gbStreamService; /** * 鑾峰彇鍥芥爣鏈嶅姟鐨勯厤缃� @@ -379,7 +384,16 @@ if (logger.isDebugEnabled()) { logger.debug("缁欎笂绾у钩鍙版坊鍔犲浗鏍囬�氶亾API璋冪敤"); } - int result = platformChannelService.updateChannelForGB(param.getPlatformId(), param.getChannelReduces(), param.getCatalogId()); + int result = 0; + if (param.getChannelReduces() == null || param.getChannelReduces().size() == 0) { + if (param.isAll()) { + logger.info("[鍥芥爣绾ц仈]娣诲姞鎵�鏈夐�氶亾鍒颁笂绾у钩鍙帮紝 {}", param.getPlatformId()); + List<ChannelReduce> allChannelForDevice = deviceChannelService.queryAllChannelList(param.getPlatformId()); + result = platformChannelService.updateChannelForGB(param.getPlatformId(), allChannelForDevice, param.getCatalogId()); + } + }else { + result = platformChannelService.updateChannelForGB(param.getPlatformId(), param.getChannelReduces(), param.getCatalogId()); + } if (result <= 0) { throw new ControllerException(ErrorCode.ERROR100); } @@ -399,8 +413,15 @@ if (logger.isDebugEnabled()) { logger.debug("缁欎笂绾у钩鍙板垹闄ゅ浗鏍囬�氶亾API璋冪敤"); } - int result = storager.delChannelForGB(param.getPlatformId(), param.getChannelReduces()); - + int result = 0; + if (param.getChannelReduces() == null || param.getChannelReduces().size() == 0) { + if (param.isAll()) { + logger.info("[鍥芥爣绾ц仈]绉婚櫎鎵�鏈夐�氶亾锛屼笂绾у钩鍙帮紝 {}", param.getPlatformId()); + result = platformChannelService.delAllChannelForGB(param.getPlatformId(), param.getCatalogId()); + } + }else { + result = storager.delChannelForGB(param.getPlatformId(), param.getChannelReduces()); + } if (result <= 0) { throw new ControllerException(ErrorCode.ERROR100); } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/bean/UpdateChannelParam.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/bean/UpdateChannelParam.java index 01762d9..2d598e4 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/bean/UpdateChannelParam.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/platform/bean/UpdateChannelParam.java @@ -17,6 +17,9 @@ @Schema(description = "鐩綍鐨勫浗鏍囩紪鍙�") private String catalogId; + @Schema(description = "澶勭悊鎵�鏈夐�氶亾") + private boolean all; + @Schema(description = "") private List<ChannelReduce> channelReduces; @@ -43,4 +46,12 @@ public void setCatalogId(String catalogId) { this.catalogId = catalogId; } + + public boolean isAll() { + return all; + } + + public void setAll(boolean all) { + this.all = all; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java index d00d649..19b2adc 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java @@ -111,7 +111,7 @@ resultHolder.invokeResult(msg); }); - if (userSetting.isUsePushingAsStatus()) { + if (userSetting.getUseSourceIpAsStreamIp()) { // TODO 鍦ㄧ偣鎾湭鎴愬姛鐨勬儏鍐典笅鍦ㄦ璋冪敤鎺ュ彛鐐规挱浼氬鑷磋繑鍥炵殑娴佸湴鍧�ip閿欒 deferredResultEx.setFilter(result1 -> { WVPResult<StreamInfo> wvpResult1 = (WVPResult<StreamInfo>)result1; @@ -130,7 +130,6 @@ }); } - // 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ resultHolder.put(key, uuid, deferredResultEx); @@ -139,7 +138,6 @@ } return result; } - @Operation(summary = "鍋滄鐐规挱") @Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true) @@ -177,7 +175,6 @@ json.put("deviceId", deviceId); json.put("channelId", channelId); return json; - } /** diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java index 95b6cf3..d1368d8 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java @@ -109,7 +109,6 @@ logger.info("鍚敤浠g悊锛� " + app + "/" + stream); boolean result = streamProxyService.start(app, stream); if (!result) { - logger.info("鍚敤浠g悊澶辫触锛� " + app + "/" + stream); throw new ControllerException(ErrorCode.ERROR100); } } diff --git a/src/main/resources/all-application.yml b/src/main/resources/all-application.yml index 3303915..e8b28d0 100644 --- a/src/main/resources/all-application.yml +++ b/src/main/resources/all-application.yml @@ -195,6 +195,8 @@ # 鍥芥爣绾ц仈鍙戞祦涓ユ牸妯″紡锛屼弗鏍兼ā寮忎細浣跨敤涓巗dp淇℃伅涓竴鑷寸殑绔彛鍙戞祦锛岀鍙e叡浜玬edia.rtp.port-range锛岃繖浼氭崯澶变竴浜涙�ц兘锛� # 闈炰弗鏍兼ā寮忎娇鐢ㄩ殢鏈虹鍙e彂娴侊紝鎬ц兘鏇村ソ锛� 榛樿鍏抽棴 gb-send-stream-strict: false + # 璁惧涓婄嚎鏃舵槸鍚﹁嚜鍔ㄥ悓姝ラ�氶亾 + sync-channel-on-device-online: false # 鍏抽棴鍦ㄧ嚎鏂囨。锛堢敓浜х幆澧冨缓璁叧闂級 springdoc: diff --git a/web_src/src/components/StreamProxyList.vue b/web_src/src/components/StreamProxyList.vue index 5eff9d5..47ccde8 100644 --- a/web_src/src/components/StreamProxyList.vue +++ b/web_src/src/components/StreamProxyList.vue @@ -32,7 +32,7 @@ <el-table-column label="绫诲瀷" width="100" > <template slot-scope="scope"> <div slot="reference" class="name-wrapper"> - <el-tag size="medium">{{scope.row.type}}</el-tag> + <el-tag size="medium">{{scope.row.type === "default"? "鐩存帴浠g悊":"FFMPEG浠g悊"}}</el-tag> </div> </template> </el-table-column> @@ -55,15 +55,15 @@ </template> </el-table-column> <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="150" show-overflow-tooltip/> - <el-table-column label="杞琀LS" min-width="120" > + <el-table-column label="闊抽" min-width="120" > <template slot-scope="scope"> <div slot="reference" class="name-wrapper"> - <el-tag size="medium" v-if="scope.row.enable_hls">宸插惎鐢�</el-tag> - <el-tag size="medium" type="info" v-if="!scope.row.enable_hls">鏈惎鐢�</el-tag> + <el-tag size="medium" v-if="scope.row.enable_audio">宸插惎鐢�</el-tag> + <el-tag size="medium" type="info" v-if="!scope.row.enable_audio">鏈惎鐢�</el-tag> </div> </template> </el-table-column> - <el-table-column label="MP4褰曞埗" min-width="120" > + <el-table-column label="褰曞埗" min-width="120" > <template slot-scope="scope"> <div slot="reference" class="name-wrapper"> <el-tag size="medium" v-if="scope.row.enable_mp4">宸插惎鐢�</el-tag> @@ -71,11 +71,12 @@ </div> </template> </el-table-column> - <el-table-column label="鏃犱汉瑙傜湅鑷姩鍒犻櫎" min-width="160" > + <el-table-column label="鏃犱汉瑙傜湅" min-width="160" > <template slot-scope="scope"> <div slot="reference" class="name-wrapper"> - <el-tag size="medium" v-if="scope.row.enable_remove_none_reader">宸插惎鐢�</el-tag> - <el-tag size="medium" type="info" v-if="!scope.row.enable_remove_none_reader">鏈惎鐢�</el-tag> + <el-tag size="medium" v-if="scope.row.enable_remove_none_reader">绉婚櫎</el-tag> + <el-tag size="medium" v-if="scope.row.enable_disable_none_reader">鍋滅敤</el-tag> + <el-tag size="medium" type="info" v-if="!scope.row.enable_remove_none_reader && !scope.row.enable_disable_none_reader">涓嶅仛澶勭悊</el-tag> </div> </template> </el-table-column> @@ -131,7 +132,6 @@ currentPage:1, count:15, total:0, - getListLoading: false, startBtnLoading: false }; }, @@ -139,7 +139,7 @@ }, mounted() { this.initData(); - this.updateLooper = setInterval(this.initData, 1000); + this.startUpdateList() }, destroyed() { this.$destroy('videojs'); @@ -149,6 +149,12 @@ initData: function() { this.getStreamProxyList(); }, + stopUpdateList: function (){ + window.clearInterval(this.updateLooper) + }, + startUpdateList: function (){ + this.updateLooper = setInterval(this.initData, 1000); + }, currentChange: function(val){ this.currentPage = val; this.getStreamProxyList(); @@ -159,7 +165,6 @@ }, getStreamProxyList: function() { let that = this; - this.getListLoading = true; this.$axios({ method: 'get', url:`/api/proxy/list`, @@ -175,23 +180,18 @@ } that.streamProxyList = res.data.data.list; } - that.getListLoading = false; }).catch(function (error) { console.log(error); - that.getListLoading = false; }); }, addStreamProxy: function(){ this.$refs.streamProxyEdit.openDialog(null, this.initData) }, addOnvif: function(){ - this.getListLoading = true; - this.getListLoading = true; this.$axios({ method: 'get', url:`/api/onvif/search?timeout=3000`, }).then((res) =>{ - this.getListLoading = false; if (res.data.code === 0 ){ if (res.data.data.length > 0) { this.$refs.onvifEdit.openDialog(res.data.data, (url)=>{ @@ -208,7 +208,6 @@ } }).catch((error)=> { - this.getListLoading = false; this.$message.error(error.response.data.msg); }); @@ -217,7 +216,6 @@ }, play: function(row){ let that = this; - this.getListLoading = true; this.$axios({ method: 'get', url:`/api/push/getPlayUrl`, @@ -227,7 +225,6 @@ mediaServerId: row.mediaServerId } }).then(function (res) { - that.getListLoading = false; if (res.data.code === 0) { that.$refs.devicePlayer.openDialog("streamPlay", null, null, { streamInfo: res.data.data, @@ -243,13 +240,11 @@ }).catch(function (error) { console.log(error); - that.getListLoading = false; }); }, deleteStreamProxy: function(row){ let that = this; - this.getListLoading = true; that.$axios({ method:"delete", url:"/api/proxy/del", @@ -258,16 +253,13 @@ stream: row.stream } }).then((res)=>{ - that.getListLoading = false; that.initData() }).catch(function (error) { console.log(error); - that.getListLoading = false; }); }, start: function(row){ - let that = this; - this.getListLoading = true; + this.stopUpdateList() this.$set(row, 'startBtnLoading', true) this.$axios({ method: 'get', @@ -276,28 +268,31 @@ app: row.app, stream: row.stream } - }).then(function (res) { - that.getListLoading = false; - that.$set(row, 'startBtnLoading', false) + }).then((res)=> { if (res.data.code === 0){ - that.initData() + this.initData() }else { - that.$message({ + this.$message({ showClose: true, - message: "淇濆瓨澶辫触锛岃妫�鏌ュ湴鍧�鏄惁鍙敤锛�", + message: "鍚姩澶辫触锛岃妫�鏌ュ湴鍧�鏄惁鍙敤锛�", type: "error", }); } - - }).catch(function (error) { + this.$set(row, 'startBtnLoading', false) + this.startUpdateList() + }).catch((error)=> { console.log(error); - that.getListLoading = false; - that.$set(row, 'startBtnLoading', false) + this.$message({ + showClose: true, + message: "鍚姩澶辫触锛岃妫�鏌ュ湴鍧�鏄惁鍙敤锛�", + type: "error", + }); + this.$set(row, 'startBtnLoading', false) + this.startUpdateList() }); }, stop: function(row){ let that = this; - this.getListLoading = true; this.$axios({ method: 'get', url:`/api/proxy/stop`, @@ -306,11 +301,9 @@ stream: row.stream } }).then(function (res) { - that.getListLoading = false; that.initData() }).catch(function (error) { console.log(error); - that.getListLoading = false; }); }, refresh: function (){ diff --git a/web_src/src/components/dialog/StreamProxyEdit.vue b/web_src/src/components/dialog/StreamProxyEdit.vue index 1270999..76011fa 100644 --- a/web_src/src/components/dialog/StreamProxyEdit.vue +++ b/web_src/src/components/dialog/StreamProxyEdit.vue @@ -83,31 +83,23 @@ <el-option label="缁勬挱" value="2"></el-option> </el-select> </el-form-item> - - <el-form-item label="鍥芥爣骞冲彴"> - <el-select - v-model="proxyParam.platformGbId" - style="width: 100%" - placeholder="璇烽�夋嫨鍥芥爣骞冲彴" - > - <el-option - v-for="item in platformList" - :key="item.name" - :label="item.name" - :value="item.serverGBId"> - <span style="float: left">{{ item.name }}</span> - <span style="float: right; color: #8492a6; font-size: 13px">{{ item.serverGBId }}</span> - </el-option> - </el-select> - </el-form-item> + <el-form-item label="鏃犱汉瑙傜湅" prop="rtp_type" > + <el-select + @change="noneReaderHandler" + v-model="proxyParam.none_reader" + style="width: 100%" + placeholder="璇烽�夋嫨鏃犱汉瑙傜湅鐨勫鐞嗘柟寮�" + > + <el-option label="涓嶅仛澶勭悊" value="0"></el-option> + <el-option label="鍋滅敤" value="1"></el-option> + <el-option label="绉婚櫎" value="2"></el-option> + </el-select> + </el-form-item> <el-form-item label="鍏朵粬閫夐」"> <div style="float: left;"> <el-checkbox label="鍚敤" v-model="proxyParam.enable" ></el-checkbox> - <el-checkbox label="杞琀LS" v-model="proxyParam.enable_hls" ></el-checkbox> - <el-checkbox label="MP4褰曞埗" v-model="proxyParam.enable_mp4" ></el-checkbox> - <el-checkbox label="鏃犱汉瑙傜湅鑷姩鍒犻櫎" v-model="proxyParam.enable_remove_none_reader" @change="removeNoneReader"></el-checkbox> - <el-checkbox label="鏃犱汉瑙傜湅鍋滄鎷夋祦" v-model="proxyParam.enable_disable_none_reader" @change="disableNoneReaderHandType"></el-checkbox> - + <el-checkbox label="寮�鍚煶棰�" v-model="proxyParam.enable_audio" ></el-checkbox> + <el-checkbox label="褰曞埗" v-model="proxyParam.enable_mp4" ></el-checkbox> </div> </el-form-item> @@ -169,10 +161,11 @@ gbId: null, rtp_type: null, enable: true, - enable_hls: true, + enable_audio: true, enable_mp4: false, + none_reader: null, enable_remove_none_reader: false, - enable_disable_none_reader: true, + enable_disable_none_reader: false, platformGbId: null, mediaServerId: null, }, @@ -196,6 +189,7 @@ this.listChangeCallback = callback; if (proxyParam != null) { this.proxyParam = proxyParam; + this.proxyParam.none_reader = null; } let that = this; @@ -233,26 +227,26 @@ }, onSubmit: function () { this.dialogLoading = true; - var that = this; - that.$axios({ + this.noneReaderHandler(); + this.$axios({ method: 'post', url:`/api/proxy/save`, - data: that.proxyParam - }).then(function (res) { - that.dialogLoading = false; + data: this.proxyParam + }).then((res)=> { + this.dialogLoading = false; if (typeof (res.data.code) != "undefined" && res.data.code === 0) { - that.$message({ + this.$message({ showClose: true, message: res.data.msg, type: "success", }); - that.showDialog = false; - if (that.listChangeCallback != null) { - that.listChangeCallback(); - that.dialogLoading = false; + this.showDialog = false; + if (this.listChangeCallback != null) { + this.listChangeCallback(); + this.dialogLoading = false; } } - }).catch(function (error) { + }).catch((error) =>{ console.log(error); this.dialogLoading = false; }); @@ -280,12 +274,18 @@ this.platform.expires = "300"; } }, - removeNoneReader: function(checked) { - this.proxyParam.enable_disable_none_reader = !checked; + noneReaderHandler: function() { + if (this.proxyParam.none_reader === null || this.proxyParam.none_reader === "0") { + this.proxyParam.enable_disable_none_reader = false; + this.proxyParam.enable_remove_none_reader = false; + }else if (this.proxyParam.none_reader === "1"){ + this.proxyParam.enable_disable_none_reader = true; + this.proxyParam.enable_remove_none_reader = false; + }else if (this.proxyParam.none_reader ==="2"){ + this.proxyParam.enable_disable_none_reader = false; + this.proxyParam.enable_remove_none_reader = true; + } }, - disableNoneReaderHandType: function(checked) { - this.proxyParam.enable_remove_none_reader = !checked; - } }, }; </script> diff --git a/web_src/src/components/dialog/SyncChannelProgress.vue b/web_src/src/components/dialog/SyncChannelProgress.vue index c972a46..e1c9fe0 100644 --- a/web_src/src/components/dialog/SyncChannelProgress.vue +++ b/web_src/src/components/dialog/SyncChannelProgress.vue @@ -63,37 +63,29 @@ } if (res.data.data != null) { - if (res.data.syncIng) { + if (res.data.data.syncIng) { if (res.data.data.total == 0) { - if (res.data.data.errorMsg !== null ){ - this.msg = res.data.data.errorMsg; - this.syncStatus = "exception" - }else { - this.msg = `绛夊緟鍚屾涓璥; - this.timmer = setTimeout(this.getProgress, 300) - } - }else { - if (res.data.data.total == res.data.data.current) { - this.syncStatus = "success" - this.percentage = 100; - this.msg = '鍚屾鎴愬姛'; - }else { - if (res.data.data.errorMsg !== null ){ - this.msg = res.data.data.errorMsg; - this.syncStatus = "exception" - }else { - this.total = res.data.data.total; - this.current = res.data.data.current; - this.percentage = Math.floor(Number(res.data.data.current)/Number(res.data.data.total)* 10000)/100; - this.msg = `鍚屾涓�...[${res.data.data.current}/${res.data.data.total}]`; - this.timmer = setTimeout(this.getProgress, 300) - } - } + this.msg = `绛夊緟鍚屾涓璥; + this.timmer = setTimeout(this.getProgress, 300) + }else { + this.total = res.data.data.total; + this.current = res.data.data.current; + this.percentage = Math.floor(Number(res.data.data.current)/Number(res.data.data.total)* 10000)/100; + this.msg = `鍚屾涓�...[${res.data.data.current}/${res.data.data.total}]`; + this.timmer = setTimeout(this.getProgress, 300) } }else { - this.syncStatus = "success" - this.percentage = 100; - this.msg = '鍚屾鎴愬姛'; + if (res.data.data.errorMsg){ + this.msg = res.data.data.errorMsg; + this.syncStatus = "exception" + }else { + this.syncStatus = "success" + this.percentage = 100; + this.msg = '鍚屾鎴愬姛'; + setTimeout(()=>{ + this.showDialog = false; + }, 3000) + } } } }else { diff --git a/web_src/src/components/dialog/chooseChannelForGb.vue b/web_src/src/components/dialog/chooseChannelForGb.vue index a4dc5e0..fc97b4c 100644 --- a/web_src/src/components/dialog/chooseChannelForGb.vue +++ b/web_src/src/components/dialog/chooseChannelForGb.vue @@ -18,8 +18,10 @@ <el-option label="鍦ㄧ嚎" value="true"></el-option> <el-option label="绂荤嚎" value="false"></el-option> </el-select> - <el-button v-if="catalogId !== null" icon="el-icon-delete" size="mini" style="margin-right: 1rem;" :disabled="gbChannels.length === 0 || multipleSelection.length === 0" type="danger" @click="batchDel">鎵归噺绉婚櫎</el-button> - <el-button v-if="catalogId === null" icon="el-icon-plus" size="mini" style="margin-right: 1rem;" :disabled="gbChannels.length === 0 || multipleSelection.length === 0" @click="batchAdd">鎵归噺娣诲姞</el-button> + <el-button v-if="catalogId !== null" icon="el-icon-delete" size="mini" :disabled="gbChannels.length === 0 || multipleSelection.length === 0" type="danger" @click="batchDel">鎵归噺绉婚櫎</el-button> + <el-button v-if="catalogId === null" icon="el-icon-plus" size="mini" :disabled="gbChannels.length === 0 || multipleSelection.length === 0" @click="batchAdd">鎵归噺娣诲姞</el-button> + <el-button v-if="catalogId === null" icon="el-icon-plus" size="mini" @click="add()">鍏ㄩ儴娣诲姞</el-button> + <el-button v-if="catalogId !== null" type="danger" icon="el-icon-delete" size="mini" @click="remove()">鍏ㄩ儴绉婚櫎</el-button> </div> <el-table ref="gbChannelsTable" :data="gbChannels" border style="width: 100%" :height="winHeight" :row-key="(row)=> row.deviceId + row.channelId" @selection-change="handleSelectionChange"> @@ -115,13 +117,15 @@ this.initData(); }, add: function (row) { + let all = typeof(row) === "undefined" this.getCatalogFromUser((catalogId)=> { this.$axios({ method:"post", url:"/api/platform/update_channel_for_gb", data:{ platformId: this.platformId, - channelReduces: [row], + all: all, + channelReduces: all?[]:[row], catalogId: catalogId } }).then((res)=>{ @@ -134,21 +138,34 @@ }, remove: function (row) { - console.log(row) + let all = typeof(row) === "undefined" + this.$confirm(`纭畾绉婚櫎${all?"鎵�鏈夐�氶亾":""}鍚楋紵`, '鎻愮ず', { + dangerouslyUseHTMLString: true, + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + console.log(row) - this.$axios({ - method:"delete", - url:"/api/platform/del_channel_for_gb", - data:{ - platformId: this.platformId, - channelReduces: [row] - } - }).then((res)=>{ - console.log("绉婚櫎鎴愬姛") - this.getChannelList(); - }).catch(function (error) { - console.log(error); + this.$axios({ + method:"delete", + url:"/api/platform/del_channel_for_gb", + data:{ + platformId: this.platformId, + all: all, + channelReduces: all?[]:[row], + } + }).then((res)=>{ + console.log("绉婚櫎鎴愬姛") + this.getChannelList(); + }).catch(function (error) { + console.log(error); + }); + }).catch(() => { + }); + + }, // checkedChange: function (val) { // let that = this; diff --git a/web_src/src/components/dialog/chooseChannelForStream.vue b/web_src/src/components/dialog/chooseChannelForStream.vue index 8d63dbf..6c4653b 100644 --- a/web_src/src/components/dialog/chooseChannelForStream.vue +++ b/web_src/src/components/dialog/chooseChannelForStream.vue @@ -24,6 +24,8 @@ </el-select> <el-button v-if="catalogId !== null" icon="el-icon-delete" size="mini" style="margin-right: 1rem;" :disabled="gbStreams.length === 0 || multipleSelection.length === 0" type="danger" @click="batchDel">鎵归噺绉婚櫎</el-button> <el-button v-if="catalogId === null" icon="el-icon-plus" size="mini" style="margin-right: 1rem;" :disabled="gbStreams.length === 0 || multipleSelection.length === 0" @click="batchAdd">鎵归噺娣诲姞</el-button> + <el-button v-if="catalogId === null" icon="el-icon-plus" size="mini" style="margin-right: 1rem;" @click="add()">鍏ㄩ儴娣诲姞</el-button> + <el-button v-if="catalogId !== null" type="danger" icon="el-icon-delete" size="mini" style="margin-right: 1rem;" @click="remove()">鍏ㄩ儴绉婚櫎</el-button> </div> <el-table ref="gbStreamsTable" :data="gbStreams" border style="width: 100%" :height="winHeight" :row-key="(row)=> row.app + row.stream" @selection-change="handleSelectionChange"> <el-table-column align="center" type="selection" :reserve-selection="true" width="55"> @@ -128,6 +130,7 @@ }, add: function (row, scope) { + let all = typeof(row) === "undefined" this.getCatalogFromUser((catalogId)=>{ this.$axios({ method:"post", @@ -135,7 +138,8 @@ data:{ platformId: this.platformId, catalogId: catalogId, - gbStreams: [row], + all: all, + gbStreams: all?[]:[row], } }).then((res)=>{ console.log("淇濆瓨鎴愬姛") @@ -149,20 +153,33 @@ }, remove: function (row, scope) { - this.$axios({ - method:"delete", - url:"/api/gbStream/del", - data:{ - platformId: this.platformId, - gbStreams: [row], - } - }).then((res)=>{ - console.log("绉婚櫎鎴愬姛") - // this.gbStreams.splice(scope.$index,1) - this.getChannelList(); - }).catch(function (error) { - console.log(error); + let all = typeof(row) === "undefined" + this.$confirm(`纭畾绉婚櫎${all?"鎵�鏈夐�氶亾":""}鍚楋紵`, '鎻愮ず', { + dangerouslyUseHTMLString: true, + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + + this.$axios({ + method:"delete", + url:"/api/gbStream/del", + data:{ + platformId: this.platformId, + all: all, + gbStreams: all?[]:[row], + } + }).then((res)=>{ + console.log("绉婚櫎鎴愬姛") + // this.gbStreams.splice(scope.$index,1) + this.getChannelList(); + }).catch(function (error) { + console.log(error); + }); + }).catch(() => { + }); + }, getChannelList: function () { let that = this; -- Gitblit v1.8.0