| | |
| | | package com.genersoft.iot.vmp.service.impl; |
| | | |
| | | import com.genersoft.iot.vmp.conf.DynamicTask; |
| | | import com.genersoft.iot.vmp.conf.UserSetting; |
| | | import com.genersoft.iot.vmp.gb28181.bean.*; |
| | | import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; |
| | | import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask; |
| | | import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander; |
| | | import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd.CatalogResponseMessageHandler; |
| | | import com.genersoft.iot.vmp.gb28181.utils.Coordtransform; |
| | | import com.genersoft.iot.vmp.service.IDeviceChannelService; |
| | | import com.genersoft.iot.vmp.service.IDeviceService; |
| | | import com.genersoft.iot.vmp.gb28181.task.impl.CatalogSubscribeTask; |
| | | import com.genersoft.iot.vmp.gb28181.task.impl.MobilePositionSubscribeTask; |
| | | import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander; |
| | | import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd.CatalogResponseMessageHandler; |
| | | import com.genersoft.iot.vmp.service.IDeviceChannelService; |
| | | import com.genersoft.iot.vmp.service.IDeviceService; |
| | | import com.genersoft.iot.vmp.service.IMediaServerService; |
| | | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; |
| | | import com.genersoft.iot.vmp.storager.IVideoManagerStorage; |
| | | import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; |
| | | 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 org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.jdbc.datasource.DataSourceTransactionManager; |
| | | import org.springframework.jdbc.support.incrementer.AbstractIdentityColumnMaxValueIncrementer; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.TransactionDefinition; |
| | | import org.springframework.transaction.TransactionStatus; |
| | | import org.springframework.util.ObjectUtils; |
| | | import org.springframework.util.StringUtils; |
| | | |
| | | import javax.sip.InvalidArgumentException; |
| | | import javax.sip.SipException; |
| | |
| | | TransactionDefinition transactionDefinition; |
| | | |
| | | @Autowired |
| | | private IVideoManagerStorage storage; |
| | | private UserSetting userSetting; |
| | | |
| | | @Autowired |
| | | private ISIPCommander commander; |
| | |
| | | } |
| | | sync(device); |
| | | }else { |
| | | |
| | | if(device.getOnline() == 0){ |
| | | device.setOnline(1); |
| | | device.setCreateTime(now); |
| | | logger.info("[设备上线,离线状态下重新注册]: {},查询设备信息以及通道信息", device.getDeviceId()); |
| | | deviceMapper.update(device); |
| | | redisCatchStorage.updateDevice(device); |
| | | try { |
| | | commander.deviceInfoQuery(device); |
| | | } catch (InvalidArgumentException | SipException | ParseException e) { |
| | | logger.error("[命令发送失败] 查询设备信息: {}", e.getMessage()); |
| | | if (userSetting.getSyncChannelOnDeviceOnline()) { |
| | | logger.info("[设备上线,离线状态下重新注册]: {},查询设备信息以及通道信息", device.getDeviceId()); |
| | | try { |
| | | commander.deviceInfoQuery(device); |
| | | } catch (InvalidArgumentException | SipException | ParseException e) { |
| | | logger.error("[命令发送失败] 查询设备信息: {}", e.getMessage()); |
| | | } |
| | | sync(device); |
| | | // TODO 如果设备下的通道级联到了其他平台,那么需要发送事件或者notify给上级平台 |
| | | } |
| | | sync(device); |
| | | // TODO 如果设备下的通道级联到了其他平台,那么需要发送事件或者notify给上级平台 |
| | | }else { |
| | | if (deviceChannelMapper.queryAllChannels(device.getDeviceId()).size() == 0) { |
| | | logger.info("[设备上线]: {},通道数为0,查询通道信息", device.getDeviceId()); |
| | | sync(device); |
| | | } |
| | | |
| | | deviceMapper.update(device); |
| | | redisCatchStorage.updateDevice(device); |
| | | } |
| | |
| | | redisCatchStorage.updateDevice(device); |
| | | deviceMapper.update(device); |
| | | //进行通道离线 |
| | | deviceChannelMapper.offlineByDeviceId(deviceId); |
| | | // deviceChannelMapper.offlineByDeviceId(deviceId); |
| | | // 离线释放所有ssrc |
| | | List<SsrcTransaction> ssrcTransactions = streamSession.getSsrcTransactionForAll(deviceId, null, null, null); |
| | | if (ssrcTransactions != null && ssrcTransactions.size() > 0) { |
| | |
| | | return null; |
| | | } |
| | | // 使用行政区划展示树 |
| | | if (parentId.length() > 10) { |
| | | // TODO 可能是行政区划与业务分组混杂的情形 |
| | | return null; |
| | | } |
| | | // if (parentId.length() > 10) { |
| | | // // TODO 可能是行政区划与业务分组混杂的情形 |
| | | // return null; |
| | | // } |
| | | |
| | | if (parentId.length() == 10 ) { |
| | | if (onlyCatalog) { |
| | |
| | | List<DeviceChannel> channelsForCivilCode = deviceChannelMapper.getChannelsWithCivilCodeAndLength(deviceId, parentId, parentId.length() + 2); |
| | | if (!onlyCatalog) { |
| | | List<DeviceChannel> channels = deviceChannelMapper.getChannelsByCivilCode(deviceId, parentId); |
| | | channelsForCivilCode.addAll(channels); |
| | | |
| | | for(DeviceChannel channel : channels) { |
| | | boolean flag = false; |
| | | for(DeviceChannel deviceChannel : channelsForCivilCode) { |
| | | if(channel.getChannelId().equals(deviceChannel.getChannelId())) { |
| | | flag = true; |
| | | } |
| | | } |
| | | if(!flag) { |
| | | channelsForCivilCode.add(channel); |
| | | } |
| | | } |
| | | } |
| | | List<BaseTree<DeviceChannel>> trees = transportChannelsToTree(channelsForCivilCode, parentId); |
| | | return trees; |
| | |
| | | if (!ObjectUtils.isEmpty(device.getMediaServerId())) { |
| | | deviceInStore.setMediaServerId(device.getMediaServerId()); |
| | | } |
| | | deviceInStore.setSdpIp(device.getSdpIp()); |
| | | deviceInStore.setCharset(device.getCharset()); |
| | | deviceInStore.setTreeType(device.getTreeType()); |
| | | |
| | | // 目录订阅相关的信息 |
| | | if (device.getSubscribeCycleForCatalog() > 0) { |
| | |
| | | if (!deviceInStore.getGeoCoordSys().equals(device.getGeoCoordSys())) { |
| | | updateDeviceChannelGeoCoordSys(device); |
| | | } |
| | | // 更新redis |
| | | redisCatchStorage.updateDevice(device); |
| | | deviceMapper.updateCustom(device); |
| | | } |
| | | |
| | |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | @Override |
| | | public ResourceBaceInfo getOverview() { |
| | | return deviceMapper.getOverview(); |
| | | } |
| | | } |