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 0effa431..1a851d70 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IGbStreamService.java @@ -17,7 +17,7 @@ public interface IGbStreamService { * @param count * @return */ - PageInfo getAll(Integer page, Integer count, String platFormId); + PageInfo getAll(Integer page, Integer count, String platFormId, String catalogId,String query,Boolean pushing,String mediaServerId); /** 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 64f49ac6..58279850 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 @@ -52,9 +52,9 @@ public class GbStreamServiceImpl implements IGbStreamService { private EventPublisher eventPublisher; @Override - public PageInfo getAll(Integer page, Integer count, String platFormId) { + public PageInfo getAll(Integer page, Integer count, String platFormId, String catalogId, String query, Boolean pushing, String mediaServerId) { PageHelper.startPage(page, count); - List all = gbStreamMapper.selectAll(platFormId); + List all = gbStreamMapper.selectAll(platFormId, catalogId, query, pushing, mediaServerId); return new PageInfo<>(all); } @@ -70,6 +70,7 @@ public class GbStreamServiceImpl implements IGbStreamService { boolean result = false; TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); ParentPlatform parentPlatform = platformMapper.getParentPlatByServerGBId(platformId); + if (catalogId == null) catalogId = parentPlatform.getCatalogId(); try { List deviceChannelList = new ArrayList<>(); for (GbStream gbStream : gbStreams) { diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java index a1885716..abcb1f4e 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java @@ -239,7 +239,7 @@ public interface IVideoManagerStorager { /** * 查询通道信息,不区分设备(已关联平台或全部) */ - PageInfo queryAllChannelList(int page, int count, String query, Boolean online, Boolean channelType, String platformId, Boolean inPlatform); + PageInfo queryAllChannelList(int page, int count, String query, Boolean online, Boolean channelType, String platformId, String catalogId); /** * 查询设备的通道信息 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 f882766f..32dd7df5 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 @@ -93,28 +93,31 @@ public interface DeviceChannelMapper { void startPlay(String deviceId, String channelId, String streamId); + @Select(value = {" "}) - - List queryChannelListInAll(String query, Boolean online, Boolean hasSubChannel, String platformId, Boolean inPlatform); + List queryChannelListInAll(String query, Boolean online, Boolean hasSubChannel, String platformId, String catalogId); @Select("SELECT * FROM device_channel WHERE channelId=#{channelId}") List queryChannelByChannelId( String channelId); 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 1bcececf..5d59e2ec 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 @@ -37,10 +37,20 @@ public interface GbStreamMapper { @Delete("DELETE FROM gb_stream WHERE app=#{app} AND stream=#{stream}") int del(String app, String stream); - @Select("SELECT gs.*, pgs.platformId AS platformId, pgs.catalogId AS catalogId FROM gb_stream gs " + - "LEFT JOIN platform_gb_stream pgs ON gs.app = pgs.app AND gs.stream = pgs.stream AND (pgs.platformId = #{platformId} OR pgs.platformId is null)" + - "order by gs.id asc ") - List selectAll(String platformId); + @Select("") + List selectAll(String platformId, String catalogId, String query, Boolean pushing, String mediaServerId); @Select("SELECT * FROM gb_stream WHERE app=#{app} AND stream=#{stream}") StreamProxyItem selectOne(String app, String stream); diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java index 57b30f10..2220edeb 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java @@ -575,16 +575,16 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager { @Override public PageInfo queryAllChannelList(int page, int count, String query, Boolean online, - Boolean channelType, String platformId, Boolean inPlatform) { + Boolean channelType, String platformId, String catalogId) { PageHelper.startPage(page, count); - List all = deviceChannelMapper.queryChannelListInAll(query, online, channelType, platformId, inPlatform); + List all = deviceChannelMapper.queryChannelListInAll(query, online, channelType, platformId, catalogId); return new PageInfo<>(all); } @Override public List queryChannelListInParentPlatform(String platformId) { - return deviceChannelMapper.queryChannelListInAll(null, null, null, platformId, true); + return deviceChannelMapper.queryChannelListInAll(null, null, null, platformId, null); } @Override 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 981c3ccb..edc940fa 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 @@ -12,6 +12,7 @@ import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; @Api(tags = "视频流关联到级联平台") @@ -40,15 +41,33 @@ public class GbStreamController { @ApiImplicitParams({ @ApiImplicitParam(name = "page", value = "当前页", required = true , dataTypeClass = Integer.class), @ApiImplicitParam(name = "count", value = "每页条数", required = true , dataTypeClass = Integer.class), - @ApiImplicitParam(name = "platformId", value = "平台ID", required = true , dataTypeClass = Integer.class), + @ApiImplicitParam(name = "platformId", value = "平台ID", required = true , dataTypeClass = String.class), + @ApiImplicitParam(name = "catalogId", value = "目录ID", required = false , dataTypeClass = String.class), + @ApiImplicitParam(name="query", value = "查询内容", required = false , dataTypeClass = String.class), + @ApiImplicitParam(name="pushing", value = "是否正在推流", required = false , dataTypeClass = Boolean.class), + @ApiImplicitParam(name="mediaServerId", value = "流媒体ID", required = false , dataTypeClass = String.class), + }) @GetMapping(value = "/list") @ResponseBody public PageInfo list(@RequestParam(required = true)Integer page, @RequestParam(required = true)Integer count, - @RequestParam(required = true)String platformId){ + @RequestParam(required = true)String platformId, + @RequestParam(required = false)String catalogId, + @RequestParam(required = false)String query, + @RequestParam(required = false)Boolean pushing, + @RequestParam(required = false)String mediaServerId){ + if (StringUtils.isEmpty(catalogId)) { + catalogId = null; + } + if (StringUtils.isEmpty(query)) { + query = null; + } + if (StringUtils.isEmpty(mediaServerId)) { + mediaServerId = null; + } - return gbStreamService.getAll(page, count, platformId); + return gbStreamService.getAll(page, count, platformId, catalogId, query, pushing, mediaServerId); } 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 532d928d..b8507299 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 @@ -65,6 +65,25 @@ public class PlatformController { result.put("password", sipConfig.getPassword()); return new ResponseEntity<>(result, HttpStatus.OK); } + /** + * 获取级联服务器信息 + * @return + */ + @ApiOperation("获取国标服务的配置") + @GetMapping("/info/{id}") + public ResponseEntity> getPlatform(@PathVariable String id) { + ParentPlatform parentPlatform = storager.queryParentPlatByServerGBId(id); + WVPResult wvpResult = new WVPResult<>(); + if (parentPlatform != null) { + wvpResult.setCode(0); + wvpResult.setMsg("success"); + wvpResult.setData(parentPlatform); + }else { + wvpResult.setCode(-1); + wvpResult.setMsg("未查询到此平台"); + } + return new ResponseEntity<>(wvpResult, HttpStatus.OK); + } /** * 分页查询级联平台 @@ -282,29 +301,33 @@ public class PlatformController { @ApiImplicitParam(name = "page", value = "当前页", dataTypeClass = Integer.class), @ApiImplicitParam(name = "count", value = "每页条数", dataTypeClass = Integer.class), @ApiImplicitParam(name = "platformId", value = "上级平台ID", dataTypeClass = String.class), + @ApiImplicitParam(name = "catalogId", value = "目录ID", dataTypeClass = String.class), @ApiImplicitParam(name = "query", value = "查询内容", dataTypeClass = String.class), @ApiImplicitParam(name = "online", value = "是否在线", dataTypeClass = Boolean.class), - @ApiImplicitParam(name = "choosed", value = "是否已选中", dataTypeClass = Boolean.class), @ApiImplicitParam(name = "channelType", value = "通道类型", dataTypeClass = Boolean.class), }) @GetMapping("/channel_list") @ResponseBody public PageInfo channelList(int page, int count, @RequestParam(required = false) String platformId, + @RequestParam(required = false) String catalogId, @RequestParam(required = false) String query, @RequestParam(required = false) Boolean online, - @RequestParam(required = false) Boolean choosed, @RequestParam(required = false) Boolean channelType){ // if (logger.isDebugEnabled()) { // logger.debug("查询所有所有通道API调用"); // } - PageInfo channelReduces = null; - if (platformId != null ) { - channelReduces = storager.queryAllChannelList(page, count, query, online, channelType, platformId, choosed); - }else { - channelReduces = storager.queryAllChannelList(page, count, query, online, channelType, null, false); + if(StringUtils.isEmpty(platformId)) { + platformId = null; + } + if(StringUtils.isEmpty(query)) { + query = null; + } + if(StringUtils.isEmpty(platformId) || StringUtils.isEmpty(catalogId)) { + catalogId = null; } + PageInfo channelReduces = storager.queryAllChannelList(page, count, query, online, channelType, platformId, catalogId); return channelReduces; } @@ -371,11 +394,11 @@ public class PlatformController { } List platformCatalogList = storager.getChildrenCatalogByPlatform(platformId, parentId); // 查询下属的国标通道 - List catalogsForChannel = storager.queryChannelInParentPlatformAndCatalog(platformId, parentId); +// List catalogsForChannel = storager.queryChannelInParentPlatformAndCatalog(platformId, parentId); // 查询下属的直播流通道 - List catalogsForStream = storager.queryStreamInParentPlatformAndCatalog(platformId, parentId); - platformCatalogList.addAll(catalogsForChannel); - platformCatalogList.addAll(catalogsForStream); +// List catalogsForStream = storager.queryStreamInParentPlatformAndCatalog(platformId, parentId); +// platformCatalogList.addAll(catalogsForChannel); +// platformCatalogList.addAll(catalogsForStream); WVPResult> result = new WVPResult<>(); result.setCode(0); result.setMsg("success"); diff --git a/web_src/index.html b/web_src/index.html index 697e987f..af1cad22 100644 --- a/web_src/index.html +++ b/web_src/index.html @@ -4,6 +4,7 @@ 国标28181 + diff --git a/web_src/src/components/PushVideoList.vue b/web_src/src/components/PushVideoList.vue index 12228f02..4c803da5 100644 --- a/web_src/src/components/PushVideoList.vue +++ b/web_src/src/components/PushVideoList.vue @@ -35,11 +35,7 @@ - + diff --git a/web_src/src/components/UiHeader.vue b/web_src/src/components/UiHeader.vue index 4bbf639b..828dda97 100644 --- a/web_src/src/components/UiHeader.vue +++ b/web_src/src/components/UiHeader.vue @@ -3,7 +3,7 @@ 控制台 实时监控 - 设备列表 + 国标设备 推流列表 拉流代理 云端录像 diff --git a/web_src/src/components/dialog/catalogEdit.vue b/web_src/src/components/dialog/catalogEdit.vue index 5b594947..20b21684 100644 --- a/web_src/src/components/dialog/catalogEdit.vue +++ b/web_src/src/components/dialog/catalogEdit.vue @@ -77,8 +77,7 @@ export default { }) .then((res)=> { if (res.data.code === 0) { - console.log("添加/修改成功") - if (this.submitCallback)this.submitCallback() + if (this.submitCallback)this.submitCallback(this.form) }else { this.$message({ showClose: true, diff --git a/web_src/src/components/dialog/chooseChannel.vue b/web_src/src/components/dialog/chooseChannel.vue index d173955a..599921ec 100644 --- a/web_src/src/components/dialog/chooseChannel.vue +++ b/web_src/src/components/dialog/chooseChannel.vue @@ -8,7 +8,7 @@ - + @@ -20,14 +20,14 @@ - + - + @@ -61,6 +61,8 @@ export default { catalogTabActiveName: "catalog", platformId: "", catalogId: "", + catalogName: "", + currentCatalogId: "", platformName: "", defaultCatalogId: "", showDialog: false, @@ -108,14 +110,10 @@ export default { console.log(error); }); }, - catalogIdChange: function (id) { - console.log("中间模块收到: " + id) + catalogIdChange: function (id, name) { this.catalogId = id; + this.catalogName = name; }, - updateChooseChannelCallback (id){ - console.log("中间模块收到选择通道变化: " + id) - this.$refs.chooseChannelForCatalog.refreshCatalogById(id) - } } }; diff --git a/web_src/src/components/dialog/chooseChannelForCatalog.vue b/web_src/src/components/dialog/chooseChannelForCatalog.vue index 6c7fdabb..a0cb98c8 100644 --- a/web_src/src/components/dialog/chooseChannelForCatalog.vue +++ b/web_src/src/components/dialog/chooseChannelForCatalog.vue @@ -7,19 +7,21 @@ empty-text="未知节点" node-key="id" default-expand-all - :highlight-current="true" + :highlight-current="false" :expand-on-click-node="false" :props="props" :load="loadNode" @node-contextmenu="contextmenuEventHandler" + @node-click="nodeClickHandler" lazy> - {{''}} + {{''}} + - {{ node.label }} + {{ node.label }} 默认 @@ -42,7 +44,7 @@ export default { this.defaultCatalogIdSign = this.defaultCatalogId; this.initData(); setTimeout(()=>{ - if (this.catalogIdChange)this.catalogIdChange(this.defaultCatalogId); + if (this.catalogIdChange)this.catalogIdChange(this.defaultCatalogId, this.platformName); }, 100) }, @@ -59,6 +61,7 @@ export default { defaultCatalogIdSign: null, chooseNode: null, chooseId: "", + chooseName: "", catalogTree: null, contextmenuShow: false @@ -69,10 +72,6 @@ export default { console.log(newData) this.initData() }, - chooseId(newData, oldData){ - console.log("发送: " + newData) - if (this.catalogIdChange)this.catalogIdChange(newData); - }, }, methods: { initData: function () { @@ -123,9 +122,12 @@ export default { editCatalog: function (data, node){ let that = this; // 打开添加弹窗 - that.$refs.catalogEdit.openDialog(true, data.id, data.name, data.parentId, (data)=>{ + that.$refs.catalogEdit.openDialog(true, data.id, data.name, data.parentId, (newData)=>{ node.parent.loaded = false node.parent.expand(); + if (data.id === this.chooseId && newData.name !== data.name) { + if (this.catalogIdChange)this.catalogIdChange(this.chooseId, newData.name); + } }); }, @@ -172,11 +174,17 @@ export default { }, loadNode: function(node, resolve){ if (node.level === 0) { - resolve([{ - name: this.platformName, - id: this.platformId, - type: 0 - }]); + resolve([ + { + name: "未分配", + id: null, + type: -1 + },{ + name: this.platformName, + id: this.platformId, + type: 0 + } + ]); } if (node.level >= 1){ this.getCatalog(node.data.id, resolve) @@ -291,6 +299,11 @@ export default { return false; }, + nodeClickHandler: function (data, node, tree){ + this.chooseId = data.id; + this.chooseName = data.name; + if (this.catalogIdChange)this.catalogIdChange(this.chooseId, this.chooseName); + } } }; diff --git a/web_src/src/components/dialog/chooseChannelForGb.vue b/web_src/src/components/dialog/chooseChannelForGb.vue index e46d3e57..95c78f7d 100644 --- a/web_src/src/components/dialog/chooseChannelForGb.vue +++ b/web_src/src/components/dialog/chooseChannelForGb.vue @@ -1,6 +1,10 @@ diff --git a/web_src/src/components/dialog/chooseChannelForStream.vue b/web_src/src/components/dialog/chooseChannelForStream.vue index 931a58ec..0bc8f046 100644 --- a/web_src/src/components/dialog/chooseChannelForStream.vue +++ b/web_src/src/components/dialog/chooseChannelForStream.vue @@ -1,6 +1,33 @@ + + diff --git a/web_src/static/css/iconfont.css b/web_src/static/css/iconfont.css index b13982d7..93259b04 100644 --- a/web_src/static/css/iconfont.css +++ b/web_src/static/css/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 1291092 */ - src: url('iconfont.woff2?t=1640922722742') format('woff2'), - url('iconfont.woff?t=1640922722742') format('woff'), - url('iconfont.ttf?t=1640922722742') format('truetype'); + src: url('iconfont.woff2?t=1644809302709') format('woff2'), + url('iconfont.woff?t=1644809302709') format('woff'), + url('iconfont.ttf?t=1644809302709') format('truetype'); } .iconfont { @@ -13,6 +13,14 @@ -moz-osx-font-smoothing: grayscale; } +.icon-ziyuan:before { + content: "\e7d5"; +} + +.icon-shexiangtou1:before { + content: "\e7d4"; +} + .icon-wxbzhuye:before { content: "\e7d1"; } diff --git a/web_src/static/css/iconfont.woff2 b/web_src/static/css/iconfont.woff2 index 8b2d4006..4db77e21 100644 Binary files a/web_src/static/css/iconfont.woff2 and b/web_src/static/css/iconfont.woff2 differ diff --git a/web_src/static/favicon.ico b/web_src/static/favicon.ico new file mode 100644 index 00000000..2d672689 Binary files /dev/null and b/web_src/static/favicon.ico differ