From aea81128444acb8ca9a90bc7ef04758bf2cd284d Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期三, 23 八月 2023 14:44:22 +0800
Subject: [PATCH] 重构minio和mqtt配置信息获取 重构minio工具类 区分生产环境和开发环境配置信息

---
 ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumer.java                          |   33 +
 ruoyi-admin/src/main/resources/application-prod-druid.yml                              |   58 +++
 ard-work/src/main/resources/templates/test.html                                        |    2 
 ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioConfig.java                  |   75 +++
 ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java                          |   53 +-
 ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java                   |  157 ++++---
 ruoyi-admin/src/main/resources/application.yml                                         |  131 ++----
 /dev/null                                                                              |   61 ---
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java                        |    7 
 ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java |    5 
 ruoyi-admin/src/main/resources/application-prod.yml                                    |  101 +++++
 ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java  |   20 
 ruoyi-admin/src/main/resources/application-dev-druid.yml                               |   58 +++
 ard-work/src/main/java/com/ruoyi/utils/spring/SpringUtils.java                         |  158 ++++++++
 ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java                 |    4 
 ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java |   15 
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java              |   41 +-
 ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java                  |    4 
 ruoyi-admin/src/main/resources/application-dev.yml                                     |  101 +++++
 19 files changed, 775 insertions(+), 309 deletions(-)

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 c594b93..6c2d3a8 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
@@ -46,7 +46,8 @@
     private IArdAppPositionService ardAppPositionService;
     @Autowired
     private ISysUserService sysUserService;
-
+    @Autowired
+    private MinioUtils minioUtil;
 
     /**
      * 鏌ヨapp浣嶇疆鍒楄〃
@@ -200,7 +201,7 @@
     @ApiOperation("涓婁紶鏂囦欢")
     public AjaxResult uploadFile(MultipartFile file,String type)
     {
-        String url = MinioUtils.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/device/camera/service/impl/ArdCamerasServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
index fd602a2..af4c67b 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
@@ -120,20 +120,7 @@
         ardCameras.setCreateTime(DateUtils.getNowDate());
         ardCameras.setUserId(SecurityUtils.getUserId());
         redisCache.setCacheObject(getCacheKey(ardCameras.getId()), ardCameras);
-        int i = ardCamerasMapper.insertArdCameras(ardCameras);
-        if (i > 0) {
-//            //鍒犻櫎褰撳墠鐩告満鐨勬墍鏈夐�氶亾
-//            ardChannelMapper.deleteArdChannelByDeviceId(ardCameras.getId());
-//            //鑾峰彇鐩告満閫氶亾
-//            List<ArdChannel> ipChannelList = hikClientService.getCameraChannelList(ardCameras);
-//            if (ipChannelList.size() > 0) {
-//                for (ArdChannel channel : ipChannelList) {
-//                    channel.setId(IdUtils.simpleUUID());
-//                    ardChannelMapper.insertArdChannel(channel);
-//                }
-//            }
-        }
-        return i;
+        return ardCamerasMapper.insertArdCameras(ardCameras);
     }
 
     /**
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/config/MinioClientSingleton.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/config/MinioClientSingleton.java
deleted file mode 100644
index 7433fed..0000000
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/config/MinioClientSingleton.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.ruoyi.device.hiksdk.config;
-
-import io.minio.MinioClient;
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
-import org.springframework.stereotype.Component;
-
-import java.io.IOException;
-import java.util.Properties;
-
-/**
- * @Description:
- * @ClassName: MinioClientSingleton
- * @Author: 鍒樿嫃涔�
- * @Date: 2023骞�05鏈�18鏃�9:32
- * @Version: 1.0
- **/
-
-@Slf4j(topic = "minio")
-@Component
-public class MinioClientSingleton {
-
-    public static String domainUrl;
-    private static String accessKey;
-    private static String secretKey;
-
-    private volatile static MinioClient minioClient;
-
-    static {
-        domainUrl = getYmlNew("minio.endpoint");
-        accessKey = getYmlNew("minio.accessKey");
-        secretKey = getYmlNew("minio.secretKey");
-        log.debug("minio淇℃伅锛�" + domainUrl + "(" + accessKey + "/" + secretKey + ")");
-    }
-
-    /**
-     * 鑾峰彇minio瀹㈡埛绔疄渚�
-     *
-     * @return {@link MinioClient}
-     */
-    public static MinioClient getMinioClient() {
-        if (minioClient == null) {
-            synchronized (MinioClientSingleton.class) {
-                if (minioClient == null) {
-                    minioClient = MinioClient.builder()
-                            .endpoint(domainUrl)
-                            .credentials(accessKey, secretKey)
-                            .build();
-                }
-            }
-        }
-        return minioClient;
-    }
-
-    /*yml閰嶇疆淇℃伅鑾峰彇*/
-    public static String getYmlNew(String key) {
-        Resource resource = new ClassPathResource("application-ard.yml");
-        Properties properties = null;
-        try {
-            YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean();
-            yamlFactory.setResources(resource);
-            properties = yamlFactory.getObject();
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-        return properties.get(key).toString();
-    }
-
-}
-
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 1471f3a..771c21f 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
@@ -1,16 +1,13 @@
 package com.ruoyi.device.hiksdk.service.impl;
 
-import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.common.annotation.SdkOperate;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.service.IArdCamerasService;
 import com.ruoyi.device.channel.domain.ArdChannel;
-import com.ruoyi.device.channel.service.IArdChannelService;
 import com.ruoyi.device.hiksdk.common.GlobalVariable;
 import com.ruoyi.device.camera.domain.ArdCameras;
-import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
 import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil;
 import com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK;
 import com.ruoyi.device.hiksdk.service.IHikClientService;
@@ -22,7 +19,7 @@
 import com.sun.jna.Pointer;
 import com.sun.jna.ptr.IntByReference;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.scheduling.annotation.Async;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.Base64;
@@ -33,7 +30,6 @@
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.stream.Collectors;
 
 import static com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK.*;
 
@@ -48,8 +44,12 @@
 @Service
 public class HikClientServiceImpl implements IHikClientService {
 
+    @Value("${minio.endpoint}")
+    private static String endpoint;
     @Resource
-    IArdCamerasService ardCamerasService;
+    private IArdCamerasService ardCamerasService;
+    @Resource
+    private MinioUtils minioUtil;
 
     private static HCNetSDK hCNetSDK;
 
@@ -1155,9 +1155,9 @@
             InputStream input = new ByteArrayInputStream(array);
             String url = "";
             try {
-                boolean b = MinioUtils.uploadObject(BucketName, ObjectName, input, input.available(), ContentType);
+                boolean b = minioUtil.uploadObject(BucketName, ObjectName, input, input.available(), ContentType);
                 if (b) {
-                    url = MinioUtils.getBucketObjectUrl(BucketName, ObjectName);
+                    url = minioUtil.getBucketObjectUrl(BucketName, ObjectName);
                     log.debug("涓婁紶鏂囦欢鎴愬姛!" + url);
                 }
             } catch (IOException ex) {
@@ -1341,9 +1341,9 @@
             FileInputStream stream = new FileInputStream(path);
             String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
             String recordName = cameraId + "/" + time + "/" + ObjectName + ".mp4";
-            boolean b = MinioUtils.uploadObject(BucketName, recordName, stream, stream.available(), ContentType);
+            boolean b = minioUtil.uploadObject(BucketName, recordName, stream, stream.available(), ContentType);
             if (b) {
-                url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName;
+                url = endpoint + "/" + BucketName + "/" + recordName;
                 log.debug("涓婁紶鏂囦欢鎴愬姛!" + url);
             }
             return url;
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 e8b45ba..36eede2 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
@@ -47,8 +47,8 @@
                 // 鍚姩鍚庡彴杩涚▼
                 CmdUtils.commandStart(processName, cmd, null);
                 // 鍚姩cmd绐楀彛
-//            String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"};
-//            CmdUtils.commandStart(command);
+//                String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"};
+//                CmdUtils.commandStart(command);
             }
         }
     }
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
new file mode 100644
index 0000000..2a3989f
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioConfig.java
@@ -0,0 +1,75 @@
+package com.ruoyi.storage.minio.utils;
+
+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;
+
+//    private volatile static MinioClient minioClient;
+
+    @Bean
+    public io.minio.MinioClient getMinioClient() {
+        return io.minio.MinioClient.builder()
+                .endpoint(endpoint)
+                .credentials(accessKey, secretKey)
+                .build();
+    }
+
+//    /**
+//     * 鑾峰彇minio瀹㈡埛绔疄渚�
+//     *
+//     * @return {@link MinioClient}
+//     */
+//    public static MinioClient getMinioClient() {
+//        if (minioClient == null) {
+//            synchronized (MinioClientSingleton.class) {
+//                if (minioClient == null) {
+//                    minioClient = MinioClient.builder()
+//                            .endpoint(endpoint)
+//                            .credentials(accessKey, secretKey)
+//                            .build();
+//                }
+//            }
+//        }
+//        return minioClient;
+//    }
+    //    static {
+//        domainUrl = getYmlNew("minio.endpoint");
+//        accessKey = getYmlNew("minio.accessKey");
+//        secretKey = getYmlNew("minio.secretKey");
+//        log.debug("minio淇℃伅锛�" + domainUrl + "(" + accessKey + "/" + secretKey + ")");
+//    }
+    /*yml閰嶇疆淇℃伅鑾峰彇*/
+//    public static String getYmlNew(String key) {
+//        Resource resource = new ClassPathResource("application-prod.yml");
+//        Properties properties = null;
+//        try {
+//            YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean();
+//            yamlFactory.setResources(resource);
+//            properties = yamlFactory.getObject();
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            return null;
+//        }
+//        return properties.get(key).toString();
+//    }
+
+}
+
diff --git a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java b/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java
index c063b73..ff3e870 100644
--- a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java
+++ b/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java
@@ -2,13 +2,14 @@
 
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
-import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
 import io.minio.*;
 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.util.concurrent.TimeUnit;
