diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceQuery.java
index 226e51d8..30720b36 100755
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceQuery.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/DeviceQuery.java
@@ -489,4 +489,21 @@ public class DeviceQuery {
public DeviceChannel getRawChannel(int id) {
return deviceChannelService.getRawChannel(id);
}
+
+ @GetMapping("/subscribe/catalog")
+ @Operation(summary = "开启/关闭目录订阅")
+ @Parameter(name = "id", description = "通道的Id", required = true)
+ @Parameter(name = "cycle", description = "订阅周期", required = true)
+ public void subscribeCatalog(int id, int cycle) {
+ deviceService.subscribeCatalog(id, cycle);
+ }
+
+ @GetMapping("/subscribe/mobile-position")
+ @Operation(summary = "开启/关闭移动位置订阅")
+ @Parameter(name = "id", description = "通道的Id", required = true)
+ @Parameter(name = "cycle", description = "订阅周期", required = true)
+ @Parameter(name = "interval", description = "报送间隔", required = true)
+ public void subscribeMobilePosition(int id, int cycle, int interval) {
+ deviceService.subscribeMobilePosition(id, cycle, interval);
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceMapper.java
index e1ac39e2..06f5317a 100755
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceMapper.java
@@ -284,9 +284,8 @@ public interface DeviceMapper {
@Update(value = {" "})
@@ -391,4 +390,17 @@ public interface DeviceMapper {
@Select("select wd.* from wvp_device wd left join wvp_device_channel wdc on wdc.data_type = #{dataType} and wd.id = wdc.data_device_id where wdc.device_id = #{channelDeviceId}")
Device getDeviceBySourceChannelDeviceId(@Param("dataType") Integer dataType, @Param("channelDeviceId") String channelDeviceId);
+ @Update(value = {" "})
+ void updateSubscribeCatalog(Device device);
+
+ @Update(value = {" "})
+ void updateSubscribeMobilePosition(Device device);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceChannelService.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceChannelService.java
index 8ef7ee52..fb1e28e7 100755
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceChannelService.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceChannelService.java
@@ -128,4 +128,5 @@ public interface IDeviceChannelService {
void queryRecordInfo(Device device, DeviceChannel channel, String startTime, String endTime, ErrorCallback object);
void queryRecordInfo(CommonGBChannel channel, String startTime, String endTime, ErrorCallback object);
+
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceService.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceService.java
index 43a965f4..d18b9423 100755
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceService.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceService.java
@@ -160,4 +160,9 @@ public interface IDeviceService {
Device getDeviceByChannelId(Integer channelId);
Device getDeviceBySourceChannelDeviceId(String requesterId);
+
+ void subscribeCatalog(int id, int cycle);
+
+ void subscribeMobilePosition(int id, int cycle, int interval);
+
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java
index 7508f513..1b787cb0 100755
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceServiceImpl.java
@@ -12,7 +12,6 @@ import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.dao.DeviceChannelMapper;
import com.genersoft.iot.vmp.gb28181.dao.DeviceMapper;
import com.genersoft.iot.vmp.gb28181.dao.PlatformChannelMapper;
-import com.genersoft.iot.vmp.gb28181.service.IDeviceChannelService;
import com.genersoft.iot.vmp.gb28181.service.IDeviceService;
import com.genersoft.iot.vmp.gb28181.service.IInviteStreamService;
import com.genersoft.iot.vmp.gb28181.session.AudioBroadcastManager;
@@ -38,6 +37,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
import javax.sip.InvalidArgumentException;
import javax.sip.SipException;
@@ -269,6 +269,9 @@ public class DeviceServiceImpl implements IDeviceService {
@Override
public boolean removeCatalogSubscribe(Device device, CommonCallback callback) {
if (device == null || device.getSubscribeCycleForCatalog() < 0) {
+ if (callback != null) {
+ callback.run(false);
+ }
return false;
}
log.info("[移除目录订阅]: {}", device.getDeviceId());
@@ -278,6 +281,16 @@ public class DeviceServiceImpl implements IDeviceService {
if (runnable instanceof ISubscribeTask) {
ISubscribeTask subscribeTask = (ISubscribeTask) runnable;
subscribeTask.stop(callback);
+ }else {
+ log.info("[移除目录订阅]失败,未找到订阅任务 : {}", device.getDeviceId());
+ if (callback != null) {
+ callback.run(false);
+ }
+ }
+ }else {
+ log.info("[移除移动位置订阅]失败,设备已经离线 : {}", device.getDeviceId());
+ if (callback != null) {
+ callback.run(false);
}
}
dynamicTask.stop(taskKey);
@@ -303,6 +316,9 @@ public class DeviceServiceImpl implements IDeviceService {
@Override
public boolean removeMobilePositionSubscribe(Device device, CommonCallback callback) {
if (device == null || device.getSubscribeCycleForCatalog() < 0) {
+ if (callback != null) {
+ callback.run(false);
+ }
return false;
}
log.info("[移除移动位置订阅]: {}", device.getDeviceId());
@@ -312,6 +328,16 @@ public class DeviceServiceImpl implements IDeviceService {
if (runnable instanceof ISubscribeTask) {
ISubscribeTask subscribeTask = (ISubscribeTask) runnable;
subscribeTask.stop(callback);
+ }else {
+ log.info("[移除移动位置订阅]失败,未找到订阅任务 : {}", device.getDeviceId());
+ if (callback != null) {
+ callback.run(false);
+ }
+ }
+ }else {
+ log.info("[移除移动位置订阅]失败,设备已经离线 : {}", device.getDeviceId());
+ if (callback != null) {
+ callback.run(false);
}
}
dynamicTask.stop(taskKey);
@@ -427,64 +453,12 @@ public class DeviceServiceImpl implements IDeviceService {
@Override
public void updateCustomDevice(Device device) {
+ // 订阅状态的修改使用一个单独方法控制,此处不再进行状态修改
Device deviceInStore = deviceMapper.query(device.getId());
if (deviceInStore == null) {
log.warn("更新设备时未找到设备信息");
return;
}
- // 目录订阅相关的信息
- if (deviceInStore.getSubscribeCycleForCatalog() != device.getSubscribeCycleForCatalog()) {
- if (device.getSubscribeCycleForCatalog() > 0) {
- // 若已开启订阅,但订阅周期不同,则先取消
- if (deviceInStore.getSubscribeCycleForCatalog() != 0) {
- removeCatalogSubscribe(deviceInStore, result->{
- // 开启订阅
- deviceInStore.setSubscribeCycleForCatalog(device.getSubscribeCycleForCatalog());
- addCatalogSubscribe(deviceInStore);
- // 因为是异步执行,需要在这里更新下数据
- deviceMapper.updateCustom(deviceInStore);
- redisCatchStorage.updateDevice(deviceInStore);
- });
- }else {
- // 开启订阅
- deviceInStore.setSubscribeCycleForCatalog(device.getSubscribeCycleForCatalog());
- addCatalogSubscribe(deviceInStore);
- }
-
- }else if (device.getSubscribeCycleForCatalog() == 0) {
- // 取消订阅
- deviceInStore.setSubscribeCycleForCatalog(0);
- removeCatalogSubscribe(deviceInStore, null);
- }
- }
- // 移动位置订阅相关的信息
- if (deviceInStore.getSubscribeCycleForMobilePosition() != device.getSubscribeCycleForMobilePosition()) {
- if (device.getSubscribeCycleForMobilePosition() > 0) {
- // 若已开启订阅,但订阅周期不同,则先取消
- if (deviceInStore.getSubscribeCycleForMobilePosition() != 0) {
- removeMobilePositionSubscribe(deviceInStore, result->{
- // 开启订阅
- deviceInStore.setSubscribeCycleForMobilePosition(device.getSubscribeCycleForMobilePosition());
- deviceInStore.setMobilePositionSubmissionInterval(device.getMobilePositionSubmissionInterval());
- addMobilePositionSubscribe(deviceInStore);
- // 因为是异步执行,需要在这里更新下数据
- deviceMapper.updateCustom(deviceInStore);
- redisCatchStorage.updateDevice(deviceInStore);
- });
- }else {
- // 开启订阅
- deviceInStore.setSubscribeCycleForMobilePosition(device.getSubscribeCycleForMobilePosition());
- deviceInStore.setMobilePositionSubmissionInterval(device.getMobilePositionSubmissionInterval());
- addMobilePositionSubscribe(deviceInStore);
- }
-
- }else if (device.getSubscribeCycleForMobilePosition() == 0) {
- // 取消订阅
- deviceInStore.setSubscribeCycleForMobilePosition(0);
- deviceInStore.setMobilePositionSubmissionInterval(0);
- removeMobilePositionSubscribe(deviceInStore, null);
- }
- }
if (deviceInStore.getGeoCoordSys() != null) {
// 坐标系变化,需要重新计算GCJ02坐标和WGS84坐标
if (!deviceInStore.getGeoCoordSys().equals(device.getGeoCoordSys())) {
@@ -553,4 +527,68 @@ public class DeviceServiceImpl implements IDeviceService {
public Device getDeviceBySourceChannelDeviceId(String channelId) {
return deviceMapper.getDeviceBySourceChannelDeviceId(ChannelDataType.GB28181.value,channelId);
}
+
+ @Override
+ public void subscribeCatalog(int id, int cycle) {
+ Device device = deviceMapper.query(id);
+ Assert.notNull(device, "未找到设备");
+ if (device.getSubscribeCycleForCatalog() == cycle) {
+ return;
+ }
+
+ // 目录订阅相关的信息
+ if (device.getSubscribeCycleForCatalog() > 0) {
+ // 订阅周期不同,则先取消
+ removeCatalogSubscribe(device, result->{
+ device.setSubscribeCycleForCatalog(cycle);
+ if (cycle > 0) {
+ // 开启订阅
+ addCatalogSubscribe(device);
+ }
+ // 因为是异步执行,需要在这里更新下数据
+ deviceMapper.updateSubscribeCatalog(device);
+ redisCatchStorage.updateDevice(device);
+ });
+ }else {
+ // 开启订阅
+ device.setSubscribeCycleForCatalog(cycle);
+ addCatalogSubscribe(device);
+ deviceMapper.updateSubscribeCatalog(device);
+ redisCatchStorage.updateDevice(device);
+ }
+ }
+
+ @Override
+ public void subscribeMobilePosition(int id, int cycle, int interval) {
+ Device device = deviceMapper.query(id);
+ Assert.notNull(device, "未找到设备");
+ if (device.getSubscribeCycleForMobilePosition() == cycle) {
+ return;
+ }
+
+ // 目录订阅相关的信息
+ if (device.getSubscribeCycleForMobilePosition() > 0) {
+ // 订阅周期已经开启,则先取消
+ removeMobilePositionSubscribe(device, result->{
+ // 开启订阅
+ device.setSubscribeCycleForMobilePosition(cycle);
+ device.setMobilePositionSubmissionInterval(interval);
+ if (cycle > 0) {
+ addMobilePositionSubscribe(device);
+ }
+ // 因为是异步执行,需要在这里更新下数据
+ deviceMapper.updateSubscribeMobilePosition(device);
+ redisCatchStorage.updateDevice(device);
+ });
+ }else {
+ // 订阅未开启
+ device.setSubscribeCycleForMobilePosition(cycle);
+ device.setMobilePositionSubmissionInterval(interval);
+ // 开启订阅
+ addMobilePositionSubscribe(device);
+ // 因为是异步执行,需要在这里更新下数据
+ deviceMapper.updateSubscribeMobilePosition(device);
+ redisCatchStorage.updateDevice(device);
+ }
+ }
}
diff --git a/web_src/src/components/DeviceList.vue b/web_src/src/components/DeviceList.vue
index f9240f64..62b18449 100755
--- a/web_src/src/components/DeviceList.vue
+++ b/web_src/src/components/DeviceList.vue
@@ -4,10 +4,10 @@
设备列表
-
+
-
+
@@ -35,9 +35,9 @@
-
+
-
+
@@ -48,9 +48,12 @@
-
+
+
+ {{scope.row.channelCount}}
+
-
+
在线
@@ -59,13 +62,20 @@
-
-
-
-
-
+
- subscribeForCatalog(scope.row.id, e)">
+ subscribeForMobilePosition(scope.row.id, e)">
+
+
+
+
+
+
+
+
+
+ 刷新
@@ -75,13 +85,13 @@
编辑
- 删除
-
{moreClick(command, scope.row)}">
操作
-
+
+
+ 删除
布防
@@ -161,6 +171,8 @@ export default {
},
methods: {
initData: function () {
+ this.currentPage = 1;
+ this.total= 0;
// 获取平台信息
this.showInfo(false)
this.getDeviceList();
@@ -346,6 +358,8 @@ export default {
this.setGuard(itemData)
}else if (command === "resetGuard") {
this.resetGuard(itemData)
+ }else if (command === "delete") {
+ this.deleteDevice(itemData)
}
},
setGuard: function (itemData) {
@@ -394,6 +408,67 @@ export default {
})
});
},
+ subscribeForCatalog: function (data, value) {
+ console.log(data)
+ console.log(value)
+ this.$axios({
+ method: 'get',
+ url: `/api/device/query/subscribe/catalog`,
+ params: {
+ id: data,
+ cycle: value?60:0
+ }
+ }).then( (res)=> {
+ if (res.data.code === 0) {
+ this.$message.success({
+ showClose: true,
+ message: value?"订阅成功":"取消订阅成功"
+ })
+ }else {
+ this.$message.error({
+ showClose: true,
+ message: res.data.msg
+ })
+ }
+ }).catch( (error)=> {
+ this.$message.error({
+ showClose: true,
+ message: error.message
+ })
+ });
+
+ },
+ subscribeForMobilePosition: function (data, value) {
+ console.log(data)
+ console.log(value)
+ this.$axios({
+ method: 'get',
+ url: `/api/device/query/subscribe/mobile-position`,
+ params: {
+ id: data,
+ cycle: value?60:0,
+ interval: value?5:0
+ }
+ }).then( (res)=> {
+ if (res.data.code === 0) {
+ this.$message.success({
+ showClose: true,
+ message: value?"订阅成功":"取消订阅成功"
+ })
+ }else {
+ this.$message.error({
+ showClose: true,
+ message: res.data.msg
+ })
+ }
+ }).catch( (error)=> {
+ this.$message.error({
+ showClose: true,
+ message: error.message
+ })
+ });
+
+ },
}
};
diff --git a/web_src/src/components/GBRecordDetail.vue b/web_src/src/components/GBRecordDetail.vue
index 288bfe19..9cc853ae 100755
--- a/web_src/src/components/GBRecordDetail.vue
+++ b/web_src/src/components/GBRecordDetail.vue
@@ -64,7 +64,7 @@
倍速
-
+
0.25倍速
0.5倍速
1倍速
diff --git a/web_src/src/components/channelList.vue b/web_src/src/components/channelList.vue
index 0f4a4c67..db2ab937 100755
--- a/web_src/src/components/channelList.vue
+++ b/web_src/src/components/channelList.vue
@@ -141,7 +141,7 @@
更多
-
+
设备录像
diff --git a/web_src/src/components/dialog/deviceEdit.vue b/web_src/src/components/dialog/deviceEdit.vue
index a4cee372..860d9b73 100755
--- a/web_src/src/components/dialog/deviceEdit.vue
+++ b/web_src/src/components/dialog/deviceEdit.vue
@@ -43,21 +43,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -122,12 +107,6 @@ export default {
onSubmit: function () {
console.log("onSubmit");
console.log(this.form);
- this.form.subscribeCycleForCatalog = this.form.subscribeCycleForCatalog||0
- this.form.subscribeCycleForMobilePosition = this.form.subscribeCycleForMobilePosition||0
- this.form.mobilePositionSubmissionInterval = this.form.mobilePositionSubmissionInterval||0
- if (this.form.mobilePositionSubmissionInterval === 0) {
- this.form.mobilePositionSubmissionInterval = 5
- }
this.$axios({
method: 'post',
url:`/api/device/query/device/${this.isEdit?'update':'add'}/`,
diff --git a/web_src/src/components/dialog/devicePlayer.vue b/web_src/src/components/dialog/devicePlayer.vue
index 9644d1c8..22f2da6d 100755
--- a/web_src/src/components/dialog/devicePlayer.vue
+++ b/web_src/src/components/dialog/devicePlayer.vue
@@ -57,7 +57,7 @@
更多地址
-
+
FLV:
{{ streamInfo.flv }}