From 63a661a78e1999423ea7d94277a645ed4b9e7e6d Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期五, 25 八月 2023 15:22:23 +0800
Subject: [PATCH] 优化minio工具类和其他工具类位置 优化派警管理列表分页问题

---
 ard-work/src/main/java/com/ruoyi/utils/minio/MinioUtil.java                                  |  248 +++++++++--------
 ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HIKSDKStructure.java                      |    2 
 ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HCNetSDK.java                             |    2 
 ard-work/src/main/java/com/ruoyi/scheduling/controller/SchedulingController.java             |    1 
 ard-work/src/main/java/com/ruoyi/utils/image/WaterMarkUtil.java                              |    5 
 ard-work/src/main/java/com/ruoyi/utils/gis/Point.java                                        |    2 
 /dev/null                                                                                    |  141 ----------
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java                              |    9 
 ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java       |    9 
 ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepComparator.java |    6 
 ard-work/src/main/java/com/ruoyi/utils/gis/GisUtil.java                                      |  195 +++++++++++++
 ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java       |    5 
 ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java        |   21 
 ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml                      |   45 +-
 ard-work/src/main/java/com/ruoyi/scheduling/domian/SchedulingParam.java                      |    2 
 ard-work/src/main/java/com/ruoyi/utils/minio/MinioConfig.java                                |   32 ++
 ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java    |   13 
 ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java                       |    5 
 ard-work/src/main/java/com/ruoyi/utils/process/CmdUtils.java                                 |    2 
 ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java       |   10 
 ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java                  |    2 
 ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java                        |    7 
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java                    |   29 +-
 23 files changed, 436 insertions(+), 357 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
index 385f1d5..4cefccd 100644
--- a/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/alarm/global/service/impl/GlobalAlarmServiceImpl.java
@@ -34,8 +34,8 @@
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.device.external.domain.ArdEquipExternal;
 import com.ruoyi.device.external.mapper.ArdEquipExternalMapper;
+import com.ruoyi.utils.gis.GisUtil;
 import com.ruoyi.utils.tools.ArdTool;
-import com.ruoyi.utils.tools.GisTool;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
@@ -49,7 +49,6 @@
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
@@ -748,7 +747,7 @@
                     continue;
                 }
                 double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
