From 38eaaa87743252da53851047bd15b089ccf9697b Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期四, 07 三月 2024 11:00:40 +0800
Subject: [PATCH] SDK云台控制和setptz增加错误码返回 增加部门和相机按角色数据权限查询

---
 ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java |  469 +++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 283 insertions(+), 186 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
index a59702a..895723b 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/CameraSdkServiceImpl.java
@@ -1,25 +1,34 @@
 package com.ruoyi.device.camera.service.impl;
 
+import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
+import com.ruoyi.alarmpoints.well.domain.ArdWellGuideCamera;
+import com.ruoyi.alarmpoints.well.service.IArdAlarmpointsWellService;
 import com.ruoyi.common.annotation.SdkOperate;
 import com.ruoyi.common.constant.CacheConstants;
+import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.redis.RedisCache;
-import com.ruoyi.common.utils.Threads;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.service.IArdCamerasService;
 import com.ruoyi.device.camera.service.ICameraSdkService;
-import com.ruoyi.device.dhsdk.service.IDhClientService;
-import com.ruoyi.device.hiksdk.service.IHikClientService;
+import com.ruoyi.device.camera.factory.CameraSDK;
+import com.ruoyi.device.camera.factory.CameraSDKFactory;
+import com.ruoyi.device.noguidezone.domain.ArdCameraNoGuideZone;
+import com.ruoyi.device.noguidezone.service.IArdCameraNoGuideZoneService;
+import com.ruoyi.utils.gis.GisUtil;
+import com.ruoyi.utils.gis.Point;
+import com.ruoyi.utils.sdk.common.GlobalVariable;
+import com.ruoyi.utils.tools.ArdTool;
+import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.SmartInitializingSingleton;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 
 /**
@@ -30,37 +39,38 @@
  **/
 @Service
 @Slf4j(topic = "SDK")
