|  |  | 
 |  |  | package com.genersoft.iot.vmp.storager.impl; | 
 |  |  |  | 
 |  |  | import com.genersoft.iot.vmp.common.StreamInfo; | 
 |  |  | import com.genersoft.iot.vmp.conf.SipConfig; | 
 |  |  | import com.genersoft.iot.vmp.conf.UserSetting; | 
 |  |  | import com.genersoft.iot.vmp.gb28181.bean.*; | 
 |  |  | import com.genersoft.iot.vmp.gb28181.event.EventPublisher; | 
 |  |  | import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; | 
 |  |  | import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; | 
 |  |  | import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; | 
 |  |  | import com.genersoft.iot.vmp.service.IGbStreamService; | 
 |  |  | import com.genersoft.iot.vmp.service.bean.GPSMsgInfo; | 
 |  |  | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; | 
 |  |  | 
 |  |  | import org.springframework.transaction.annotation.Transactional; | 
 |  |  | import org.springframework.util.CollectionUtils; | 
 |  |  | import org.springframework.util.ObjectUtils; | 
 |  |  | import org.springframework.util.StringUtils; | 
 |  |  |  | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.concurrent.ConcurrentHashMap; | 
 |  |  | 
 |  |  |  | 
 |  |  |    @Autowired | 
 |  |  |     private GbStreamMapper gbStreamMapper; | 
 |  |  |  | 
 |  |  |    @Autowired | 
 |  |  |     private UserSetting userSetting; | 
 |  |  |  | 
 |  |  |    @Autowired | 
 |  |  |     private PlatformCatalogMapper catalogMapper; | 
 |  |  | 
 |  |  |       PageHelper.startPage(page, count); | 
 |  |  |       List<DeviceChannel> all; | 
 |  |  |       if (catalogUnderDevice != null && catalogUnderDevice) { | 
 |  |  |          all = deviceChannelMapper.queryChannels(deviceId, deviceId, query, hasSubChannel, online); | 
 |  |  |          all = deviceChannelMapper.queryChannels(deviceId, deviceId, query, hasSubChannel, online,null); | 
 |  |  |          // 海康设备的parentId是SIP id | 
 |  |  |          List<DeviceChannel> deviceChannels = deviceChannelMapper.queryChannels(deviceId, sipConfig.getId(), query, hasSubChannel, online); | 
 |  |  |          List<DeviceChannel> deviceChannels = deviceChannelMapper.queryChannels(deviceId, sipConfig.getId(), query, hasSubChannel, online,null); | 
 |  |  |          all.addAll(deviceChannels); | 
 |  |  |       }else { | 
 |  |  |          all = deviceChannelMapper.queryChannels(deviceId, null, query, hasSubChannel, online); | 
 |  |  |          all = deviceChannelMapper.queryChannels(deviceId, null, query, hasSubChannel, online,null); | 
 |  |  |       } | 
 |  |  |       return new PageInfo<>(all); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    @Override | 
 |  |  |    public List<DeviceChannel> queryChannelsByDeviceIdWithStartAndLimit(String deviceId, String query, Boolean hasSubChannel, Boolean online, int start, int limit) { | 
 |  |  |       return deviceChannelMapper.queryChannelsByDeviceIdWithStartAndLimit(deviceId, null, query, hasSubChannel, online, start, limit); | 
 |  |  |    public List<DeviceChannel> queryChannelsByDeviceIdWithStartAndLimit(String deviceId, String query, Boolean hasSubChannel, Boolean online, int start, int limit,List<String> channelIds) { | 
 |  |  |       return deviceChannelMapper.queryChannelsByDeviceIdWithStartAndLimit(deviceId, null, query, hasSubChannel, online, start, limit,channelIds); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |    @Override | 
 |  |  |    public List<DeviceChannel> queryChannelsByDeviceId(String deviceId) { | 
 |  |  |       return deviceChannelMapper.queryChannels(deviceId, null,null, null, null); | 
 |  |  |    public List<DeviceChannel> queryChannelsByDeviceId(String deviceId,Boolean online,List<String> channelIds) { | 
 |  |  |       return deviceChannelMapper.queryChannels(deviceId, null,null, null, online,channelIds); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    @Override | 
 |  |  |    public PageInfo<DeviceChannel> querySubChannels(String deviceId, String parentChannelId, String query, Boolean hasSubChannel, Boolean online, int page, int count) { | 
 |  |  |       PageHelper.startPage(page, count); | 
 |  |  |       List<DeviceChannel> all = deviceChannelMapper.queryChannels(deviceId, parentChannelId, query, hasSubChannel, online); | 
 |  |  |       List<DeviceChannel> all = deviceChannelMapper.queryChannels(deviceId, parentChannelId, query, hasSubChannel, online,null); | 
 |  |  |       return new PageInfo<>(all); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  | 
 |  |  |     * @return PageInfo<Device> 分页设备对象数组 | 
 |  |  |     */ | 
 |  |  |    @Override | 
 |  |  |    public PageInfo<Device> queryVideoDeviceList(int page, int count) { | 
 |  |  |    public PageInfo<Device> queryVideoDeviceList(int page, int count,Boolean online) { | 
 |  |  |       PageHelper.startPage(page, count); | 
 |  |  |       List<Device> all = deviceMapper.getDevices(); | 
 |  |  |       List<Device> all = deviceMapper.getDevices(online); | 
 |  |  |       return new PageInfo<>(all); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  | 
 |  |  |     * @return List<Device> 设备对象数组 | 
 |  |  |     */ | 
 |  |  |    @Override | 
 |  |  |    public List<Device> queryVideoDeviceList() { | 
 |  |  |    public List<Device> queryVideoDeviceList(Boolean online) { | 
 |  |  |  | 
 |  |  |       List<Device> deviceList =  deviceMapper.getDevices(); | 
 |  |  |       List<Device> deviceList =  deviceMapper.getDevices(online); | 
 |  |  |       return deviceList; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  |     * 删除设备 | 
 |  |  |     * | 
 |  |  |     * @param deviceId 设备ID | 
 |  |  |     * @return true:删除成功  false:删除失败 | 
 |  |  |     */ | 
 |  |  |    @Override | 
 |  |  |    public boolean delete(String deviceId) { | 
 |  |  |       TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition); | 
 |  |  |       boolean result = false; | 
 |  |  |       try { | 
 |  |  |          platformChannelMapper.delChannelForDeviceId(deviceId); | 
 |  |  |          deviceChannelMapper.cleanChannelsByDeviceId(deviceId); | 
 |  |  |          if ( deviceMapper.del(deviceId) < 0 ) { | 
 |  |  |             //事务回滚 | 
 |  |  |             dataSourceTransactionManager.rollback(transactionStatus); | 
 |  |  |          } | 
 |  |  |          result = true; | 
 |  |  |          dataSourceTransactionManager.commit(transactionStatus);     //手动提交 | 
 |  |  |       }catch (Exception e) { | 
 |  |  |          dataSourceTransactionManager.rollback(transactionStatus); | 
 |  |  |       } | 
 |  |  |       return result; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  |     * 更新设备在线 | 
 |  |  |     * | 
 |  |  |     * @param deviceId 设备ID | 
 |  |  |     * @return true:更新成功  false:更新失败 | 
 |  |  |     */ | 
 |  |  |    @Override | 
 |  |  |    public synchronized boolean online(String deviceId) { | 
 |  |  |       Device device = deviceMapper.getDeviceByDeviceId(deviceId); | 
 |  |  |       if (device == null) { | 
 |  |  |          return false; | 
 |  |  |       } | 
 |  |  |       device.setOnline(1); | 
 |  |  |       logger.info("更新设备在线: " + deviceId); | 
 |  |  |       redisCatchStorage.updateDevice(device); | 
 |  |  |       return deviceMapper.update(device) > 0; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  |     * 更新设备离线 | 
 |  |  |     * | 
 |  |  |     * @param deviceId 设备ID | 
 |  |  |     * @return true:更新成功  false:更新失败 | 
 |  |  |     */ | 
 |  |  |    @Override | 
 |  |  |    public synchronized boolean outline(String deviceId) { | 
 |  |  |       logger.info("更新设备离线: " + deviceId); | 
 |  |  |       Device device = deviceMapper.getDeviceByDeviceId(deviceId); | 
 |  |  |       if (device == null) { | 
 |  |  |          return false; | 
 |  |  |       } | 
 |  |  |       device.setOnline(0); | 
 |  |  |       redisCatchStorage.updateDevice(device); | 
 |  |  |       return deviceMapper.update(device) > 0; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  |     * 更新所有设备离线 | 
 |  |  |     * | 
 |  |  |     * @return true:更新成功  false:更新失败 | 
 |  |  |     */ | 
 |  |  |    @Override | 
 |  |  |    public synchronized boolean outlineForAll() { | 
 |  |  |       logger.info("更新所有设备离线"); | 
 |  |  |       int result = deviceMapper.outlineForAll(); | 
 |  |  |       return result > 0; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  | 
 |  |  |     */ | 
 |  |  |    @Override | 
 |  |  |    public List<DeviceChannel> queryGbStreamListInPlatform(String platformId) { | 
 |  |  |       return gbStreamMapper.queryGbStreamListInPlatform(platformId); | 
 |  |  |       return gbStreamMapper.queryGbStreamListInPlatform(platformId, userSetting.isUsePushingAsStatus()); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    /** | 
 |  |  | 
 |  |  |       return gbStreamMapper.updateStreamGPS(gpsMsgInfos); | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    private List<DeviceChannel> getDeviceChannelListByChannelReduceList(List<ChannelReduce> channelReduces, String catalogId) { | 
 |  |  |       List<DeviceChannel> deviceChannelList = new ArrayList<>(); | 
 |  |  |       if (channelReduces.size() > 0){ | 
 |  |  |          for (ChannelReduce channelReduce : channelReduces) { | 
 |  |  |             DeviceChannel deviceChannel = queryChannel(channelReduce.getDeviceId(), channelReduce.getChannelId()); | 
 |  |  |             deviceChannel.setParental(1); | 
 |  |  |             deviceChannel.setParentId(catalogId); | 
 |  |  |             deviceChannelList.add(deviceChannel); | 
 |  |  |          } | 
 |  |  |       } | 
 |  |  |       return deviceChannelList; | 
 |  |  |    } | 
 |  |  |  | 
 |  |  |    private DeviceChannel getDeviceChannelByCatalog(PlatformCatalog catalog) { | 
 |  |  |       ParentPlatform platform = platformMapper.getParentPlatByServerGBId(catalog.getPlatformId()); |