From fc77b3f819b3143387b90a4d631725e7c6513ecd Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 01 十二月 2023 15:49:18 +0800
Subject: [PATCH] 支持重新接入zlm的时候检查拉流代理数据是否异常,异常数据自动移除
---
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java | 124 +++++++++++++++++++++++++++++++++++++----
1 files changed, 112 insertions(+), 12 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
old mode 100644
new mode 100755
index 99ad3de..57de631
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
@@ -1,14 +1,18 @@
package com.genersoft.iot.vmp.service.impl;
-import com.genersoft.iot.vmp.common.StreamInfo;
+import com.genersoft.iot.vmp.common.InviteInfo;
+import com.genersoft.iot.vmp.common.InviteSessionType;
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.gb28181.utils.Coordtransform;
import com.genersoft.iot.vmp.service.IDeviceChannelService;
+import com.genersoft.iot.vmp.service.IInviteStreamService;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;
import com.genersoft.iot.vmp.storager.dao.DeviceMapper;
import com.genersoft.iot.vmp.utils.DateUtil;
+import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo;
+import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -17,6 +21,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
/**
* @author lin
@@ -28,6 +33,9 @@
@Autowired
private IRedisCatchStorage redisCatchStorage;
+
+ @Autowired
+ private IInviteStreamService inviteStreamService;
@Autowired
private DeviceChannelMapper channelMapper;
@@ -73,9 +81,10 @@
public void updateChannel(String deviceId, DeviceChannel channel) {
String channelId = channel.getChannelId();
channel.setDeviceId(deviceId);
- StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channelId);
- if (streamInfo != null) {
- channel.setStreamId(streamInfo.getStream());
+// StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channelId);
+ InviteInfo inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, deviceId, channelId);
+ if (inviteInfo != null && inviteInfo.getStreamInfo() != null) {
+ channel.setStreamId(inviteInfo.getStreamInfo().getStream());
}
String now = DateUtil.getNow();
channel.setUpdateTime(now);
@@ -97,13 +106,13 @@
HashMap<String, DeviceChannel> channelsInStore = new HashMap<>();
Device device = deviceMapper.getDeviceByDeviceId(deviceId);
if (channels != null && channels.size() > 0) {
- List<DeviceChannel> channelList = channelMapper.queryChannels(deviceId, null, null, null, null);
+ List<DeviceChannel> channelList = channelMapper.queryChannels(deviceId, null, null, null, null,null);
if (channelList.size() == 0) {
for (DeviceChannel channel : channels) {
channel.setDeviceId(deviceId);
- StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channel.getChannelId());
- if (streamInfo != null) {
- channel.setStreamId(streamInfo.getStream());
+ InviteInfo inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, deviceId, channel.getChannelId());
+ if (inviteInfo != null && inviteInfo.getStreamInfo() != null) {
+ channel.setStreamId(inviteInfo.getStreamInfo().getStream());
}
String now = DateUtil.getNow();
channel.setUpdateTime(now);
@@ -117,9 +126,9 @@
}
for (DeviceChannel channel : channels) {
channel.setDeviceId(deviceId);
- StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channel.getChannelId());
- if (streamInfo != null) {
- channel.setStreamId(streamInfo.getStream());
+ InviteInfo inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, deviceId, channel.getChannelId());
+ if (inviteInfo != null && inviteInfo.getStreamInfo() != null) {
+ channel.setStreamId(inviteInfo.getStreamInfo().getStream());
}
String now = DateUtil.getNow();
channel.setUpdateTime(now);
@@ -132,7 +141,7 @@
}
}
}
- int limitCount = 300;
+ int limitCount = 50;
if (addChannels.size() > 0) {
if (addChannels.size() > limitCount) {
for (int i = 0; i < addChannels.size(); i += limitCount) {
@@ -162,4 +171,95 @@
}
return addChannels.size() + updateChannels.size();
}
+
+ @Override
+ public ResourceBaseInfo getOverview() {
+
+ int online = channelMapper.getOnlineCount();
+ int total = channelMapper.getAllChannelCount();
+
+ return new ResourceBaseInfo(total, online);
+ }
+
+
+ @Override
+ public List<ChannelReduce> queryAllChannelList(String platformId) {
+ return channelMapper.queryChannelListInAll(null, null, null, platformId, null);
+ }
+
+ @Override
+ public boolean updateAllGps(Device device) {
+ List<DeviceChannel> deviceChannels = channelMapper.getChannelsWithoutTransform(device.getDeviceId());
+ List<DeviceChannel> result = new CopyOnWriteArrayList<>();
+ if (deviceChannels.size() == 0) {
+ return true;
+ }
+ String now = DateUtil.getNow();
+ deviceChannels.parallelStream().forEach(deviceChannel -> {
+ deviceChannel.setUpdateTime(now);
+ result.add(updateGps(deviceChannel, device));
+ });
+ int limitCount = 50;
+ if (result.size() > limitCount) {
+ for (int i = 0; i < result.size(); i += limitCount) {
+ int toIndex = i + limitCount;
+ if (i + limitCount > result.size()) {
+ toIndex = result.size();
+ }
+ channelMapper.batchUpdate(result.subList(i, toIndex));
+ }
+ }else {
+ channelMapper.batchUpdate(result);
+ }
+
+ return true;
+ }
+
+ @Override
+ public List<Device> getDeviceByChannelId(String channelId) {
+
+ return channelMapper.getDeviceByChannelId(channelId);
+ }
+
+ @Override
+ public int deleteChannels(List<DeviceChannel> deleteChannelList) {
+ return channelMapper.batchDel(deleteChannelList);
+ }
+
+ @Override
+ public int channelsOnline(List<DeviceChannel> channels) {
+ return channelMapper.batchOnline(channels);
+ }
+
+ @Override
+ public int channelsOffline(List<DeviceChannel> channels) {
+ return channelMapper.batchOffline(channels);
+ }
+
+ @Override
+ public DeviceChannel getOne(String deviceId, String channelId){
+ return channelMapper.queryChannel(deviceId, channelId);
+ }
+
+ @Override
+ public void batchUpdateChannel(List<DeviceChannel> channels) {
+ channelMapper.batchUpdate(channels);
+ for (DeviceChannel channel : channels) {
+ if (channel.getParentId() != null) {
+ channelMapper.updateChannelSubCount(channel.getDeviceId(), channel.getParentId());
+ }
+ }
+ }
+
+ @Override
+ public void batchAddChannel(List<DeviceChannel> channels) {
+ channelMapper.batchAdd(channels);
+ for (DeviceChannel channel : channels) {
+ if (channel.getParentId() != null) {
+ channelMapper.updateChannelSubCount(channel.getDeviceId(), channel.getParentId());
+ }
+ }
+ }
+
+
}
--
Gitblit v1.8.0