-public class CameraSdkServiceImpl implements ICameraSdkService {
+public class CameraSdkServiceImpl implements ICameraSdkService, ApplicationRunner {
     @Resource
     private IArdCamerasService ardCamerasService;
     @Resource
-    IHikClientService hikClientService;
+    private RedisCache redisCache;
     @Resource
-    IDhClientService dhClientService;
+    private CameraSDKFactory cameraSDKFactory;
     @Resource
-    RedisCache redisCache;
+    private IArdAlarmpointsWellService ardAlarmpointsWellService;
     @Resource
-    AsyncLogin asyncLogin;
+    private IArdCameraNoGuideZoneService ardCameraNoGuideZoneService;
 
-
-
-    //鍒濆鍖朣DK
-    @PostConstruct
+    /**
+     * 鍚姩绾跨▼鏂规硶锛岀敤浜庢墽琛屽垵濮嬪寲鐧诲綍鐩告満鐨勯�昏緫
+     *
+     * @param args 鍛戒护琛屽弬鏁�
+     */
     @Override
-    public void loginAll() {
+    public void run(ApplicationArguments args) {
+
         try {
+            // 浠巃rdCamerasService涓幏鍙朅rdCameras鍒楄〃
             List<ArdCameras> ardCameras = ardCamerasService.selectArdCamerasListNoDataScope(new ArdCameras());
             for (ArdCameras camera : ardCameras) {
-                if ("1".equals(camera.getFactory())) {
-                    asyncLogin.hikLogin(camera);
-                } else if ("2".equals(camera.getFactory())) {
-                    asyncLogin.dhLogin(camera);
-                }
+                login(camera);
             }
         } catch (Exception ex) {
+            // 鍒濆鍖栫櫥褰曠浉鏈哄紓甯革紝璁板綍閿欒鏃ュ織
             log.error("鍒濆鍖栫櫥褰曠浉鏈哄紓甯革細" + ex.getMessage());
         }
     }
+
 
     //鐧诲綍
     @Override
@@ -69,13 +79,10 @@
         try {
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    asyncLogin.hikLogin(ardCamera);
-                    result = true;
-                } else if (factory.equals("2")) {
-                    asyncLogin.dhLogin(ardCamera);
-                    result = true;
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                //sdkStrategy.login(ardCamera);//鍚屾鐧诲綍
+                cameraSDK.asyncLogin(ardCamera);//寮傛鐧诲綍
+                result = true;
             }
         } catch (Exception ex) {
             log.error("鐧诲綍寮傚父锛�" + ex.getMessage());
@@ -92,11 +99,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.logout(cameraId);
-                } else if (factory.equals("2")) {
-                    result = dhClientService.logout(cameraId);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.logout(cameraId);
             }
         } catch (Exception ex) {
             log.error("娉ㄩ攢寮傚父锛�" + ex.getMessage());
@@ -114,11 +118,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    onLine = hikClientService.isOnLine(cmd);
-                } else if (factory.equals("2")) {
-                    onLine = dhClientService.isOnLine(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                onLine = cameraSDK.isOnLine(cmd);
             }
             return onLine;
         } catch (Exception ex) {
@@ -128,25 +129,16 @@
     }
 
     //浜戝彴鎺у埗
-    @SdkOperate
     @Override
-    public boolean pTZControl(CameraCmd cmd) {
-        try {
-            boolean result = false;
-            String cameraId = cmd.getCameraId();
-            ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
-            if (ardCamera != null) {
-                String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.pTZControlWithSpeed(cmd);
-                } else if (factory.equals("2")) {
-                    result = dhClientService.pTZControl(cmd);
-                }
-            }
-            return result;
-        } catch (Exception ex) {
-            log.error("ptz鎺у埗寮傚父锛�" + ex.getMessage());
-            return false;
+    public AjaxResult pTZControl(CameraCmd cmd) {
+        String cameraId = cmd.getCameraId();
+        ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
+        if (ardCamera != null) {
+            String factory = ardCamera.getFactory();
+            CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+            return cameraSDK.pTZControl(cmd);
+        } else {
+            return AjaxResult.error("鎽勫儚澶翠笉瀛樺湪");
         }
     }
 
@@ -159,11 +151,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.setFocusPos(cmd);
-                } else if (factory.equals("2")) {
-                    result = dhClientService.setFocusPos(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.setFocusPos(cmd);
             }
         } catch (Exception ex) {
             log.error("璁剧疆鑱氱劍鍊煎紓甯革細" + ex.getMessage());
@@ -181,11 +170,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.getFocusPos(cmd);
-                } else if (factory.equals("2")) {
-                    result = dhClientService.getFocusPos(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.getFocusPos(cmd);
             }
         } catch (Exception ex) {
             log.error("鑾峰彇鑱氱劍鍊煎紓甯革細" + ex.getMessage());
@@ -202,11 +188,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.setPreset(cmd);
-                } else if (factory.equals("2")) {
-                    result = dhClientService.setPreset(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.setPreset(cmd);
             }
         } catch (Exception ex) {
             log.error("璁剧疆棰勭疆浣嶅紓甯革細" + ex.getMessage());
@@ -223,11 +206,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.gotoPreset(cmd);
-                } else if (factory.equals("2")) {
-                    result = dhClientService.gotoPreset(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.gotoPreset(cmd);
             }
         } catch (Exception ex) {
             log.error("璋冪敤棰勭疆浣嶅紓甯革細" + ex.getMessage());
@@ -244,11 +224,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    map = hikClientService.getVideoCompressionCfg(cmd);
-                } else if (factory.equals("2")) {
-                    map = dhClientService.getVideoCompressionCfg(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                map = cameraSDK.getVideoCompressionCfg(cmd);
             }
         } catch (Exception ex) {
             log.error("鑾峰彇鐮佹祦鍘嬬缉鍙傛暟寮傚父锛�" + ex.getMessage());
@@ -265,11 +242,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.controlDefogcfg(cmd);
-                } else if (factory.equals("2")) {
-                    //涓嶆敮鎸�
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.controlDefogcfg(cmd);
             }
         } catch (Exception ex) {
             log.error("鎿嶆帶閫忛浘寮傚父锛�" + ex.getMessage());
@@ -286,11 +260,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.controlInfrarecfg(cmd);
-                } else if (factory.equals("2")) {
-                    result = dhClientService.controlInfrarecfg(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.controlInfrarecfg(cmd);
             }
         } catch (Exception ex) {
             log.error("鎿嶆帶绾㈠寮傚父锛�" + ex.getMessage());
@@ -307,11 +278,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.controlFocusMode(cmd);
-                } else if (factory.equals("2")) {
-                    result = dhClientService.controlFocusMode(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.controlFocusMode(cmd);
             }
         } catch (Exception ex) {
             log.error("鎿嶆帶鑱氱劍妯″紡寮傚父锛�" + ex.getMessage());
@@ -328,11 +296,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.getFocusMode(cmd);
-                } else if (factory.equals("2")) {
-                    result = dhClientService.getFocusMode(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.getFocusMode(cmd);
             }
         } catch (Exception ex) {
             log.error("鑾峰彇鑱氱劍妯″紡寮傚父锛�" + ex.getMessage());
@@ -349,11 +314,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.controlPTHeateRpwron(cmd);
-                } else if (factory.equals("2")) {
-                    //涓嶆敮鎸�
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.controlPTHeateRpwron(cmd);
             }
         } catch (Exception ex) {
             log.error("鎿嶆帶浜戝彴鍔犵儹寮傚父锛�" + ex.getMessage());
@@ -370,11 +332,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.controlCameraDeicing(cmd);
-                } else if (factory.equals("2")) {
-                    //涓嶆敮鎸�
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.controlCameraDeicing(cmd);
             }
         } catch (Exception ex) {
             log.error("鎿嶆帶浜戝彴鍔犵儹寮傚父锛�" + ex.getMessage());
@@ -391,11 +350,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.getPTZLockInfo(cmd);
-                } else if (factory.equals("2")) {
-
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.getPTZLockInfo(cmd);
             }
         } catch (Exception ex) {
             log.error("鑾峰彇浜戝彴閿佸畾淇℃伅寮傚父锛�" + ex.getMessage());
@@ -409,7 +365,6 @@
     }
 
     //鎶撳浘
