| | |
| | | |
| | | import com.ard.gb28181.api.domain.Device; |
| | | import com.ard.gb28181.api.domain.DeviceChannel; |
| | | import com.ard.gb28181.api.domain.GbCode; |
| | | import com.ard.gb28181.domain.GbChannel; |
| | | import com.ard.gb28181.service.IDeviceChannelService; |
| | | import com.ard.gb28181.service.IGbChannelService; |
| | | import com.ard.gb28181.service.IRedisCatchStorage; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | |
| | | @Autowired |
| | | private IRedisCatchStorage redisCatchStorage; |
| | | |
| | | @Autowired |
| | | private IGbChannelService gbChannelService; |
| | | |
| | | /** |
| | | * 根据设备id清楚设备通道 |
| | |
| | | List<DeviceChannel> deviceChannelsInRedis = redisCatchStorage.queryAllChannelsForRefresh(device.getDeviceId()); |
| | | |
| | | redisCatchStorage.batchAdd(device.getDeviceId(), mergeWithNewChannels(deviceChannelsInRedis, channels, device.isOnLine())); |
| | | |
| | | // 自动为每个通道创建 GbChannel 记录(若不存在) |
| | | autoCreateGbChannelForChannels(device, channels); |
| | | } |
| | | |
| | | /** |
| | | * 自动为设备下的每个通道创建 GbChannel 记录 |
| | | */ |
| | | private void autoCreateGbChannelForChannels(Device device, List<DeviceChannel> channels) { |
| | | try { |
| | | String parentDeviceId = device.getDeviceId(); |
| | | for (DeviceChannel channel : channels) { |
| | | String channelId = channel.getDeviceId(); |
| | | if (channelId == null) { |
| | | continue; |
| | | } |
| | | // 跳过行政区划(设备ID长度 <= 8) |
| | | if (channelId.length() <= 8) { |
| | | continue; |
| | | } |
| | | // 跳过业务分组(215)和虚拟组织(216) |
| | | if (channelId.length() == 20) { |
| | | try { |
| | | GbCode gbCode = GbCode.decode(channelId); |
| | | if (gbCode != null && ("215".equals(gbCode.getTypeCode()) || "216".equals(gbCode.getTypeCode()))) { |
| | | continue; |
| | | } |
| | | } catch (Exception ignored) { |
| | | } |
| | | } |
| | | |
| | | // 检查是否已存在 |
| | | GbChannel existing = gbChannelService.selectByGbDeviceIdAndGbChannelId(parentDeviceId, channelId); |
| | | if (existing == null) { |
| | | GbChannel gbChannel = new GbChannel(); |
| | | gbChannel.setGbDeviceId(parentDeviceId); |
| | | gbChannel.setGbChannelId(channelId); |
| | | gbChannel.setChannelName(channel.getName() != null ? channel.getName() : channelId); |
| | | gbChannel.setDeviceCode(channelId); |
| | | gbChannel.setStreamMode(device.getStreamMode() != null ? device.getStreamMode() : "TCP-PASSIVE"); |
| | | gbChannel.setEnableMp4("0"); |
| | | gbChannelService.insertGbChannel(gbChannel); |
| | | log.info("[GbChannel自动创建] parentDeviceId={}, channelId={}, id={}", |
| | | parentDeviceId, channelId, gbChannel.getId()); |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("[GbChannel自动创建] 失败 parentDeviceId={}", device.getDeviceId(), e); |
| | | } |
| | | } |
| | | |
| | | /** |