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