-    @SdkOperate
     @Override
     public String picCutCate(CameraCmd cmd) {
         String url = "";
@@ -421,13 +376,8 @@
             if (ardCamera != null) {
                 //鑾峰彇鎽勫儚澶村伐鍘�
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    //璋冪敤hikClientService鐨刾icCutCate鏂规硶
-                    url = hikClientService.picCutCate(cmd);
-                } else if (factory.equals("2")) {
-                    //璋冪敤dhClientService鐨刾icCutCate鏂规硶
-                    url = dhClientService.picCutCate(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                url = cameraSDK.picCutCate(cmd);
             }
         } catch (Exception ex) {
             log.error("鎶撳浘寮傚父锛�" + ex.getMessage());
@@ -444,10 +394,12 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    map = hikClientService.getPtz(cmd);
-                } else if (factory.equals("2")) {
-                    map = dhClientService.getPtz(cmd);
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                String gdtype = ardCamera.getGdtype();
+                if (gdtype.equals("1")) {
+                    map = cameraSDK.getPtz(cmd);
+                } else {
+                    map = cameraSDK.getPtz1(cmd);
                 }
             }
         } catch (Exception ex) {
@@ -465,11 +417,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    map = hikClientService.getPtzScope(cmd);
-                } else if (factory.equals("2")) {
-
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                map = cameraSDK.getPtzScope(cmd);
             }
         } catch (Exception ex) {
             log.error("鑾峰彇ptz鑼冨洿寮傚父锛�" + ex.getMessage());
@@ -478,29 +427,31 @@
     }
 
     //璁剧疆ptz
-    @SdkOperate
     @Override
