| | |
| | | - [X] WEB添加上级平台 |
| | | - [X] 注册 |
| | | - [X] 心跳保活 |
| | | - [ ] 通道选择 |
| | | - [X] 通道选择 |
| | | - [ ] 通道推送 |
| | | - [ ] 点播 |
| | | - [ ] 云台控制 |
| | |
| | | void outlineForAllParentPlatform();
|
| | |
|
| | | /**
|
| | | * 查询通道信息, 不区分设备
|
| | | * 查询通道信息,不区分设备(已关联平台或全部)
|
| | | */
|
| | | PageInfo<ChannelReduce> queryChannelListInAll(int page, int count, String query, Boolean online, Boolean channelType, String parentChannelId);
|
| | | PageInfo<ChannelReduce> queryAllChannelList(int page, int count, String query, Boolean online, Boolean channelType, String platformId, Boolean inPlatform);
|
| | |
|
| | |
|
| | | /**
|
| | |
| | | * @return
|
| | | */
|
| | | int updateChannelForGB(String platformId, List<ChannelReduce> channelReduces);
|
| | |
|
| | | /**
|
| | | * 移除上级平台的通道信息
|
| | | * @param platformId
|
| | | * @param channelReduces
|
| | | * @return
|
| | | */
|
| | | int delChannelForGB(String platformId, List<ChannelReduce> channelReduces);
|
| | |
|
| | |
|
| | | }
|
| | |
| | | import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; |
| | | import com.genersoft.iot.vmp.vmanager.platform.bean.ChannelReduce; |
| | | import org.apache.ibatis.annotations.*; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | import java.util.List; |
| | | |
| | |
| | | * 用于存储设备通道信息 |
| | | */ |
| | | @Mapper |
| | | @Repository |
| | | public interface DeviceChannelMapper { |
| | | |
| | | @Insert("INSERT INTO device_channel (channelId, deviceId, name, manufacture, model, owner, civilCode, block, " + |
| | |
| | | |
| | | @Select(value = {" <script>" + |
| | | "SELECT * FROM ( "+ |
| | | " SELECT dc.channelId, dc.deviceId, dc.name, de.manufacturer, de.hostAddress, " + |
| | | "(SELECT count(0) FROM device_channel WHERE parentId=dc.channelId) as subCount " + |
| | | "FROM device_channel dc LEFT JOIN device de ON dc.deviceId = de.deviceId" + |
| | | " SELECT dc.channelId, dc.deviceId, dc.name, de.manufacturer, de.hostAddress, " + |
| | | "(SELECT count(0) FROM device_channel WHERE parentId=dc.channelId) as subCount, " + |
| | | "pc.platformId " + |
| | | "FROM device_channel dc " + |
| | | "LEFT JOIN device de ON dc.deviceId = de.deviceId " + |
| | | "LEFT JOIN platform_gb_channel pc on pc.deviceId = dc.deviceId AND pc.channelId = dc.channelId " + |
| | | " WHERE 1=1 " + |
| | | " <if test=\"query != null\"> AND (dc.channelId LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " + |
| | | " <if test=\"online == true\" > AND dc.status=1</if> " + |
| | | " <if test=\"online == false\" > AND dc.status=0</if> " + |
| | | " <if test=\"platformId != null and inPlatform == true\"> AND pc.platformId=#{platformId} </if> " + |
| | | ") dcr" + |
| | | " WHERE 1=1 " + |
| | | " <if test=\"query != null\"> AND (dc.channelId LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " + |
| | | " <if test=\"parentChannelId != null\"> AND dc.parentId=#{parentChannelId} </if> " + |
| | | " <if test=\"online == true\" > AND dc.status=1</if>" + |
| | | " <if test=\"online == false\" > AND dc.status=0</if>) dcr" + |
| | | " WHERE 1=1 " + |
| | | " <if test=\"hasSubChannel == true\" > AND subCount >0</if>" + |
| | | " <if test=\"hasSubChannel == false\" > AND subCount=0</if>" + |
| | | " <if test=\"hasSubChannel!= null and hasSubChannel == true\" > AND subCount >0</if> " + |
| | | " <if test=\"hasSubChannel!= null and hasSubChannel == false\" > AND subCount=0</if> " + |
| | | " </script>"}) |
| | | |
| | | List<ChannelReduce> queryChannelListInAll(String query, Boolean online, Boolean hasSubChannel, String parentChannelId); |
| | | List<ChannelReduce> queryChannelListInAll(String query, Boolean online, Boolean hasSubChannel, String platformId, Boolean inPlatform); |
| | | } |
New file |
| | |
| | | package com.genersoft.iot.vmp.storager.dao; |
| | | |
| | | import com.genersoft.iot.vmp.vmanager.platform.bean.ChannelReduce; |
| | | import org.apache.ibatis.annotations.Delete; |
| | | import org.apache.ibatis.annotations.Insert; |
| | | import org.apache.ibatis.annotations.Mapper; |
| | | import org.apache.ibatis.annotations.Select; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Mapper |
| | | @Repository |
| | | public interface PatformChannelMapper { |
| | | |
| | | /** |
| | | * 查询列表里已经关联的 |
| | | */ |
| | | @Select("<script> "+ |
| | | "SELECT deviceAndChannelId FROM platform_gb_channel WHERE platformId='${platformId}' AND deviceAndChannelId in" + |
| | | "<foreach collection='deviceAndChannelIds' open='(' item='id_' separator=',' close=')'> '${id_}'</foreach>" + |
| | | "</script>") |
| | | List<String> findChannelRelatedPlatform(String platformId, List<String> deviceAndChannelIds); |
| | | |
| | | @Insert("<script> "+ |
| | | "INSERT INTO platform_gb_channel (channelId, deviceId, platformId, deviceAndChannelId) VALUES" + |
| | | "<foreach collection='channelReducesToAdd' item='item' separator=','> ('${item.channelId}','${item.deviceId}', '${platformId}', '${item.deviceId}_${item.channelId}' )</foreach>" + |
| | | "</script>") |
| | | int addChannels(String platformId, List<ChannelReduce> channelReducesToAdd); |
| | | |
| | | |
| | | @Delete("<script> "+ |
| | | "DELETE FROM platform_gb_channel WHERE deviceAndChannelId in" + |
| | | "<foreach collection='channelReducesToDel' item='item' open='(' separator=',' close=')' > '${item.deviceId}_${item.channelId}'</foreach>" + |
| | | "</script>") |
| | | int delChannelForGB(String platformId, List<ChannelReduce> channelReducesToDel); |
| | | } |
| | |
| | | import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; |
| | | import com.genersoft.iot.vmp.storager.dao.DeviceMapper; |
| | | import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper; |
| | | import com.genersoft.iot.vmp.storager.dao.PatformChannelMapper; |
| | | import com.genersoft.iot.vmp.vmanager.platform.bean.ChannelReduce; |
| | | import com.github.pagehelper.PageHelper; |
| | | import com.github.pagehelper.PageInfo; |
| | |
| | | |
| | | @Autowired |
| | | private IRedisCatchStorage redisCatchStorage; |
| | | |
| | | @Autowired |
| | | private PatformChannelMapper patformChannelMapper; |
| | | |
| | | |
| | | |
| | |
| | | |
| | | |
| | | @Override |
| | | public PageInfo<ChannelReduce> queryChannelListInAll(int page, int count, String query, Boolean online, |
| | | Boolean channelType, String parentChannelId) { |
| | | public PageInfo<ChannelReduce> queryAllChannelList(int page, int count, String query, Boolean online, |
| | | Boolean channelType, String platformId, Boolean inPlatform) { |
| | | PageHelper.startPage(page, count); |
| | | List<ChannelReduce> all = deviceChannelMapper.queryChannelListInAll(query, online, channelType, parentChannelId); |
| | | List<ChannelReduce> all = deviceChannelMapper.queryChannelListInAll(query, online, channelType, platformId, inPlatform); |
| | | return new PageInfo<>(all); |
| | | } |
| | | |
| | | |
| | | @Transactional |
| | | @Override |
| | | public int updateChannelForGB(String platformId, List<ChannelReduce> channelReduces) { |
| | | return 0; |
| | | |
| | | Map<String, ChannelReduce> deviceAndChannels = new HashMap<>(); |
| | | for (ChannelReduce channelReduce : channelReduces) { |
| | | deviceAndChannels.put(channelReduce.getDeviceId() + "_" + channelReduce.getChannelId(), channelReduce); |
| | | } |
| | | List<String> deviceAndChannelList = new ArrayList<>(deviceAndChannels.keySet()); |
| | | // 查询当前已经存在的 |
| | | List<String> relatedPlatformchannels = patformChannelMapper.findChannelRelatedPlatform(platformId, deviceAndChannelList); |
| | | if (relatedPlatformchannels != null) { |
| | | deviceAndChannelList.removeAll(relatedPlatformchannels); |
| | | } |
| | | for (String relatedPlatformchannel : relatedPlatformchannels) { |
| | | deviceAndChannels.remove(relatedPlatformchannel); |
| | | } |
| | | List<ChannelReduce> channelReducesToAdd = new ArrayList<>(deviceAndChannels.values()); |
| | | // 对剩下的数据进行存储 |
| | | int result = 0; |
| | | if (channelReducesToAdd.size() > 0) { |
| | | result = patformChannelMapper.addChannels(platformId, channelReducesToAdd); |
| | | } |
| | | |
| | | return result; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public int delChannelForGB(String platformId, List<ChannelReduce> channelReduces) { |
| | | |
| | | int result = patformChannelMapper.delChannelForGB(platformId, channelReduces); |
| | | |
| | | return result; |
| | | } |
| | | } |
| | |
| | | @RequestMapping("/platforms/channelList") |
| | | @ResponseBody |
| | | public PageInfo<ChannelReduce> channelList(int page, int count, |
| | | @RequestParam(required = false) String platformId, |
| | | @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<ChannelReduce> channelReduces = storager.queryChannelListInAll(page, count, query, online, channelType, null); |
| | | PageInfo<ChannelReduce> 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); |
| | | } |
| | | |
| | | return channelReduces; |
| | | } |
| | |
| | | return new ResponseEntity<>(String.valueOf(result > 0), HttpStatus.OK); |
| | | } |
| | | |
| | | @RequestMapping("/platforms/delChannelForGB") |
| | | @ResponseBody |
| | | public ResponseEntity<String> delChannelForGB(@RequestBody UpdateChannelParam param){ |
| | | |
| | | if (logger.isDebugEnabled()) { |
| | | logger.debug("给上级平台添加国标通道API调用"); |
| | | } |
| | | int result = storager.delChannelForGB(param.getPlatformId(), param.getChannelReduces()); |
| | | |
| | | return new ResponseEntity<>(String.valueOf(result > 0), HttpStatus.OK); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | */ |
| | | private int subCount; |
| | | |
| | | /** |
| | | * 平台Id |
| | | */ |
| | | private String platformId; |
| | | |
| | | |
| | | public String getChannelId() { |
| | | return channelId; |
| | |
| | | public void setHostAddress(String hostAddress) { |
| | | this.hostAddress = hostAddress; |
| | | } |
| | | |
| | | public int getSubCount() { |
| | | return subCount; |
| | | } |
| | | |
| | | public void setSubCount(int subCount) { |
| | | this.subCount = subCount; |
| | | } |
| | | |
| | | public String getPlatformId() { |
| | | return platformId; |
| | | } |
| | | |
| | | public void setPlatformId(String platformId) { |
| | | this.platformId = platformId; |
| | | } |
| | | } |
| | |
| | | spring: |
| | | profiles: |
| | | active: dev |
| | | active: local |
| | |
| | | }; |
| | | }, |
| | | computed: { |
| | | |
| | | |
| | | getcurrentDeviceChannels: function() { |
| | | |
| | | |
| | | } |
| | | }, |
| | | mounted() { |
| | |
| | | getPlatformList: function() { |
| | | let that = this; |
| | | |
| | | this.$axios.get(`/api/platforms/${that.count}/${that.currentPage - 1}`) |
| | | this.$axios.get(`/api/platforms/${that.count}/${that.currentPage}`) |
| | | .then(function (res) { |
| | | that.total = res.data.total; |
| | | that.platformList = res.data.list; |
| | |
| | | if (this.autoList) { |
| | | this.updateLooper = setInterval(this.initData, 5000); |
| | | } |
| | | |
| | | |
| | | }, |
| | | destroyed() { |
| | | this.$destroy('videojs'); |
| | |
| | | <el-dialog title="选择通道" top="2rem" width="70%" :close-on-click-modal="false" :visible.sync="showDialog" :destroy-on-close="true" @close="close()"> |
| | | <el-tabs v-model="tabActiveName" > |
| | | <el-tab-pane label="国标通道" name="gbChannel"> |
| | | |
| | | <el-container> |
| | | <el-main style="background-color: #FFF;"> |
| | | <chooseChannelForGb :chooseChanage=chooseChanage ></chooseChannelForGb> |
| | | <chooseChannelForGb :platformId=platformId ></chooseChannelForGb> |
| | | </el-main> |
| | | <el-footer> |
| | | <el-button size="mini" type="primary" style="float: right" @click="save()">保存</el-button> |
| | | </el-footer> |
| | | </el-container> |
| | | |
| | | |
| | | |
| | | |
| | | </el-tab-pane> |
| | | <el-tab-pane label="直播流通道" name="streamchannel"> |
| | | <!-- TODO --> |
| | |
| | | // }; |
| | | // } |
| | | }, |
| | | created() {}, |
| | | data() { |
| | | return { |
| | | isLoging: false, |
| | |
| | | platformId: "", |
| | | isLoging: false, |
| | | showDialog: false, |
| | | chooseData: [] |
| | | |
| | | chooseData: {} |
| | | |
| | | }; |
| | | }, |
| | | methods: { |
| | | |
| | | openDialog: function (platformId, closeCallback) { |
| | | console.log(platformId) |
| | | this.platformId = platformId |
| | |
| | | }).catch(function (error) { |
| | | console.log(error); |
| | | }); |
| | | }, |
| | | chooseChanage: function(val) { |
| | | console.log(val) |
| | | this.chooseData = val; |
| | | } |
| | | } |
| | | }; |
| | |
| | | <div style="background-color: #FFFFFF; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left;font-size: 14px;"> |
| | | 搜索: <el-input @input="search" style="margin-right: 1rem; width: auto;" size="mini" placeholder="关键字" prefix-icon="el-icon-search" v-model="searchSrt" clearable> </el-input> |
| | | |
| | | 通道类型: <el-select size="mini" @change="search" style="margin-right: 1rem;" v-model="channelType" placeholder="请选择" default-first-option> |
| | | 通道类型: <el-select size="mini" @change="search" style="margin-right: 1rem; width:6rem" v-model="channelType" placeholder="请选择" default-first-option> |
| | | <el-option label="全部" value=""></el-option> |
| | | <el-option label="设备" value="false"></el-option> |
| | | <el-option label="子目录" value="true"></el-option> |
| | | </el-select> |
| | | 在线状态: <el-select size="mini" style="margin-right: 1rem;" @change="search" v-model="online" placeholder="请选择" default-first-option> |
| | | |
| | | 选择状态: <el-select size="mini" style="margin-right: 1rem; width:6rem" v-model="choosed" @change="search" placeholder="请选择" default-first-option> |
| | | <el-option label="全部" value=""></el-option> |
| | | <el-option label="已选择" value="true"></el-option> |
| | | <el-option label="未选择" value="false"></el-option> |
| | | </el-select> |
| | | |
| | | 在线状态: <el-select size="mini" style="margin-right: 1rem; width:6rem" @change="search" v-model="online" placeholder="请选择" default-first-option> |
| | | <el-option label="全部" value=""></el-option> |
| | | <el-option label="在线" value="true"></el-option> |
| | | <el-option label="离线" value="false"></el-option> |
| | | </el-select> |
| | | |
| | | <el-checkbox @change="shareAllCheckedChanage">全部共享</el-checkbox> |
| | | </div> |
| | | <el-table ref="gbChannelsTable" :data="gbChannels" border style="width: 100%" @selection-change="chooseChanage" > |
| | | <el-table-column type="selection" width="55" align="center" fixed> </el-table-column> |
| | | <el-table ref="gbChannelsTable" :data="gbChannels" border style="width: 100%" @selection-change="checkedChanage" > |
| | | <el-table-column type="selection" width="55" align="center" fixed > </el-table-column> |
| | | <el-table-column prop="channelId" label="通道编号" width="210"> |
| | | </el-table-column> |
| | | <el-table-column prop="name" label="通道名称"> |
| | |
| | | // }; |
| | | // } |
| | | }, |
| | | props: ['chooseChanage'], |
| | | props: ['platformId'], |
| | | created() { |
| | | this.initData(); |
| | | }, |
| | | data() { |
| | | return { |
| | | gbChannels: [], |
| | | gbChoosechannel:{}, |
| | | searchSrt: "", |
| | | channelType: "", |
| | | online: "", |
| | | currentPage: parseInt(this.$route.params.page), |
| | | count: parseInt(this.$route.params.count), |
| | | total: 0 |
| | | |
| | | choosed: "", |
| | | currentPage: 0, |
| | | count: 15, |
| | | total: 0, |
| | | eventEnanle: false |
| | | |
| | | }; |
| | | }, |
| | | watch:{ |
| | | platformId(newData, oldData){ |
| | | console.log(newData) |
| | | this.initData() |
| | | |
| | | }, |
| | | }, |
| | | methods: { |
| | | initData: function() { |
| | |
| | | this.initData(); |
| | | }, |
| | | handleSizeChange: function (val) { |
| | | this.count = val; |
| | | this.count = val; |
| | | console.log(val) |
| | | this.initData(); |
| | | |
| | | }, |
| | | rowcheckedChanage: function (val, row) { |
| | | console.log(val) |
| | | console.log(row) |
| | | }, |
| | | checkedChanage: function (val) { |
| | | var that = this; |
| | | if (!that.eventEnanle) { |
| | | return; |
| | | } |
| | | var tabelData = JSON.parse(JSON.stringify(this.$refs.gbChannelsTable.data)); |
| | | console.log("checkedChanage") |
| | | console.log(val) |
| | | |
| | | var newData = {}; |
| | | var addData = []; |
| | | var delData = []; |
| | | if (val.length > 0) { |
| | | for (let i = 0; i < val.length; i++) { |
| | | const element = val[i]; |
| | | var key = element.deviceId + "_" + element.channelId; |
| | | newData[key] = element; |
| | | if (!!!that.gbChoosechannel[key]){ |
| | | addData.push(element) |
| | | }else{ |
| | | delete that.gbChoosechannel[key] |
| | | } |
| | | } |
| | | |
| | | var oldKeys = Object.keys(that.gbChoosechannel); |
| | | if (oldKeys.length > 0) { |
| | | for (let i = 0; i < oldKeys.length; i++) { |
| | | const key = oldKeys[i]; |
| | | delData.push(that.gbChoosechannel[key]) |
| | | } |
| | | } |
| | | |
| | | }else{ |
| | | var oldKeys = Object.keys(that.gbChoosechannel); |
| | | if (oldKeys.length > 0) { |
| | | for (let i = 0; i < oldKeys.length; i++) { |
| | | const key = oldKeys[i]; |
| | | delData.push(that.gbChoosechannel[key]) |
| | | } |
| | | } |
| | | } |
| | | |
| | | that.gbChoosechannel = newData; |
| | | if (Object.keys(addData).length >0) { |
| | | that.$axios({ |
| | | method:"post", |
| | | url:"/api/platforms/updateChannelForGB", |
| | | data:{ |
| | | platformId: that.platformId, |
| | | channelReduces: addData |
| | | } |
| | | }).then((res)=>{ |
| | | console.log("保存成功") |
| | | }).catch(function (error) { |
| | | console.log(error); |
| | | }); |
| | | } |
| | | if (Object.keys(delData).length >0) { |
| | | that.$axios({ |
| | | method:"post", |
| | | url:"/api/platforms/delChannelForGB", |
| | | data:{ |
| | | platformId: that.platformId, |
| | | channelReduces: delData |
| | | } |
| | | }).then((res)=>{ |
| | | console.log("移除成功") |
| | | }).catch(function (error) { |
| | | console.log(error); |
| | | }); |
| | | } |
| | | |
| | | }, |
| | | shareAllCheckedChanage: function (val) { |
| | | this.chooseChanage(null, val) |
| | | }, |
| | | getChannelList: function () { |
| | | let that = this; |
| | | |
| | | this.$axios.get(`/api/platforms/channelList`, { |
| | | params: { |
| | | page: that.currentPage - 1, |
| | | page: that.currentPage, |
| | | count: that.count, |
| | | query: that.searchSrt, |
| | | online: that.online, |
| | | choosed: that.choosed, |
| | | platformId: that.platformId, |
| | | channelType: that.channelType |
| | | } |
| | | }) |
| | | .then(function (res) { |
| | | console.log(res); |
| | | that.total = res.data.total; |
| | | that.gbChannels = res.data.list; |
| | | that.gbChoosechannel = {}; |
| | | // 防止出现表格错位 |
| | | that.$nextTick(() => { |
| | | that.$refs.gbChannelsTable.doLayout(); |
| | | // 默认选中 |
| | | var chooseGBS = []; |
| | | for (let i = 0; i < res.data.list.length; i++) { |
| | | const row = res.data.list[i]; |
| | | console.log(row.platformId) |
| | | if (row.platformId == that.platformId) { |
| | | that.$refs.gbChannelsTable.toggleRowSelection(row, true); |
| | | chooseGBS.push(row) |
| | | that.gbChoosechannel[row.deviceId+ "_" + row.channelId] = row; |
| | | |
| | | } |
| | | } |
| | | that.eventEnanle = true; |
| | | // that.checkedChanage(chooseGBS) |
| | | }) |
| | | console.log(that.gbChoosechannel) |
| | | }) |
| | | .catch(function (error) { |
| | | console.log(error); |