|  |  |  | 
|---|
|  |  |  | import com.genersoft.iot.vmp.storager.IVideoManagerStorage; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.storager.dao.*; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.utils.DateUtil; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; | 
|---|
|  |  |  | import com.github.pagehelper.PageHelper; | 
|---|
|  |  |  | import com.github.pagehelper.PageInfo; | 
|---|
|  |  |  | 
|---|
|  |  |  | import org.springframework.transaction.annotation.Transactional; | 
|---|
|  |  |  | import org.springframework.util.StringUtils; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.text.SimpleDateFormat; | 
|---|
|  |  |  | import java.util.*; | 
|---|
|  |  |  | import java.util.concurrent.ConcurrentHashMap; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 视频设备数据存储-jdbc实现 | 
|---|
|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private ParentPlatformMapper parentPlatformMapper; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 根据设备ID判断设备是否存在 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | 
|---|
|  |  |  | return deviceMapper.getDeviceByDeviceId(deviceId) != null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 视频设备创建 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param device 设备对象 | 
|---|
|  |  |  | * @return true:创建成功  false:创建失败 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public synchronized boolean create(Device device) { | 
|---|
|  |  |  | redisCatchStorage.updateDevice(device); | 
|---|
|  |  |  | return deviceMapper.add(device) > 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 视频设备更新 | 
|---|
|  |  |  | * | 
|---|
|  |  |  | * @param device 设备对象 | 
|---|
|  |  |  | * @return true:更新成功  false:更新失败 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public synchronized boolean updateDevice(Device device) { | 
|---|
|  |  |  | String now = this.format.format(System.currentTimeMillis()); | 
|---|
|  |  |  | device.setUpdateTime(now); | 
|---|
|  |  |  | Device deviceByDeviceId = deviceMapper.getDeviceByDeviceId(device.getDeviceId()); | 
|---|
|  |  |  | device.setCharset(device.getCharset().toUpperCase()); | 
|---|
|  |  |  | if (deviceByDeviceId == null) { | 
|---|
|  |  |  | device.setCreateTime(now); | 
|---|
|  |  |  | redisCatchStorage.updateDevice(device); | 
|---|
|  |  |  | return deviceMapper.add(device) > 0; | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | redisCatchStorage.updateDevice(device); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return deviceMapper.update(device) > 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public synchronized void updateChannel(String deviceId, DeviceChannel channel) { | 
|---|
|  |  |  | String channelId = channel.getChannelId(); | 
|---|
|  |  |  | 
|---|
|  |  |  | if (streamInfo != null) { | 
|---|
|  |  |  | channel.setStreamId(streamInfo.getStream()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String now = this.format.format(System.currentTimeMillis()); | 
|---|
|  |  |  | String now = DateUtil.getNow(); | 
|---|
|  |  |  | channel.setUpdateTime(now); | 
|---|
|  |  |  | DeviceChannel deviceChannel = deviceChannelMapper.queryChannel(deviceId, channelId); | 
|---|
|  |  |  | if (deviceChannel == null) { | 
|---|
|  |  |  | 
|---|
|  |  |  | if (streamInfo != null) { | 
|---|
|  |  |  | channel.setStreamId(streamInfo.getStream()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String now = this.format.format(System.currentTimeMillis()); | 
|---|
|  |  |  | String now = DateUtil.getNow(); | 
|---|
|  |  |  | channel.setUpdateTime(now); | 
|---|
|  |  |  | channel.setCreateTime(now); | 
|---|
|  |  |  | addChannels.add(channel); | 
|---|
|  |  |  | 
|---|
|  |  |  | if (streamInfo != null) { | 
|---|
|  |  |  | channel.setStreamId(streamInfo.getStream()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String now = this.format.format(System.currentTimeMillis()); | 
|---|
|  |  |  | String now = DateUtil.getNow(); | 
|---|
|  |  |  | channel.setUpdateTime(now); | 
|---|
|  |  |  | if (channelsInStore.get(channel.getChannelId()) != null) { | 
|---|
|  |  |  | updateChannels.add(channel); | 
|---|
|  |  |  | 
|---|
|  |  |  | if (deviceChannelList == null) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<DeviceChannel> allChannelInPlay = deviceChannelMapper.getAllChannelInPlay(); | 
|---|
|  |  |  | Map<String,DeviceChannel> allChannelMapInPlay = new ConcurrentHashMap<>(); | 
|---|
|  |  |  | if (allChannelInPlay.size() > 0) { | 
|---|
|  |  |  | for (DeviceChannel deviceChannel : allChannelInPlay) { | 
|---|
|  |  |  | allChannelMapInPlay.put(deviceChannel.getChannelId(), deviceChannel); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); | 
|---|
|  |  |  | // 数据去重 | 
|---|
|  |  |  | List<DeviceChannel> channels = new ArrayList<>(); | 
|---|
|  |  |  | StringBuilder stringBuilder = new StringBuilder(); | 
|---|
|  |  |  | Map<String, Integer> subContMap = new HashMap<>(); | 
|---|
|  |  |  | if (deviceChannelList != null && deviceChannelList.size() > 1) { | 
|---|
|  |  |  | if (deviceChannelList.size() > 1) { | 
|---|
|  |  |  | // 数据去重 | 
|---|
|  |  |  | Set<String> gbIdSet = new HashSet<>(); | 
|---|
|  |  |  | for (DeviceChannel deviceChannel : deviceChannelList) { | 
|---|
|  |  |  | if (!gbIdSet.contains(deviceChannel.getChannelId())) { | 
|---|
|  |  |  | gbIdSet.add(deviceChannel.getChannelId()); | 
|---|
|  |  |  | if (allChannelMapInPlay.containsKey(deviceChannel.getChannelId())) { | 
|---|
|  |  |  | deviceChannel.setStreamId(allChannelMapInPlay.get(deviceChannel.getChannelId()).getStreamId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | channels.add(deviceChannel); | 
|---|
|  |  |  | if (!StringUtils.isEmpty(deviceChannel.getParentId())) { | 
|---|
|  |  |  | if (subContMap.get(deviceChannel.getParentId()) == null) { | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public PageInfo queryChannelsByDeviceId(String deviceId, String query, Boolean hasSubChannel, Boolean online, int page, int count) { | 
|---|
|  |  |  | public PageInfo queryChannelsByDeviceId(String deviceId, String query, Boolean hasSubChannel, Boolean online, Boolean catalogUnderDevice, int page, int count) { | 
|---|
|  |  |  | // 获取到所有正在播放的流 | 
|---|
|  |  |  | PageHelper.startPage(page, count); | 
|---|
|  |  |  | List<DeviceChannel> all = deviceChannelMapper.queryChannels(deviceId, null, query, hasSubChannel, online); | 
|---|
|  |  |  | List<DeviceChannel> all; | 
|---|
|  |  |  | if (catalogUnderDevice != null && catalogUnderDevice) { | 
|---|
|  |  |  | all = deviceChannelMapper.queryChannels(deviceId, deviceId, query, hasSubChannel, online); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | all = deviceChannelMapper.queryChannels(deviceId, null, query, hasSubChannel, online); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return new PageInfo<>(all); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | public synchronized boolean outline(String deviceId) { | 
|---|
|  |  |  | logger.info("更新设备离线: " + deviceId); | 
|---|
|  |  |  | Device device = deviceMapper.getDeviceByDeviceId(deviceId); | 
|---|
|  |  |  | if (device == null) return false; | 
|---|
|  |  |  | if (device == null) { | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | device.setOnline(0); | 
|---|
|  |  |  | redisCatchStorage.updateDevice(device); | 
|---|
|  |  |  | return deviceMapper.update(device) > 0; | 
|---|
|  |  |  | 
|---|
|  |  |  | * 删除指定设备的所有移动位置 | 
|---|
|  |  |  | * @param deviceId | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public int clearMobilePositionsByDeviceId(String deviceId) { | 
|---|
|  |  |  | return deviceMobilePositionMapper.clearMobilePositionsByDeviceId(deviceId); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | boolean result = false; | 
|---|
|  |  |  | streamProxyItem.setStreamType("proxy"); | 
|---|
|  |  |  | streamProxyItem.setStatus(true); | 
|---|
|  |  |  | String now = this.format.format(System.currentTimeMillis()); | 
|---|
|  |  |  | String now = DateUtil.getNow(); | 
|---|
|  |  |  | streamProxyItem.setCreateTime(now); | 
|---|
|  |  |  | streamProxyItem.setCreateStamp(System.currentTimeMillis()); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void updateMediaList(List<StreamPushItem> streamPushItems) { | 
|---|
|  |  |  | if (streamPushItems == null || streamPushItems.size() == 0) return; | 
|---|
|  |  |  | if (streamPushItems == null || streamPushItems.size() == 0) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | logger.info("updateMediaList:  " + streamPushItems.size()); | 
|---|
|  |  |  | streamPushMapper.addAll(streamPushItems); | 
|---|
|  |  |  | // TODO 待优化 | 
|---|