-    public boolean setPtz(CameraCmd cmd) {
-        boolean result = false;
+    public AjaxResult setPtz(CameraCmd cmd) {
         try {
             String cameraId = cmd.getCameraId();
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
-            if (ardCamera != null) {
-                String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.setPtz(cmd);
-                } else if (factory.equals("2")) {
-                    result = dhClientService.setPtz(cmd);
-                }
+            if (ardCamera == null) {
+                return AjaxResult.error("鎽勫儚澶翠笉瀛樺湪");
             }
+            CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(ardCamera.getFactory());
+            String gdtype = ardCamera.getGdtype();
+            if (gdtype.equals("1")) {
+                //澶у厜鐢典娇鐢ㄩ珮绮惧害ptz璁剧疆
+                return cameraSDK.setPtz(cmd);
+            } else {
+                return cameraSDK.setPtz1(cmd);
+            }
+
         } catch (Exception ex) {
             log.error("璁剧疆ptz寮傚父锛�" + ex.getMessage());
+            AjaxResult.error("璁剧疆ptz寮傚父:" + ex.getMessage());
         }
-        return result;
+        return AjaxResult.success();
     }
 
     //璁剧疆闆舵柟浣嶈
-    @SdkOperate
     @Override
     public boolean setZeroPtz(CameraCmd cmd) {
         boolean result = false;
@@ -509,11 +460,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.setZeroPtz(cmd);
-                } else if (factory.equals("2")) {
-                    result = dhClientService.setZeroPtz(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.setZeroPtz(cmd);
             }
         } catch (Exception ex) {
             log.error("璁剧疆闆舵柟浣嶈寮傚父锛�" + ex.getMessage());
@@ -522,7 +470,6 @@
     }
 
     //寮曞鎸囧悜鐩爣
-    @SdkOperate
     @Override
     public boolean guideTargetPosition(CameraCmd cmd) {
         boolean result = false;
@@ -531,14 +478,181 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.guideTargetPosition(cmd);
-                } else if (factory.equals("2")) {
-                    result = dhClientService.guideTargetPosition(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.guideTargetPosition(cmd);
             }
         } catch (Exception ex) {
             log.error("寮曞鎸囧悜鐩爣寮傚父锛�" + ex.getMessage());
+        }
+        return result;
+    }
+
+    //寮曞鎸囧悜浜�
+    @Override
+    public AjaxResult guideTargetWell(CameraCmd cmd) {
+
+        //鎸夋棩澶滃垏鎹㈤厤缃幏鍙栫浉鏈洪�氶亾
+        Integer chanNo = ArdTool.getChannelBydayNightTime(redisCache.getCacheObject("sys_config:dayNightTime"));
+        cmd.setChanNo(chanNo);
+
+        //鑾峰彇浜�
+        ArdAlarmpointsWell well = ardAlarmpointsWellService.selectArdAlarmpointsWellById(cmd.getWellId());
+        if (well == null) {
+            return AjaxResult.error("浜曚笉瀛樺湪");
+        }
+        cmd.setTargetPosition(new double[]{well.getLongitude(), well.getLatitude()});
+
+        //鑾峰彇浜曢厤缃殑寮曞鐩告満鍒楄〃
+        List<ArdWellGuideCamera> ardWellGuideCameraList = well.getArdWellGuideCameraList();
+        if (ardWellGuideCameraList != null && ardWellGuideCameraList.size() > 0) {
+            //鑾峰彇鐩告満鍜屼簳鐨勮窛绂昏繘琛屾帓搴忥紝鍙栧嚭鏈�杩戠殑涓�涓浉鏈�
+            Map<String, Double> distanceMap = new HashMap<>();
+            for (ArdWellGuideCamera ardWellGuideCamera : ardWellGuideCameraList) {
+                ArdCameras cameras = ardCamerasService.selectArdCamerasById(ardWellGuideCamera.getCameraId());
+                if (cameras == null) {
+                    continue;
+                }
+                double[] targetPosition = new double[]{well.getLongitude(), well.getLatitude()};
+                double[] camPosition = new double[]{cameras.getLongitude(), cameras.getLatitude()};
+                double distance = GisUtil.getDistance(targetPosition, camPosition);
+                distanceMap.put(ardWellGuideCamera.getCameraId(), distance);//瀛樺叆缂撳瓨map
+            }
+            //浠庣紦瀛橀噷鍙栧嚭璺濈鏈�杩戠浉鏈篒D
+            String cameraId = ArdTool.getKeyByMinValue(distanceMap);
+            cmd.setCameraId(cameraId);
+            //鑾峰彇鏈�杩戠浉鏈虹殑瀵硅薄
+            Optional<ArdWellGuideCamera> first = ardWellGuideCameraList.stream().filter(s -> s.getCameraId().equals(cameraId)).findFirst();
+            if (first.isPresent()) {
+                ArdWellGuideCamera ardWellGuideCamera = first.get();
+                Map<String, Double> ptzMap = null;
+                //閫氳繃閫氶亾鑾峰彇棰勭疆浣�
+                switch (chanNo) {
+                    case 1:
+                        if (ardWellGuideCamera.getP1() != null) {
+                            ptzMap = new HashMap<>();
+                            ptzMap.put("p", ardWellGuideCamera.getP1());
+                            ptzMap.put("t", ardWellGuideCamera.getT1());
+                            ptzMap.put("z", ardWellGuideCamera.getZ1());
+                        }
+                        break;
+                    case 2:
+                        if (ardWellGuideCamera.getP2() != null) {
+                            ptzMap = new HashMap<>();
+                            ptzMap.put("p", ardWellGuideCamera.getP2());
+                            ptzMap.put("t", ardWellGuideCamera.getT2());
+                            ptzMap.put("z", ardWellGuideCamera.getZ2());
+                        }
+                        break;
+
+                }
+                //寮曞
+                if (ptzMap != null) {
+                    //浣跨敤ptz寮曞
+                    cmd.setPtzMap(ptzMap);
+                    return setPtz(cmd);
+                }
+            }
+
+        }
+        log.debug("鏈壘鍒皃tz寮曞鐩告満,鏌ユ壘鏈�杩戠浉鏈�");
+
+        //浠庨檮杩戠浉鏈烘壘鏈�杩戠殑涓�涓浉鏈�
+        String cameraId = getCameraByNear(new double[]{well.getLongitude(), well.getLatitude()});
+        cmd.setCameraId(cameraId);
+        if ("".equals(cameraId)) {
+            return AjaxResult.error("鏈壘鍒板紩瀵肩浉鏈�");
+        }
+        //鍒ゆ柇绂佸紩鍖�
+        if (isInPolygon(cameraId, new Double[]{well.getLongitude(), well.getLatitude()})) {
+            return AjaxResult.error("浜曚綅缃睘浜庣浉鏈虹姝㈠紩瀵煎尯鍩�");
+        }
+        //鎸変簳鍧愭爣寮�濮嬪紩瀵�
+        if (!guideTargetPosition(cmd)) {
+            return AjaxResult.error("浜曞潗鏍囧紩瀵煎け璐�", "cameraId:" + cameraId);
+        }
+        return AjaxResult.success("浜曞潗鏍囧紩瀵兼垚鍔�", "cameraId:" + cameraId);
+
+    }
+
+    /**
+     * 鑾峰彇鏈�杩戣窛绂荤殑鍏夌數
+     * 1-鐩告満鍦ㄧ嚎
+     * 2-寮�鍚姤璀﹀紩瀵煎姛鑳�
+     * 3-閰嶇疆浜嗘渶澶у彲瑙嗚窛绂�
+     */
+    private String getCameraByNear(double[] targetPosition) {
+        String minDistanceCameraId = "";
+        try {
+            //鑾峰彇鎵�鏈夊ぇ鍏夌數
+            List<Object> Objects = redisCache.getListKey(CacheConstants.CAMERA_LIST_KEY);
+            //缁熻鎵�鏈夊ぇ鍏夌數鍙鑼冨洿鍐呬笌鎶ヨ鐐圭殑璺濈
+            Map<String, Double> distanceMap = new HashMap<>();
+            for (Object obj : Objects) {
+                ArdCameras camera = (ArdCameras) obj;
+
+                if (!GlobalVariable.loginMap.containsKey(camera.getId())) {
+                    log.debug("璇ュ厜鐢垫湭鐧诲綍");
+                    continue;
+                }
+                if (camera.getCamMaxVisibleDistance() == null) {
+                    log.debug("璇ュ厜鐢垫湭閰嶇疆鏈�澶у彲瑙嗚窛绂�");
+                    continue;
+                }
+                if (camera.getCamAlarmGuideEnable().equals(0)) {
+                    log.debug("璇ュ厜鐢垫湭寮�鍚姤璀﹀紩瀵�");
+                    continue;
+                }
+
+                double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
+                double distance = GisUtil.getDistance(targetPosition, camPosition);
+                if (distance != 0.0 && distance <= camera.getCamMaxVisibleDistance()) {
+                    distanceMap.put(camera.getId(), distance);
+                    if (StringUtils.isNull(camera.getCamAlarmGuideEnable())) {
+                        camera.setCamAlarmGuideEnable(0);
+                    }
+                }
+            }
+            if (distanceMap.size() > 0) {
+                log.debug("灏濊瘯鏌ユ壘鏈�杩戝厜鐢�");
+                //鑾峰彇璺濈瀛楀吀涓渶杩戠殑涓�涓浉鏈篒D
+                minDistanceCameraId = ArdTool.getKeyByMinValue(distanceMap);
+                log.debug("鏌ユ壘鍒版渶杩戝厜鐢�:" + minDistanceCameraId);
+            }
+        } catch (Exception ex) {
+            log.error("鑾峰彇闄勮繎寮�鍚姤璀﹀紩瀵煎姛鑳藉厜鐢靛紓甯�:" + ex.getMessage());
+        }
+        return minDistanceCameraId;
+    }
+
+    //鍒ゆ柇鐩告満鍜屽紩瀵间綅缃槸鍚﹀湪绂佹寮曞鍖哄煙
+    public boolean isInPolygon(String cameraId, Double[] targetPosition) {
+        boolean result = false;
+        //鎷︽埅鎵嬪姩寮曞
+        ArdCameraNoGuideZone ardCameraNoGuideZone = new ArdCameraNoGuideZone();
+        ardCameraNoGuideZone.setCameraId(cameraId);
+        ardCameraNoGuideZone.setEnabled("1");
+        //鑾峰彇褰撳墠鐩告満鐨勭寮曞彲瑙嗗煙鍒楄〃
+        List<ArdCameraNoGuideZone> ardCameraNoGuideZones = ardCameraNoGuideZoneService.selectArdCameraNoGuideZoneList(ardCameraNoGuideZone);
+        if (ardCameraNoGuideZones.size() > 0) {
+            //鑾峰彇鍒板綋鍓嶇浉鏈虹殑鍧愭爣闆嗗悎
+            for (ArdCameraNoGuideZone zone : ardCameraNoGuideZones) {
+                String[] parts = zone.getPoi().split(",");
+                List<Point> pointList = new ArrayList<>();
+                for (int i = 0; i < parts.length; i += 3) {
+                    Point point = new Point();
+                    point.setLongitude(Double.valueOf(parts[i]));
+                    point.setLatitude(Double.valueOf(parts[i + 1]));
+                    pointList.add(point);
+                }
+                double lon = targetPosition[0];
+                double lat = targetPosition[1];
+                Point targetPoint = new Point(lon, lat);
+                //鍒ゆ柇寮曞鐩爣鏄惁鍦ㄥ潗鏍囬泦鍚堢粍鎴愮殑澶氳竟褰㈠唴
+                boolean inPolygon = GisUtil.isInPolygon(targetPoint, pointList);
+                if (inPolygon) {
+                    result = inPolygon;
+                }
+            }
         }
         return result;
     }