@@ -22,19 +23,23 @@
  **/
 @SuppressWarnings("ALL")
 @Slf4j(topic = "minio")
+@Component
 public class MinioUtils {
+
+    @Resource
+    MinioClient minioClient;
 
     /**
      * 鍒ゆ柇妗舵槸鍚﹀瓨鍦�
      */
-    public static boolean exitsBucket(String bucketName) {
+    public boolean exitsBucket(String bucketName) {
         boolean found = false;
         try {
             if (StringUtils.isEmpty(bucketName)) {
                 return false;
             }
             BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build();
-            found = MinioClientSingleton.getMinioClient().bucketExists(bucketExistsArgs);
+            found = minioClient.bucketExists(bucketExistsArgs);
 
         } catch (Exception ex) {
             log.error("minio鍒ゆ柇妗跺瓨鍦ㄥ紓甯革細", ex.getMessage());
@@ -45,14 +50,14 @@
     /**
      * 鍒涘缓妗�,骞惰缃《绛栫暐涓哄叕鍏�
      */
-    public static boolean createBucket(String bucketName) {
+    public boolean createBucket(String bucketName) {
         try {
             if (StringUtils.isEmpty(bucketName)) {
                 return false;
             }
             /*鍒涘缓妗�*/
             MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucketName).build();
-            MinioClientSingleton.getMinioClient().makeBucket(makeBucketArgs);
+            minioClient.makeBucket(makeBucketArgs);
             /*璁剧疆绛栫暐*/
             String sb = "{\"Version\":\"2012-10-17\"," +
                     "\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":" +
@@ -72,7 +77,7 @@
             queueConfiguration.setQueue("arn:minio:sqs::_:mqtt");
 
             //璁剧疆浜嬩欢
-            List<EventType> events=new ArrayList<>();
+            List<EventType> events = new ArrayList<>();
             events.add(EventType.OBJECT_REMOVED_ANY);
             events.add(EventType.OBJECT_CREATED_ANY);
             queueConfiguration.setEvents(events);
@@ -82,8 +87,8 @@
             SetBucketNotificationArgs setBucketNotificationArgs = SetBucketNotificationArgs.builder()
                     .bucket(bucketName)
                     .config(config).build();
-            MinioClientSingleton.getMinioClient().setBucketPolicy(setBucketPolicyArgs);
-            MinioClientSingleton.getMinioClient().setBucketNotification(setBucketNotificationArgs);
+            minioClient.setBucketPolicy(setBucketPolicyArgs);
+            minioClient.setBucketNotification(setBucketNotificationArgs);
 
             return true;
         } catch (Exception ex) {
@@ -97,11 +102,11 @@
      *
      * @param bucket 妗跺悕绉�
      */
-    public static boolean removeBucket(String bucket) {
+    public boolean removeBucket(String bucket) {
         try {
             boolean found = exitsBucket(bucket);
             if (found) {
-                Iterable<Result<Item>> myObjects = MinioClientSingleton.getMinioClient().listObjects(ListObjectsArgs.builder().bucket(bucket).build());
+                Iterable<Result<Item>> myObjects = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucket).build());
                 for (Result<Item> result : myObjects) {
                     Item item = result.get();
                     //鏈夊璞℃枃浠讹紝鍒欏垹闄ゅけ璐�
@@ -110,7 +115,7 @@
                     }
                 }
                 // 鍒犻櫎`bucketName`瀛樺偍妗讹紝娉ㄦ剰锛屽彧鏈夊瓨鍌ㄦ《涓虹┖鏃舵墠鑳藉垹闄ゆ垚鍔熴��
-                MinioClientSingleton.getMinioClient().removeBucket(RemoveBucketArgs.builder().bucket(bucket).build());
+                minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucket).build());
                 found = exitsBucket(bucket);
                 return !found;
             }
@@ -125,9 +130,9 @@
      *
      * @return
      */
-    public static List<Bucket> getListBuckets() {
+    public List<Bucket> getListBuckets() {
         try {
-            return MinioClientSingleton.getMinioClient().listBuckets();
+            return minioClient.listBuckets();
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -143,7 +148,7 @@
      * @param expires    澶辨晥鏃堕棿锛堜互绉掍负鍗曚綅锛夛紝榛樿鏄�7澶╋紝涓嶅緱澶т簬涓冨ぉ
      * @return
      */
-    public static String getObjectWithExpired(String bucketName, String objectName, Integer expires, TimeUnit timeUnit) {
+    public String getObjectWithExpired(String bucketName, String objectName, Integer expires, TimeUnit timeUnit) {
         String url = "";
         if (exitsBucket(bucketName)) {
             try {
@@ -153,7 +158,7 @@
                         .object(objectName)
                         .expiry(expires, timeUnit)
                         .build();
-                url = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
+                url = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
             } catch (Exception ex) {
                 log.error("minio鐢熸垚澶辨晥url寮傚父", ex.getMessage());
             }
@@ -171,7 +176,7 @@
      * @鍒涘缓鏃堕棿 2023/5/18 12:16
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-    public static String putObjectAndGetUrl(String bucketName, MultipartFile file) {
+    public String putObjectAndGetUrl(String bucketName, MultipartFile file) {
         if (!exitsBucket(bucketName)) {
             createBucket(bucketName);
         }
@@ -200,7 +205,7 @@
                     .stream(inputStream, file.getSize(), -1)
                     .contentType(file.getContentType())
                     .build();
-            MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+            minioClient.putObject(putObjectArgs);
             inputStream.close();
             /*鑾峰彇url*/
             GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
@@ -209,7 +214,7 @@
                     .object(fileName)
                     .method(Method.GET)
                     .build();
-            String presignedObjectUrl = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
             String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
             return ObjectUrl;
         } catch (Exception ex) {
@@ -226,7 +231,7 @@
      * @鍒涘缓鏃堕棿 2023/5/18 12:16
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-    public static String putObjectAndGetUrl(String bucketName, String folder, MultipartFile file) {
+    public String putObjectAndGetUrl(String bucketName, String folder, MultipartFile file) {
         if (!exitsBucket(bucketName)) {
             createBucket(bucketName);
         }
@@ -255,7 +260,7 @@
                     .stream(inputStream, file.getSize(), -1)
                     .contentType(file.getContentType())
                     .build();
-            MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+            minioClient.putObject(putObjectArgs);
             inputStream.close();
             /*鑾峰彇url*/
             GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
@@ -264,7 +269,7 @@
                     .object(fileName)
                     .method(Method.GET)
                     .build();
-            String presignedObjectUrl = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
             String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
             return ObjectUrl;
         } catch (Exception ex) {
@@ -280,12 +285,12 @@
      * @param objectName 瀵硅薄鍚嶇О
      * @return boolean
      */
-    public static boolean removeObject(String bucket, String objectName) {
+    public boolean removeObject(String bucket, String objectName) {
         try {
             boolean exsit = exitsBucket(bucket);
             if (exsit) {
                 RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucket).object(objectName).build();
-                MinioClientSingleton.getMinioClient().removeObject(removeObjectArgs);
+                minioClient.removeObject(removeObjectArgs);
                 return true;
             }
         } catch (Exception e) {
@@ -300,7 +305,7 @@
      * @param objectNames 瀵硅薄鍚嶇О
      * @return boolean
      */
-    public static boolean removeObjects(String bucket, List<String> objectNames) {
+    public boolean removeObjects(String bucket, List<String> objectNames) {
         if (exitsBucket(bucket)) {
             try {
                 List<DeleteObject> objects = new LinkedList<>();
@@ -308,7 +313,7 @@
                     objects.add(new DeleteObject(str));
                 }
                 RemoveObjectsArgs removeObjectsArgs = RemoveObjectsArgs.builder().bucket(bucket).objects(objects).build();
-                Iterable<Result<DeleteError>> results = MinioClientSingleton.getMinioClient().removeObjects(removeObjectsArgs);
+                Iterable<Result<DeleteError>> results = minioClient.removeObjects(removeObjectsArgs);
                 /*鍒犻櫎瀹岄亶鍘嗙粨鏋滐紝鍚﹀垯鍒犱笉鎺�*/
                 for (Result<DeleteError> result : results) {
                     DeleteError error = result.get();
@@ -329,13 +334,37 @@
      * @param bucket 妗跺悕绉�
      * @return {@link List}<{@link String}>
      */
-    public static List<String> getBucketObjectName(String bucket) {
+    public List<String> getBucketObjectName(String bucket) {
         boolean exsit = exitsBucket(bucket);
         if (exsit) {
             List<String> listObjetcName = new ArrayList<>();
             try {
                 ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().bucket(bucket).build();
-                Iterable<Result<Item>> myObjects = MinioClientSingleton.getMinioClient().listObjects(listObjectsArgs);
+                Iterable<Result<Item>> myObjects = minioClient.listObjects(listObjectsArgs);
+                for (Result<Item> result : myObjects) {
+                    Item item = result.get();
+                    listObjetcName.add(item.objectName());
+                }
+                return listObjetcName;
+            } catch (Exception ex) {
+                log.error("minio鑾峰彇妗朵笅瀵硅薄寮傚父锛�" + ex.getMessage());
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 鑾峰彇鍗曚釜妗朵腑鐨勬墍鏈夋枃浠跺璞″悕绉�
+     * @param [bucket,prefix]
+     * @return {@link List}<{@link String}>
+     */
+    public List<String> getBucketObjectName(String bucket, String prefix) {
+        boolean exsit = exitsBucket(bucket);
+        if (exsit) {
+            List<String> listObjetcName = new ArrayList<>();
+            try {
+                ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().prefix(prefix).bucket(bucket).build();
+                Iterable<Result<Item>> myObjects = minioClient.listObjects(listObjectsArgs);
                 for (Result<Item> result : myObjects) {
                     Item item = result.get();
                     listObjetcName.add(item.objectName());
@@ -355,7 +384,7 @@
      * @param objectName 瀵硅薄鍚� (鏂囦欢澶瑰悕 + 鏂囦欢鍚�)
      * @return
      */
-    public static String getBucketObjectUrl(String bucketName, String objectName) {
+    public String getBucketObjectUrl(String bucketName, String objectName) {
         try {
             if (!exitsBucket(bucketName)) {
                 return "";
@@ -366,7 +395,9 @@
                     .object(objectName)
                     .method(Method.GET)
                     .build();
-            return MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
+            return ObjectUrl;
         } catch (Exception ex) {
             log.error("minio鑾峰彇瀵硅薄URL寮傚父" + ex.getMessage());
         }
@@ -382,7 +413,7 @@
      * @param size        饧も缉
      * @param contextType 绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
      */
-    public static boolean uploadObject(String bucketName, String objectName, InputStream stream, long size, String contextType) {
+    public boolean uploadObject(String bucketName, String objectName, InputStream stream, long size, String contextType) {
         try {
             if (!exitsBucket(bucketName)) {
                 createBucket(bucketName);
@@ -393,7 +424,7 @@
                     .stream(stream, size, -1)
                     .contentType(contextType)
                     .build();
-            ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+            ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs);
             return true;
         } catch (Exception ex) {
             log.error("minio涓婁紶鏂囦欢(閫氳繃stream)寮傚父" + ex.getMessage());
@@ -409,7 +440,7 @@
      * @param file        饨備欢
      * @param contextType 绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
      */
-    public static boolean uploadObject(String bucketName, String objectName, File file, String contextType) {
+    public boolean uploadObject(String bucketName, String objectName, File file, String contextType) {
         try {
             if (!exitsBucket(bucketName)) {
                 createBucket(bucketName);
@@ -421,7 +452,7 @@
                     .stream(fileInputStream, file.length(), -1)
                     .contentType(contextType)
                     .build();
-            ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+            ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs);
             return true;
         } catch (Exception ex) {
             log.error("minio涓婁紶鏂囦欢(閫氳繃File)寮傚父" + ex.getMessage());
@@ -437,7 +468,7 @@
      * @param MultipartFile 饨備欢
      * @param contextType   绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
      */
-    public static boolean uploadObject(String bucketName, String objectName, MultipartFile multipartFile, String contextType) {
+    public boolean uploadObject(String bucketName, String objectName, MultipartFile multipartFile, String contextType) {
         try {
             if (!exitsBucket(bucketName)) {
                 createBucket(bucketName);
@@ -449,7 +480,7 @@
                     .stream(inputStream, multipartFile.getSize(), -1)
                     .contentType(contextType)
                     .build();
-            ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+            ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs);
             return true;
         } catch (Exception ex) {
             log.error("minio涓婁紶鏂囦欢(閫氳繃File)寮傚父" + ex.getMessage());
@@ -465,7 +496,7 @@
      * @param MultipartFile 饨備欢
      * @param contextType   绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
      */
-    public static boolean uploadObject(String bucketName, MultipartFile multipartFile, String contextType) {
+    public boolean uploadObject(String bucketName, MultipartFile multipartFile, String contextType) {
         try {
             if (!exitsBucket(bucketName)) {
                 createBucket(bucketName);
@@ -482,7 +513,7 @@
                     .stream(inputStream, multipartFile.getSize(), -1)
                     .contentType(contextType)
                     .build();
-            MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+            minioClient.putObject(putObjectArgs);
             return true;
         } catch (Exception ex) {
             log.error("minio涓婁紶鏂囦欢(閫氳繃File)寮傚父" + ex.getMessage());
@@ -498,7 +529,7 @@
      * @param localFilePathName
      * @return
      */
-    public static boolean uploadObject(String bucketName, String objectName, String localFilePathName, String contextType) {
+    public boolean uploadObject(String bucketName, String objectName, String localFilePathName, String contextType) {
         try {
             if (!exitsBucket(bucketName)) {
                 createBucket(bucketName);
@@ -514,7 +545,7 @@
                     .filename(localFilePathName)
                     .contentType(contextType)
                     .build();
-            ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().uploadObject(uploadObjectArgs);
+            ObjectWriteResponse objectWriteResponse = minioClient.uploadObject(uploadObjectArgs);
             return true;
         } catch (Exception e) {
             log.error("minio upload object file error " + e.getMessage());
@@ -530,42 +561,28 @@
      * @鍒涘缓鏃堕棿 2023/2/6 10:32
      * @淇敼浜哄拰鍏跺畠淇℃伅
      */
-    public static Iterable<Result<Item>> getObjectsByBucket(String bucketName) {
-        Iterable<Result<Item>> listObjects = MinioClientSingleton.getMinioClient().listObjects(ListObjectsArgs.builder()
+    public Iterable<Result<Item>> getObjectsByBucket(String bucketName) {
+        Iterable<Result<Item>> listObjects = minioClient.listObjects(ListObjectsArgs.builder()
                 .bucket(bucketName)
                 .recursive(true)
                 .build());
         return listObjects;
     }
 
-    public static void main(String[] args) {
-        //        /*鍒犻櫎妗�*/
-        //        boolean b = removeBucket("lsy");
-        //        log.info(String.valueOf(b));
-        //        /*鍒涘缓妗�*/
-        //        boolean lsy = createBucket("lsy");
-        //        log.info(String.valueOf(lsy));
-        //        /*鍒ゆ柇妗舵槸鍚﹀瓨鍦�*/
-        //        boolean pic = exitsBucket("lsy");
-        //        log.info(String.valueOf(pic));
-        /*鏌ヨ鎵�鏈夋《*/
-        //        List<Bucket> listBuckets = getListBuckets();
-        //        for (Bucket bucket : listBuckets) {
-        //            log.info(bucket.name());
-        //        }
-        String bucket = "lsy";
-        String filename = UUID.randomUUID().toString().replace("-", "") + "pic.jpeg";
-        String fileFullPath = "C:\\Users\\Administrator\\Desktop\\寰俊鎴浘_20230518102605.png";
-        //        uploadObject(bucket, filename, fileFullPath, "Image/jpeg");
-        //        String url = getObjectWithExpired(bucket, filename, 10, SECONDS);
-        //        System.out.println(url);
-        boolean b = removeBucket(bucket);
-        System.out.println(b);
-        //        boolean b = uploadObjectBylocalPath(bucket, filename, fileFullPath);
-        //        System.out.println(b);
-        //String url = getObjectWithExpired(bucket, filename, 10000);
-        //
-        //String url = getBucketObject(bucket, filename);
-        //      System.out.println(url); package com.example.minio;
+    /**
+     * @鎻忚堪 鑾峰彇妗朵腑鎵�鏈夊璞�
+     * @鍙傛暟 [bucketName,prefix]
+     * @杩斿洖鍊� java.lang.Iterable<io.minio.Result < io.minio.messages.Item>>
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/2/6 10:32
+     * @淇敼浜哄拰鍏跺畠淇℃伅
+     */
+    public Iterable<Result<Item>> getObjectsByBucket(String bucketName, String prefix) {
+        Iterable<Result<Item>> listObjects = minioClient.listObjects(ListObjectsArgs.builder()
+                .bucket(bucketName)
+                .prefix(prefix)
+                .recursive(true)
+                .build());
+        return listObjects;
     }
 }
\ No newline at end of file
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 51d7958..83789ea 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
@@ -1,6 +1,5 @@
 package com.ruoyi.sy.service.impl;
 
-import java.awt.geom.Point2D;
 import java.io.IOException;
 import java.io.InputStream;
 import java.text.ParseException;
@@ -24,7 +23,7 @@
 import com.ruoyi.sy.mapper.ArdSyCarDayMapper;
 import com.ruoyi.utils.tools.GisTool;
 import com.ruoyi.utils.websocket.util.WebSocketUtils;
-import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
+import com.ruoyi.storage.minio.utils.MinioConfig;
 import com.ruoyi.storage.minio.utils.MinioUtils;
 import com.ruoyi.sy.domain.ArdSyUser;
 import com.ruoyi.sy.gps31.PositionContainer;
@@ -83,7 +82,8 @@
     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();
@@ -147,7 +147,7 @@
                 objectNames.add(ardSyCar.getCarPicture().split("/sycar/")[1]);
             }
         }
-        MinioUtils.removeObjects("sycar", objectNames);
+        minioUtil.removeObjects("sycar", objectNames);
         return ardSyCarMapper.deleteArdSyCarByIds(ids);
     }
 
@@ -264,12 +264,12 @@
 
     @Override
     public List<Map<String, String>> getAllCarModel() {
-        boolean exsit = MinioUtils.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 = MinioClientSingleton.getMinioClient().listObjects(listObjectsArgs);
+               // ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().prefix("carmodel/").bucket("sycar").build();
+                Iterable<Result<Item>> myObjects = minioUtil.getObjectsByBucket("sycar","carmodel");
                 for (Result<Item> result : myObjects) {
                     Item item = result.get();
                     Map<String, String> map = new HashMap();
@@ -332,16 +332,16 @@
             if (ardSyCarr.getCarPicture() != null || !ardSyCarr.getCarPicture().equals("")) {
                 String objectName = ardSyCarr.getCarPicture().split("/sycar/")[1];
                 objectNames.add(objectName);
-                MinioUtils.removeObjects("sycar", objectNames);
+                minioUtil.removeObjects("sycar", objectNames);
             }
         }
         //鍒ゆ柇鏂囦欢鏄惁涓虹┖
         if (null == carPicture || 0 == carPicture.getSize()) {
             return "";
         }
-        boolean exsit = MinioUtils.exitsBucket("sycar");
+        boolean exsit = minioUtil.exitsBucket("sycar");
         if (!exsit) {
-            boolean bucket = MinioUtils.createBucket("sycar");
+            boolean bucket = minioUtil.createBucket("sycar");
         }
         //鏂囦欢鍚�
         String originalFilename = carPicture.getOriginalFilename();
@@ -350,14 +350,15 @@
         try {
             InputStream inputStream = carPicture.getInputStream();
             /*涓婁紶瀵硅薄*/
-            PutObjectArgs putObjectArgs = PutObjectArgs
-                    .builder()
-                    .bucket("sycar")
-                    .object(fileName)
-                    .stream(inputStream, carPicture.getSize(), -1)
-                    .contentType(carPicture.getContentType())
-                    .build();
-            MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+//            PutObjectArgs putObjectArgs = PutObjectArgs
+//                    .builder()
+//                    .bucket("sycar")
+//                    .object(fileName)
+//                    .stream(inputStream, carPicture.getSize(), -1)
+//                    .contentType(carPicture.getContentType())
+//                    .build();
+//            MinioConfig.getMinioClient().putObject(putObjectArgs);
+            minioUtil.uploadObject("sycar",fileName,inputStream,carPicture.getSize(),carPicture.getContentType());
             inputStream.close();
             /*鑾峰彇url*/
             GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
@@ -366,8 +367,8 @@
                     .object(fileName)
                     .method(Method.GET)
                     .build();
-            String presignedObjectUrl = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
-            String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
+            //String presignedObjectUrl = MinioConfig.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            String ObjectUrl = minioUtil.getBucketObjectUrl("sycar", fileName);
             if (id != null && !id.equals("")) {//id涓洪潪蹇呰
                 ArdSyCar ardSyCar = new ArdSyCar();
                 ardSyCar.setId(id);
diff --git a/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java b/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java
index 7a69f81..7c1e365 100644
--- a/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java
+++ b/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java
@@ -8,32 +8,23 @@
  * @Version: 1.0
  **/
 
-import com.ruoyi.app.position.domain.ArdAppPosition;
-import com.ruoyi.utils.websocket.util.WebSocketUtils;
 import lombok.extern.slf4j.Slf4j;
-
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.StandardCharsets;
 import java.sql.*;
-import java.util.*;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
 @Slf4j
 public class ReadAccessDatabase {
 
     public static void main(String[] args) {
-//        // 澶氫釜鏁版嵁搴撴枃浠惰矾寰�
-//        String[] dbPaths = {
-//                "D:\\mdb\\閬撹矾涓績绾�.mdb",
-//                "D:\\mdb\\闃查鏋�-鐏屾湪.mdb",
-//                // 娣诲姞鏇村鐨勬暟鎹簱鏂囦欢璺緞
-//        };
-//
-//        // 閬嶅巻姣忎釜鏁版嵁搴撴枃浠�
-//        for (String dbPath : dbPaths) {
-//            readDataFromAccessDatabase(dbPath);
-//        }
+        // 澶氫釜鏁版嵁搴撴枃浠惰矾寰�
+        String[] dbPaths = {
+                "D:\\Workspaces\\ard\\瀹夌憺杈惧伐浣滆祫鏂橽\mdb\\閬撹矾涓績绾�.mdb"
+//                "D:\\Workspaces\\ard\\瀹夌憺杈惧伐浣滆祫鏂橽\mdb\\闃查鏋�-鐏屾湪.mdb",
+                // 娣诲姞鏇村鐨勬暟鎹簱鏂囦欢璺緞
+        };
+
+        // 閬嶅巻姣忎釜鏁版嵁搴撴枃浠�
+        for (String dbPath : dbPaths) {
+            readDataFromAccessDatabase(dbPath);
+        }
     }
 
     public static void readDataFromAccessDatabase(String dbPath) {
@@ -54,16 +45,16 @@
                 if (!tableName.equals("閬撹矾涓績绾�")) {
                     continue;
                 }
-                System.out.println("琛ㄥ悕: " + tableName);
+                log.info("琛ㄥ悕: " + tableName);
 
                 // 鑾峰彇琛ㄧ殑瀛楁鍏冩暟鎹�
- //               ResultSet column = metaData.getColumns(null, null, tableName, null);
+                ResultSet column = metaData.getColumns(null, null, tableName, null);
                 // 閬嶅巻瀛楁
-//                while (column.next()) {
-//                    String columnName = column.getString("COLUMN_NAME");
-//                    System.out.println("瀛楁鍚�: " + columnName);
-//                }
-//                column.close();
+                while (column.next()) {
+                    String columnName = column.getString("COLUMN_NAME");
+                    log.info("瀛楁鍚�: " + columnName);
+                }
+                column.close();
                 // 鎵ц鏌ヨ鎿嶄綔
                 String sql = "SELECT * FROM " + tableName; // 鏇挎崲涓轰綘瑕佹煡璇㈢殑琛ㄥ悕
                 Statement statement = connection.createStatement();
@@ -72,12 +63,12 @@
                 while (resultSet.next()) {
                     // 璇诲彇姣忎竴琛屾暟鎹�
                     String id = resultSet.getString(1); // 鏍规嵁琛ㄤ腑鐨勫垪鍚嶈幏鍙栨暟鎹�
-                    String name = resultSet.getString("缂栧彿");
-
+                    String no = resultSet.getString("缂栧彿");
+                    String name = resultSet.getString("閬撹矾鍚嶇О");
                     // 鍙互鏍规嵁鍏蜂綋鐨勮〃缁撴瀯缁х画鑾峰彇鍏朵粬瀛楁鐨勬暟鎹�
 
                     // 鍦ㄨ繖閲屽鐞嗚幏鍙栧埌鐨勬暟鎹紝渚嬪杈撳嚭鍒版帶鍒跺彴鎴栦繚瀛樺埌闆嗗悎涓�
-                    System.out.println("ID: " + id + ", Name: " + name);
+                    log.info("ID: " + id + ", No: " + no+ ", Name: " + name);
                 }
                 // 鍏抽棴杩炴帴
                 resultSet.close();
@@ -89,5 +80,7 @@
             e.printStackTrace();
         }
     }
+
+
 }
 
diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumer.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumer.java
index 37a4a18..00f5496 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumer.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumer.java
@@ -3,6 +3,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.eclipse.paho.client.mqttv3.*;
 import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Component;
@@ -18,12 +19,30 @@
 @Slf4j(topic = "mqtt")
 public class MqttConsumer implements ApplicationRunner {
 
+    @Value("${mqtt.enabled}")
+    private Boolean MQTT_ENABLED;
+    @Value("${mqtt.topic}")
+    private String MQTT_TOPIC;
+    @Value("${mqtt.host}")
+    private String MQTT_HOST;
+    @Value("${mqtt.clientId}")
+    private String MQTT_CLIENT_ID;
+    @Value("${mqtt.username}")
+    private String MQTT_USER_NAME;
+    @Value("${mqtt.password}")
+    private String MQTT_PASSWORD;
+    @Value("${mqtt.timeout}")
+    private int MQTT_TIMEOUT;
+    @Value("${mqtt.keepalive}")
+    private int MQTT_KEEP_ALIVE;
+
     private static MqttClient client;
+
 
     @Override
     public void run(ApplicationArguments args) {
         log.debug("鍒濆鍖栧苟鍚姩mqtt......");
-        if(PropertiesUtil.MQTT_ENABLED)
+        if(MQTT_ENABLED)
         {
             this.connect();
         }
@@ -38,7 +57,7 @@
             getClient();
             // 2 璁剧疆閰嶇疆
             MqttConnectOptions options = getOptions();
-            String[] topic = PropertiesUtil.MQTT_TOPIC.split(",");
+            String[] topic = MQTT_TOPIC.split(",");
             // 3 娑堟伅鍙戝竷璐ㄩ噺
             int[] qos = getQos(topic.length);
             // 4 鏈�鍚庤缃�
@@ -54,7 +73,7 @@
     public void getClient() {
         try {
             if (null == client) {
-                client = new MqttClient(PropertiesUtil.MQTT_HOST, PropertiesUtil.MQTT_CLIENT_ID, new MemoryPersistence());
+                client = new MqttClient(MQTT_HOST, MQTT_CLIENT_ID, new MemoryPersistence());
             }
             log.debug("--鍒涘缓mqtt瀹㈡埛绔�");
         } catch (Exception e) {
@@ -68,12 +87,12 @@
     public MqttConnectOptions getOptions() {
         MqttConnectOptions options = new MqttConnectOptions();
         //璁剧疆鐢ㄦ埛鍚嶅瘑鐮�
-        options.setUserName(PropertiesUtil.MQTT_USER_NAME);
-        options.setPassword(PropertiesUtil.MQTT_PASSWORD.toCharArray());
+        options.setUserName(MQTT_USER_NAME);
+        options.setPassword(MQTT_PASSWORD.toCharArray());
         // 璁剧疆瓒呮椂鏃堕棿
-        options.setConnectionTimeout(PropertiesUtil.MQTT_TIMEOUT);
+        options.setConnectionTimeout(MQTT_TIMEOUT);
         // 璁剧疆浼氳瘽蹇冭烦鏃堕棿
-        options.setKeepAliveInterval(PropertiesUtil.MQTT_KEEP_ALIVE);
+        options.setKeepAliveInterval(MQTT_KEEP_ALIVE);
         // 鏄惁娓呴櫎session
         options.setCleanSession(true);
         log.debug("--鐢熸垚mqtt閰嶇疆瀵硅薄");
diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
index 09fa6c9..8504a14 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
@@ -92,10 +92,10 @@
             if (null != topic && null != qos) {
                 if (client.isConnected()) {
                     client.subscribe(topic, qos);
-                    log.info("mqtt杩炴帴鎴愬姛锛屽鎴风ID锛�" + PropertiesUtil.MQTT_CLIENT_ID);
+                    log.info("mqtt杩炴帴鎴愬姛" );
                     log.info("--璁㈤槄涓婚:锛�" + Arrays.toString(topic));
                 } else {
-                    log.info("mqtt杩炴帴澶辫触锛屽鎴风ID锛�" + PropertiesUtil.MQTT_CLIENT_ID);
+                    log.info("mqtt杩炴帴澶辫触");
                 }
             }
         } catch (Exception e) {
diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/PropertiesUtil.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/PropertiesUtil.java
deleted file mode 100644
index 0d9b555..0000000
--- a/ard-work/src/main/java/com/ruoyi/utils/mqtt/PropertiesUtil.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.ruoyi.utils.mqtt;
-
-import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
-import org.springframework.stereotype.Component;
-
-import java.util.Objects;
-import java.util.Properties;
-
-/**
- * @Description: 鑾峰彇閰嶇疆淇℃伅
- * @ClassName: PropertiesUtil
- * @Author: 鍒樿嫃涔�
- * @Date: 2023骞�06鏈�06鏃�9:40
- * @Version: 1.0
- **/
-@Component
-public class PropertiesUtil {
-
-    public static String MQTT_HOST;
-    public static String MQTT_CLIENT_ID;
-    public static String MQTT_USER_NAME;
-    public static String MQTT_PASSWORD;
-    public static String MQTT_TOPIC;
-    public static Integer MQTT_TIMEOUT;
-    public static Integer MQTT_KEEP_ALIVE;
-    public static Boolean MQTT_ENABLED;
-    static {
-        MQTT_HOST = getYmlNew("mqtt.host");
-        MQTT_CLIENT_ID = getYmlNew("mqtt.clientId");
-        MQTT_USER_NAME = getYmlNew("mqtt.username");
-        MQTT_PASSWORD = getYmlNew("mqtt.password");
-        MQTT_TOPIC = getYmlNew("mqtt.topic");
-        MQTT_TIMEOUT = Integer.valueOf(Objects.requireNonNull(getYmlNew("mqtt.timeout")));
-        MQTT_KEEP_ALIVE = Integer.valueOf(Objects.requireNonNull(getYmlNew("mqtt.keepalive")));
-        MQTT_ENABLED = Boolean.valueOf(getYmlNew("mqtt.enabled"));
-    }
-
-    public static String getYmlNew(String key) {
-        Resource resource = new ClassPathResource("application-ard.yml");
-        Properties properties;
-        try {
-            YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean();
-            yamlFactory.setResources(resource);
-            properties = yamlFactory.getObject();
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-        assert properties != null;
-        return properties.get(key).toString();
-    }
-}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/spring/SpringUtils.java b/ard-work/src/main/java/com/ruoyi/utils/spring/SpringUtils.java
new file mode 100644
index 0000000..58f71a6
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/utils/spring/SpringUtils.java
@@ -0,0 +1,158 @@
+package com.ruoyi.utils.spring;
+
+import org.springframework.aop.framework.AopContext;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * spring宸ュ叿绫� 鏂逛究鍦ㄩ潪spring绠$悊鐜涓幏鍙朾ean
+ * 
+ * @author ruoyi
+ */
+@Component
+public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware 
+{
+    /** Spring搴旂敤涓婁笅鏂囩幆澧� */
+    private static ConfigurableListableBeanFactory beanFactory;
+
+    private static ApplicationContext applicationContext;
+
+    @Override
+    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException 
+    {
+        SpringUtils.beanFactory = beanFactory;
+    }
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException 
+    {
+        SpringUtils.applicationContext = applicationContext;
+    }
+
+    /**
+     * 鑾峰彇瀵硅薄
+     *
+     * @param name
+     * @return Object 涓�涓互鎵�缁欏悕瀛楁敞鍐岀殑bean鐨勫疄渚�
+     * @throws BeansException
+     *
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getBean(String name) throws BeansException
+    {
+        return (T) beanFactory.getBean(name);
+    }
+
+    /**
+     * 鑾峰彇绫诲瀷涓簉equiredType鐨勫璞�
+     *
+     * @param clz
+     * @return
+     * @throws BeansException
+     *
+     */
+    public static <T> T getBean(Class<T> clz) throws BeansException
+    {
+        T result = (T) beanFactory.getBean(clz);
+        return result;
+    }
+
+    /**
+     * 濡傛灉BeanFactory鍖呭惈涓�涓笌鎵�缁欏悕绉板尮閰嶇殑bean瀹氫箟锛屽垯杩斿洖true
+     *
+     * @param name
+     * @return boolean
+     */
+    public static boolean containsBean(String name)
+    {
+        return beanFactory.containsBean(name);
+    }
+
+    /**
+     * 鍒ゆ柇浠ョ粰瀹氬悕瀛楁敞鍐岀殑bean瀹氫箟鏄竴涓猻ingleton杩樻槸涓�涓猵rototype銆� 濡傛灉涓庣粰瀹氬悕瀛楃浉搴旂殑bean瀹氫箟娌℃湁琚壘鍒帮紝灏嗕細鎶涘嚭涓�涓紓甯革紙NoSuchBeanDefinitionException锛�
+     *
+     * @param name
+     * @return boolean
+     * @throws NoSuchBeanDefinitionException
+     *
+     */
+    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.isSingleton(name);
+    }
+
+    /**
+     * @param name
+     * @return Class 娉ㄥ唽瀵硅薄鐨勭被鍨�
+     * @throws NoSuchBeanDefinitionException
+     *
+     */
+    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.getType(name);
+    }
+
+    /**
+     * 濡傛灉缁欏畾鐨刡ean鍚嶅瓧鍦╞ean瀹氫箟涓湁鍒悕锛屽垯杩斿洖杩欎簺鍒悕
+     *
+     * @param name
+     * @return
+     * @throws NoSuchBeanDefinitionException
+     *
+     */
+    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.getAliases(name);
+    }
+
+    /**
+     * 鑾峰彇aop浠g悊瀵硅薄
+     * 
+     * @param invoker
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getAopProxy(T invoker)
+    {
+        return (T) AopContext.currentProxy();
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鐨勭幆澧冮厤缃紝鏃犻厤缃繑鍥瀗ull
+     *
+     * @return 褰撳墠鐨勭幆澧冮厤缃�
+     */
+    public static String[] getActiveProfiles()
+    {
+        return applicationContext.getEnvironment().getActiveProfiles();
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鐨勭幆澧冮厤缃紝褰撴湁澶氫釜鐜閰嶇疆鏃讹紝鍙幏鍙栫涓�涓�
+     *
+     * @return 褰撳墠鐨勭幆澧冮厤缃�
+     */
+    public static String getActiveProfile()
+    {
+        final String[] activeProfiles = getActiveProfiles();
+        return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null;
+    }
+
+    /**
+     * 鑾峰彇閰嶇疆鏂囦欢涓殑鍊�
+     *
+     * @param key 閰嶇疆鏂囦欢鐨刱ey
+     * @return 褰撳墠鐨勯厤缃枃浠剁殑鍊�
+     *
+     */
+    public static String getRequiredProperty(String key)
+    {
+        return applicationContext.getEnvironment().getRequiredProperty(key);
+    }
+}
diff --git a/ard-work/src/main/resources/templates/test.html b/ard-work/src/main/resources/templates/test.html
index a9acd06..15e9981 100644
--- a/ard-work/src/main/resources/templates/test.html
+++ b/ard-work/src/main/resources/templates/test.html
@@ -162,7 +162,7 @@
             }
         })
 
-        opt = {"username": "liusuyi", "password": "5959932"};
+        opt = {"username": "admin", "password": "admin123"};
         $.ajax({
             headers: {
                 'Accept': 'application/json',
diff --git a/ruoyi-admin/src/main/resources/application-ard.yml b/ruoyi-admin/src/main/resources/application-ard.yml
deleted file mode 100644
index 1c15525..0000000
--- a/ruoyi-admin/src/main/resources/application-ard.yml
+++ /dev/null
@@ -1,50 +0,0 @@
-# webrtc-streamer閰嶇疆
-webrtc:
-  enabled: false
-  host: 127.0.0.1:8000
-# minio閰嶇疆
-minio:
-  enabled: false
-  endpoint: http://192.168.1.227:9000
-  accessKey: admin
-  secretKey: xzx12345
-  path: G:/DATA
-# forest閰嶇疆
-forest:
-  backend: okhttp3             # 鍚庣HTTP妗嗘灦锛堥粯璁や负 okhttp3锛�
-  max-connections: 1000        # 杩炴帴姹犳渶澶ц繛鎺ユ暟锛堥粯璁や负 500锛�
-  max-route-connections: 500   # 姣忎釜璺敱鐨勬渶澶ц繛鎺ユ暟锛堥粯璁や负 500锛�
-  max-request-queue-size: 100  # [鑷獀1.5.22鐗堟湰璧峰彲鐢╙ 鏈�澶ц姹傜瓑寰呴槦鍒楀ぇ灏�
-  max-async-thread-size: 300   # [鑷獀1.5.21鐗堟湰璧峰彲鐢╙ 鏈�澶у紓姝ョ嚎绋嬫暟
-  max-async-queue-size: 16     # [鑷獀1.5.22鐗堟湰璧峰彲鐢╙ 鏈�澶у紓姝ョ嚎绋嬫睜闃熷垪澶у皬
-  timeout: 3000                # [宸蹭笉鎺ㄨ崘浣跨敤] 璇锋眰瓒呮椂鏃堕棿锛屽崟浣嶄负姣锛堥粯璁や负 3000锛�
-  connect-timeout: 3000        # 杩炴帴瓒呮椂鏃堕棿锛屽崟浣嶄负姣锛堥粯璁や负 timeout锛�
-  read-timeout: 3000           # 鏁版嵁璇诲彇瓒呮椂鏃堕棿锛屽崟浣嶄负姣锛堥粯璁や负 timeout锛�
-  max-retry-count: 0           # 璇锋眰澶辫触鍚庨噸璇曟鏁帮紙榛樿涓� 0 娆′笉閲嶈瘯锛�
-  ssl-protocol: TLS            # 鍗曞悜楠岃瘉鐨凥TTPS鐨勯粯璁LS鍗忚锛堥粯璁や负 TLS锛�
-  log-enabled: true            # 鎵撳紑鎴栧叧闂棩蹇楋紙榛樿涓� true锛�
-  log-request: true            # 鎵撳紑/鍏抽棴Forest璇锋眰鏃ュ織锛堥粯璁や负 true锛�
-  log-response-status: true    # 鎵撳紑/鍏抽棴Forest鍝嶅簲鐘舵�佹棩蹇楋紙榛樿涓� true锛�
-  log-response-content: true   # 鎵撳紑/鍏抽棴Forest鍝嶅簲鍐呭鏃ュ織锛堥粯璁や负 false锛�
-  async-mode: platform         # [鑷獀1.5.27鐗堟湰璧峰彲鐢╙ 寮傛妯″紡锛堥粯璁や负 platform锛�
-#娴佸獟浣撹浆鐮佹湇鍔″櫒
-mediamtx:
-  enabled: false
-  host: 127.0.0.1
-#mqtt
-mqtt:
-  host: tcp://192.168.1.15:1883
-  clientId: m3
-  username: admin
-  password: xzx12345
-  topic: apponekey,radar
-  timeout: 100
-  keepalive: 60
-  enabled: true
-
-#寮傛绾跨▼姹犻厤缃�
-ThreadPoolTask:
-  corePoolSize: 20
-  maxPoolSize: 40
-  keepAliveSeconds: 300
-  queueCapacity: 50
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application-dev-druid.yml b/ruoyi-admin/src/main/resources/application-dev-druid.yml
new file mode 100644
index 0000000..cc740d1
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/application-dev-druid.yml
@@ -0,0 +1,58 @@
+# 鏁版嵁婧愰厤缃�
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      # 涓诲簱鏁版嵁婧�
+      master:
+        driverClassName: org.postgresql.Driver
+        url: jdbc:postgresql://192.168.1.15:5432/ry-vue?stringtype=unspecified
+        username: postgres
+        password: postgres
+        # 浠庡簱鏁版嵁婧�
+      slave:
+      # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
+      # enabled: true
+      # driverClassName: org.postgresql.Driver
+      # url: jdbc:postgresql://112.98.126.2:35432/ard732
+      # username: postgres
+      # password: Yykj.2017
+      # 鍒濆杩炴帴鏁�
+      initialSize: 5
+      # 鏈�灏忚繛鎺ユ睜鏁伴噺
+      minIdle: 10
+      # 鏈�澶ц繛鎺ユ睜鏁伴噺
+      maxActive: 20
+      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      maxWait: 60000
+      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      timeBetweenEvictionRunsMillis: 60000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      minEvictableIdleTimeMillis: 300000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      maxEvictableIdleTimeMillis: 900000
+      # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
+      validationQuery: SELECT 1
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂�
+        allow:
+        url-pattern: /druid/*
+        # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮�
+        login-username: ruoyi
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 鎱QL璁板綍
+          log-slow-sql: true
+          slow-sql-millis: 3000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..715998e
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -0,0 +1,101 @@
+# 寮�鍙戠幆澧冮厤缃�
+server:
+  # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080
+  port: 8080
+  servlet:
+    # 搴旂敤鐨勮闂矾寰�
+    context-path: /
+  tomcat:
+    # tomcat鐨刄RI缂栫爜
+    uri-encoding: UTF-8
+    # 杩炴帴鏁版弧鍚庣殑鎺掗槦鏁帮紝榛樿涓�100
+    accept-count: 1000
+    threads:
+      # tomcat鏈�澶х嚎绋嬫暟锛岄粯璁や负200
+      max: 800
+      # Tomcat鍚姩鍒濆鍖栫殑绾跨▼鏁帮紝榛樿鍊�10
+      min-spare: 100
+# Spring閰嶇疆
+spring:
+  # redis 閰嶇疆
+  redis:
+    # 鍦板潃
+    host: 127.0.0.1
+    # 绔彛锛岄粯璁や负6379
+    port: 6379
+    # 鏁版嵁搴撶储寮�
+    database: 0
+    # 瀵嗙爜
+    password:
+    # 杩炴帴瓒呮椂鏃堕棿
+    timeout: 10s
+    lettuce:
+      pool:
+        # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
+        min-idle: 0
+        # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺�
+        max-idle: 8
+        # 杩炴帴姹犵殑鏈�澶ф暟鎹簱杩炴帴鏁�
+        max-active: 8
+        # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
+        max-wait: -1ms
+# 鏃ュ織閰嶇疆
+logging:
+  level:
+    authorize: info
+    minio: info
+    hikSdk: info
+    stealAlarm: info
+    websocket: info
+    patrolInspectionTask: info
+    mqtt: info
+    guideQueue: info
+    rongCloud: info
+    cmd: info
+    uav: info
+    sy: info
+
+
+# webrtc-streamer閰嶇疆
+webrtc:
+  enabled: true
+  host: 127.0.0.1:8000
+# minio閰嶇疆
+minio:
+  enabled: false
+  endpoint: http://192.168.1.15:9001
+  accessKey: admin
+  secretKey: xzx12345
+  path: G:/DATA
+# forest閰嶇疆
+forest:
+  backend: okhttp3             # 鍚庣HTTP妗嗘灦锛堥粯璁や负 okhttp3锛�
+  max-connections: 1000        # 杩炴帴姹犳渶澶ц繛鎺ユ暟锛堥粯璁や负 500锛�
+  max-route-connections: 500   # 姣忎釜璺敱鐨勬渶澶ц繛鎺ユ暟锛堥粯璁や负 500锛�
+  max-request-queue-size: 100  # [鑷獀1.5.22鐗堟湰璧峰彲鐢╙ 鏈�澶ц姹傜瓑寰呴槦鍒楀ぇ灏�
+  max-async-thread-size: 300   # [鑷獀1.5.21鐗堟湰璧峰彲鐢╙ 鏈�澶у紓姝ョ嚎绋嬫暟
+  max-async-queue-size: 16     # [鑷獀1.5.22鐗堟湰璧峰彲鐢╙ 鏈�澶у紓姝ョ嚎绋嬫睜闃熷垪澶у皬
+  timeout: 3000                # [宸蹭笉鎺ㄨ崘浣跨敤] 璇锋眰瓒呮椂鏃堕棿锛屽崟浣嶄负姣锛堥粯璁や负 3000锛�
+  connect-timeout: 3000        # 杩炴帴瓒呮椂鏃堕棿锛屽崟浣嶄负姣锛堥粯璁や负 timeout锛�
+  read-timeout: 3000           # 鏁版嵁璇诲彇瓒呮椂鏃堕棿锛屽崟浣嶄负姣锛堥粯璁や负 timeout锛�
+  max-retry-count: 0           # 璇锋眰澶辫触鍚庨噸璇曟鏁帮紙榛樿涓� 0 娆′笉閲嶈瘯锛�
+  ssl-protocol: TLS            # 鍗曞悜楠岃瘉鐨凥TTPS鐨勯粯璁LS鍗忚锛堥粯璁や负 TLS锛�
+  log-enabled: true            # 鎵撳紑鎴栧叧闂棩蹇楋紙榛樿涓� true锛�
+  log-request: true            # 鎵撳紑/鍏抽棴Forest璇锋眰鏃ュ織锛堥粯璁や负 true锛�
+  log-response-status: true    # 鎵撳紑/鍏抽棴Forest鍝嶅簲鐘舵�佹棩蹇楋紙榛樿涓� true锛�
+  log-response-content: true   # 鎵撳紑/鍏抽棴Forest鍝嶅簲鍐呭鏃ュ織锛堥粯璁や负 false锛�
+  async-mode: platform         # [鑷獀1.5.27鐗堟湰璧峰彲鐢╙ 寮傛妯″紡锛堥粯璁や负 platform锛�
+#娴佸獟浣撹浆鐮佹湇鍔″櫒
+mediamtx:
+  enabled: true
+  host: 127.0.0.1
+#mqtt
+mqtt:
+  host: tcp://192.168.1.15:1883
+  clientId: m227
+  username: admin
+  password: xzx12345
+  topic: minioEvent
+  timeout: 100
+  keepalive: 60
+  enabled: true
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
deleted file mode 100644
index 031a481..0000000
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-# 鏁版嵁婧愰厤缃�
-spring:
-    datasource:
-        type: com.alibaba.druid.pool.DruidDataSource
-        druid:
-            # 涓诲簱鏁版嵁婧�
-            master:
-                driverClassName: org.postgresql.Driver
-                url: jdbc:postgresql://111.40.46.199:15432/ry-vue?stringtype=unspecified
-                username: postgres
-                password: Yykj.2021
-#                url: jdbc:postgresql://192.168.1.15:5432/ry-vue?stringtype=unspecified
-#                username: postgres
-#                password: postgres
-            # 浠庡簱鏁版嵁婧�
-            slave:
-                # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
-#                enabled: true
-#                driverClassName: org.postgresql.Driver
-#                url: jdbc:postgresql://112.98.126.2:35432/ard732
-#                username: postgres
-#                password: Yykj.2017
-            # 鍒濆杩炴帴鏁�
-            initialSize: 5
-            # 鏈�灏忚繛鎺ユ睜鏁伴噺
-            minIdle: 10
-            # 鏈�澶ц繛鎺ユ睜鏁伴噺
-            maxActive: 20
-            # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
-            maxWait: 60000
-            # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
-            timeBetweenEvictionRunsMillis: 60000
-            # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
-            minEvictableIdleTimeMillis: 300000
-            # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
-            maxEvictableIdleTimeMillis: 900000
-            # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
-            validationQuery: SELECT 1
-            testWhileIdle: true
-            testOnBorrow: false
-            testOnReturn: false
-            webStatFilter:
-                enabled: true
-            statViewServlet:
-                enabled: true
-                # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂�
-                allow:
-                url-pattern: /druid/*
-                # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮�
-                login-username: ruoyi
-                login-password: 123456
-            filter:
-                stat:
-                    enabled: true
-                    # 鎱QL璁板綍
-                    log-slow-sql: true
-                    slow-sql-millis: 1000
-                    merge-sql: true
-                wall:
-                    config:
-                        multi-statement-allow: true
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application-prod-druid.yml b/ruoyi-admin/src/main/resources/application-prod-druid.yml
new file mode 100644
index 0000000..b946ee0
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/application-prod-druid.yml
@@ -0,0 +1,58 @@
+# 鏁版嵁婧愰厤缃�
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      # 涓诲簱鏁版嵁婧�
+      master:
+        driverClassName: org.postgresql.Driver
+        url: jdbc:postgresql://112.98.126.2:35432/ry-vue?stringtype=unspecified
+        username: postgres
+        password: Yykj.2017
+        # 浠庡簱鏁版嵁婧�
+      slave:
+      # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
+      # enabled: true
+      # driverClassName: org.postgresql.Driver
+      # url: jdbc:postgresql://112.98.126.2:35432/ard732
+      # username: postgres
+      # password: Yykj.2017
+      # 鍒濆杩炴帴鏁�
+      initialSize: 5
+      # 鏈�灏忚繛鎺ユ睜鏁伴噺
+      minIdle: 10
+      # 鏈�澶ц繛鎺ユ睜鏁伴噺
+      maxActive: 20
+      # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂�
+      maxWait: 60000
+      # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣
+      timeBetweenEvictionRunsMillis: 60000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      minEvictableIdleTimeMillis: 300000
+      # 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣
+      maxEvictableIdleTimeMillis: 900000
+      # 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁�
+      validationQuery: SELECT 1
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂�
+        allow:
+        url-pattern: /druid/*
+        # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮�
+        login-username: ruoyi
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 鎱QL璁板綍
+          log-slow-sql: true
+          slow-sql-millis: 3000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
new file mode 100644
index 0000000..67cc120
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -0,0 +1,101 @@
+# 鐢熶骇鐜閰嶇疆
+server:
+  # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080
+  port: 8080
+  servlet:
+    # 搴旂敤鐨勮闂矾寰�
+    context-path: /
+  tomcat:
+    # tomcat鐨刄RI缂栫爜
+    uri-encoding: UTF-8
+    # 杩炴帴鏁版弧鍚庣殑鎺掗槦鏁帮紝榛樿涓�100
+    accept-count: 1000
+    threads:
+      # tomcat鏈�澶х嚎绋嬫暟锛岄粯璁や负200
+      max: 800
+      # Tomcat鍚姩鍒濆鍖栫殑绾跨▼鏁帮紝榛樿鍊�10
+      min-spare: 100
+# Spring閰嶇疆
+spring:
+  # redis 閰嶇疆
+  redis:
+    # 鍦板潃
+    host: 192.168.5.229
+    # 绔彛锛岄粯璁や负6379
+    port: 6379
+    # 鏁版嵁搴撶储寮�
+    database: 0
+    # 瀵嗙爜
+    password:
+    # 杩炴帴瓒呮椂鏃堕棿
+    timeout: 10s
+    lettuce:
+      pool:
+        # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
+        min-idle: 0
+        # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺�
+        max-idle: 8
+        # 杩炴帴姹犵殑鏈�澶ф暟鎹簱杩炴帴鏁�
+        max-active: 8
+        # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
+        max-wait: -1ms
+# 鏃ュ織閰嶇疆
+logging:
+  level:
+    authorize: info
+    minio: info
+    hikSdk: info
+    stealAlarm: info
+    websocket: info
+    patrolInspectionTask: info
+    mqtt: info
+    guideQueue: info
+    rongCloud: info
+    cmd: info
+    uav: info
+    sy: info
+
+# webrtc-streamer閰嶇疆
+webrtc:
+  enabled: false
+  host: 192.168.5.229:8000
+
+# minio閰嶇疆
+minio:
+  enabled: false
+  endpoint: http://192.168.5.229:9001
+  accessKey: admin
+  secretKey: xzx12345
+  path: F:/DATA
+# forest閰嶇疆
+forest:
+  backend: okhttp3             # 鍚庣HTTP妗嗘灦锛堥粯璁や负 okhttp3锛�
+  max-connections: 1000        # 杩炴帴姹犳渶澶ц繛鎺ユ暟锛堥粯璁や负 500锛�
+  max-route-connections: 500   # 姣忎釜璺敱鐨勬渶澶ц繛鎺ユ暟锛堥粯璁や负 500锛�
+  max-request-queue-size: 100  # [鑷獀1.5.22鐗堟湰璧峰彲鐢╙ 鏈�澶ц姹傜瓑寰呴槦鍒楀ぇ灏�
+  max-async-thread-size: 300   # [鑷獀1.5.21鐗堟湰璧峰彲鐢╙ 鏈�澶у紓姝ョ嚎绋嬫暟
+  max-async-queue-size: 16     # [鑷獀1.5.22鐗堟湰璧峰彲鐢╙ 鏈�澶у紓姝ョ嚎绋嬫睜闃熷垪澶у皬
+  timeout: 3000                # [宸蹭笉鎺ㄨ崘浣跨敤] 璇锋眰瓒呮椂鏃堕棿锛屽崟浣嶄负姣锛堥粯璁や负 3000锛�
+  connect-timeout: 3000        # 杩炴帴瓒呮椂鏃堕棿锛屽崟浣嶄负姣锛堥粯璁や负 timeout锛�
+  read-timeout: 3000           # 鏁版嵁璇诲彇瓒呮椂鏃堕棿锛屽崟浣嶄负姣锛堥粯璁や负 timeout锛�
+  max-retry-count: 0           # 璇锋眰澶辫触鍚庨噸璇曟鏁帮紙榛樿涓� 0 娆′笉閲嶈瘯锛�
+  ssl-protocol: TLS            # 鍗曞悜楠岃瘉鐨凥TTPS鐨勯粯璁LS鍗忚锛堥粯璁や负 TLS锛�
+  log-enabled: true            # 鎵撳紑鎴栧叧闂棩蹇楋紙榛樿涓� true锛�
+  log-request: true            # 鎵撳紑/鍏抽棴Forest璇锋眰鏃ュ織锛堥粯璁や负 true锛�
+  log-response-status: true    # 鎵撳紑/鍏抽棴Forest鍝嶅簲鐘舵�佹棩蹇楋紙榛樿涓� true锛�
+  log-response-content: true   # 鎵撳紑/鍏抽棴Forest鍝嶅簲鍐呭鏃ュ織锛堥粯璁や负 false锛�
+  async-mode: platform         # [鑷獀1.5.27鐗堟湰璧峰彲鐢╙ 寮傛妯″紡锛堥粯璁や负 platform锛�
+#娴佸獟浣撹浆鐮佹湇鍔″櫒
+mediamtx:
+  enabled: true
+  host: 192.168.5.229
+#mqtt
+mqtt:
+  host: tcp://192.168.5.229:1883
+  clientId: server229
+  username: admin
+  password: xzx12345
+  topic: minioEvent,apponekey,camera,external
+  timeout: 100
+  keepalive: 60
+  enabled: true
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 6903577..6199853 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -11,36 +11,9 @@
   # 鏂囦欢璺緞 绀轰緥锛� Windows閰嶇疆D:/ard/uploadPath锛孡inux閰嶇疆 /home/ard/uploadPath锛�
   profile: D:/ard/uploadPath
   # 鑾峰彇ip鍦板潃寮�鍏�
-  addressEnabled: false
+  addressEnabled: true
   # 楠岃瘉鐮佺被鍨� math 鏁扮粍璁$畻 char 瀛楃楠岃瘉
   captchaType: char
-
-# 寮�鍙戠幆澧冮厤缃�
-server:
-  # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080
-  port: 8080
-  servlet:
-    # 搴旂敤鐨勮闂矾寰�
-    context-path: /
-  tomcat:
-    # tomcat鐨刄RI缂栫爜
-    uri-encoding: UTF-8
-    # 杩炴帴鏁版弧鍚庣殑鎺掗槦鏁帮紝榛樿涓�100
-    accept-count: 1000
-    threads:
-      # tomcat鏈�澶х嚎绋嬫暟锛岄粯璁や负200
-      max: 800
-      # Tomcat鍚姩鍒濆鍖栫殑绾跨▼鏁帮紝榛樿鍊�10
-      min-spare: 100
-
-# 鏃ュ織閰嶇疆
-logging:
-  level:
-    com.ruoyi.utils.tube: debug
-    com.ruoyi.inspect: info
-    org.springframework: warn
-    com.example.mapper: debug
-
 # 鐢ㄦ埛閰嶇疆
 user:
   password:
@@ -48,60 +21,14 @@
     maxRetryCount: 5
     # 瀵嗙爜閿佸畾鏃堕棿锛堥粯璁�10鍒嗛挓锛�
     lockTime: 10
-
-# Spring閰嶇疆
-spring:
-  # 璧勬簮淇℃伅
-  messages:
-    # 鍥介檯鍖栬祫婧愭枃浠惰矾寰�
-    basename: i18n/messages
-  profiles: 
-    active: druid,ard
-  # 鏂囦欢涓婁紶
-  servlet:
-     multipart:
-       # 鍗曚釜鏂囦欢澶у皬
-       max-file-size:  10MB
-       # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬
-       max-request-size:  20MB
-  # 鏈嶅姟妯″潡
-  devtools:
-    restart:
-      # 鐑儴缃插紑鍏�
-      enabled: false
-  # redis 閰嶇疆
-  redis:
-    # 鍦板潃
-    host: 192.168.1.15
-    # 绔彛锛岄粯璁や负6379
-    port: 6379
-    # 鏁版嵁搴撶储寮�
-    database: 0
-    # 瀵嗙爜
-    password:
-    # 杩炴帴瓒呮椂鏃堕棿
-    timeout: 10s
-    lettuce:
-      pool:
-        # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺�
-        min-idle: 0
-        # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺�
-        max-idle: 8
-        # 杩炴帴姹犵殑鏈�澶ф暟鎹簱杩炴帴鏁�
-        max-active: 8
-        # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷�艰〃绀烘病鏈夐檺鍒讹級
-        max-wait: -1ms
-  thymeleaf:
-    cache: false
 # token閰嶇疆
 token:
-    # 浠ょ墝鑷畾涔夋爣璇�
-    header: Authorization
-    # 浠ょ墝瀵嗛挜
-    secret: abcdefghijklmnopqrstuvwxyz
-    # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
-    expireTime: 30
-  
+  # 浠ょ墝鑷畾涔夋爣璇�
+  header: Authorization
+  # 浠ょ墝瀵嗛挜
+  secret: abcdefghijklmnopqrstuvwxyz
+  # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛�
+  expireTime: 30
 # MyBatis閰嶇疆
 #mybatis:
 #    # 鎼滅储鎸囧畾鍖呭埆鍚�
@@ -114,6 +41,10 @@
   type-Aliases-Package: com.ruoyi.**.domain
   mapper-Locations: classpath*:mapper/**/*Mapper.xml
   config-Location: classpath:mybatis/mybatis-config.xml
+  global-config:
+    banner: off # 鍏抽棴mybatisplus鍚姩鍥炬爣
+    db-config: #涓婚敭涓嶇敤MyBatis plus鐨勯洩鑺辩畻娉�,鐢ㄦ暟鎹簱鐨勪富閿嚜澧�
+      id-type: auto
 #  configuration:
 #    # 鏄惁寮�鍚嚜鍔ㄩ┘宄板懡鍚嶈鍒欐槧灏�:浠庢暟鎹簱鍒楀悕鍒癑ava灞炴�ч┘宄板懡鍚嶇殑绫讳技鏄犲皠
 #    map-underscore-to-camel-case: true
@@ -121,30 +52,54 @@
 #    call-setters-on-nulls: true
 #    # 杩欎釜閰嶇疆浼氬皢鎵ц鐨剆ql鎵撳嵃鍑烘潵锛屽湪寮�鍙戞垨娴嬭瘯鐨勬椂鍊欏彲浠ョ敤
 #    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-
-
 # PageHelper鍒嗛〉鎻掍欢
-pagehelper: 
+pagehelper:
   helperDialect: postgresql
   supportMethodsArguments: true
-  params: count=countSql 
-
+  params: count=countSql
 # Swagger閰嶇疆
 swagger:
   # 鏄惁寮�鍚痵wagger
   enabled: true
   # 璇锋眰鍓嶇紑
   pathMapping: /
-
 # knife4j澧炲己鍔熻兘
 knife4j:
   enable: true
-
 # 闃叉XSS鏀诲嚮
-xss: 
+xss:
   # 杩囨护寮�鍏�
   enabled: true
   # 鎺掗櫎閾炬帴锛堝涓敤閫楀彿鍒嗛殧锛�
   excludes: /system/notice
   # 鍖归厤閾炬帴
   urlPatterns: /system/*,/monitor/*,/tool/*
+#寮傛绾跨▼姹犻厤缃�
+ThreadPoolTask:
+  corePoolSize: 20
+  maxPoolSize: 40
+  keepAliveSeconds: 300
+  queueCapacity: 50
+# Spring閰嶇疆
+spring:
+  # 璧勬簮淇℃伅
+  messages:
+    # 鍥介檯鍖栬祫婧愭枃浠惰矾寰�
+    basename: i18n/messages
+  # 鏂囦欢涓婁紶
+  servlet:
+    multipart:
+      # 鍗曚釜鏂囦欢澶у皬
+      max-file-size: 10MB
+      # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬
+      max-request-size: 20MB
+  # 鏈嶅姟妯″潡
+  devtools:
+    restart:
+      # 鐑儴缃插紑鍏�
+      enabled: false
+  thymeleaf:
+    cache: false
+  profiles:
+    active: dev-druid,dev
+
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 3ca0f65..69ea287 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
@@ -6,6 +6,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
@@ -21,6 +22,8 @@
 @Component("MinioTask")
 @Slf4j(topic = "minio")
 public class MinioTask {
+    @Resource
+    MinioUtils minioUtil;
 
     public void delHistoryTask(Integer saveDays) {
         log.debug("鎵ц鍘嗗彶鏁版嵁鍒犻櫎");
@@ -30,7 +33,7 @@
             buckets.add("pic");
             buckets.add("record");
             for (String name : buckets) {
-                Iterable<Result<Item>> listObjectsPic = MinioUtils.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"));
@@ -48,7 +51,7 @@
                         log.debug("objectTime : " + objectTime);
                         log.debug("expireTime : " + expireTime);
                         log.debug("objectTime 鏃堕棿鍦� expireTime 涔嬪墠,鎵ц鍒犻櫎");
-                        boolean b = MinioUtils.removeObject(name, item.objectName());
+                        boolean b = minioUtil.removeObject(name, item.objectName());
                         if (b) {
                             log.debug("鎴愬姛鍒犻櫎杩囨湡鏁版嵁锛�" + item.objectName() + "---" + item.lastModified());
                         }

--
Gitblit v1.9.3