From 5d400804683866d57136331d257b6e282f280cb7 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: Mon, 15 May 2023 15:29:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=83=A8=E5=88=86sql?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iot/vmp/gb28181/bean/DeviceChannel.java | 6 +-- .../cmd/ISIPCommanderForPlatform.java | 2 +- .../cmd/impl/SIPCommanderFroPlatform.java | 10 ++--- .../cmd/DeviceStatusQueryMessageHandler.java | 2 +- .../iot/vmp/gb28181/utils/XmlUtil.java | 10 ++--- .../vmp/service/IDeviceChannelService.java | 4 +- .../iot/vmp/service/IDeviceService.java | 4 +- .../iot/vmp/service/IStreamProxyService.java | 4 +- .../iot/vmp/service/IStreamPushService.java | 4 +- .../impl/DeviceChannelServiceImpl.java | 10 +++-- .../vmp/service/impl/DeviceServiceImpl.java | 8 ++-- .../vmp/service/impl/GbStreamServiceImpl.java | 4 +- .../service/impl/MediaServerServiceImpl.java | 2 +- .../service/impl/StreamProxyServiceImpl.java | 10 +++-- .../service/impl/StreamPushServiceImpl.java | 9 ++-- .../impl/StreamPushUploadFileHandler.java | 41 +++++++++++------ .../vmp/storager/dao/DeviceChannelMapper.java | 43 +++++++++--------- .../iot/vmp/storager/dao/DeviceMapper.java | 8 ++-- .../iot/vmp/storager/dao/GbStreamMapper.java | 4 +- .../vmp/storager/dao/StreamProxyMapper.java | 11 ++++- .../vmp/storager/dao/StreamPushMapper.java | 20 ++++++--- .../impl/VideoManagerStorageImpl.java | 44 ++++++++++++++----- ...rceBaceInfo.java => ResourceBaseInfo.java} | 10 ++++- .../iot/vmp/vmanager/bean/ResourceInfo.java | 24 +++++----- .../vmp/vmanager/server/ServerController.java | 10 ++--- .../vmp/web/gb28181/ApiStreamController.java | 2 +- 26 files changed, 191 insertions(+), 115 deletions(-) rename src/main/java/com/genersoft/iot/vmp/vmanager/bean/{ResourceBaceInfo.java => ResourceBaseInfo.java} (65%) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java index 0e1b6181..f7ef12d3 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java @@ -172,7 +172,7 @@ public class DeviceChannel { * 遇到过NVR下的IPC下发信令可以推流, 但是 Status 响应 OFF */ @Schema(description = "在线/离线, 1在线,0离线") - private int status; + private boolean status; /** * 经度 @@ -455,11 +455,11 @@ public class DeviceChannel { this.PTZTypeText = PTZTypeText; } - public int getStatus() { + public boolean isStatus() { return status; } - public void setStatus(int status) { + public void setStatus(boolean status) { this.status = status; } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java index acfb880b..0332aabe 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommanderForPlatform.java @@ -66,7 +66,7 @@ public interface ISIPCommanderForPlatform { * @param fromTag * @return */ - void deviceStatusResponse(ParentPlatform parentPlatform,String channelId, String sn, String fromTag,int status) throws SipException, InvalidArgumentException, ParseException; + void deviceStatusResponse(ParentPlatform parentPlatform,String channelId, String sn, String fromTag,boolean status) throws SipException, InvalidArgumentException, ParseException; /** * 向上级回复移动位置订阅消息 diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java index 582fbafe..b1e21963 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java @@ -221,7 +221,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { if (!channel.getChannelId().equals(parentPlatform.getDeviceGBId())) { catalogXml.append("" + channel.getParental() + "\r\n"); if (channel.getParental() == 0) { - catalogXml.append("" + (channel.getStatus() == 0 ? "OFF" : "ON") + "\r\n"); + catalogXml.append("" + (channel.isStatus() ? "ON" : "OFF") + "\r\n"); } } if (channel.getParental() == 0) { @@ -250,7 +250,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { catalogXml.append("" + channel.getPort() + "\r\n"); catalogXml.append("" + channel.getPort() + "\r\n"); catalogXml.append("" + channel.getPTZType() + "\r\n"); - catalogXml.append("" + (channel.getStatus() == 1?"ON":"OFF") + "\r\n"); + catalogXml.append("" + (channel.isStatus() ? "ON":"OFF") + "\r\n"); catalogXml.append("" + (channel.getLongitudeWgs84() != 0? channel.getLongitudeWgs84():channel.getLongitude()) + "\r\n"); @@ -377,11 +377,11 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { * @return */ @Override - public void deviceStatusResponse(ParentPlatform parentPlatform,String channelId, String sn, String fromTag,int status) throws SipException, InvalidArgumentException, ParseException { + public void deviceStatusResponse(ParentPlatform parentPlatform,String channelId, String sn, String fromTag,boolean status) throws SipException, InvalidArgumentException, ParseException { if (parentPlatform == null) { return ; } - String statusStr = (status==1)?"ONLINE":"OFFLINE"; + String statusStr = (status)?"ONLINE":"OFFLINE"; String characterSet = parentPlatform.getCharacterSet(); StringBuffer deviceStatusXml = new StringBuffer(600); deviceStatusXml.append("\r\n") @@ -542,7 +542,7 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { catalogXml.append("" + channel.getManufacture() + "\r\n") .append("" + channel.getSecrecy() + "\r\n") .append("" + channel.getRegisterWay() + "\r\n") - .append("" + (channel.getStatus() == 0 ? "OFF" : "ON") + "\r\n"); + .append("" + (channel.isStatus() ? "ON" : "OFF") + "\r\n"); if (channel.getChannelType() != 2) { // 业务分组/虚拟组织/行政区划 不设置以下属性 catalogXml.append("" + channel.getModel() + "\r\n") diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java index e9d44d57..f9edfb39 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/DeviceStatusQueryMessageHandler.java @@ -77,7 +77,7 @@ public class DeviceStatusQueryMessageHandler extends SIPRequestProcessorParent i return; } try { - cmderFroPlatform.deviceStatusResponse(parentPlatform,channelId, sn, fromHeader.getTag(),deviceChannel.getStatus()); + cmderFroPlatform.deviceStatusResponse(parentPlatform,channelId, sn, fromHeader.getTag(),deviceChannel.isStatus()); } catch (SipException | InvalidArgumentException | ParseException e) { logger.error("[命令发送失败] 国标级联 DeviceStatus查询回复: {}", e.getMessage()); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java index d51ab9f5..750cd8b0 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java @@ -255,7 +255,7 @@ public class XmlUtil { } if (channelType.equals(ChannelType.CivilCode)) { // 行政区划其他字段没必要识别了,默认在线即可 - deviceChannel.setStatus(1); + deviceChannel.setStatus(true); deviceChannel.setParental(1); deviceChannel.setCreateTime(DateUtil.getNow()); deviceChannel.setUpdateTime(DateUtil.getNow()); @@ -309,7 +309,7 @@ public class XmlUtil { deviceChannel.setBusinessGroupId(businessGroupID); if (channelType.equals(ChannelType.BusinessGroup) || channelType.equals(ChannelType.VirtualOrganization)) { // 业务分组和虚拟组织 其他字段没必要识别了,默认在线即可 - deviceChannel.setStatus(1); + deviceChannel.setStatus(true); deviceChannel.setParental(1); deviceChannel.setCreateTime(DateUtil.getNow()); deviceChannel.setUpdateTime(DateUtil.getNow()); @@ -322,13 +322,13 @@ public class XmlUtil { String status = statusElement.getTextTrim().trim(); // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR的兼容性处理 if (status.equals("ON") || status.equals("On") || status.equals("ONLINE") || status.equals("OK")) { - deviceChannel.setStatus(1); + deviceChannel.setStatus(true); } if (status.equals("OFF") || status.equals("Off") || status.equals("OFFLINE")) { - deviceChannel.setStatus(0); + deviceChannel.setStatus(false); } }else { - deviceChannel.setStatus(1); + deviceChannel.setStatus(true); } // 识别自带的目录标识 String parental = XmlUtil.getText(itemDevice, "Parental"); diff --git a/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java b/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java index 66dbe077..cd402a10 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IDeviceChannelService.java @@ -2,7 +2,7 @@ package com.genersoft.iot.vmp.service; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; -import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; import java.util.List; @@ -38,7 +38,7 @@ public interface IDeviceChannelService { * 获取统计信息 * @return */ - ResourceBaceInfo getOverview(); + ResourceBaseInfo getOverview(); /** * 查询所有未分配的通道 diff --git a/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java b/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java index d977c473..e20c3bf2 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IDeviceService.java @@ -5,7 +5,7 @@ import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.SipTransactionInfo; import com.genersoft.iot.vmp.gb28181.bean.SyncStatus; import com.genersoft.iot.vmp.vmanager.bean.BaseTree; -import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; import java.util.List; @@ -162,7 +162,7 @@ public interface IDeviceService { * 获取统计信息 * @return */ - ResourceBaceInfo getOverview(); + ResourceBaseInfo getOverview(); /** * 获取所有设备 diff --git a/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java b/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java index de9613eb..0e1c97bf 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IStreamProxyService.java @@ -4,7 +4,7 @@ import com.alibaba.fastjson2.JSONObject; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; -import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; import com.github.pagehelper.PageInfo; public interface IStreamProxyService { @@ -108,6 +108,6 @@ public interface IStreamProxyService { * 获取统计信息 * @return */ - ResourceBaceInfo getOverview(); + ResourceBaseInfo getOverview(); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java b/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java index cf6f0ed2..8d920021 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IStreamPushService.java @@ -5,7 +5,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.hook.OnStreamChangedHookParam; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis; -import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; import com.github.pagehelper.PageInfo; import java.util.List; @@ -113,5 +113,5 @@ public interface IStreamPushService { * 获取统计信息 * @return */ - ResourceBaceInfo getOverview(); + ResourceBaseInfo getOverview(); } 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 index 73adf2e4..45405f70 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java @@ -11,7 +11,7 @@ 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.ResourceBaceInfo; +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; @@ -175,8 +175,12 @@ public class DeviceChannelServiceImpl implements IDeviceChannelService { } @Override - public ResourceBaceInfo getOverview() { - return channelMapper.getOverview(); + public ResourceBaseInfo getOverview() { + + int online = channelMapper.getOnlineCount(); + int total = channelMapper.getAllChannelCount(); + + return new ResourceBaseInfo(total, online); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java index 1f46cc63..8dbed114 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java @@ -20,7 +20,7 @@ import com.genersoft.iot.vmp.storager.dao.DeviceMapper; import com.genersoft.iot.vmp.storager.dao.PlatformChannelMapper; import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.vmanager.bean.BaseTree; -import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -652,8 +652,10 @@ public class DeviceServiceImpl implements IDeviceService { } @Override - public ResourceBaceInfo getOverview() { - return deviceMapper.getOverview(); + public ResourceBaseInfo getOverview() { + List onlineDevices = deviceMapper.getOnlineDevices(); + List all = deviceMapper.getAll(); + return new ResourceBaseInfo(all.size(), onlineDevices.size()); } @Override diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java index 37e3b9e6..0cde5fe9 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/GbStreamServiceImpl.java @@ -110,7 +110,7 @@ public class GbStreamServiceImpl implements IGbStreamService { deviceChannel.setLatitude(gbStream.getLatitude()); deviceChannel.setDeviceId(platform.getDeviceGBId()); deviceChannel.setManufacture("wvp-pro"); - deviceChannel.setStatus(gbStream.isStatus()?1:0); + deviceChannel.setStatus(gbStream.isStatus()); deviceChannel.setRegisterWay(1); deviceChannel.setCivilCode(platform.getAdministrativeDivision()); @@ -218,7 +218,7 @@ public class GbStreamServiceImpl implements IGbStreamService { }else { status = gbStreamMapper.selectStatusForPush(gbStream.getApp(), gbStream.getStream()); } - deviceChannel.setStatus((status != null && status )?1:0); + deviceChannel.setStatus(status != null && status); deviceChannel.setRegisterWay(1); deviceChannel.setCivilCode(platform.getAdministrativeDivision()); diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java index c0d07650..230ce277 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java @@ -685,7 +685,7 @@ public class MediaServerServiceImpl implements IMediaServerService { // 缓存不存在,从数据库查询,如果数据库不存在则是错误的 mediaServerItem = getOneFromDatabase(mediaServerId); if (mediaServerItem == null) { - logger.warn("[更新ZLM 保活信息]失败,未找到流媒体信息"); + logger.warn("[更新ZLM 保活信息] 流媒体{}尚未加入使用,请检查节点中是否含有此流媒体 ", mediaServerId); return; } // zlm连接重试 diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java index bb99651f..3037e3f1 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java @@ -23,7 +23,7 @@ import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper; import com.genersoft.iot.vmp.storager.dao.StreamProxyMapper; import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; -import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; import com.github.pagehelper.PageInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -438,7 +438,11 @@ public class StreamProxyServiceImpl implements IStreamProxyService { } @Override - public ResourceBaceInfo getOverview() { - return streamProxyMapper.getOverview(); + public ResourceBaseInfo getOverview() { + + int total = streamProxyMapper.getAllCount(); + int online = streamProxyMapper.getOnline(); + + return new ResourceBaseInfo(total, online); } } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java index 6540e3e3..0a03c660 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java @@ -20,7 +20,7 @@ import com.genersoft.iot.vmp.service.bean.StreamPushItemFromRedis; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.dao.*; import com.genersoft.iot.vmp.utils.DateUtil; -import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.slf4j.Logger; @@ -531,7 +531,10 @@ public class StreamPushServiceImpl implements IStreamPushService { } @Override - public ResourceBaceInfo getOverview() { - return streamPushMapper.getOverview(userSetting.isUsePushingAsStatus()); + public ResourceBaseInfo getOverview() { + int total = streamPushMapper.getAllCount(); + int online = streamPushMapper.getAllOnline(userSetting.isUsePushingAsStatus()); + + return new ResourceBaseInfo(total, online); } } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java index 1b21995b..a1271593 100644 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushUploadFileHandler.java @@ -9,7 +9,6 @@ import com.genersoft.iot.vmp.vmanager.bean.StreamPushExcelDto; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; import java.util.*; @@ -33,38 +32,43 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener streamPushItems = new ArrayList<>(); + private final List streamPushItems = new ArrayList<>(); /** * 用于存储更具APP+Stream过滤后的数据,可以直接存入stream_push表与gb_stream表 */ - private Map streamPushItemForSave = new HashMap<>(); + private final Map streamPushItemForSave = new HashMap<>(); /** * 用于存储按照APP+Stream为KEY, 平台ID+目录Id 为value的数据,用于存储到gb_stream表后获取app+Stream对应的平台与目录信息,然后存入关联表 */ - private Map> streamPushItemsForPlatform = new HashMap<>(); + private final Map> streamPushItemsForPlatform = new HashMap<>(); /** * 用于判断文件是否存在重复的app+Stream+平台ID */ - private Set streamPushStreamSet = new HashSet<>(); + private final Set streamPushStreamSet = new HashSet<>(); /** * 用于存储APP+Stream->国标ID 的数据结构, 数据一一对应,全局判断APP+Stream->国标ID是否存在不对应 */ - private BiMap gBMap = HashBiMap.create(); + private final BiMap gBMap = HashBiMap.create(); + + /** + * 用于存储APP+Stream-> 在数据库中的数据 + */ + private final BiMap pushMapInDb = HashBiMap.create(); /** * 记录错误的APP+Stream */ - private List errorStreamList = new ArrayList<>(); + private final List errorStreamList = new ArrayList<>(); /** * 记录错误的国标ID */ - private List errorGBList = new ArrayList<>(); + private final List errorInfoList = new ArrayList<>(); /** * 读取数量计数器 @@ -75,6 +79,13 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener allAppAndStreams = pushService.getAllAppAndStream(); + if (allAppAndStreams.size() > 0) { + for (String allAppAndStream : allAppAndStreams) { + pushMapInDb.put(allAppAndStream, allAppAndStream); + } + } } public interface ErrorDataHandler{ @@ -88,26 +99,30 @@ public class StreamPushUploadFileHandler extends AnalysisEventListener AND (dc.channel_id LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%')) " + " AND (dc.parent_id=#{parentChannelId} OR dc.civil_code = #{parentChannelId}) " + - " AND dc.status=1" + - " AND dc.status=0" + + " AND dc.status= true" + + " AND dc.status= false" + " AND dc.sub_count > 0 " + " AND dc.sub_count = 0 " + " AND dc.channel_id in " + @@ -97,8 +96,8 @@ public interface DeviceChannelMapper { " AND dc.device_id = #{deviceId} " + " AND (dc.channel_id LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%') " + " AND dc.parent_id=#{parentChannelId} " + - " AND dc.status=1" + - " AND dc.status=0" + + " AND dc.status=true" + + " AND dc.status=false" + " AND dc.sub_count > 0 " + " AND dc.sub_count = 0 " + " AND dc.channel_id in " + @@ -121,8 +120,8 @@ public interface DeviceChannelMapper { " AND dc.device_id = #{deviceId} " + " AND (dc.channel_id LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%') " + " AND dc.parent_id=#{parentChannelId} " + - " AND dc.status=1" + - " AND dc.status=0" + + " AND dc.status=true" + + " AND dc.status=false" + " AND dc.sub_count > 0 " + " AND dc.sub_count = 0 " + " AND dc.channel_id in " + @@ -165,8 +164,8 @@ public interface DeviceChannelMapper { " LEFT JOIN wvp_platform_gb_channel pgc on pgc.device_channel_id = dc.id " + " WHERE 1=1 " + " AND (dc.channel_id LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%')) " + - " AND dc.status=1 " + - " AND dc.status=0 " + + " AND dc.status=true " + + " AND dc.status=false " + " AND dc.sub_count > 0 " + " AND dc.sub_count = 0 " + " AND dc.id not in (select device_channel_id from wvp_platform_gb_channel where platform_id=#{platformId} ) " + @@ -191,10 +190,10 @@ public interface DeviceChannelMapper { @Select("SELECT * FROM wvp_device_channel WHERE channel_id=#{channelId}") List queryChannelByChannelId( String channelId); - @Update(value = {"UPDATE wvp_device_channel SET status=0 WHERE device_id=#{deviceId} AND channel_id=#{channelId}"}) + @Update(value = {"UPDATE wvp_device_channel SET status=false WHERE device_id=#{deviceId} AND channel_id=#{channelId}"}) void offline(String deviceId, String channelId); - @Update(value = {"UPDATE wvp_device_channel SET status=0 WHERE device_id=#{deviceId}"}) + @Update(value = {"UPDATE wvp_device_channel SET status=fasle WHERE device_id=#{deviceId}"}) void offlineByDeviceId(String deviceId); @Insert("") int batchAddOrUpdate(List addChannels); - @Update(value = {"UPDATE wvp_device_channel SET status=1 WHERE device_id=#{deviceId} AND channel_id=#{channelId}"}) + @Update(value = {"UPDATE wvp_device_channel SET status=true WHERE device_id=#{deviceId} AND channel_id=#{channelId}"}) void online(String deviceId, String channelId); @Update({""}) int batchOnline(List channels); @Update({""}) int batchOffline(List channels); + + + @Select("select count(1) from wvp_device_channel where status = true") + int getOnlineCount(); + + @Select("select count(1) from wvp_device_channel") + int getAllChannelCount(); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java index ebf2933c..75465453 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java @@ -1,7 +1,6 @@ package com.genersoft.iot.vmp.storager.dao; import com.genersoft.iot.vmp.gb28181.bean.Device; -import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Repository; @@ -162,8 +161,10 @@ public interface DeviceMapper { "tree_type,"+ "online,"+ "media_server_id,"+ - "(SELECT count(0) FROM wvp_device_channel WHERE device_id=de.device_id) as channel_count FROM wvp_device de" + + "(SELECT count(0) FROM wvp_device_channel WHERE device_id=de.device_id) as channel_count " + + "FROM wvp_device de" + " where online=${online}"+ + " order by create_time desc "+ " " ) List getDevices(Boolean online); @@ -288,9 +289,6 @@ public interface DeviceMapper { ")") void addCustomDevice(Device device); - @Select("select count(1) as total, sum(online) as online FROM wvp_device") - ResourceBaceInfo getOverview(); - @Select("select * FROM wvp_device") List getAll(); diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java index 5f8702c7..e313acea 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java @@ -117,7 +117,7 @@ public interface GbStreamMapper { void batchDelForGbStream(List gbStreams); @Insert("") - @Options(useGeneratedKeys = true, keyProperty = "gbStreamId", keyColumn = "gbStreamId") + @Options(useGeneratedKeys = true, keyProperty = "gbStreamId", keyColumn = "gb_stream_id") void batchAdd(List subList); @Update({""}) - ResourceBaceInfo getOverview(boolean pushIngAsOnline); + int getAllOnline(Boolean usePushingAsStatus); + + @Select("") + List getListIn(List streamPushItems); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java index cee613db..f73339d1 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java @@ -123,6 +123,9 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage { TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); // 数据去重 List channels = new ArrayList<>(); + + List updateChannels = new ArrayList<>(); + List addChannels = new ArrayList<>(); StringBuilder stringBuilder = new StringBuilder(); Map subContMap = new HashMap<>(); if (deviceChannelList.size() > 0) { @@ -131,18 +134,22 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage { for (DeviceChannel deviceChannel : deviceChannelList) { if (!gbIdSet.contains(deviceChannel.getChannelId())) { gbIdSet.add(deviceChannel.getChannelId()); + deviceChannel.setUpdateTime(DateUtil.getNow()); if (allChannelMap.containsKey(deviceChannel.getChannelId())) { deviceChannel.setStreamId(allChannelMap.get(deviceChannel.getChannelId()).getStreamId()); deviceChannel.setHasAudio(allChannelMap.get(deviceChannel.getChannelId()).isHasAudio()); - if (allChannelMap.get(deviceChannel.getChannelId()).getStatus() !=deviceChannel.getStatus()){ + if (allChannelMap.get(deviceChannel.getChannelId()).isStatus() !=deviceChannel.isStatus()){ List strings = platformChannelMapper.queryParentPlatformByChannelId(deviceChannel.getChannelId()); if (!CollectionUtils.isEmpty(strings)){ strings.forEach(platformId->{ - eventPublisher.catalogEventPublish(platformId, deviceChannel, deviceChannel.getStatus()==1?CatalogEvent.ON:CatalogEvent.OFF); + eventPublisher.catalogEventPublish(platformId, deviceChannel, deviceChannel.isStatus()?CatalogEvent.ON:CatalogEvent.OFF); }); } - } + updateChannels.add(deviceChannel); + }else { + deviceChannel.setCreateTime(DateUtil.getNow()); + addChannels.add(deviceChannel); } channels.add(deviceChannel); if (!ObjectUtils.isEmpty(deviceChannel.getParentId())) { @@ -175,21 +182,36 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage { } try { int cleanChannelsResult = deviceChannelMapper.cleanChannelsNotInList(deviceId, channels); + int limitCount = 300; boolean result = cleanChannelsResult < 0; - if (!result && channels.size() > 0) { - if (channels.size() > limitCount) { - for (int i = 0; i < channels.size(); i += limitCount) { + if (!result && addChannels.size() > 0) { + if (addChannels.size() > limitCount) { + for (int i = 0; i < addChannels.size(); i += limitCount) { int toIndex = i + limitCount; - if (i + limitCount > channels.size()) { - toIndex = channels.size(); + if (i + limitCount > addChannels.size()) { + toIndex = addChannels.size(); } - result = result || deviceChannelMapper.batchAddOrUpdate(channels.subList(i, toIndex)) < 0; + result = result || deviceChannelMapper.batchAdd(addChannels.subList(i, toIndex)) < 0; } }else { - result = result || deviceChannelMapper.batchAddOrUpdate(channels) < 0; + result = result || deviceChannelMapper.batchAdd(addChannels) < 0; } } + if (!result && updateChannels.size() > 0) { + if (updateChannels.size() > limitCount) { + for (int i = 0; i < updateChannels.size(); i += limitCount) { + int toIndex = i + limitCount; + if (i + limitCount > updateChannels.size()) { + toIndex = updateChannels.size(); + } + result = result || deviceChannelMapper.batchUpdate(updateChannels.subList(i, toIndex)) < 0; + } + }else { + result = result || deviceChannelMapper.batchUpdate(updateChannels) < 0; + } + } + if (result) { //事务回滚 dataSourceTransactionManager.rollback(transactionStatus); @@ -919,7 +941,7 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage { deviceChannel.setLatitude(0.0); deviceChannel.setDeviceId(platform.getDeviceGBId()); deviceChannel.setManufacture("wvp-pro"); - deviceChannel.setStatus(1); + deviceChannel.setStatus(true); deviceChannel.setParental(1); deviceChannel.setRegisterWay(1); diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaceInfo.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaseInfo.java similarity index 65% rename from src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaceInfo.java rename to src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaseInfo.java index b50d97a0..dab9b0ae 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaceInfo.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaseInfo.java @@ -1,9 +1,17 @@ package com.genersoft.iot.vmp.vmanager.bean; -public class ResourceBaceInfo { +public class ResourceBaseInfo { private int total; private int online; + public ResourceBaseInfo() { + } + + public ResourceBaseInfo(int total, int online) { + this.total = total; + this.online = online; + } + public int getTotal() { return total; } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceInfo.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceInfo.java index b8d7009f..3b0ee0d3 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceInfo.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceInfo.java @@ -2,40 +2,40 @@ package com.genersoft.iot.vmp.vmanager.bean; public class ResourceInfo { - private ResourceBaceInfo device; - private ResourceBaceInfo channel; - private ResourceBaceInfo push; - private ResourceBaceInfo proxy; + private ResourceBaseInfo device; + private ResourceBaseInfo channel; + private ResourceBaseInfo push; + private ResourceBaseInfo proxy; - public ResourceBaceInfo getDevice() { + public ResourceBaseInfo getDevice() { return device; } - public void setDevice(ResourceBaceInfo device) { + public void setDevice(ResourceBaseInfo device) { this.device = device; } - public ResourceBaceInfo getChannel() { + public ResourceBaseInfo getChannel() { return channel; } - public void setChannel(ResourceBaceInfo channel) { + public void setChannel(ResourceBaseInfo channel) { this.channel = channel; } - public ResourceBaceInfo getPush() { + public ResourceBaseInfo getPush() { return push; } - public void setPush(ResourceBaceInfo push) { + public void setPush(ResourceBaseInfo push) { this.push = push; } - public ResourceBaceInfo getProxy() { + public ResourceBaseInfo getProxy() { return proxy; } - public void setProxy(ResourceBaceInfo proxy) { + public void setProxy(ResourceBaseInfo proxy) { this.proxy = proxy; } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java index 88126ace..bef7ffb9 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java @@ -15,7 +15,7 @@ import com.genersoft.iot.vmp.service.*; import com.genersoft.iot.vmp.service.bean.MediaServerLoad; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; -import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; +import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; import com.genersoft.iot.vmp.vmanager.bean.ResourceInfo; import com.genersoft.iot.vmp.vmanager.bean.SystemConfigInfo; import io.swagger.v3.oas.annotations.Operation; @@ -251,13 +251,13 @@ public class ServerController { @Operation(summary = "获取负载信息") public ResourceInfo getResourceInfo() { ResourceInfo result = new ResourceInfo(); - ResourceBaceInfo deviceInfo = deviceService.getOverview(); + ResourceBaseInfo deviceInfo = deviceService.getOverview(); result.setDevice(deviceInfo); - ResourceBaceInfo channelInfo = channelService.getOverview(); + ResourceBaseInfo channelInfo = channelService.getOverview(); result.setChannel(channelInfo); - ResourceBaceInfo pushInfo = pushService.getOverview(); + ResourceBaseInfo pushInfo = pushService.getOverview(); result.setPush(pushInfo); - ResourceBaceInfo proxyInfo = proxyService.getOverview(); + ResourceBaseInfo proxyInfo = proxyService.getOverview(); result.setProxy(proxyInfo); return result; diff --git a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java index 90dd6862..66885035 100644 --- a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java +++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java @@ -113,7 +113,7 @@ public class ApiStreamController { result.put("error","channel[ " + code + " ]未找到"); resultDeferredResult.setResult(result); return resultDeferredResult; - }else if (deviceChannel.getStatus() == 0) { + }else if (!deviceChannel.isStatus()) { JSONObject result = new JSONObject(); result.put("error","channel[ " + code + " ]offline"); resultDeferredResult.setResult(result);