| | |
| | | * 遇到过NVR下的IPC下发信令可以推流, 但是 Status 响应 OFF |
| | | */ |
| | | @Schema(description = "在线/离线, 1在线,0离线") |
| | | private int status; |
| | | private boolean status; |
| | | |
| | | /** |
| | | * 经度 |
| | |
| | | this.PTZTypeText = PTZTypeText; |
| | | } |
| | | |
| | | public int getStatus() { |
| | | public boolean isStatus() { |
| | | return status; |
| | | } |
| | | |
| | | public void setStatus(int status) { |
| | | public void setStatus(boolean status) { |
| | | this.status = status; |
| | | } |
| | | |
| | |
| | | * @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; |
| | | |
| | | /** |
| | | * 向上级回复移动位置订阅消息 |
| | |
| | | if (!channel.getChannelId().equals(parentPlatform.getDeviceGBId())) { |
| | | catalogXml.append("<Parental>" + channel.getParental() + "</Parental>\r\n"); |
| | | if (channel.getParental() == 0) { |
| | | catalogXml.append("<Status>" + (channel.getStatus() == 0 ? "OFF" : "ON") + "</Status>\r\n"); |
| | | catalogXml.append("<Status>" + (channel.isStatus() ? "ON" : "OFF") + "</Status>\r\n"); |
| | | } |
| | | } |
| | | if (channel.getParental() == 0) { |
| | |
| | | catalogXml.append("<Port>" + channel.getPort() + "</Port>\r\n"); |
| | | catalogXml.append("<Password>" + channel.getPort() + "</Password>\r\n"); |
| | | catalogXml.append("<PTZType>" + channel.getPTZType() + "</PTZType>\r\n"); |
| | | catalogXml.append("<Status>" + (channel.getStatus() == 1?"ON":"OFF") + "</Status>\r\n"); |
| | | catalogXml.append("<Status>" + (channel.isStatus() ? "ON":"OFF") + "</Status>\r\n"); |
| | | catalogXml.append("<Longitude>" + |
| | | (channel.getLongitudeWgs84() != 0? channel.getLongitudeWgs84():channel.getLongitude()) |
| | | + "</Longitude>\r\n"); |
| | |
| | | * @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("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n") |
| | |
| | | catalogXml.append("<Manufacturer>" + channel.getManufacture() + "</Manufacturer>\r\n") |
| | | .append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n") |
| | | .append("<RegisterWay>" + channel.getRegisterWay() + "</RegisterWay>\r\n") |
| | | .append("<Status>" + (channel.getStatus() == 0 ? "OFF" : "ON") + "</Status>\r\n"); |
| | | .append("<Status>" + (channel.isStatus() ? "ON" : "OFF") + "</Status>\r\n"); |
| | | |
| | | if (channel.getChannelType() != 2) { // 业务分组/虚拟组织/行政区划 不设置以下属性 |
| | | catalogXml.append("<Model>" + channel.getModel() + "</Model>\r\n") |
| | |
| | | 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()); |
| | | } |
| | |
| | | }
|
| | | if (channelType.equals(ChannelType.CivilCode)) {
|
| | | // 行政区划其他字段没必要识别了,默认在线即可
|
| | | deviceChannel.setStatus(1);
|
| | | deviceChannel.setStatus(true);
|
| | | deviceChannel.setParental(1);
|
| | | deviceChannel.setCreateTime(DateUtil.getNow());
|
| | | deviceChannel.setUpdateTime(DateUtil.getNow());
|
| | |
| | | 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());
|
| | |
| | | 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");
|
| | |
| | | |
| | | 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; |
| | |
| | | * 获取统计信息 |
| | | * @return |
| | | */ |
| | | ResourceBaceInfo getOverview(); |
| | | ResourceBaseInfo getOverview(); |
| | | |
| | | /** |
| | | * 查询所有未分配的通道 |
| | |
| | | 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; |
| | | |
| | |
| | | * 获取统计信息 |
| | | * @return |
| | | */ |
| | | ResourceBaceInfo getOverview(); |
| | | ResourceBaseInfo getOverview(); |
| | | |
| | | /** |
| | | * 获取所有设备 |
| | |
| | | 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 { |
| | |
| | | * 获取统计信息 |
| | | * @return |
| | | */ |
| | | ResourceBaceInfo getOverview(); |
| | | ResourceBaseInfo getOverview(); |
| | | |
| | | } |
| | |
| | | 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; |
| | |
| | | * 获取统计信息 |
| | | * @return |
| | | */ |
| | | ResourceBaceInfo getOverview(); |
| | | ResourceBaseInfo getOverview(); |
| | | } |
| | |
| | | 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; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public ResourceBaceInfo getOverview() { |
| | | return channelMapper.getOverview(); |
| | | public ResourceBaseInfo getOverview() { |
| | | |
| | | int online = channelMapper.getOnlineCount(); |
| | | int total = channelMapper.getAllChannelCount(); |
| | | |
| | | return new ResourceBaseInfo(total, online); |
| | | } |
| | | |
| | | |
| | |
| | | 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; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public ResourceBaceInfo getOverview() { |
| | | return deviceMapper.getOverview(); |
| | | public ResourceBaseInfo getOverview() { |
| | | List<Device> onlineDevices = deviceMapper.getOnlineDevices(); |
| | | List<Device> all = deviceMapper.getAll(); |
| | | return new ResourceBaseInfo(all.size(), onlineDevices.size()); |
| | | } |
| | | |
| | | @Override |
| | |
| | | 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()); |
| | |
| | | }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()); |
| | |
| | | // 缓存不存在,从数据库查询,如果数据库不存在则是错误的 |
| | | mediaServerItem = getOneFromDatabase(mediaServerId); |
| | | if (mediaServerItem == null) { |
| | | logger.warn("[更新ZLM 保活信息]失败,未找到流媒体信息"); |
| | | logger.warn("[更新ZLM 保活信息] 流媒体{}尚未加入使用,请检查节点中是否含有此流媒体 ", mediaServerId); |
| | | return; |
| | | } |
| | | // zlm连接重试 |
| | |
| | | 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; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public ResourceBaceInfo getOverview() { |
| | | return streamProxyMapper.getOverview(); |
| | | public ResourceBaseInfo getOverview() { |
| | | |
| | | int total = streamProxyMapper.getAllCount(); |
| | | int online = streamProxyMapper.getOnline(); |
| | | |
| | | return new ResourceBaseInfo(total, online); |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | } |
| | | |
| | | @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); |
| | | } |
| | | } |
| | |
| | | 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.*; |
| | | |
| | |
| | | /** |
| | | * 用于存储不加过滤的所有数据 |
| | | */ |
| | | private List<StreamPushItem> streamPushItems = new ArrayList<>(); |
| | | private final List<StreamPushItem> streamPushItems = new ArrayList<>(); |
| | | |
| | | /** |
| | | * 用于存储更具APP+Stream过滤后的数据,可以直接存入stream_push表与gb_stream表 |
| | | */ |
| | | private Map<String,StreamPushItem> streamPushItemForSave = new HashMap<>(); |
| | | private final Map<String,StreamPushItem> streamPushItemForSave = new HashMap<>(); |
| | | |
| | | /** |
| | | * 用于存储按照APP+Stream为KEY, 平台ID+目录Id 为value的数据,用于存储到gb_stream表后获取app+Stream对应的平台与目录信息,然后存入关联表 |
| | | */ |
| | | private Map<String, List<String[]>> streamPushItemsForPlatform = new HashMap<>(); |
| | | private final Map<String, List<String[]>> streamPushItemsForPlatform = new HashMap<>(); |
| | | |
| | | /** |
| | | * 用于判断文件是否存在重复的app+Stream+平台ID |
| | | */ |
| | | private Set<String> streamPushStreamSet = new HashSet<>(); |
| | | private final Set<String> streamPushStreamSet = new HashSet<>(); |
| | | |
| | | /** |
| | | * 用于存储APP+Stream->国标ID 的数据结构, 数据一一对应,全局判断APP+Stream->国标ID是否存在不对应 |
| | | */ |
| | | private BiMap<String,String> gBMap = HashBiMap.create(); |
| | | private final BiMap<String,String> gBMap = HashBiMap.create(); |
| | | |
| | | /** |
| | | * 用于存储APP+Stream-> 在数据库中的数据 |
| | | */ |
| | | private final BiMap<String,String> pushMapInDb = HashBiMap.create(); |
| | | |
| | | /** |
| | | * 记录错误的APP+Stream |
| | | */ |
| | | private List<String> errorStreamList = new ArrayList<>(); |
| | | private final List<String> errorStreamList = new ArrayList<>(); |
| | | |
| | | |
| | | /** |
| | | * 记录错误的国标ID |
| | | */ |
| | | private List<String> errorGBList = new ArrayList<>(); |
| | | private final List<String> errorInfoList = new ArrayList<>(); |
| | | |
| | | /** |
| | | * 读取数量计数器 |
| | |
| | | this.pushService = pushService; |
| | | this.defaultMediaServerId = defaultMediaServerId; |
| | | this.errorDataHandler = errorDataHandler; |
| | | // 获取数据库已有的数据,已经存在的则忽略 |
| | | List<String> allAppAndStreams = pushService.getAllAppAndStream(); |
| | | if (allAppAndStreams.size() > 0) { |
| | | for (String allAppAndStream : allAppAndStreams) { |
| | | pushMapInDb.put(allAppAndStream, allAppAndStream); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public interface ErrorDataHandler{ |
| | |
| | | || ObjectUtils.isEmpty(streamPushExcelDto.getGbId())) { |
| | | return; |
| | | } |
| | | Integer rowIndex = analysisContext.readRowHolder().getRowIndex(); |
| | | |
| | | if (gBMap.get(streamPushExcelDto.getApp() + streamPushExcelDto.getStream()) == null) { |
| | | try { |
| | | gBMap.put(streamPushExcelDto.getApp() + streamPushExcelDto.getStream(), streamPushExcelDto.getGbId()); |
| | | }catch (IllegalArgumentException e) { |
| | | errorGBList.add(streamPushExcelDto.getGbId() + "(不同的app+stream使用了相同的国标ID)"); |
| | | errorInfoList.add("行:" + rowIndex + ", " + streamPushExcelDto.getGbId() + " 国标ID重复使用"); |
| | | return; |
| | | } |
| | | }else { |
| | | if (!gBMap.get(streamPushExcelDto.getApp() + streamPushExcelDto.getStream()).equals(streamPushExcelDto.getGbId())) { |
| | | errorGBList.add(streamPushExcelDto.getGbId() + "(同一组app+stream使用了不同的国标ID)"); |
| | | errorInfoList.add("行:" + rowIndex + ", " + streamPushExcelDto.getGbId() + " 同样的应用名和流ID使用了不同的国标ID"); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | if (streamPushStreamSet.contains(streamPushExcelDto.getApp() + streamPushExcelDto.getStream() + streamPushExcelDto.getPlatformId())) { |
| | | errorStreamList.add(streamPushExcelDto.getApp() + "/" + streamPushExcelDto.getStream()+ "/" + |
| | | streamPushExcelDto.getPlatformId() + "(同一组app+stream添加在了同一个平台下)"); |
| | | errorStreamList.add("行:" + rowIndex + ", " + streamPushExcelDto.getApp() + "/" + streamPushExcelDto.getStream()+ " 平台信息重复"); |
| | | return; |
| | | }else { |
| | | if (pushMapInDb.get(streamPushExcelDto.getApp()+streamPushExcelDto.getStream()) != null) { |
| | | errorStreamList.add("行:" + rowIndex + ", " + streamPushExcelDto.getApp() + "/" + streamPushExcelDto.getStream()+ " 数据已存在"); |
| | | return; |
| | | } |
| | | streamPushStreamSet.add(streamPushExcelDto.getApp()+streamPushExcelDto.getStream() + streamPushExcelDto.getPlatformId()); |
| | | } |
| | | |
| | |
| | | gBMap.clear(); |
| | | streamPushStreamSet.clear(); |
| | | streamPushItemsForPlatform.clear(); |
| | | errorDataHandler.handle(errorStreamList, errorGBList); |
| | | errorDataHandler.handle(errorStreamList, errorInfoList); |
| | | } |
| | | |
| | | private void saveData(){ |
| | |
| | | import com.genersoft.iot.vmp.gb28181.bean.Device; |
| | | import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; |
| | | import com.genersoft.iot.vmp.gb28181.bean.DeviceChannelInPlatform; |
| | | import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; |
| | | import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; |
| | | import com.genersoft.iot.vmp.web.gb28181.dto.DeviceChannelExtend; |
| | | import org.apache.ibatis.annotations.*; |
| | |
| | | "dc.device_id = #{deviceId} " + |
| | | " <if test='query != null'> AND (dc.channel_id LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%'))</if> " + |
| | | " <if test='parentChannelId != null'> AND (dc.parent_id=#{parentChannelId} OR dc.civil_code = #{parentChannelId}) </if> " + |
| | | " <if test='online == true' > AND dc.status=1</if>" + |
| | | " <if test='online == false' > AND dc.status=0</if>" + |
| | | " <if test='online == true' > AND dc.status= true</if>" + |
| | | " <if test='online == false' > AND dc.status= false</if>" + |
| | | " <if test='hasSubChannel == true' > AND dc.sub_count > 0 </if>" + |
| | | " <if test='hasSubChannel == false' > AND dc.sub_count = 0 </if>" + |
| | | "<if test='channelIds != null'> AND dc.channel_id in <foreach item='item' index='index' collection='channelIds' open='(' separator=',' close=')'>" + |
| | |
| | | " <if test='device_id != null'> AND dc.device_id = #{deviceId} </if> " + |
| | | " <if test='query != null'> AND (dc.channel_id LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " + |
| | | " <if test='parentChannelId != null'> AND dc.parent_id=#{parentChannelId} </if> " + |
| | | " <if test='online == true' > AND dc.status=1</if>" + |
| | | " <if test='online == false' > AND dc.status=0</if>" + |
| | | " <if test='online == true' > AND dc.status=true</if>" + |
| | | " <if test='online == false' > AND dc.status=false</if>" + |
| | | " <if test='hasSubChannel == true' > AND dc.sub_count > 0 </if>" + |
| | | " <if test='hasSubChannel == false' > AND dc.sub_count = 0 </if>" + |
| | | "<if test='channelIds != null'> AND dc.channel_id in <foreach item='item' index='index' collection='channelIds' open='(' separator=',' close=')'>" + |
| | |
| | | " <if test='deviceId != null'> AND dc.device_id = #{deviceId} </if> " + |
| | | " <if test='query != null'> AND (dc.channel_id LIKE '%${query}%' OR dc.name LIKE '%${query}%' OR dc.name LIKE '%${query}%')</if> " + |
| | | " <if test='parentChannelId != null'> AND dc.parent_id=#{parentChannelId} </if> " + |
| | | " <if test='online == true' > AND dc.status=1</if>" + |
| | | " <if test='online == false' > AND dc.status=0</if>" + |
| | | " <if test='online == true' > AND dc.status=true</if>" + |
| | | " <if test='online == false' > AND dc.status=false</if>" + |
| | | " <if test='hasSubChannel == true' > AND dc.sub_count > 0 </if>" + |
| | | " <if test='hasSubChannel == false' > AND dc.sub_count = 0 </if>" + |
| | | "<if test='channelIds != null'> AND dc.channel_id in <foreach item='item' index='index' collection='channelIds' open='(' separator=',' close=')'>" + |
| | |
| | | " LEFT JOIN wvp_platform_gb_channel pgc on pgc.device_channel_id = dc.id " + |
| | | " WHERE 1=1 " + |
| | | " <if test='query != null'> AND (dc.channel_id LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%') OR dc.name LIKE concat('%',#{query},'%'))</if> " + |
| | | " <if test='online == true' > AND dc.status=1</if> " + |
| | | " <if test='online == false' > AND dc.status=0</if> " + |
| | | " <if test='online == true' > AND dc.status=true</if> " + |
| | | " <if test='online == false' > AND dc.status=false</if> " + |
| | | " <if test='hasSubChannel!= null and has_sub_channel == true' > AND dc.sub_count > 0</if> " + |
| | | " <if test='hasSubChannel!= null and has_sub_channel == false' > AND dc.sub_count = 0</if> " + |
| | | " <if test='catalogId == null ' > AND dc.id not in (select device_channel_id from wvp_platform_gb_channel where platform_id=#{platformId} ) </if> " + |
| | |
| | | @Select("SELECT * FROM wvp_device_channel WHERE channel_id=#{channelId}") |
| | | List<DeviceChannel> 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("<script> " + |
| | |
| | | "</script>") |
| | | int batchAddOrUpdate(List<DeviceChannel> 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({"<script>" + |
| | |
| | | "<if test='item.manufacture != null'>, manufacture=#{item.manufacture}</if>" + |
| | | "<if test='item.model != null'>, model=#{item.model}</if>" + |
| | | "<if test='item.owner != null'>, owner=#{item.owner}</if>" + |
| | | "<if test='item.civil_code != null'>, civil_code=#{item.civilCode}</if>" + |
| | | "<if test='item.civilCode != null'>, civil_code=#{item.civilCode}</if>" + |
| | | "<if test='item.block != null'>, block=#{item.block}</if>" + |
| | | "<if test='item.subCount != null'>, sub_count=#{item.subCount}</if>" + |
| | | "<if test='item.address != null'>, address=#{item.address}</if>" + |
| | |
| | | int batchUpdate(List<DeviceChannel> updateChannels); |
| | | |
| | | |
| | | @Select("SELECT * FROM wvp_device_channel WHERE device_id=#{deviceId} AND status=1") |
| | | @Select("SELECT * FROM wvp_device_channel WHERE device_id=#{deviceId} AND status=true") |
| | | List<DeviceChannel> queryOnlineChannelsByDeviceId(String deviceId); |
| | | |
| | | @Delete(value = {" <script>" + |
| | |
| | | List<DeviceChannel> queryAllChannels(String deviceId); |
| | | |
| | | |
| | | @Select("select count(1) as total, sum(status) as online from wvp_device_channel") |
| | | ResourceBaceInfo getOverview(); |
| | | |
| | | @Select("select channelId" + |
| | | ", device_id" + |
| | | ", latitude" + |
| | |
| | | "from wvp_device_channel where device_id = #{deviceId} " + |
| | | "and latitude != 0 " + |
| | | "and longitude != 0 " + |
| | | "and(latitude_gcj02=0orlatitude_wgs84=0orlongitude_wgs84= 0 or longitude_gcj02 = 0)") |
| | | "and(latitude_gcj02=0 or latitude_wgs84=0 or longitude_wgs84= 0 or longitude_gcj02 = 0)") |
| | | List<DeviceChannel> getChannelsWithoutTransform(String deviceId); |
| | | |
| | | @Select("select de.* from wvp_device de left join wvp_device_channel dc on de.device_id = dc.deviceId where dc.channel_id=#{channelId}") |
| | |
| | | |
| | | @Update({"<script>" + |
| | | "<foreach collection='channels' item='item' separator=';'>" + |
| | | "UPDATE wvp_device_channel SET status=1 WHERE device_id=#{item.deviceId} AND channel_id=#{item.channelId}" + |
| | | "UPDATE wvp_device_channel SET status=true WHERE device_id=#{item.deviceId} AND channel_id=#{item.channelId}" + |
| | | "</foreach>" + |
| | | "</script>"}) |
| | | int batchOnline(List<DeviceChannel> channels); |
| | | |
| | | @Update({"<script>" + |
| | | "<foreach collection='channels' item='item' separator=';'>" + |
| | | "UPDATE wvp_device_channel SET status=0 WHERE device_id=#{item.deviceId} AND channel_id=#{item.channelId}" + |
| | | "UPDATE wvp_device_channel SET status= false WHERE device_id=#{item.deviceId} AND channel_id=#{item.channelId}" + |
| | | "</foreach>" + |
| | | "</script>"}) |
| | | int batchOffline(List<DeviceChannel> channels); |
| | | |
| | | |
| | | @Select("select count(1) from wvp_device_channel where status = true") |
| | | int getOnlineCount(); |
| | | |
| | | @Select("select count(1) from wvp_device_channel") |
| | | int getAllChannelCount(); |
| | | } |
| | |
| | | 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; |
| | | |
| | |
| | | "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" + |
| | | "<if test=\"online != null\"> where online=${online}</if>"+ |
| | | " order by create_time desc "+ |
| | | " </script>" |
| | | ) |
| | | List<Device> getDevices(Boolean online); |
| | |
| | | "#{mediaServerId}" + |
| | | ")") |
| | | 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<Device> getAll(); |
| | |
| | | void batchDelForGbStream(List<GbStream> gbStreams); |
| | | |
| | | @Insert("<script> " + |
| | | "INSERT IGNORE into wvp_gb_stream " + |
| | | "INSERT into wvp_gb_stream " + |
| | | "(app, stream, gb_id, name, " + |
| | | "longitude, latitude, stream_type,media_server_id,create_time)" + |
| | | "values " + |
| | |
| | | "#{item.mediaServerId}, #{item.createTime}) "+ |
| | | "</foreach> " + |
| | | "</script>") |
| | | @Options(useGeneratedKeys = true, keyProperty = "gbStreamId", keyColumn = "gbStreamId") |
| | | @Options(useGeneratedKeys = true, keyProperty = "gbStreamId", keyColumn = "gb_stream_id") |
| | | void batchAdd(List<StreamPushItem> subList); |
| | | |
| | | @Update({"<script>" + |
| | |
| | | package com.genersoft.iot.vmp.storager.dao; |
| | | |
| | | 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 org.apache.ibatis.annotations.*; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | |
| | | List<StreamProxyItem> selectAutoRemoveItemByMediaServerId(String mediaServerId); |
| | | |
| | | @Select("select count(1) as total, sum(status) as online from wvp_stream_proxy") |
| | | ResourceBaceInfo getOverview(); |
| | | ResourceBaseInfo getOverview(); |
| | | |
| | | @Select("select count(1) from wvp_stream_proxy") |
| | | |
| | | int getAllCount(); |
| | | |
| | | @Select("select count(1) from wvp_stream_proxy where status = true") |
| | | int getOnline(); |
| | | } |
| | |
| | | import com.genersoft.iot.vmp.gb28181.bean.GbStream; |
| | | 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 org.apache.ibatis.annotations.*; |
| | | import org.springframework.stereotype.Repository; |
| | | |
| | |
| | | StreamPushItem selectOne(String app, String stream); |
| | | |
| | | @Insert("<script>" + |
| | | "Insert IGNORE INTO wvp_stream_push (app, stream, total_reader_count, origin_type, origin_type_str, " + |
| | | "Insert INTO wvp_stream_push (app, stream, total_reader_count, origin_type, origin_type_str, " + |
| | | "create_time, alive_second, media_server_id, status, push_ing) " + |
| | | "VALUES <foreach collection='streamPushItems' item='item' index='index' separator=','>" + |
| | | "( #{item.app}, #{item.stream}, #{item.totalReaderCount}, #{item.originType}, " + |
| | |
| | | @Select("SELECT CONCAT(app,stream) from wvp_gb_stream") |
| | | List<String> getAllAppAndStream(); |
| | | |
| | | @Select("select count(1) from wvp_stream_push ") |
| | | int getAllCount(); |
| | | |
| | | @Select(value = {" <script>" + |
| | | " <if test='pushIngAsOnline == true'> select count(1) as total, sum(push_ing) as online from wvp_stream_push </if>" + |
| | | " <if test='pushIngAsOnline == false'> select count(1) as total, sum(status) as online from wvp_stream_push </if>" + |
| | | " <if test='pushIngAsOnline == true'> select count(1) from wvp_stream_push where push_ing = true </if>" + |
| | | " <if test='pushIngAsOnline == false'> select count(1)from wvp_stream_push where status = true </if>" + |
| | | " </script>"}) |
| | | ResourceBaceInfo getOverview(boolean pushIngAsOnline); |
| | | int getAllOnline(Boolean usePushingAsStatus); |
| | | |
| | | @Select("<script> " + |
| | | "select app, stream from wvp_stream_push where (app, stream) in " + |
| | | "<foreach collection='streamPushItems' item='item' separator=','>" + |
| | | "(#{item.app}, #{item.stream}) " + |
| | | "</foreach>" + |
| | | "</script>") |
| | | List<StreamPushItem> getListIn(List<StreamPushItem> streamPushItems); |
| | | } |
| | |
| | | TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); |
| | | // 数据去重 |
| | | List<DeviceChannel> channels = new ArrayList<>(); |
| | | |
| | | List<DeviceChannel> updateChannels = new ArrayList<>(); |
| | | List<DeviceChannel> addChannels = new ArrayList<>(); |
| | | StringBuilder stringBuilder = new StringBuilder(); |
| | | Map<String, Integer> subContMap = new HashMap<>(); |
| | | if (deviceChannelList.size() > 0) { |
| | |
| | | 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<String> 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())) { |
| | |
| | | } |
| | | 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); |
| | |
| | | deviceChannel.setLatitude(0.0); |
| | | deviceChannel.setDeviceId(platform.getDeviceGBId()); |
| | | deviceChannel.setManufacture("wvp-pro"); |
| | | deviceChannel.setStatus(1); |
| | | deviceChannel.setStatus(true); |
| | | deviceChannel.setParental(1); |
| | | |
| | | deviceChannel.setRegisterWay(1); |
File was renamed from src/main/java/com/genersoft/iot/vmp/vmanager/bean/ResourceBaceInfo.java |
| | |
| | | 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; |
| | | } |
| | |
| | | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | @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; |
| | |
| | | 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); |