| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- 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 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);
- 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();
- }
- }
|