New file |
| | |
| | | package com.genersoft.iot.vmp.service.impl; |
| | | |
| | | import com.genersoft.iot.vmp.common.StreamInfo; |
| | | import com.genersoft.iot.vmp.gb28181.bean.Device; |
| | | import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; |
| | | import com.genersoft.iot.vmp.gb28181.utils.Coordtransform; |
| | | import com.genersoft.iot.vmp.service.IDeviceChannelService; |
| | | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; |
| | | import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; |
| | | import com.genersoft.iot.vmp.storager.dao.DeviceMapper; |
| | | import com.genersoft.iot.vmp.utils.DateUtil; |
| | | import com.genersoft.iot.vmp.vmanager.bean.ResourceBaceInfo; |
| | | import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * @author lin |
| | | */ |
| | | @Service |
| | | public class DeviceChannelServiceImpl implements IDeviceChannelService { |
| | | |
| | | private final static Logger logger = LoggerFactory.getLogger(DeviceChannelServiceImpl.class); |
| | | |
| | | @Autowired |
| | | private IRedisCatchStorage redisCatchStorage; |
| | | |
| | | @Autowired |
| | | private DeviceChannelMapper channelMapper; |
| | | |
| | | @Autowired |
| | | private DeviceMapper deviceMapper; |
| | | |
| | | @Override |
| | | public DeviceChannel updateGps(DeviceChannel deviceChannel, Device device) { |
| | | if (deviceChannel.getLongitude()*deviceChannel.getLatitude() > 0) { |
| | | if (device == null) { |
| | | device = deviceMapper.getDeviceByDeviceId(deviceChannel.getDeviceId()); |
| | | } |
| | | |
| | | if ("WGS84".equals(device.getGeoCoordSys())) { |
| | | deviceChannel.setLongitudeWgs84(deviceChannel.getLongitude()); |
| | | deviceChannel.setLatitudeWgs84(deviceChannel.getLatitude()); |
| | | Double[] position = Coordtransform.WGS84ToGCJ02(deviceChannel.getLongitude(), deviceChannel.getLatitude()); |
| | | deviceChannel.setLongitudeGcj02(position[0]); |
| | | deviceChannel.setLatitudeGcj02(position[1]); |
| | | }else if ("GCJ02".equals(device.getGeoCoordSys())) { |
| | | deviceChannel.setLongitudeGcj02(deviceChannel.getLongitude()); |
| | | deviceChannel.setLatitudeGcj02(deviceChannel.getLatitude()); |
| | | Double[] position = Coordtransform.GCJ02ToWGS84(deviceChannel.getLongitude(), deviceChannel.getLatitude()); |
| | | deviceChannel.setLongitudeWgs84(position[0]); |
| | | deviceChannel.setLatitudeWgs84(position[1]); |
| | | }else { |
| | | deviceChannel.setLongitudeGcj02(0.00); |
| | | deviceChannel.setLatitudeGcj02(0.00); |
| | | deviceChannel.setLongitudeWgs84(0.00); |
| | | deviceChannel.setLatitudeWgs84(0.00); |
| | | } |
| | | }else { |
| | | deviceChannel.setLongitudeGcj02(deviceChannel.getLongitude()); |
| | | deviceChannel.setLatitudeGcj02(deviceChannel.getLatitude()); |
| | | deviceChannel.setLongitudeWgs84(deviceChannel.getLongitude()); |
| | | deviceChannel.setLatitudeWgs84(deviceChannel.getLatitude()); |
| | | } |
| | | return deviceChannel; |
| | | } |
| | | |
| | | @Override |
| | | public void updateChannel(String deviceId, DeviceChannel channel) { |
| | | String channelId = channel.getChannelId(); |
| | | channel.setDeviceId(deviceId); |
| | | StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channelId); |
| | | if (streamInfo != null) { |
| | | channel.setStreamId(streamInfo.getStream()); |
| | | } |
| | | String now = DateUtil.getNow(); |
| | | channel.setUpdateTime(now); |
| | | DeviceChannel deviceChannel = channelMapper.queryChannel(deviceId, channelId); |
| | | channel = updateGps(channel, null); |
| | | if (deviceChannel == null) { |
| | | channel.setCreateTime(now); |
| | | channelMapper.add(channel); |
| | | }else { |
| | | channelMapper.update(channel); |
| | | } |
| | | channelMapper.updateChannelSubCount(deviceId,channel.getParentId()); |
| | | } |
| | | |
| | | @Override |
| | | public int updateChannels(String deviceId, List<DeviceChannel> channels) { |
| | | List<DeviceChannel> addChannels = new ArrayList<>(); |
| | | List<DeviceChannel> updateChannels = new ArrayList<>(); |
| | | HashMap<String, DeviceChannel> channelsInStore = new HashMap<>(); |
| | | Device device = deviceMapper.getDeviceByDeviceId(deviceId); |
| | | if (channels != null && channels.size() > 0) { |
| | | List<DeviceChannel> channelList = channelMapper.queryChannels(deviceId, null, null, null, null,null); |
| | | if (channelList.size() == 0) { |
| | | for (DeviceChannel channel : channels) { |
| | | channel.setDeviceId(deviceId); |
| | | StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channel.getChannelId()); |
| | | if (streamInfo != null) { |
| | | channel.setStreamId(streamInfo.getStream()); |
| | | } |
| | | String now = DateUtil.getNow(); |
| | | channel.setUpdateTime(now); |
| | | channel.setCreateTime(now); |
| | | channel = updateGps(channel, device); |
| | | addChannels.add(channel); |
| | | } |
| | | }else { |
| | | for (DeviceChannel deviceChannel : channelList) { |
| | | channelsInStore.put(deviceChannel.getChannelId(), deviceChannel); |
| | | } |
| | | for (DeviceChannel channel : channels) { |
| | | channel.setDeviceId(deviceId); |
| | | StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(deviceId, channel.getChannelId()); |
| | | if (streamInfo != null) { |
| | | channel.setStreamId(streamInfo.getStream()); |
| | | } |
| | | String now = DateUtil.getNow(); |
| | | channel.setUpdateTime(now); |
| | | channel = updateGps(channel, device); |
| | | if (channelsInStore.get(channel.getChannelId()) != null) { |
| | | updateChannels.add(channel); |
| | | }else { |
| | | addChannels.add(channel); |
| | | channel.setCreateTime(now); |
| | | } |
| | | } |
| | | } |
| | | int limitCount = 300; |
| | | if (addChannels.size() > 0) { |
| | | if (addChannels.size() > limitCount) { |
| | | for (int i = 0; i < addChannels.size(); i += limitCount) { |
| | | int toIndex = i + limitCount; |
| | | if (i + limitCount > addChannels.size()) { |
| | | toIndex = addChannels.size(); |
| | | } |
| | | channelMapper.batchAdd(addChannels.subList(i, toIndex)); |
| | | } |
| | | }else { |
| | | channelMapper.batchAdd(addChannels); |
| | | } |
| | | } |
| | | if (updateChannels.size() > 0) { |
| | | if (updateChannels.size() > limitCount) { |
| | | for (int i = 0; i < updateChannels.size(); i += limitCount) { |
| | | int toIndex = i + limitCount; |
| | | if (i + limitCount > updateChannels.size()) { |
| | | toIndex = updateChannels.size(); |
| | | } |
| | | channelMapper.batchUpdate(updateChannels.subList(i, toIndex)); |
| | | } |
| | | }else { |
| | | channelMapper.batchUpdate(updateChannels); |
| | | } |
| | | } |
| | | } |
| | | return addChannels.size() + updateChannels.size(); |
| | | } |
| | | |
| | | @Override |
| | | public ResourceBaceInfo getOverview() { |
| | | return channelMapper.getOverview(); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public List<ChannelReduce> queryAllChannelList(String platformId) { |
| | | return channelMapper.queryChannelListInAll(null, null, null, platformId, null); |
| | | } |
| | | |
| | | |
| | | } |