From f1fae7aac6b125957f6795f692609f2a296aee1a Mon Sep 17 00:00:00 2001 From: panlinlin <648540858@qq.com> Date: 星期五, 16 四月 2021 10:59:26 +0800 Subject: [PATCH] 增加移除离线设备的功能 --- web_src/src/components/DeviceList.vue | 21 ++++++++-- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 2 src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java | 18 +++++++++ src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java | 5 ++ src/main/java/com/genersoft/iot/vmp/storager/dao/PlatformChannelMapper.java | 5 ++ src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java | 6 +++ src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java | 21 +++++++++- 7 files changed, 70 insertions(+), 8 deletions(-) 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 7db5714..2a76f26 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 @@ -340,7 +340,7 @@ String app = json.getString("app"); String streamId = json.getString("stream"); StreamInfo streamInfo = redisCatchStorage.queryPlayByStreamId(streamId); - if ("rtp".equals(app) && streamId.indexOf("gb_play") > -1 && streamInfo == null) { + if ("rtp".equals(app) && streamId.contains("gb_play") && streamInfo == null) { String[] s = streamId.split("_"); if (s.length == 4) { String deviceId = s[2]; diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java index c1b42bc..d0d07f7 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/IRedisCatchStorage.java @@ -104,4 +104,9 @@ */ boolean isChannelSendingRTP(String channelId); + /** + * 娓呯┖鏌愪釜璁惧鐨勬墍鏈夌紦瀛� + * @param deviceId 璁惧ID + */ + void clearCatchByDeviceId(String deviceId); } 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 db2bb77..1781a4a 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 @@ -38,6 +38,11 @@ int delChannelForGB(String platformId, List<ChannelReduce> channelReducesToDel); @Delete("<script> "+ + "DELETE FROM platform_gb_channel WHERE deviceId='${deviceId}' " + + "</script>") + int delChannelForDeviceId(String deviceId); + + @Delete("<script> "+ "DELETE FROM platform_gb_channel WHERE platformId='${platformId}'" + "</script>") int cleanChannelForGB(String platformId); diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java index d1d6d20..3417acf 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java @@ -259,4 +259,22 @@ } } + @Override + public void clearCatchByDeviceId(String deviceId) { + List<Object> playLeys = redis.scan(String.format("%S_*_%s_*", VideoManagerConstants.PLAYER_PREFIX, + deviceId)); + if (playLeys.size() > 0) { + for (Object key : playLeys) { + redis.del(key.toString()); + } + } + + List<Object> playBackers = redis.scan(String.format("%S_*_%s_*", VideoManagerConstants.PLAY_BLACK_PREFIX, + deviceId)); + if (playBackers.size() > 0) { + for (Object key : playBackers) { + redis.del(key.toString()); + } + } + } } 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 472c7fd..770fa5a 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 @@ -195,9 +195,22 @@ */ @Override public boolean delete(String deviceId) { - int result = deviceMapper.del(deviceId); - - return result > 0; + TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); + boolean result = false; + try { + if (platformChannelMapper.delChannelForDeviceId(deviceId) <0 // 鍒犻櫎涓庡浗鏍囧钩鍙扮殑鍏宠仈 + || deviceChannelMapper.cleanChannelsByDeviceId(deviceId) < 0 // 鍒犻櫎浠栫殑閫氶亾 + || deviceMapper.del(deviceId) < 0 // 绉婚櫎璁惧淇℃伅 + ) { + //浜嬪姟鍥炴粴 + dataSourceTransactionManager.rollback(transactionStatus); + } + result = true; + dataSourceTransactionManager.commit(transactionStatus); //鎵嬪姩鎻愪氦 + }catch (Exception e) { + dataSourceTransactionManager.rollback(transactionStatus); + } + return result; } /** @@ -550,4 +563,6 @@ public void mediaOutline(String app, String streamId) { gbStreamMapper.setStatus(app, streamId, false); } + + } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java index e243d23..c40a493 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java @@ -2,6 +2,7 @@ import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; +import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.github.pagehelper.PageInfo; import io.swagger.annotations.*; import org.slf4j.Logger; @@ -33,6 +34,9 @@ @Autowired private IVideoManagerStorager storager; + + @Autowired + private IRedisCatchStorage redisCatchStorage; @Autowired private SIPCommander cmder; @@ -177,8 +181,10 @@ if (offLineDetector.isOnline(deviceId)) { return new ResponseEntity<String>("涓嶅厑璁稿垹闄ゅ湪绾胯澶囷紒", HttpStatus.NOT_ACCEPTABLE); } + // 娓呴櫎redis璁板綍 boolean isSuccess = storager.delete(deviceId); if (isSuccess) { + redisCatchStorage.clearCatchByDeviceId(deviceId); JSONObject json = new JSONObject(); json.put("deviceId", deviceId); return new ResponseEntity<>(json.toString(),HttpStatus.OK); diff --git a/web_src/src/components/DeviceList.vue b/web_src/src/components/DeviceList.vue index cdc25bc..38a063e 100644 --- a/web_src/src/components/DeviceList.vue +++ b/web_src/src/components/DeviceList.vue @@ -51,11 +51,12 @@ <el-table-column label="鎿嶄綔" width="360" align="center" fixed="right"> <template slot-scope="scope"> - <el-button size="mini" :ref="scope.row.deviceId + 'refbtn' " icon="el-icon-refresh" @click="refDevice(scope.row)">鍒锋柊</el-button> + <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> <el-button-group> - <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> - <el-button size="mini" icon="el-icon-location" v-bind:disabled="scope.row.online==0" type="primary" @click="showDevicePosition(scope.row)">瀹氫綅</el-button> - <el-button size="mini" icon="el-icon-s-tools" v-bind:disabled="scope.row.online==0" type="primary">鎺у埗</el-button> + <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> + <el-button size="mini" icon="el-icon-location" v-bind:disabled="scope.row.online==0" type="primary" @click="showDevicePosition(scope.row)">瀹氫綅</el-button> + <el-button size="mini" icon="el-icon-s-tools" v-bind:disabled="scope.row.online==0" type="primary">鎺у埗</el-button> + <el-button size="mini" icon="el-icon-delete" type="danger" v-if="scope.row.online==0" @click="deleteDevice(scope.row)">鍒犻櫎</el-button> </el-button-group> </template> </el-table-column> @@ -155,6 +156,18 @@ }); }, + deleteDevice: function(row) { + let that = this; + this.$axios({ + method: 'delete', + url:`/api/device/query/devices/${row.deviceId}/delete` + }).then((res)=>{ + this.getDeviceList(); + }).catch((error) =>{ + console.log(error); + }); + + }, showChannelList: function(row) { console.log(JSON.stringify(row)) this.$router.push(`/channelList/${row.deviceId}/0/15/1`); -- Gitblit v1.8.0