@@ -587,7 +701,6 @@
         return true;
     }
 
-
     //褰曞儚
     @SdkOperate
     @Override
@@ -598,11 +711,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    url = hikClientService.record(cmd);
-                } else if (factory.equals("2")) {
-                    url = dhClientService.record(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                url = cameraSDK.record(cmd);
             }
         } catch (Exception ex) {
             log.error("褰曞儚寮傚父锛�" + ex.getMessage());
@@ -619,11 +729,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.recordStart(cmd);
-                } else if (factory.equals("2")) {
-                    result = dhClientService.recordStart(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.recordStart(cmd);
             }
         } catch (Exception ex) {
             log.error("寮�濮嬪綍鍍忓紓甯革細" + ex.getMessage());
@@ -640,11 +747,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    url = hikClientService.recordStopToMinio(cmd);
-                } else if (factory.equals("2")) {
-                    url = dhClientService.recordStopToMinio(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                url = cameraSDK.recordStopToMinio(cmd);
             }
         } catch (Exception ex) {
             log.error("鍋滄褰曞儚寮傚父锛�" + ex.getMessage());
@@ -661,11 +765,8 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    result = hikClientService.recordStopNotToMinio(cmd);
-                } else if (factory.equals("2")) {
-                    result = dhClientService.recordStopNotToMinio(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                result = cameraSDK.recordStopNotToMinio(cmd);
             }
         } catch (Exception ex) {
             log.error("鍋滄褰曞儚寮傚父锛�" + ex.getMessage());
@@ -682,17 +783,13 @@
             ArdCameras ardCamera = redisCache.getCacheObject(CacheConstants.CAMERA_LIST_KEY + cameraId);
             if (ardCamera != null) {
                 String factory = ardCamera.getFactory();
-                if (factory.equals("1")) {
-                    map = hikClientService.getGisInfo(cmd);
-                } else if (factory.equals("2")) {
-                    map = dhClientService.getGisInfo(cmd);
-                }
+                CameraSDK cameraSDK = cameraSDKFactory.createCameraSDK(factory);
+                map = cameraSDK.getGisInfo(cmd);
             }
         } catch (Exception ex) {
             log.error("鑾峰彇鐩告満鏋惰鍙傛暟寮傚父锛�" + ex.getMessage());
         }
         return map;
     }
-
 
 }

--
Gitblit v1.9.3