|  |  |  | 
|---|
|  |  |  | import com.genersoft.iot.vmp.common.VideoManagerConstants; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.conf.DynamicTask; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.conf.UserSetting; | 
|---|
|  |  |  | import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException; | 
|---|
|  |  |  | 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.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.cmd.impl.SIPCommander; | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private final static Logger logger = LoggerFactory.getLogger(DeviceServiceImpl.class); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SIPCommander cmder; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private DynamicTask dynamicTask; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | sync(device); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (deviceInDb != null) { | 
|---|
|  |  |  | device.setSwitchPrimarySubStream(deviceInDb.isSwitchPrimarySubStream()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(!device.isOnLine()){ | 
|---|
|  |  |  | device.setOnLine(true); | 
|---|
|  |  |  | device.setCreateTime(now); | 
|---|
|  |  |  | 
|---|
|  |  |  | // 发送redis消息 | 
|---|
|  |  |  | redisCatchStorage.sendDeviceOrChannelStatus(device.getDeviceId(), null, true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // | 
|---|
|  |  |  | //        try { | 
|---|
|  |  |  | //            cmder.alarmSubscribe(device, 600, "0", "4", "0", "2023-7-27T00:00:00", "2023-7-28T00:00:00"); | 
|---|
|  |  |  | //        } catch (InvalidArgumentException e) { | 
|---|
|  |  |  | //            throw new RuntimeException(e); | 
|---|
|  |  |  | //        } catch (SipException e) { | 
|---|
|  |  |  | //            throw new RuntimeException(e); | 
|---|
|  |  |  | //        } catch (ParseException e) { | 
|---|
|  |  |  | //            throw new RuntimeException(e); | 
|---|
|  |  |  | //        } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | if (device == null) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (ObjectUtils.isEmpty(parentId) || parentId.equals(deviceId)) { | 
|---|
|  |  |  | parentId = null; | 
|---|
|  |  |  | if (ObjectUtils.isEmpty(parentId) ) { | 
|---|
|  |  |  | parentId = deviceId; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | List<DeviceChannel> rootNodes = deviceChannelMapper.getSubChannelsByDeviceId(deviceId, parentId, onlyCatalog); | 
|---|
|  |  |  | return transportChannelsToTree(rootNodes, ""); | 
|---|
|  |  |  | 
|---|
|  |  |  | logger.warn("更新设备时未找到设备信息"); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(deviceInStore.isSwitchPrimarySubStream() != device.isSwitchPrimarySubStream()){ | 
|---|
|  |  |  | //当修改设备的主子码流开关时,需要校验是否存在流,如果存在流则直接关闭 | 
|---|
|  |  |  | List<SsrcTransaction> ssrcTransactionForAll = streamSession.getSsrcTransactionForAll(device.getDeviceId(), null, null, null); | 
|---|
|  |  |  | if(ssrcTransactionForAll != null){ | 
|---|
|  |  |  | for (SsrcTransaction ssrcTransaction: ssrcTransactionForAll) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | cmder.streamByeCmd(device, ssrcTransaction.getChannelId(), ssrcTransaction.getStream(), null, null); | 
|---|
|  |  |  | } catch (InvalidArgumentException | SsrcTransactionNotFoundException | ParseException | SipException e) { | 
|---|
|  |  |  | throw new RuntimeException(e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | deviceChannelMapper.clearPlay(device.getDeviceId()); | 
|---|
|  |  |  | inviteStreamService.clearInviteInfo(device.getDeviceId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!ObjectUtils.isEmpty(device.getName())) { | 
|---|
|  |  |  | deviceInStore.setName(device.getName()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | if (!ObjectUtils.isEmpty(device.getMediaServerId())) { | 
|---|
|  |  |  | deviceInStore.setMediaServerId(device.getMediaServerId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | deviceInStore.setSdpIp(device.getSdpIp()); | 
|---|
|  |  |  | deviceInStore.setCharset(device.getCharset()); | 
|---|
|  |  |  | if (!ObjectUtils.isEmpty(device.getCharset())) { | 
|---|
|  |  |  | deviceInStore.setCharset(device.getCharset()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!ObjectUtils.isEmpty(device.getSdpIp())) { | 
|---|
|  |  |  | deviceInStore.setSdpIp(device.getSdpIp()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //  目录订阅相关的信息 | 
|---|
|  |  |  | if (device.getSubscribeCycleForCatalog() > 0) { | 
|---|
|  |  |  | 
|---|
|  |  |  | removeMobilePositionSubscribe(deviceInStore); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 坐标系变化,需要重新计算GCJ02坐标和WGS84坐标 | 
|---|
|  |  |  | if (!deviceInStore.getGeoCoordSys().equals(device.getGeoCoordSys())) { | 
|---|
|  |  |  | updateDeviceChannelGeoCoordSys(device); | 
|---|
|  |  |  | if (deviceInStore.getGeoCoordSys() != null) { | 
|---|
|  |  |  | // 坐标系变化,需要重新计算GCJ02坐标和WGS84坐标 | 
|---|
|  |  |  | if (!deviceInStore.getGeoCoordSys().equals(device.getGeoCoordSys())) { | 
|---|
|  |  |  | updateDeviceChannelGeoCoordSys(device); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | device.setGeoCoordSys("WGS84"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (device.getCharset() == null) { | 
|---|
|  |  |  | device.setCharset("GB2312"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 更新redis | 
|---|
|  |  |  | redisCatchStorage.updateDevice(device); | 
|---|
|  |  |  | deviceMapper.updateCustom(device); | 
|---|