-                double distance = GisTool.getDistance(targetPosition, camPosition);
+                double distance = GisUtil.getDistance(targetPosition, camPosition);
                 if (distance != 0.0 && distance <= camera.getCamMaxVisibleDistance()) {
                     distanceMap.put(camera.getId(), distance);
                     if (StringUtils.isNull(camera.getCamAlarmGuideEnable())) {
diff --git a/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java b/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
index 6c2d3a8..c6a0d8c 100644
--- a/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
@@ -7,9 +7,8 @@
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.storage.minio.utils.MinioUtils;
-import com.ruoyi.rongcloud.service.RongCloudService;
 import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.utils.minio.MinioUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -46,8 +45,8 @@
     private IArdAppPositionService ardAppPositionService;
     @Autowired
     private ISysUserService sysUserService;
-    @Autowired
-    private MinioUtils minioUtil;
+//    @Autowired
+//    private MinioUtils minioUtil;
 
     /**
      * 鏌ヨapp浣嶇疆鍒楄〃
@@ -201,7 +200,7 @@
     @ApiOperation("涓婁紶鏂囦欢")
     public AjaxResult uploadFile(MultipartFile file,String type)
     {
-        String url = minioUtil.putObjectAndGetUrl("app",type, file);
+        String url = MinioUtil.putObjectAndGetUrl("app",type, file);
         return AjaxResult.success(url);
     }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
index bd751a8..c0143e5 100644
--- a/ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/service/impl/ArdAppPositionServiceImpl.java
@@ -3,23 +3,18 @@
 import com.ruoyi.app.position.domain.ArdAppPosition;
 import com.ruoyi.app.position.mapper.ArdAppPositionMapper;
 import com.ruoyi.app.position.service.IArdAppPositionService;
-import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.scheduling.domian.SchedulingParam;
 import com.ruoyi.system.service.ISysUserService;
-import com.ruoyi.utils.tools.GisTool;
-import com.ruoyi.utils.tools.Point;
+import com.ruoyi.utils.gis.GisUtil;
+import com.ruoyi.utils.gis.Point;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
-import java.awt.geom.Point2D;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -160,7 +155,7 @@
                     if (longitude == null || latitude == null) {
                         continue;
                     }
-                    double distance = GisTool.getDistance(new double[]{longitude, latitude}, new double[]{lon, lat});
+                    double distance = GisUtil.getDistance(new double[]{longitude, latitude}, new double[]{lon, lat});
                     if (distance <= radius) {
                         Map<String, Object> params = new HashMap<>();
                         params.put("longitude", lon);
@@ -205,7 +200,7 @@
                         continue;
                     }
                     Point point2D=new Point(lon,lat);
-                    boolean inPolygon = GisTool.isInPolygon(point2D, partitionLocation);
+                    boolean inPolygon = GisUtil.isInPolygon(point2D, partitionLocation);
                     if (inPolygon) {
                         Map<String, Object> params = new HashMap<>();
                         params.put("longitude", lon);
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
index 245b74e..e79c3ec 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
@@ -13,14 +13,14 @@
 import com.ruoyi.device.channel.domain.ArdChannel;
 import com.ruoyi.device.channel.mapper.ArdChannelMapper;
 import com.ruoyi.scheduling.domian.SchedulingParam;
+import com.ruoyi.utils.gis.GisUtil;
 import com.ruoyi.utils.tools.ArdTool;
 import com.ruoyi.device.camera.domain.ArdCameras;
 import com.ruoyi.device.camera.mapper.ArdCamerasMapper;
 import com.ruoyi.device.camera.service.IArdCamerasService;
 import com.ruoyi.common.annotation.DataScope;
 import com.ruoyi.system.mapper.SysDeptMapper;
-import com.ruoyi.utils.tools.GisTool;
-import com.ruoyi.utils.tools.Point;
+import com.ruoyi.utils.gis.Point;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -259,7 +259,7 @@
                     continue;
                 }
                 double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
-                double distance = GisTool.getDistance(cmd.getTargetPosition(), camPosition);
+                double distance = GisUtil.getDistance(cmd.getTargetPosition(), camPosition);
                 if (camera.getCamMaxVisibleDistance() == null) {
                     continue;
                 }
@@ -309,7 +309,7 @@
                     continue;
                 }
                 double[] camPosition = new double[]{camera.getLongitude(), camera.getLatitude()};
-                double distance = GisTool.getDistance(new double[]{longitude, latitude}, camPosition);
+                double distance = GisUtil.getDistance(new double[]{longitude, latitude}, camPosition);
                 if (distance <= radius) {
                     /*鑾峰彇閫氶亾鍒楄〃*/
                     ArdChannel ardChannel=new ArdChannel();
@@ -356,7 +356,7 @@
                 }
                 /*鍒ゆ柇鍧愭爣鏄惁鍦ㄥ杈瑰舰鑼冨洿鍐�*/
                 Point camPosition=new Point(camera.getLongitude(),camera.getLatitude());
-                boolean inPolygon = GisTool.isInPolygon(camPosition, partitionLocation);
+                boolean inPolygon = GisUtil.isInPolygon(camPosition, partitionLocation);
                 if (inPolygon) {
                     /*鑾峰彇閫氶亾鍒楄〃*/
                     ArdChannel ardChannel=new ArdChannel();
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HCNetSDK.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HCNetSDK.java
similarity index 99%
rename from ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HCNetSDK.java
rename to ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HCNetSDK.java
index a07c6d0..a1baa8f 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HCNetSDK.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HCNetSDK.java
@@ -1,4 +1,4 @@
-package com.ruoyi.device.hiksdk.util.hikSdkUtil;
+package com.ruoyi.device.hiksdk.sdk;
 
 import com.sun.jna.*;
 import com.sun.jna.examples.win32.W32API;
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HIKSDKStructure.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HIKSDKStructure.java
similarity index 95%
rename from ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HIKSDKStructure.java
rename to ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HIKSDKStructure.java
index 1baf0df..01f2b0c 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/HIKSDKStructure.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/HIKSDKStructure.java
@@ -1,4 +1,4 @@
-package com.ruoyi.device.hiksdk.util.hikSdkUtil;
+package com.ruoyi.device.hiksdk.sdk;
 
 import com.sun.jna.Structure;
 
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java
similarity index 98%
rename from ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
rename to ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java
index d879397..66fb37b 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/LoginResultCallBack.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/sdk/LoginResultCallBack.java
@@ -1,4 +1,4 @@
-package com.ruoyi.device.hiksdk.util.hikSdkUtil;
+package com.ruoyi.device.hiksdk.sdk;
 
 import com.ruoyi.alarm.global.domain.GuidePriorityQueue;
 import com.ruoyi.alarm.global.domain.GuideTask;
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
index 4ed6415..5dd6550 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -9,11 +9,11 @@
 import com.ruoyi.device.channel.domain.ArdChannel;
 import com.ruoyi.device.hiksdk.common.GlobalVariable;
 import com.ruoyi.device.camera.domain.ArdCameras;
-import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil;
-import com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK;
+import com.ruoyi.utils.gis.GisUtil;
+import com.ruoyi.device.hiksdk.sdk.HCNetSDK;
 import com.ruoyi.device.hiksdk.service.IHikClientService;
-import com.ruoyi.device.hiksdk.util.hikSdkUtil.LoginResultCallBack;
-import com.ruoyi.storage.minio.utils.MinioUtils;
+import com.ruoyi.device.hiksdk.sdk.LoginResultCallBack;
+import com.ruoyi.utils.minio.MinioUtil;
 import com.sun.jna.Native;
 import com.sun.jna.NativeLong;
 import com.sun.jna.Platform;
@@ -29,10 +29,9 @@
 import java.math.BigDecimal;
 import java.nio.ByteBuffer;
 import java.text.DecimalFormat;
-import java.text.SimpleDateFormat;
 import java.util.*;
 
-import static com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK.*;
+import static com.ruoyi.device.hiksdk.sdk.HCNetSDK.*;
 
 /**
  * @ClassName: hikClientServiceImpl
@@ -49,8 +48,6 @@
     private static String endpoint;
     @Resource
     private IArdCamerasService ardCamerasService;
-    @Resource
-    private MinioUtils minioUtil;
 
     private static HCNetSDK hCNetSDK;
 
@@ -1155,9 +1152,9 @@
             InputStream input = new ByteArrayInputStream(array);
             String url = "";
             try {
-                boolean b = minioUtil.uploadObject(BucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG);
+                boolean b = MinioUtil.uploadObject(BucketName, ObjectName, input, input.available(), MimeTypeUtils.IMAGE_JPEG);
                 if (b) {
-                    url = minioUtil.getBucketObjectUrl(BucketName, ObjectName);
+                    url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName);
                     log.debug("涓婁紶鏂囦欢鎴愬姛!" + url);
                 }
             } catch (IOException ex) {
@@ -1338,9 +1335,9 @@
             String BucketName = cmd.getRecordBucketName();
             String ObjectName = cmd.getRecordObjectName()+".mp4";
             FileInputStream stream = new FileInputStream(path);
-            boolean b = minioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4");
+            boolean b = MinioUtil.uploadObject(BucketName, ObjectName, stream, stream.available(), "video/MP4");
             if (b) {
-                url = minioUtil.getBucketObjectUrl(BucketName, ObjectName);
+                url = MinioUtil.getBucketObjectUrl(BucketName, ObjectName);
                 log.debug("涓婁紶鏂囦欢鎴愬姛!" + url);
             }
             return url;
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/GisUtil.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/GisUtil.java
deleted file mode 100644
index e9c916a..0000000
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/hikSdkUtil/GisUtil.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.ruoyi.device.hiksdk.util.hikSdkUtil;
-
-import org.gavaghan.geodesy.*;
-
-import java.math.BigDecimal;
-import java.util.Arrays;
-
-public class GisUtil {
-
-    public static GeodeticCalculator geodeticCalculator = new GeodeticCalculator();
-
-    /**
-     * 鏍规嵁缁忕含搴︼紝璁$畻涓ょ偣闂寸殑璺濈
-     *
-     * @param longitudeFrom 绗竴涓偣鐨勭粡搴�
-     * @param latitudeFrom  绗竴涓偣鐨勭含搴�
-     * @param longitudeTo   绗簩涓偣鐨勭粡搴�
-     * @param latitudeTo    绗簩涓偣鐨勭含搴�
-     * @return 杩斿洖璺濈 鍗曚綅绫�
-     */
-    public static double getDistance(double longitudeFrom, double latitudeFrom, double longitudeTo, double latitudeTo) {
-        GlobalCoordinates source = new GlobalCoordinates(latitudeFrom, longitudeFrom);
-        GlobalCoordinates target = new GlobalCoordinates(latitudeTo, longitudeTo);
-        return geodeticCalculator.calculateGeodeticCurve(Ellipsoid.WGS84, source, target).getEllipsoidalDistance();
-    }
-
-    /**
-     * 璁$畻浠巉rom鍒皌o鏂瑰悜鐨勭洿绾夸笌姝e寳鏂瑰悜澶硅
-     *
-     * @param longitudeFrom 绗竴涓偣鐨勭粡搴�
-     * @param latitudeFrom  绗竴涓偣鐨勭含搴�
-     * @param longitudeTo   绗簩涓偣鐨勭粡搴�
-     * @param latitudeTo    绗簩涓偣鐨勭含搴�
-     * @return 杩斿洖瑙掑害
-     */
-    public static double getNorthAngle(double longitudeFrom, double latitudeFrom, double longitudeTo, double latitudeTo) {
-        GlobalPosition source = new GlobalPosition(latitudeFrom, longitudeFrom, 0);
-        GlobalPosition target = new GlobalPosition(latitudeTo, longitudeTo, 0);
-        return geodeticCalculator.calculateGeodeticMeasurement(Ellipsoid.WGS84, source, target).getAzimuth();
-    }
-
-    /**
-     * @param camera    缁忓害,绾害,楂樺害 濡�:{125.097531, 46.60029, 120};
-     * @param lookAt    缁忓害,绾害,楂樺害 濡�:{125.124731, 46.584808, 0};
-     * @param viewAngle 鐩告満鍙瑙掑害 濡�:20
-     * @param viewWidth 瑙嗗煙瀹藉害 濡�:150
-     * @return ptz 鏁扮粍 濡�:[129.5355798969157, -2.5419097807416655, 23.3676043024458]
-     */
-    public static double[] getCameraPTZ(double[] camera, double[] lookAt, double viewAngle, double viewWidth) {
-        double p = 0, t = 0, z = 0;
-        double distance = GisUtil.getDistance(camera[0], camera[1], lookAt[0], lookAt[1]);
-        double northAngle = GisUtil.getNorthAngle(camera[0], camera[1], lookAt[0], lookAt[1]);
-        double height = camera[2];
-        p = northAngle;
-        t = Angle.toDegrees(Math.atan(height / distance)) * -1+360;
-        z = distance * Math.tan(viewAngle / 2) * 2 / viewWidth;
-      /*  p = new BigDecimal(p).setScale(1,BigDecimal.ROUND_HALF_UP).doubleValue();
-        t = new BigDecimal(t).setScale(1,BigDecimal.ROUND_HALF_UP).doubleValue();
-        z = new BigDecimal(z).setScale(1,BigDecimal.ROUND_HALF_UP).doubleValue();*/
-        return new double[]{p, t, z};
-    }
-    /**
-     * 鏍规嵁寮�濮嬪潗鏍囩偣锛岃搴︼紝璁$畻缁撴潫鐐瑰潗鏍�
-     * @param startGlobalCoordinates
-     * @param startAngle 鏂瑰悜锛堜互璧风偣涓轰腑蹇冿級
-     * @param distance 璺濈锛堝崟浣嶏細m锛�
-     * @return
-     */
-    public static GlobalCoordinates getGlobalCoordinates(GlobalCoordinates startGlobalCoordinates, double startAngle, double distance){
-        return new GeodeticCalculator().calculateEndingGlobalCoordinates(Ellipsoid.WGS84, startGlobalCoordinates, startAngle, distance);
-    }
-
-    public static void main(String[] args) {
-        // 125.097531,46.60029, 125.124731,46.584808
-        //鐩告満浣嶇疆
-        double[] camera = {125.146964331147,46.5580925811216,102};//缁忓害,绾害,楂樺害
-        //鐪嬪悜鐨勪綅缃�
-        double[] lookAt = {125.155449,46.555108,0};//缁忓害,绾害,楂樺害
-
-        double viewAngle = 20;//鐩告満鍙瑙掑害
-        double viewWidth = 150;//鐩告満瑙嗗煙瀹藉害
-
-        double[] ptz = GisUtil.getCameraPTZ(camera, lookAt, viewAngle, viewWidth);
-        System.out.println("ptz:" + Arrays.toString(ptz));
-
-    }
-}
diff --git a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepComparator.java b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepComparator.java
index aa5b4c6..4c178c0 100644
--- a/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepComparator.java
+++ b/ard-work/src/main/java/com/ruoyi/inspect/service/impl/ArdVideoInspectTaskStepComparator.java
@@ -2,12 +2,8 @@
 
 import com.ruoyi.alarmpoints.well.domain.ArdAlarmpointsWell;
 import com.ruoyi.alarmpoints.well.mapper.ArdAlarmpointsWellMapper;
-import com.ruoyi.alarmpoints.well.service.IArdAlarmpointsWellService;
-import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil;
-import com.ruoyi.inspect.domain.ArdVideoInspectTask;
+import com.ruoyi.utils.gis.GisUtil;
 import com.ruoyi.inspect.domain.ArdVideoInspectTaskStep;
-import com.ruoyi.inspect.service.IArdVideoInspectTaskService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Comparator;
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
index 5e61e05..578291c 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
@@ -6,21 +6,16 @@
 import com.ruoyi.media.service.IMediaService;
 import com.ruoyi.utils.forest.MediaClient;
 import com.ruoyi.utils.tools.ArdTool;
-import com.ruoyi.utils.tools.CmdUtils;
+import com.ruoyi.utils.process.CmdUtils;
 import com.sun.jna.Platform;
-import io.minio.messages.Item;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 import javax.annotation.Resource;
-import java.io.BufferedReader;
 import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java
index 36eede2..0a0c592 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java
@@ -1,6 +1,6 @@
 package com.ruoyi.media.service.impl;
 
-import com.ruoyi.utils.tools.CmdUtils;
+import com.ruoyi.utils.process.CmdUtils;
 import com.sun.jna.Platform;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
@@ -8,10 +8,7 @@
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
-import java.io.BufferedReader;
 import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/ard-work/src/main/java/com/ruoyi/scheduling/controller/SchedulingController.java b/ard-work/src/main/java/com/ruoyi/scheduling/controller/SchedulingController.java
index 4727673..b5cba4a 100644
--- a/ard-work/src/main/java/com/ruoyi/scheduling/controller/SchedulingController.java
+++ b/ard-work/src/main/java/com/ruoyi/scheduling/controller/SchedulingController.java
@@ -41,7 +41,6 @@
     @ApiOperation("鑾峰彇闄勮繎鐨勮溅浜虹浉鏈�(鍗婂緞)")
     AjaxResult getNearVehiPersonCam(SchedulingParam param) {
         Map<String, Object> nearMap = new HashMap<>();
-
         List<Map<String, Object>> Cars = iArdSyCarService.getNearCar(param);
         nearMap.put("car", Cars);
         List<ArdCameras> Cameras = iArdCamerasService.getNearCameras(param);
diff --git a/ard-work/src/main/java/com/ruoyi/scheduling/domian/SchedulingParam.java b/ard-work/src/main/java/com/ruoyi/scheduling/domian/SchedulingParam.java
index 63840af..83dda6a 100644
--- a/ard-work/src/main/java/com/ruoyi/scheduling/domian/SchedulingParam.java
+++ b/ard-work/src/main/java/com/ruoyi/scheduling/domian/SchedulingParam.java
@@ -1,6 +1,6 @@
 package com.ruoyi.scheduling.domian;
 
-import com.ruoyi.utils.tools.Point;
+import com.ruoyi.utils.gis.Point;
 import lombok.Data;
 
 import java.util.List;
diff --git a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioConfig.java b/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioConfig.java
deleted file mode 100644
index 28b2235..0000000
--- a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioConfig.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.ruoyi.storage.minio.utils;
-
-import io.minio.MinioClient;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.stereotype.Component;
-
-/**
- * @Description:
- * @ClassName: MinioClientSingleton
- * @Author: 鍒樿嫃涔�
- * @Date: 2023骞�05鏈�18鏃�9:32
- * @Version: 1.0
- **/
-@Slf4j(topic = "minio")
-@Component
-public class MinioConfig {
-    @Value("${minio.endpoint}")
-    private String endpoint;
-    @Value("${minio.accessKey}")
-    private String accessKey;
-    @Value("${minio.secretKey}")
-    private String secretKey;
-
-    @Bean
-    public MinioClient getMinioClient() {
-        return MinioClient.builder()
-                .endpoint(endpoint)
-                .credentials(accessKey, secretKey)
-                .build();
-    }
-
-}
-
diff --git a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioService.java b/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioService.java
deleted file mode 100644
index 2e095bc..0000000
--- a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioService.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.ruoyi.storage.minio.utils;
-
-import com.ruoyi.utils.tools.CmdUtils;
-import com.sun.jna.Platform;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @Description:
- * @ClassName: MinioService
- * @Author: 鍒樿嫃涔�
- * @Date: 2023骞�08鏈�04鏃�10:32:40
- * @Version: 1.0
- **/
-@Component
-@Slf4j(topic = "cmd")
-public class MinioService {
-    String processName = "minio.exe";
-    @Value("${minio.path}")
-    String minioPath;
-    @Value("${minio.accessKey}")
-    String accessKey;
-    @Value("${minio.secretKey}")
-    String secretKey;
-    @Value("${minio.enabled}")
-    Boolean minioEnabled;
-
-    @PostConstruct
-    public void init() {
-        if (minioEnabled) {
-            if (Platform.isWindows()) {
-                String exePath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "minio" + File.separator + processName;
-                List<String> cmd = new ArrayList<>();
-                cmd.add(exePath);
-                cmd.add("server");
-                cmd.add(minioPath);
-                if (CmdUtils.isProcessRunning(processName)) {
-                    // 杩涚▼宸茬粡鍦ㄨ繍琛岋紝缁撴潫璇ヨ繘绋�
-                    CmdUtils.stopProcess(processName);
-                }
-                // 鍚姩鍚庡彴杩涚▼
-                Map<String, String> envMap = new HashMap<>();
-                envMap.put("MINIO_ROOT_USER", accessKey);
-                envMap.put("MINIO_ROOT_PASSWORD", secretKey);
-                CmdUtils.commandStart(processName, cmd, envMap);
-                // 鍚姩cmd绐楀彛
-//            String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"};
-//            CmdUtils.commandStart(command);
-            }
-        }
-    }
-
-    @PreDestroy
-    public void destroyMediaMtx() {
-        if (minioEnabled) {
-            log.info("閿�姣乵inio");
-            if (CmdUtils.isProcessRunning(processName)) {
-                // 杩涚▼宸茬粡鍦ㄨ繍琛岋紝缁撴潫璇ヨ繘绋�
-                CmdUtils.stopProcess(processName);
-            }
-        }
-    }
-}
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
index 788a2b2..6cd7616 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
@@ -17,13 +17,13 @@
 import com.ruoyi.common.core.redis.RedisCache;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
-import com.ruoyi.utils.tools.Point;
+import com.ruoyi.utils.gis.GisUtil;
+import com.ruoyi.utils.gis.Point;
 import com.ruoyi.scheduling.domian.SchedulingParam;
 import com.ruoyi.sy.domain.ArdSyCarDay;
 import com.ruoyi.sy.mapper.ArdSyCarDayMapper;
-import com.ruoyi.utils.tools.GisTool;
+import com.ruoyi.utils.minio.MinioUtil;
 import com.ruoyi.utils.websocket.util.WebSocketUtils;
-import com.ruoyi.storage.minio.utils.MinioUtils;
 import com.ruoyi.sy.domain.ArdSyUser;
 import com.ruoyi.sy.gps31.PositionContainer;
 import com.ruoyi.sy.mapper.ArdSyUserMapper;
@@ -79,8 +79,7 @@
     RedisCache redisCache;
     @Resource
     private ArdSyCarDayMapper ardSyCarDayMapper;
-    @Resource
-    private MinioUtils minioUtil;
+
     private Map<Integer, Map<String, String>> logInMap = new HashMap();
 
     private Map<String, Timer> userCarTimerMap = new HashMap();
@@ -144,7 +143,7 @@
                 objectNames.add(ardSyCar.getCarPicture().split("/sycar/")[1]);
             }
         }
