Commit f1fae7aac6b125957f6795f692609f2a296aee1a
1 parent
937e5914
增加移除离线设备的功能
Showing
7 changed files
with
70 additions
and
8 deletions
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
| @@ -340,7 +340,7 @@ public class ZLMHttpHookListener { | @@ -340,7 +340,7 @@ public class ZLMHttpHookListener { | ||
| 340 | String app = json.getString("app"); | 340 | String app = json.getString("app"); |
| 341 | String streamId = json.getString("stream"); | 341 | String streamId = json.getString("stream"); |
| 342 | StreamInfo streamInfo = redisCatchStorage.queryPlayByStreamId(streamId); | 342 | StreamInfo streamInfo = redisCatchStorage.queryPlayByStreamId(streamId); |
| 343 | - if ("rtp".equals(app) && streamId.indexOf("gb_play") > -1 && streamInfo == null) { | 343 | + if ("rtp".equals(app) && streamId.contains("gb_play") && streamInfo == null) { |
| 344 | String[] s = streamId.split("_"); | 344 | String[] s = streamId.split("_"); |
| 345 | if (s.length == 4) { | 345 | if (s.length == 4) { |
| 346 | String deviceId = s[2]; | 346 | String deviceId = s[2]; |
src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java
| @@ -104,4 +104,9 @@ public interface IRedisCatchStorage { | @@ -104,4 +104,9 @@ public interface IRedisCatchStorage { | ||
| 104 | */ | 104 | */ |
| 105 | boolean isChannelSendingRTP(String channelId); | 105 | boolean isChannelSendingRTP(String channelId); |
| 106 | 106 | ||
| 107 | + /** | ||
| 108 | + * 清空某个设备的所有缓存 | ||
| 109 | + * @param deviceId 设备ID | ||
| 110 | + */ | ||
| 111 | + void clearCatchByDeviceId(String deviceId); | ||
| 107 | } | 112 | } |
src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java
| @@ -38,6 +38,11 @@ public interface PlatformChannelMapper { | @@ -38,6 +38,11 @@ public interface PlatformChannelMapper { | ||
| 38 | int delChannelForGB(String platformId, List<ChannelReduce> channelReducesToDel); | 38 | int delChannelForGB(String platformId, List<ChannelReduce> channelReducesToDel); |
| 39 | 39 | ||
| 40 | @Delete("<script> "+ | 40 | @Delete("<script> "+ |
| 41 | + "DELETE FROM platform_gb_channel WHERE deviceId='${deviceId}' " + | ||
| 42 | + "</script>") | ||
| 43 | + int delChannelForDeviceId(String deviceId); | ||
| 44 | + | ||
| 45 | + @Delete("<script> "+ | ||
| 41 | "DELETE FROM platform_gb_channel WHERE platformId='${platformId}'" + | 46 | "DELETE FROM platform_gb_channel WHERE platformId='${platformId}'" + |
| 42 | "</script>") | 47 | "</script>") |
| 43 | int cleanChannelForGB(String platformId); | 48 | int cleanChannelForGB(String platformId); |
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
| @@ -259,4 +259,22 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | @@ -259,4 +259,22 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage { | ||
| 259 | } | 259 | } |
| 260 | } | 260 | } |
| 261 | 261 | ||
| 262 | + @Override | ||
| 263 | + public void clearCatchByDeviceId(String deviceId) { | ||
| 264 | + List<Object> playLeys = redis.scan(String.format("%S_*_%s_*", VideoManagerConstants.PLAYER_PREFIX, | ||
| 265 | + deviceId)); | ||
| 266 | + if (playLeys.size() > 0) { | ||
| 267 | + for (Object key : playLeys) { | ||
| 268 | + redis.del(key.toString()); | ||
| 269 | + } | ||
| 270 | + } | ||
| 271 | + | ||
| 272 | + List<Object> playBackers = redis.scan(String.format("%S_*_%s_*", VideoManagerConstants.PLAY_BLACK_PREFIX, | ||
| 273 | + deviceId)); | ||
| 274 | + if (playBackers.size() > 0) { | ||
| 275 | + for (Object key : playBackers) { | ||
| 276 | + redis.del(key.toString()); | ||
| 277 | + } | ||
| 278 | + } | ||
| 279 | + } | ||
| 262 | } | 280 | } |
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
| @@ -195,9 +195,22 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager { | @@ -195,9 +195,22 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager { | ||
| 195 | */ | 195 | */ |
| 196 | @Override | 196 | @Override |
| 197 | public boolean delete(String deviceId) { | 197 | public boolean delete(String deviceId) { |
| 198 | - int result = deviceMapper.del(deviceId); | ||
| 199 | - | ||
| 200 | - return result > 0; | 198 | + TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); |
| 199 | + boolean result = false; | ||
| 200 | + try { | ||
| 201 | + if (platformChannelMapper.delChannelForDeviceId(deviceId) <0 // 删除与国标平台的关联 | ||
| 202 | + || deviceChannelMapper.cleanChannelsByDeviceId(deviceId) < 0 // 删除他的通道 | ||
| 203 | + || deviceMapper.del(deviceId) < 0 // 移除设备信息 | ||
| 204 | + ) { | ||
| 205 | + //事务回滚 | ||
| 206 | + dataSourceTransactionManager.rollback(transactionStatus); | ||
| 207 | + } | ||
| 208 | + result = true; | ||
| 209 | + dataSourceTransactionManager.commit(transactionStatus); //手动提交 | ||
| 210 | + }catch (Exception e) { | ||
| 211 | + dataSourceTransactionManager.rollback(transactionStatus); | ||
| 212 | + } | ||
| 213 | + return result; | ||
| 201 | } | 214 | } |
| 202 | 215 | ||
| 203 | /** | 216 | /** |
| @@ -550,4 +563,6 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager { | @@ -550,4 +563,6 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager { | ||
| 550 | public void mediaOutline(String app, String streamId) { | 563 | public void mediaOutline(String app, String streamId) { |
| 551 | gbStreamMapper.setStatus(app, streamId, false); | 564 | gbStreamMapper.setStatus(app, streamId, false); |
| 552 | } | 565 | } |
| 566 | + | ||
| 567 | + | ||
| 553 | } | 568 | } |
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
| @@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.vmanager.gb28181.device; | @@ -2,6 +2,7 @@ package com.genersoft.iot.vmp.vmanager.gb28181.device; | ||
| 2 | 2 | ||
| 3 | import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; | 3 | import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; |
| 4 | import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; | 4 | import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; |
| 5 | +import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | ||
| 5 | import com.github.pagehelper.PageInfo; | 6 | import com.github.pagehelper.PageInfo; |
| 6 | import io.swagger.annotations.*; | 7 | import io.swagger.annotations.*; |
| 7 | import org.slf4j.Logger; | 8 | import org.slf4j.Logger; |
| @@ -33,6 +34,9 @@ public class DeviceQuery { | @@ -33,6 +34,9 @@ public class DeviceQuery { | ||
| 33 | 34 | ||
| 34 | @Autowired | 35 | @Autowired |
| 35 | private IVideoManagerStorager storager; | 36 | private IVideoManagerStorager storager; |
| 37 | + | ||
| 38 | + @Autowired | ||
| 39 | + private IRedisCatchStorage redisCatchStorage; | ||
| 36 | 40 | ||
| 37 | @Autowired | 41 | @Autowired |
| 38 | private SIPCommander cmder; | 42 | private SIPCommander cmder; |
| @@ -177,8 +181,10 @@ public class DeviceQuery { | @@ -177,8 +181,10 @@ public class DeviceQuery { | ||
| 177 | if (offLineDetector.isOnline(deviceId)) { | 181 | if (offLineDetector.isOnline(deviceId)) { |
| 178 | return new ResponseEntity<String>("不允许删除在线设备!", HttpStatus.NOT_ACCEPTABLE); | 182 | return new ResponseEntity<String>("不允许删除在线设备!", HttpStatus.NOT_ACCEPTABLE); |
| 179 | } | 183 | } |
| 184 | + // 清除redis记录 | ||
| 180 | boolean isSuccess = storager.delete(deviceId); | 185 | boolean isSuccess = storager.delete(deviceId); |
| 181 | if (isSuccess) { | 186 | if (isSuccess) { |
| 187 | + redisCatchStorage.clearCatchByDeviceId(deviceId); | ||
| 182 | JSONObject json = new JSONObject(); | 188 | JSONObject json = new JSONObject(); |
| 183 | json.put("deviceId", deviceId); | 189 | json.put("deviceId", deviceId); |
| 184 | return new ResponseEntity<>(json.toString(),HttpStatus.OK); | 190 | return new ResponseEntity<>(json.toString(),HttpStatus.OK); |
web_src/src/components/DeviceList.vue
| @@ -51,11 +51,12 @@ | @@ -51,11 +51,12 @@ | ||
| 51 | 51 | ||
| 52 | <el-table-column label="操作" width="360" align="center" fixed="right"> | 52 | <el-table-column label="操作" width="360" align="center" fixed="right"> |
| 53 | <template slot-scope="scope"> | 53 | <template slot-scope="scope"> |
| 54 | - <el-button size="mini" :ref="scope.row.deviceId + 'refbtn' " icon="el-icon-refresh" @click="refDevice(scope.row)">刷新</el-button> | 54 | + <el-button size="mini" :ref="scope.row.deviceId + 'refbtn' " v-if="scope.row.online!=0" icon="el-icon-refresh" @click="refDevice(scope.row)">刷新</el-button> |
| 55 | <el-button-group> | 55 | <el-button-group> |
| 56 | - <el-button size="mini" icon="el-icon-video-camera-solid" v-bind:disabled="scope.row.online==0" type="primary" @click="showChannelList(scope.row)">通道</el-button> | ||
| 57 | - <el-button size="mini" icon="el-icon-location" v-bind:disabled="scope.row.online==0" type="primary" @click="showDevicePosition(scope.row)">定位</el-button> | ||
| 58 | - <el-button size="mini" icon="el-icon-s-tools" v-bind:disabled="scope.row.online==0" type="primary">控制</el-button> | 56 | + <el-button size="mini" icon="el-icon-video-camera-solid" v-bind:disabled="scope.row.online==0" type="primary" @click="showChannelList(scope.row)">通道</el-button> |
| 57 | + <el-button size="mini" icon="el-icon-location" v-bind:disabled="scope.row.online==0" type="primary" @click="showDevicePosition(scope.row)">定位</el-button> | ||
| 58 | + <el-button size="mini" icon="el-icon-s-tools" v-bind:disabled="scope.row.online==0" type="primary">控制</el-button> | ||
| 59 | + <el-button size="mini" icon="el-icon-delete" type="danger" v-if="scope.row.online==0" @click="deleteDevice(scope.row)">删除</el-button> | ||
| 59 | </el-button-group> | 60 | </el-button-group> |
| 60 | </template> | 61 | </template> |
| 61 | </el-table-column> | 62 | </el-table-column> |
| @@ -155,6 +156,18 @@ | @@ -155,6 +156,18 @@ | ||
| 155 | }); | 156 | }); |
| 156 | 157 | ||
| 157 | }, | 158 | }, |
| 159 | + deleteDevice: function(row) { | ||
| 160 | + let that = this; | ||
| 161 | + this.$axios({ | ||
| 162 | + method: 'delete', | ||
| 163 | + url:`/api/device/query/devices/${row.deviceId}/delete` | ||
| 164 | + }).then((res)=>{ | ||
| 165 | + this.getDeviceList(); | ||
| 166 | + }).catch((error) =>{ | ||
| 167 | + console.log(error); | ||
| 168 | + }); | ||
| 169 | + | ||
| 170 | + }, | ||
| 158 | showChannelList: function(row) { | 171 | showChannelList: function(row) { |
| 159 | console.log(JSON.stringify(row)) | 172 | console.log(JSON.stringify(row)) |
| 160 | this.$router.push(`/channelList/${row.deviceId}/0/15/1`); | 173 | this.$router.push(`/channelList/${row.deviceId}/0/15/1`); |