From 2b1f7a47394363e95deb4dfa0f1c67d41e747f7f Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期三, 01 二月 2023 10:56:40 +0800
Subject: [PATCH] Merge branch 'wvp-28181-2.0' into fix-269

---
 src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java |  180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 180 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
new file mode 100644
index 0000000..880b697
--- /dev/null
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceChannelServiceImpl.java
@@ -0,0 +1,180 @@
+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);
+    }
+
+
+}

--
Gitblit v1.8.0