-        minioUtil.removeObjects("sycar", objectNames);
+        MinioUtil.removeObjects("sycar", objectNames);
         return ardSyCarMapper.deleteArdSyCarByIds(ids);
     }
 
@@ -261,12 +260,12 @@
 
     @Override
     public List<Map<String, String>> getAllCarModel() {
-        boolean exsit = minioUtil.exitsBucket("sycar");
+        boolean exsit = MinioUtil.exitsBucket("sycar");
         if (exsit) {
             List<Map<String, String>> listObjetcName = new ArrayList<>();
             try {
                // ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().prefix("carmodel/").bucket("sycar").build();
-                Iterable<Result<Item>> myObjects = minioUtil.getObjectsByBucket("sycar","carmodel");
+                Iterable<Result<Item>> myObjects = MinioUtil.getObjectsByBucket("sycar","carmodel");
                 for (Result<Item> result : myObjects) {
                     Item item = result.get();
                     Map<String, String> map = new HashMap();
@@ -329,16 +328,16 @@
             if (ardSyCarr.getCarPicture() != null || !ardSyCarr.getCarPicture().equals("")) {
                 String objectName = ardSyCarr.getCarPicture().split("/sycar/")[1];
                 objectNames.add(objectName);
-                minioUtil.removeObjects("sycar", objectNames);
+                MinioUtil.removeObjects("sycar", objectNames);
             }
         }
         //鍒ゆ柇鏂囦欢鏄惁涓虹┖
         if (null == carPicture || 0 == carPicture.getSize()) {
             return "";
         }
-        boolean exsit = minioUtil.exitsBucket("sycar");
+        boolean exsit = MinioUtil.exitsBucket("sycar");
         if (!exsit) {
-            boolean bucket = minioUtil.createBucket("sycar");
+            boolean bucket = MinioUtil.createBucket("sycar");
         }
         //鏂囦欢鍚�
         String originalFilename = carPicture.getOriginalFilename();
@@ -355,7 +354,7 @@
 //                    .contentType(carPicture.getContentType())
 //                    .build();
 //            MinioConfig.getMinioClient().putObject(putObjectArgs);
-            minioUtil.uploadObject("sycar",fileName,inputStream,carPicture.getSize(),carPicture.getContentType());
+            MinioUtil.uploadObject("sycar",fileName,inputStream,carPicture.getSize(),carPicture.getContentType());
             inputStream.close();
             /*鑾峰彇url*/
             GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
@@ -365,7 +364,7 @@
                     .method(Method.GET)
                     .build();
             //String presignedObjectUrl = MinioConfig.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
-            String ObjectUrl = minioUtil.getBucketObjectUrl("sycar", fileName);
+            String ObjectUrl = MinioUtil.getBucketObjectUrl("sycar", fileName);
             if (id != null && !id.equals("")) {//id涓洪潪蹇呰
                 ArdSyCar ardSyCar = new ArdSyCar();
                 ardSyCar.setId(id);
@@ -1083,7 +1082,7 @@
             List<Map<String, Object>> carGPSMap = (List<Map<String, Object>>) carGPSTrack.get("list");
             Double lng = Double.valueOf((String) carGPSMap.get(0).get("lng"));
             Double lat = Double.valueOf((String) carGPSMap.get(0).get("lat"));
-            double distance = GisTool.getDistance( new double[]{longitude,latitude}, new double[]{lng, lat});
+            double distance = GisUtil.getDistance( new double[]{longitude,latitude}, new double[]{lng, lat});
             if (distance <= radius) {
                 carMap.put("longitude",lng);
                 carMap.put("latitude",lat);
@@ -1142,7 +1141,7 @@
                 Double lng = Double.valueOf((String) carGPSMap.get(0).get("lng"));
                 Double lat = Double.valueOf((String) carGPSMap.get(0).get("lat"));
                 Point point = new Point(lng,lat);
-                boolean inPolygon = GisTool.isInPolygon(point, partitionLocation);
+                boolean inPolygon = GisUtil.isInPolygon(point, partitionLocation);
                 if (inPolygon) {
                     carMap.put("longitude", lng);
                     carMap.put("latitude", lat);
diff --git a/ard-work/src/main/java/com/ruoyi/utils/gis/GisUtil.java b/ard-work/src/main/java/com/ruoyi/utils/gis/GisUtil.java
new file mode 100644
index 0000000..3aafe29
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/utils/gis/GisUtil.java
@@ -0,0 +1,195 @@
+package com.ruoyi.utils.gis;
+
+import org.gavaghan.geodesy.*;
+
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class GisUtil {
+
+    public static GeodeticCalculator geodeticCalculator = new GeodeticCalculator();
+    /**
+     * 鏍规嵁缁忕含搴︼紝璁$畻涓ょ偣闂寸殑璺濈
+     *
+     * @param From 绗竴涓偣鐨勭粡绾害
+     * @param To  绗簩涓偣鐨勭粡绾害
+     * @return 杩斿洖璺濈 鍗曚綅绫�
+     */
+    public static double getDistance(double[] From, double[] To) {
+        double longitudeFrom = From[0];
+        double latitudeFrom = From[1];
+        double longitudeTo = To[0];
+        double latitudeTo = To[1];
+        GlobalCoordinates source = new GlobalCoordinates(latitudeFrom, longitudeFrom);
+        GlobalCoordinates target = new GlobalCoordinates(latitudeTo, longitudeTo);
+        return geodeticCalculator.calculateGeodeticCurve(Ellipsoid.WGS84, source, target).getEllipsoidalDistance();
+    }
+    /**
+     * 鏍规嵁缁忕含搴︼紝璁$畻涓ょ偣闂寸殑璺濈
+     *
+     * @param longitudeFrom 绗竴涓偣鐨勭粡搴�
+     * @param latitudeFrom  绗竴涓偣鐨勭含搴�
+     * @param longitudeTo   绗簩涓偣鐨勭粡搴�
+     * @param latitudeTo    绗簩涓偣鐨勭含搴�
+     * @return 杩斿洖璺濈 鍗曚綅绫�
+     */
+    public static double getDistance(double longitudeFrom, double latitudeFrom, double longitudeTo, double latitudeTo) {
+        GlobalCoordinates source = new GlobalCoordinates(latitudeFrom, longitudeFrom);
+        GlobalCoordinates target = new GlobalCoordinates(latitudeTo, longitudeTo);
+        return geodeticCalculator.calculateGeodeticCurve(Ellipsoid.WGS84, source, target).getEllipsoidalDistance();
+    }
+
+    /**
+     * 璁$畻浠巉rom鍒皌o鏂瑰悜鐨勭洿绾夸笌姝e寳鏂瑰悜澶硅
+     *
+     * @param longitudeFrom 绗竴涓偣鐨勭粡搴�
+     * @param latitudeFrom  绗竴涓偣鐨勭含搴�
+     * @param longitudeTo   绗簩涓偣鐨勭粡搴�
+     * @param latitudeTo    绗簩涓偣鐨勭含搴�
+     * @return 杩斿洖瑙掑害
+     */
+    public static double getNorthAngle(double longitudeFrom, double latitudeFrom, double longitudeTo, double latitudeTo) {
+        GlobalPosition source = new GlobalPosition(latitudeFrom, longitudeFrom, 0);
+        GlobalPosition target = new GlobalPosition(latitudeTo, longitudeTo, 0);
+        return geodeticCalculator.calculateGeodeticMeasurement(Ellipsoid.WGS84, source, target).getAzimuth();
+    }
+
+    /**
+     * @param camera    缁忓害,绾害,楂樺害 濡�:{125.097531, 46.60029, 120};
+     * @param lookAt    缁忓害,绾害,楂樺害 濡�:{125.124731, 46.584808, 0};
+     * @param viewAngle 鐩告満鍙瑙掑害 濡�:20
+     * @param viewWidth 瑙嗗煙瀹藉害 濡�:150
+     * @return ptz 鏁扮粍 濡�:[129.5355798969157, -2.5419097807416655, 23.3676043024458]
+     */
+    public static double[] getCameraPTZ(double[] camera, double[] lookAt, double viewAngle, double viewWidth) {
+        double p = 0, t = 0, z = 0;
+        double distance = GisUtil.getDistance(camera[0], camera[1], lookAt[0], lookAt[1]);
+        double northAngle = GisUtil.getNorthAngle(camera[0], camera[1], lookAt[0], lookAt[1]);
+        double height = camera[2];
+        p = northAngle;
+        t = Angle.toDegrees(Math.atan(height / distance)) * -1+360;
+        z = distance * Math.tan(viewAngle / 2) * 2 / viewWidth;
+      /*  p = new BigDecimal(p).setScale(1,BigDecimal.ROUND_HALF_UP).doubleValue();
+        t = new BigDecimal(t).setScale(1,BigDecimal.ROUND_HALF_UP).doubleValue();
+        z = new BigDecimal(z).setScale(1,BigDecimal.ROUND_HALF_UP).doubleValue();*/
+        return new double[]{p, t, z};
+    }
+    /**
+     * 鏍规嵁寮�濮嬪潗鏍囩偣锛岃搴︼紝璁$畻缁撴潫鐐瑰潗鏍�
+     * @param startGlobalCoordinates
+     * @param startAngle 鏂瑰悜锛堜互璧风偣涓轰腑蹇冿級
+     * @param distance 璺濈锛堝崟浣嶏細m锛�
+     * @return
+     */
+    public static GlobalCoordinates getGlobalCoordinates(GlobalCoordinates startGlobalCoordinates, double startAngle, double distance){
+        return new GeodeticCalculator().calculateEndingGlobalCoordinates(Ellipsoid.WGS84, startGlobalCoordinates, startAngle, distance);
+    }
+    /**
+     * 鍒ゆ柇褰撳墠浣嶇疆鏄惁鍦ㄥ杈瑰舰鍖哄煙鍐�
+     * @param orderLocation 褰撳墠鐐�
+     * @param partitionLocation 鍖哄煙椤剁偣
+     * @return
+     */
+    public static boolean isInPolygon(Point orderLocation, List<Point> partitionLocation){
+
+        double p_x =orderLocation.getLongitude();
+        double p_y =orderLocation.getLatitude();
+        Point2D.Double point = new Point2D.Double(p_x, p_y);
+
+        List<Point2D.Double> pointList= new ArrayList<Point2D.Double>();
+
+        for (Point points : partitionLocation){
+            double polygonPoint_x=points.getLongitude();
+            double polygonPoint_y=points.getLatitude();
+            Point2D.Double polygonPoint = new Point2D.Double(polygonPoint_x,polygonPoint_y);
+            pointList.add(polygonPoint);
+        }
+        return IsPtInPoly(point,pointList);
+    }
+    /**
+     * 鍒ゆ柇鐐规槸鍚﹀湪澶氳竟褰㈠唴锛屽鏋滅偣浣嶄簬澶氳竟褰㈢殑椤剁偣鎴栬竟涓婏紝涔熺畻鍋氱偣鍦ㄥ杈瑰舰鍐咃紝鐩存帴杩斿洖true
+     * @param point 妫�娴嬬偣
+     * @param pts   澶氳竟褰㈢殑椤剁偣
+     * @return      鐐瑰湪澶氳竟褰㈠唴杩斿洖true,鍚﹀垯杩斿洖false
+     */
+    public static boolean IsPtInPoly(Point2D.Double point, List<Point2D.Double> pts){
+
+        int N = pts.size();
+        boolean boundOrVertex = true; //濡傛灉鐐逛綅浜庡杈瑰舰鐨勯《鐐规垨杈逛笂锛屼篃绠楀仛鐐瑰湪澶氳竟褰㈠唴锛岀洿鎺ヨ繑鍥瀟rue
+        int intersectCount = 0;//cross points count of x
+        double precision = 2e-10; //娴偣绫诲瀷璁$畻鏃跺�欎笌0姣旇緝鏃跺�欑殑瀹瑰樊
+        Point2D.Double p1, p2;//neighbour bound vertices
+        Point2D.Double p = point; //褰撳墠鐐�
+
+        p1 = pts.get(0);//left vertex
+        for(int i = 1; i <= N; ++i){//check all rays
+            if(p.equals(p1)){
+                return boundOrVertex;//p is an vertex
+            }
+
+            p2 = pts.get(i % N);
+            if(p.x < Math.min(p1.x, p2.x) || p.x > Math.max(p1.x, p2.x)){
+                p1 = p2;
+                continue;
+            }
+
+            if(p.x > Math.min(p1.x, p2.x) && p.x < Math.max(p1.x, p2.x)){
+                if(p.y <= Math.max(p1.y, p2.y)){
+                    if(p1.x == p2.x && p.y >= Math.min(p1.y, p2.y)){
+                        return boundOrVertex;
+                    }
+
+                    if(p1.y == p2.y){
+                        if(p1.y == p.y){
+                            return boundOrVertex;
+                        }else{//before ray
+                            ++intersectCount;
+                        }
+                    }else{
+                        double xinters = (p.x - p1.x) * (p2.y - p1.y) / (p2.x - p1.x) + p1.y;
+                        if(Math.abs(p.y - xinters) < precision){
+                            return boundOrVertex;
+                        }
+
+                        if(p.y < xinters){
+                            ++intersectCount;
+                        }
+                    }
+                }
+            }else{
+                if(p.x == p2.x && p.y <= p2.y){
+                    Point2D.Double p3 = pts.get((i+1) % N);
+                    if(p.x >= Math.min(p1.x, p3.x) && p.x <= Math.max(p1.x, p3.x)){
+                        ++intersectCount;
+                    }else{
+                        intersectCount += 2;
+                    }
+                }
+            }
+            p1 = p2;
+        }
+
+        if(intersectCount % 2 == 0){//鍋舵暟鍦ㄥ杈瑰舰澶�
+            return false;
+        } else { //濂囨暟鍦ㄥ杈瑰舰鍐�
+            return true;
+        }
+    }
+
+    public static void main(String[] args) {
+        // 125.097531,46.60029, 125.124731,46.584808
+        //鐩告満浣嶇疆
+        double[] camera = {125.146964331147,46.5580925811216,102};//缁忓害,绾害,楂樺害
+        //鐪嬪悜鐨勪綅缃�
+        double[] lookAt = {125.155449,46.555108,0};//缁忓害,绾害,楂樺害
+
+        double viewAngle = 20;//鐩告満鍙瑙掑害
+        double viewWidth = 150;//鐩告満瑙嗗煙瀹藉害
+
+        double[] ptz = GisUtil.getCameraPTZ(camera, lookAt, viewAngle, viewWidth);
+        System.out.println("ptz:" + Arrays.toString(ptz));
+
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/tools/Point.java b/ard-work/src/main/java/com/ruoyi/utils/gis/Point.java
similarity index 95%
rename from ard-work/src/main/java/com/ruoyi/utils/tools/Point.java
rename to ard-work/src/main/java/com/ruoyi/utils/gis/Point.java
index 80d9235..979cc55 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/tools/Point.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/gis/Point.java
@@ -1,4 +1,4 @@
-package com.ruoyi.utils.tools;
+package com.ruoyi.utils.gis;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java b/ard-work/src/main/java/com/ruoyi/utils/image/WaterMarkUtil.java
similarity index 98%
rename from ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java
rename to ard-work/src/main/java/com/ruoyi/utils/image/WaterMarkUtil.java
index 919cf10..14a4b1f 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/imageUtil/waterMarkUtil.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/image/WaterMarkUtil.java
@@ -1,4 +1,4 @@
-package com.ruoyi.device.hiksdk.util.imageUtil;
+package com.ruoyi.utils.image;
 
 import org.bytedeco.ffmpeg.global.avutil;
 import org.bytedeco.javacv.FFmpegFrameGrabber;
@@ -11,7 +11,6 @@
 import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.Random;
 import java.awt.*;
 import java.awt.image.BufferedImage;
 /**
@@ -26,7 +25,7 @@
 /**
  * 鍥剧墖姘村嵃宸ュ叿绫�
  */
-public class waterMarkUtil {
+public class WaterMarkUtil {
 
     // 姘村嵃閫忔槑搴�
     private static final float alpha = 0.3f;
diff --git a/ard-work/src/main/java/com/ruoyi/utils/minio/MinioConfig.java b/ard-work/src/main/java/com/ruoyi/utils/minio/MinioConfig.java
new file mode 100644
index 0000000..41c8cab
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/utils/minio/MinioConfig.java
@@ -0,0 +1,32 @@
+package com.ruoyi.utils.minio;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @Description:
+ * @ClassName: MinioInit
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�08鏈�25鏃�14:03:45
+ **/
+
+@Configuration
+@Slf4j(topic = "minio")
+public class MinioConfig {
+
+    @Value("${minio.endpoint}")
+    private String endpoint;
+    @Value("${minio.accessKey}")
+    private String accessKey;
+    @Value("${minio.secretKey}")
+    private String secretKey;
+
+    @Bean
+    MinioUtil getMinioUtil()
+    {
+        log.info("鍒濆鍖杕inio閰嶇疆"+"銆�"+endpoint+"("+accessKey+"/"+secretKey+")銆�");
+        return new MinioUtil(endpoint,accessKey,secretKey);
+    }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java b/ard-work/src/main/java/com/ruoyi/utils/minio/MinioUtil.java
similarity index 75%
rename from ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java
rename to ard-work/src/main/java/com/ruoyi/utils/minio/MinioUtil.java
index 7cbcec6..62b93d6 100644
--- a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/minio/MinioUtil.java
@@ -1,4 +1,4 @@
-package com.ruoyi.storage.minio.utils;
+package com.ruoyi.utils.minio;
 
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
@@ -6,39 +6,70 @@
 import io.minio.http.Method;
 import io.minio.messages.*;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.annotation.Resource;
-import java.io.*;
-import java.util.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 /**
- * @Description: Minio瀹㈡埛绔伐鍏风被
- * @ClassName: MinioUtils
+ * @Description: minio宸ュ叿绫�
+ * @ClassName: MinioUtil
  * @Author: 鍒樿嫃涔�
- * @Date: 2023骞�05鏈�18鏃�9:34
- * @Version: 1.0
+ * @Date: 2023骞�08鏈�25鏃�14:03:00
  **/
-@SuppressWarnings("ALL")
 @Slf4j(topic = "minio")
-@Component
-public class MinioUtils {
+public class MinioUtil {
 
-    @Resource
-    MinioClient minioClient;
+    private volatile static MinioClient minioClient;
+    public static String domainUrl;
+    public static String accessKey;
+    public static String secretKey;
+
+    private MinioUtil() {
+    }
+
+    public MinioUtil(String domainUrl, String accessKey, String secretKey) {
+        this.domainUrl = domainUrl;
+        this.accessKey = accessKey;
+        this.secretKey = secretKey;
+        creatMinioClient();
+    }
+
+    /**
+     * 鑾峰彇minio瀹㈡埛绔疄渚�
+     *
+     * @return {@link MinioClient}
+     */
+    public static MinioClient creatMinioClient() {
+        if (minioClient == null) {
+            synchronized (MinioUtil.class) {
+                if (minioClient == null) {
+                    minioClient = MinioClient.builder()
+                            .endpoint(domainUrl)
+                            .credentials(accessKey, secretKey)
+                            .build();
+                }
+            }
+        }
+        return minioClient;
+    }
 
     /**
      * 鍒ゆ柇妗舵槸鍚﹀瓨鍦�
      */
-    public boolean exitsBucket(String bucketName) {
+    public static boolean exitsBucket(String bucket) {
         boolean found = false;
         try {
-            if (StringUtils.isEmpty(bucketName)) {
+            if (StringUtils.isEmpty(bucket)) {
                 return false;
             }
-            BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build();
+            BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucket).build();
             found = minioClient.bucketExists(bucketExistsArgs);
 
         } catch (Exception ex) {
@@ -50,23 +81,23 @@
     /**
      * 鍒涘缓妗�,骞惰缃《绛栫暐涓哄叕鍏�
      */
-    public boolean createBucket(String bucketName) {
+    public static boolean createBucket(String bucket) {
         try {
-            if (StringUtils.isEmpty(bucketName)) {
+            if (StringUtils.isEmpty(bucket)) {
                 return false;
             }
             /*鍒涘缓妗�*/
-            MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucketName).build();
+            MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucket).build();
             minioClient.makeBucket(makeBucketArgs);
             /*璁剧疆绛栫暐*/
             String sb = "{\"Version\":\"2012-10-17\"," +
                     "\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":" +
                     "{\"AWS\":[\"*\"]},\"Action\":[\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"," +
-                    "\"s3:GetBucketLocation\"],\"Resource\":[\"arn:aws:s3:::" + bucketName +
+                    "\"s3:GetBucketLocation\"],\"Resource\":[\"arn:aws:s3:::" + bucket +
                     "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:PutObject\",\"s3:AbortMultipartUpload\",\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\"],\"Resource\":[\"arn:aws:s3:::" +
-                    bucketName + "/*\"]}]}";
+                    bucket + "/*\"]}]}";
             SetBucketPolicyArgs setBucketPolicyArgs = SetBucketPolicyArgs.builder()
-                    .bucket(bucketName)
+                    .bucket(bucket)
                     .config(sb)
                     .build();
             /*璁剧疆閫氱煡mqtt*/
@@ -85,7 +116,7 @@
             queueConfigurations.add(queueConfiguration);
             config.setQueueConfigurationList(queueConfigurations);
             SetBucketNotificationArgs setBucketNotificationArgs = SetBucketNotificationArgs.builder()
-                    .bucket(bucketName)
+                    .bucket(bucket)
                     .config(config).build();
             minioClient.setBucketPolicy(setBucketPolicyArgs);
             minioClient.setBucketNotification(setBucketNotificationArgs);
@@ -102,7 +133,7 @@
      *
      * @param bucket 妗跺悕绉�
      */
-    public boolean removeBucket(String bucket) {
+    public static boolean removeBucket(String bucket) {
         try {
             boolean found = exitsBucket(bucket);
             if (found) {
@@ -130,7 +161,7 @@
      *
      * @return
      */
-    public List<Bucket> getListBuckets() {
+    public static List<Bucket> getListBuckets() {
         try {
             return minioClient.listBuckets();
         } catch (Exception e) {
@@ -143,19 +174,19 @@
      * 鐢熸垚涓�涓狦ET璇锋眰鐨勫甫鏈夊け鏁堟椂闂寸殑鍒嗕韩閾炬帴銆�
      * 澶辨晥鏃堕棿榛樿鏄�7澶┿��
      *
-     * @param bucketName 瀛樺偍妗跺悕绉�
-     * @param objectName 瀛樺偍妗堕噷鐨勫璞″悕绉�
-     * @param expires    澶辨晥鏃堕棿锛堜互绉掍负鍗曚綅锛夛紝榛樿鏄�7澶╋紝涓嶅緱澶т簬涓冨ぉ
+     * @param bucket  瀛樺偍妗跺悕绉�
+     * @param object  瀛樺偍妗堕噷鐨勫璞″悕绉�
+     * @param expires 澶辨晥鏃堕棿锛堜互绉掍负鍗曚綅锛夛紝榛樿鏄�7澶╋紝涓嶅緱澶т簬涓冨ぉ
      * @return
      */
-    public String getObjectWithExpired(String bucketName, String objectName, Integer expires, TimeUnit timeUnit) {
+    public static String getObjectWithExpired(String bucket, String object, Integer expires, TimeUnit timeUnit) {
         String url = "";
-        if (exitsBucket(bucketName)) {
+        if (exitsBucket(bucket)) {
             try {
                 GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs.builder()
                         .method(Method.GET)
-                        .bucket(bucketName)
-                        .object(objectName)
+                        .bucket(bucket)
+                        .object(object)
                         .expiry(expires, timeUnit)
                         .build();
                 url = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
@@ -163,7 +194,7 @@
                 log.error("minio鐢熸垚澶辨晥url寮傚父", ex.getMessage());
             }
         } else {
-            createBucket(bucketName);
+            createBucket(bucket);
         }
         return url;
     }
@@ -176,20 +207,13 @@
      * @鍒涘缓鏃堕棿 2023/5/18 12:16
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-    public String putObjectAndGetUrl(String bucketName, MultipartFile file) {
-        if (!exitsBucket(bucketName)) {
-            createBucket(bucketName);
+    public static String putObjectAndGetUrl(String bucket, MultipartFile file) {
+        if (!exitsBucket(bucket)) {
+            createBucket(bucket);
         }
         //鍒ゆ柇鏂囦欢鏄惁涓虹┖
         if (null == file || 0 == file.getSize()) {
             log.error("涓婁紶minio鏂囦欢鏈嶅姟鍣ㄩ敊璇紝涓婁紶鏂囦欢涓虹┖");
-        }
-        boolean exsit = exitsBucket(bucketName);
-        if (!exsit) {
-            boolean bucket = createBucket(bucketName);
-            if (bucket) {
-                log.info(bucketName + "-妗朵笉瀛樺湪,鎴愬姛鍒涘缓妗�");
-            }
         }
         //鏂囦欢鍚�
         String originalFilename = file.getOriginalFilename();
@@ -200,7 +224,7 @@
             /*涓婁紶瀵硅薄*/
             PutObjectArgs putObjectArgs = PutObjectArgs
                     .builder()
-                    .bucket(bucketName)
+                    .bucket(bucket)
                     .object(fileName)
                     .stream(inputStream, file.getSize(), -1)
                     .contentType(file.getContentType())
@@ -210,7 +234,7 @@
             /*鑾峰彇url*/
             GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
                     .builder()
-                    .bucket(bucketName)
+                    .bucket(bucket)
                     .object(fileName)
                     .method(Method.GET)
                     .build();
@@ -231,20 +255,13 @@
      * @鍒涘缓鏃堕棿 2023/5/18 12:16
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-    public String putObjectAndGetUrl(String bucketName, String folder, MultipartFile file) {
-        if (!exitsBucket(bucketName)) {
-            createBucket(bucketName);
+    public static String putObjectAndGetUrl(String bucket, String folder, MultipartFile file) {
+        if (!exitsBucket(bucket)) {
+            createBucket(bucket);
         }
         //鍒ゆ柇鏂囦欢鏄惁涓虹┖
         if (null == file || 0 == file.getSize()) {
             log.error("涓婁紶minio鏂囦欢鏈嶅姟鍣ㄩ敊璇紝涓婁紶鏂囦欢涓虹┖");
-        }
-        boolean exsit = exitsBucket(bucketName);
-        if (!exsit) {
-            boolean bucket = createBucket(bucketName);
-            if (bucket) {
-                log.info(bucketName + "-妗朵笉瀛樺湪,鎴愬姛鍒涘缓妗�");
-            }
         }
         //鏂囦欢鍚�
         String originalFilename = file.getOriginalFilename();
@@ -255,7 +272,7 @@
             /*涓婁紶瀵硅薄*/
             PutObjectArgs putObjectArgs = PutObjectArgs
                     .builder()
-                    .bucket(bucketName)
+                    .bucket(bucket)
                     .object(fileName)
                     .stream(inputStream, file.getSize(), -1)
                     .contentType(file.getContentType())
@@ -265,7 +282,7 @@
             /*鑾峰彇url*/
             GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
                     .builder()
-                    .bucket(bucketName)
+                    .bucket(bucket)
                     .object(fileName)
                     .method(Method.GET)
                     .build();
@@ -281,15 +298,15 @@
     /**
      * 鍒犻櫎鏂囦欢
      *
-     * @param bucket     妗跺悕绉�
-     * @param objectName 瀵硅薄鍚嶇О
+     * @param bucket 妗跺悕绉�
+     * @param object 瀵硅薄鍚嶇О
      * @return boolean
      */
-    public boolean removeObject(String bucket, String objectName) {
+    public static boolean removeObject(String bucket, String object) {
         try {
             boolean exsit = exitsBucket(bucket);
             if (exsit) {
-                RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucket).object(objectName).build();
+                RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucket).object(object).build();
                 minioClient.removeObject(removeObjectArgs);
                 return true;
             }
@@ -302,14 +319,14 @@
     /**
      * 鎵归噺鍒犻櫎鏂囦欢
      *
-     * @param objectNames 瀵硅薄鍚嶇О
+     * @param objectList 瀵硅薄鍚嶇О鍒楄〃
      * @return boolean
      */
-    public boolean removeObjects(String bucket, List<String> objectNames) {
+    public static boolean removeObjects(String bucket, List<String> objectList) {
         if (exitsBucket(bucket)) {
             try {
                 List<DeleteObject> objects = new LinkedList<>();
-                for (String str : objectNames) {
+                for (String str : objectList) {
                     objects.add(new DeleteObject(str));
                 }
                 RemoveObjectsArgs removeObjectsArgs = RemoveObjectsArgs.builder().bucket(bucket).objects(objects).build();
@@ -334,7 +351,7 @@
      * @param bucket 妗跺悕绉�
      * @return {@link List}<{@link String}>
      */
-    public List<String> getBucketObjectName(String bucket) {
+    public static List<String> getBucketObjectName(String bucket) {
         boolean exsit = exitsBucket(bucket);
         if (exsit) {
             List<String> listObjetcName = new ArrayList<>();
@@ -356,10 +373,11 @@
     /**
      * 鑾峰彇鍗曚釜妗朵腑鐨勬墍鏈夋枃浠跺璞″悕绉�
      *
-     * @param [bucket,prefix]
+     * @param bucket 妗跺悕绉�
+     * @param prefix 鍓嶇紑
      * @return {@link List}<{@link String}>
      */
-    public List<String> getBucketObjectName(String bucket, String prefix) {
+    public static List<String> getBucketObjectName(String bucket, String prefix) {
         boolean exsit = exitsBucket(bucket);
         if (exsit) {
             List<String> listObjetcName = new ArrayList<>();
@@ -381,19 +399,19 @@
     /**
      * 鑾峰彇鏌愪釜妗朵笅鏌愪釜瀵硅薄鐨刄RL
      *
-     * @param bucket     妗跺悕绉�
-     * @param objectName 瀵硅薄鍚� (鏂囦欢澶瑰悕 + 鏂囦欢鍚�)
+     * @param bucket 妗跺悕绉�
+     * @param object 瀵硅薄鍚� (鏂囦欢澶瑰悕 + 鏂囦欢鍚�)
      * @return
      */
-    public String getBucketObjectUrl(String bucketName, String objectName) {
+    public static String getBucketObjectUrl(String bucket, String object) {
         try {
-            if (!exitsBucket(bucketName)) {
+            if (!exitsBucket(bucket)) {
                 return "";
             }
             GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
                     .builder()
-                    .bucket(bucketName)
-                    .object(objectName)
+                    .bucket(bucket)
+                    .object(object)
                     .method(Method.GET)
                     .build();
             String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
@@ -408,20 +426,20 @@
     /**
      * 涓婁紶瀵硅薄-stream
      *
-     * @param bucketName  bucket鍚嶇О
-     * @param objectName  饨備欢鍚嶇О
+     * @param bucket      bucket鍚嶇О
+     * @param object      饨備欢鍚嶇О
      * @param stream      饨備欢娴�
      * @param size        饧も缉
      * @param contextType 绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
      */
-    public boolean uploadObject(String bucketName, String objectName, InputStream stream, long size, String contextType) {
+    public static boolean uploadObject(String bucket, String object, InputStream stream, long size, String contextType) {
         try {
-            if (!exitsBucket(bucketName)) {
-                createBucket(bucketName);
+            if (!exitsBucket(bucket)) {
+                createBucket(bucket);
             }
             PutObjectArgs putObjectArgs = PutObjectArgs.builder()
-                    .bucket(bucketName)
-                    .object(objectName)
+                    .bucket(bucket)
+                    .object(object)
                     .stream(stream, size, -1)
                     .contentType(contextType)
                     .build();
@@ -436,20 +454,20 @@
     /**
      * 涓婁紶瀵硅薄-File
      *
-     * @param bucketName  bucket鍚嶇О
-     * @param objectName  饨備欢鍚嶇О
+     * @param bucket      bucket鍚嶇О
+     * @param object      饨備欢鍚嶇О
      * @param file        饨備欢
      * @param contextType 绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
      */
-    public boolean uploadObject(String bucketName, String objectName, File file, String contextType) {
+    public static boolean uploadObject(String bucket, String object, File file, String contextType) {
         try {
-            if (!exitsBucket(bucketName)) {
-                createBucket(bucketName);
+            if (!exitsBucket(bucket)) {
+                createBucket(bucket);
             }
             FileInputStream fileInputStream = new FileInputStream(file);
             PutObjectArgs putObjectArgs = PutObjectArgs.builder()
-                    .bucket(bucketName)
-                    .object(objectName)
+                    .bucket(bucket)
+                    .object(object)
                     .stream(fileInputStream, file.length(), -1)
                     .contentType(contextType)
                     .build();
@@ -464,20 +482,20 @@
     /**
      * 涓婁紶瀵硅薄-MultipartFile
      *
-     * @param bucketName    bucket鍚嶇О
-     * @param objectName    饨備欢鍚嶇О
-     * @param MultipartFile 饨備欢
+     * @param bucket        bucket鍚嶇О
+     * @param object        饨備欢鍚嶇О
+     * @param multipartFile 饨備欢
      * @param contextType   绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
      */
-    public boolean uploadObject(String bucketName, String objectName, MultipartFile multipartFile, String contextType) {
+    public static boolean uploadObject(String bucket, String object, MultipartFile multipartFile, String contextType) {
         try {
-            if (!exitsBucket(bucketName)) {
-                createBucket(bucketName);
+            if (!exitsBucket(bucket)) {
+                createBucket(bucket);
             }
             InputStream inputStream = multipartFile.getInputStream();
             PutObjectArgs putObjectArgs = PutObjectArgs.builder()
-                    .bucket(bucketName)
-                    .object(objectName)
+                    .bucket(bucket)
+                    .object(object)
                     .stream(inputStream, multipartFile.getSize(), -1)
                     .contentType(contextType)
                     .build();
@@ -492,15 +510,14 @@
     /**
      * 涓婁紶瀵硅薄,鐢╩ultipartFile鍚嶇О浣滀负瀵硅薄鍚�
      *
-     * @param bucketName    bucket鍚嶇О
-     * @param objectName    饨備欢鍚嶇О
-     * @param MultipartFile 饨備欢
+     * @param bucket        bucket鍚嶇О
+     * @param multipartFile 饨備欢
      * @param contextType   绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
      */
-    public boolean uploadObject(String bucketName, MultipartFile multipartFile, String contextType) {
+    public static boolean uploadObject(String bucket, MultipartFile multipartFile, String contextType) {
         try {
-            if (!exitsBucket(bucketName)) {
-                createBucket(bucketName);
+            if (!exitsBucket(bucket)) {
+                createBucket(bucket);
             }
             if (multipartFile == null) {
                 log.error("涓婁紶鏂囦欢涓虹┖");
@@ -509,7 +526,7 @@
             String objectName = multipartFile.getOriginalFilename();
             InputStream inputStream = multipartFile.getInputStream();
             PutObjectArgs putObjectArgs = PutObjectArgs.builder()
-                    .bucket(bucketName)
+                    .bucket(bucket)
                     .object(objectName)
                     .stream(inputStream, multipartFile.getSize(), -1)
                     .contentType(contextType)
@@ -525,15 +542,15 @@
     /**
      * 涓婁紶瀵硅薄-閫氳繃鏈湴璺緞
      *
-     * @param bulkName
-     * @param objectName
-     * @param localFilePathName
-     * @return
+     * @param bucket            妗跺悕绉�
+     * @param object            瀵硅薄鍚嶇О
+     * @param localFilePathName 鏂囦欢璺緞
+     * @return boolean
      */
-    public boolean uploadObject(String bucketName, String objectName, String localFilePathName, String contextType) {
+    public static boolean uploadObject(String bucket, String object, String localFilePathName, String contextType) {
         try {
-            if (!exitsBucket(bucketName)) {
-                createBucket(bucketName);
+            if (!exitsBucket(bucket)) {
+                createBucket(bucket);
             }
             File file = new File(localFilePathName);
             if (!file.exists()) {
@@ -541,8 +558,8 @@
                 return false;
             }
             UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder()
-                    .bucket(bucketName)
-                    .object(objectName)
+                    .bucket(bucket)
+                    .object(object)
                     .filename(localFilePathName)
                     .contentType(contextType)
                     .build();
@@ -562,7 +579,7 @@
      * @鍒涘缓鏃堕棿 2023/2/6 10:32
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-    public Iterable<Result<Item>> getObjectsByBucket(String bucketName) {
+    public static Iterable<Result<Item>> getObjectsByBucket(String bucketName) {
         Iterable<Result<Item>> listObjects = minioClient.listObjects(ListObjectsArgs.builder()
                 .bucket(bucketName)
                 .recursive(true)
@@ -578,7 +595,7 @@
      * @鍒涘缓鏃堕棿 2023/2/6 10:32
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-    public Iterable<Result<Item>> getObjectsByBucket(String bucketName, String prefix) {
+    public static Iterable<Result<Item>> getObjectsByBucket(String bucketName, String prefix) {
         Iterable<Result<Item>> listObjects = minioClient.listObjects(ListObjectsArgs.builder()
                 .bucket(bucketName)
                 .prefix(prefix)
@@ -586,4 +603,5 @@
                 .build());
         return listObjects;
     }
-}
\ No newline at end of file
+
+}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java b/ard-work/src/main/java/com/ruoyi/utils/process/CmdUtils.java
similarity index 98%
rename from ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java
rename to ard-work/src/main/java/com/ruoyi/utils/process/CmdUtils.java
index 3204542..8322b3a 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/process/CmdUtils.java
@@ -1,4 +1,4 @@
-package com.ruoyi.utils.tools;
+package com.ruoyi.utils.process;
 
 import lombok.extern.slf4j.Slf4j;
 
diff --git a/ard-work/src/main/java/com/ruoyi/utils/tools/GisTool.java b/ard-work/src/main/java/com/ruoyi/utils/tools/GisTool.java
deleted file mode 100644
index 4682ff7..0000000
--- a/ard-work/src/main/java/com/ruoyi/utils/tools/GisTool.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package com.ruoyi.utils.tools;
-
-import org.gavaghan.geodesy.Ellipsoid;
-import org.gavaghan.geodesy.GeodeticCalculator;
-import org.gavaghan.geodesy.GlobalCoordinates;
-
-import java.awt.geom.Point2D;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * @Description:
- * @ClassName: GisTool
- * @Author: 鍒樿嫃涔�
- * @Date: 2023骞�06鏈�15鏃�13:26
- * @Version: 1.0
- **/
-public class GisTool {
-    public static GeodeticCalculator geodeticCalculator = new GeodeticCalculator();
-    /**
-     * 鏍规嵁缁忕含搴︼紝璁$畻涓ょ偣闂寸殑璺濈
-     *
-     * @param From 绗竴涓偣鐨勭粡绾害
-     * @param To  绗簩涓偣鐨勭粡绾害
-     * @return 杩斿洖璺濈 鍗曚綅绫�
-     */
-    public static double getDistance(double[] From, double[] To) {
-        double longitudeFrom = From[0];
-        double latitudeFrom = From[1];
-        double longitudeTo = To[0];
-        double latitudeTo = To[1];
-        GlobalCoordinates source = new GlobalCoordinates(latitudeFrom, longitudeFrom);
-        GlobalCoordinates target = new GlobalCoordinates(latitudeTo, longitudeTo);
-        return geodeticCalculator.calculateGeodeticCurve(Ellipsoid.WGS84, source, target).getEllipsoidalDistance();
-    }
-
-    public static void main(String[] args) {
-        // 琚娴嬬殑缁忕含搴︾偣
-        Point point= new Point(126.649261,45.687377);
-        // 鍟嗕笟鍖哄煙锛堢櫨搴﹀杈瑰舰鍖哄煙缁忕含搴﹂泦鍚堬級
-        List<Point> partitionLocation = new ArrayList<>();
-        partitionLocation.add(new Point(126.64459,45.688548));
-        partitionLocation.add(new Point(126.653376,45.68938));
-        partitionLocation.add(new Point(126.645776,45.685048));
-        partitionLocation.add(new Point(126.654184,45.685778));
-        System.out.println(isInPolygon(point,partitionLocation));
-    }
-
-    /**
-     * 鍒ゆ柇褰撳墠浣嶇疆鏄惁鍦ㄥ杈瑰舰鍖哄煙鍐�
-     * @param orderLocation 褰撳墠鐐�
-     * @param partitionLocation 鍖哄煙椤剁偣
-     * @return
-     */
-    public static boolean isInPolygon(Point orderLocation,List<Point> partitionLocation){
-
-        double p_x =orderLocation.getLongitude();
-        double p_y =orderLocation.getLatitude();
-        Point2D.Double point = new Point2D.Double(p_x, p_y);
-
-        List<Point2D.Double> pointList= new ArrayList<Point2D.Double>();
-
-        for (Point points : partitionLocation){
-            double polygonPoint_x=points.getLongitude();
-            double polygonPoint_y=points.getLatitude();
-            Point2D.Double polygonPoint = new Point2D.Double(polygonPoint_x,polygonPoint_y);
-            pointList.add(polygonPoint);
-        }
-        return IsPtInPoly(point,pointList);
-    }
-    /**
-     * 鍒ゆ柇鐐规槸鍚﹀湪澶氳竟褰㈠唴锛屽鏋滅偣浣嶄簬澶氳竟褰㈢殑椤剁偣鎴栬竟涓婏紝涔熺畻鍋氱偣鍦ㄥ杈瑰舰鍐咃紝鐩存帴杩斿洖true
-     * @param point 妫�娴嬬偣
-     * @param pts   澶氳竟褰㈢殑椤剁偣
-     * @return      鐐瑰湪澶氳竟褰㈠唴杩斿洖true,鍚﹀垯杩斿洖false
-     */
-    public static boolean IsPtInPoly(Point2D.Double point, List<Point2D.Double> pts){
-
-        int N = pts.size();
-        boolean boundOrVertex = true; //濡傛灉鐐逛綅浜庡杈瑰舰鐨勯《鐐规垨杈逛笂锛屼篃绠楀仛鐐瑰湪澶氳竟褰㈠唴锛岀洿鎺ヨ繑鍥瀟rue
-        int intersectCount = 0;//cross points count of x
-        double precision = 2e-10; //娴偣绫诲瀷璁$畻鏃跺�欎笌0姣旇緝鏃跺�欑殑瀹瑰樊
-        Point2D.Double p1, p2;//neighbour bound vertices
-        Point2D.Double p = point; //褰撳墠鐐�
-
-        p1 = pts.get(0);//left vertex
-        for(int i = 1; i <= N; ++i){//check all rays
-            if(p.equals(p1)){
-                return boundOrVertex;//p is an vertex
-            }
-
-            p2 = pts.get(i % N);
-            if(p.x < Math.min(p1.x, p2.x) || p.x > Math.max(p1.x, p2.x)){
-                p1 = p2;
-                continue;
-            }
-
-            if(p.x > Math.min(p1.x, p2.x) && p.x < Math.max(p1.x, p2.x)){
-                if(p.y <= Math.max(p1.y, p2.y)){
-                    if(p1.x == p2.x && p.y >= Math.min(p1.y, p2.y)){
-                        return boundOrVertex;
-                    }
-
-                    if(p1.y == p2.y){
-                        if(p1.y == p.y){
-                            return boundOrVertex;
-                        }else{//before ray
-                            ++intersectCount;
-                        }
-                    }else{
-                        double xinters = (p.x - p1.x) * (p2.y - p1.y) / (p2.x - p1.x) + p1.y;
-                        if(Math.abs(p.y - xinters) < precision){
-                            return boundOrVertex;
-                        }
-
-                        if(p.y < xinters){
-                            ++intersectCount;
-                        }
-                    }
-                }
-            }else{
-                if(p.x == p2.x && p.y <= p2.y){
-                    Point2D.Double p3 = pts.get((i+1) % N);
-                    if(p.x >= Math.min(p1.x, p3.x) && p.x <= Math.max(p1.x, p3.x)){
-                        ++intersectCount;
-                    }else{
-                        intersectCount += 2;
-                    }
-                }
-            }
-            p1 = p2;
-        }
-
-        if(intersectCount % 2 == 0){//鍋舵暟鍦ㄥ杈瑰舰澶�
-            return false;
-        } else { //濂囨暟鍦ㄥ杈瑰舰鍐�
-            return true;
-        }
-    }
-
-}
diff --git a/ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml b/ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml
index 90d8a53..fffe942 100644
--- a/ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml
+++ b/ard-work/src/main/resources/mapper/dispatch/ArdDispatchPoliceMapper.xml
@@ -16,8 +16,16 @@
         <result property="createTime" column="create_time"/>
         <result property="updateBy" column="update_by"/>
         <result property="updateTime" column="update_time"/>
-        <collection property="sysUserList" javaType="java.util.List" resultMap="SysUserListResult"/>
+        <!-- 瀛愭煡璇紝鍏宠仈 ard_dispatch_police_user 琛� -->
+        <collection property="sysUserList" ofType="java.util.List" select="getSysUserListByMainTableId" column="id"/>
     </resultMap>
+    <select id="getSysUserListByMainTableId" resultType="SysUser">
+        SELECT u.*
+        FROM ard_dispatch_police_user b
+                 left join sys_user u on b.user_id = u.user_id
+        WHERE dispatch_id = #{id}
+    </select>
+
 
     <resultMap id="ArdDispatchPoliceArdDispatchPoliceUserResult" type="ArdDispatchPolice"
                extends="ArdDispatchPoliceResult">
@@ -32,23 +40,18 @@
     </resultMap>
 
     <sql id="selectArdDispatchPoliceVo">
-        SELECT adp.ID,
-               adp.NAME,
-               adp.text,
-               adp.longitude,
-               adp.latitude,
-               adp.dept_id,
-               adp.user_id,
-               adp.create_by,
-               adp.create_time,
-               adp.update_by,
-               adp.update_time,
-               u.user_id     as sub_user_id,
-               u.nick_name   as sub_nick_name,
-               u.dept_id     as sub_dept_id
-        FROM ard_dispatch_police adp
-        left join ard_dispatch_police_user b on b.dispatch_id = adp.id
-        left join sys_user u on b.user_id = u.user_id
+        SELECT ID,
+               NAME,
+               text,
+               longitude,
+               latitude,
+               dept_id,
+               user_id,
+               create_by,
+               create_time,
+               update_by,
+               update_time
+        FROM ard_dispatch_police
     </sql>
 
     <select id="selectArdDispatchPoliceList" parameterType="ArdDispatchPolice" resultMap="ArdDispatchPoliceResult">
@@ -75,9 +78,9 @@
                a.create_time,
                a.update_by,
                a.update_time,
-               b.user_id     as sub_user_id,
-               b.nick_name   as sub_nick_name,
-               b.dept_id     as sub_dept_id
+               b.user_id   as sub_user_id,
+               b.nick_name as sub_nick_name,
+               b.dept_id   as sub_dept_id
         from ard_dispatch_police a
                  left join ard_dispatch_police_user b on b.dispatch_id = a.id
         where a.id = #{id}
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java
index 69ea287..7a8ef64 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java
@@ -1,11 +1,10 @@
 package com.ruoyi.quartz.task;
 
-import com.ruoyi.storage.minio.utils.MinioUtils;
+import com.ruoyi.utils.minio.MinioUtil;
 import io.minio.Result;
 import io.minio.messages.Item;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
-
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.time.ZoneId;
@@ -22,8 +21,6 @@
 @Component("MinioTask")
 @Slf4j(topic = "minio")
 public class MinioTask {
-    @Resource
-    MinioUtils minioUtil;
 
     public void delHistoryTask(Integer saveDays) {
         log.debug("鎵ц鍘嗗彶鏁版嵁鍒犻櫎");
@@ -33,7 +30,7 @@
             buckets.add("pic");
             buckets.add("record");
             for (String name : buckets) {
-                Iterable<Result<Item>> listObjectsPic = minioUtil.getObjectsByBucket(name);
+                Iterable<Result<Item>> listObjectsPic = MinioUtil.getObjectsByBucket(name);
                 for (Result<Item> result : listObjectsPic) {
                     Item item = result.get();
                     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("Asia/Shanghai"));
@@ -51,7 +48,7 @@
                         log.debug("objectTime : " + objectTime);
                         log.debug("expireTime : " + expireTime);
                         log.debug("objectTime 鏃堕棿鍦� expireTime 涔嬪墠,鎵ц鍒犻櫎");
-                        boolean b = minioUtil.removeObject(name, item.objectName());
+                        boolean b = MinioUtil.removeObject(name, item.objectName());
                         if (b) {
                             log.debug("鎴愬姛鍒犻櫎杩囨湡鏁版嵁锛�" + item.objectName() + "---" + item.lastModified());
                         }

--
Gitblit v1.9.3