From ac2873bd37eeb496b0e9dd62d66e9fc4b38ef39b Mon Sep 17 00:00:00 2001
From: qirong <2032486488@qq.com>
Date: 星期五, 22 十二月 2023 13:38:26 +0800
Subject: [PATCH] ftp摆渡

---
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/properties/FtpConfig.java                 |   24 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/FtpApche.java                              |  193 ++++
 ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/SynchronousRequest2.java           |   25 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/sync/deleteSync.java                             |   43 +
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java              |   52 
 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/BoundedQueueController.java         |  184 ++--
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/sync/VideoPulSync.java                           |  117 +++
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/FTPUtil.java                               |  547 ++++++++++++++
 ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java                                    |    2 
 ruoyi-admin/src/main/resources/application-prod.yml                                                          |   23 
 ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java               |    2 
 ruoyi-modules/ruoyi-system/pom.xml                                                                           |   15 
 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/PriorityQueueController.java        |  178 ++--
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/HttpUtils.java                             |  162 +--
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java                      |    2 
 ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java                                                |    4 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SynchronizationController.java |  115 ++
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java              |   55 
 ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/QueueUtils.java                 |  464 +++++-----
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java          |   89 +
 20 files changed, 1,676 insertions(+), 620 deletions(-)

diff --git a/ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java b/ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java
index 8ef33fe..57e792c 100644
--- a/ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java
+++ b/ruoyi-admin/src/main/java/org/dromara/DromaraApplication.java
@@ -3,6 +3,7 @@
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
  * 鍚姩绋嬪簭
@@ -10,6 +11,7 @@
  * @author Lion Li
  */
 
+@EnableScheduling
 @SpringBootApplication
 public class DromaraApplication {
 
@@ -17,7 +19,7 @@
         SpringApplication application = new SpringApplication(DromaraApplication.class);
         application.setApplicationStartup(new BufferingApplicationStartup(2048));
         application.run(args);
-        System.out.println("(鈾モ棤鈥库棤)锞夛緸  RuoYi-Vue-Plus鍚姩鎴愬姛   醿�(麓凇`醿�)锞�");
+        System.out.println("(鈾モ棤鈥库棤)锞夛緸  Vue-Plus鍚姩鎴愬姛   醿�(麓凇`醿�)锞�");
     }
 
 }
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java
index e0ef425..45810dd 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java
@@ -78,7 +78,7 @@
         SysUserVo sysUserVo = userMapper.selectUserByUserName(username);
         SysUserRole userRole = new SysUserRole();
         userRole.setUserId(sysUserVo.getUserId());
-        userRole.setRoleId(Long.valueOf(RoleType.VIDEO.getType()));
+        userRole.setRoleId(Long.valueOf(RoleType.POLICE.getType()));
         userRoleMapper.insert(userRole);
         recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.register.success"));
     }
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
index 2d96cc0..a2cb46f 100644
--- a/ruoyi-admin/src/main/resources/application-prod.yml
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -43,12 +43,12 @@
           driverClassName: com.mysql.cj.jdbc.Driver
           # jdbc 鎵�鏈夊弬鏁伴厤缃弬鑰� https://lionli.blog.csdn.net/article/details/122018562
           # rewriteBatchedStatements=true 鎵瑰鐞嗕紭鍖� 澶у箙鎻愬崌鎵归噺鎻掑叆鏇存柊鍒犻櫎鎬ц兘(瀵规暟鎹簱鏈夋�ц兘鎹熻�� 浣跨敤鎵归噺鎿嶄綔搴旇�冭檻鎬ц兘闂)
-          url: jdbc:mysql://123.207.71.245:13306/qysp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
-          username: root
-          password: 234#Wersdf!
-#          url: jdbc:mysql://80.36.32.176:3306/qysp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+#          url: jdbc:mysql://123.207.71.245:13306/qysp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
 #          username: root
 #          password: 234#Wersdf!
+          url: jdbc:mysql://80.36.32.176:3306/qysp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+          username: root
+          password: 234#Wersdf!
 #          url: jdbc:mysql://51.9.57.211:3306/qysp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
 #          username: root
 #          password: 234#Wersdf!
@@ -105,9 +105,9 @@
 spring.data:
   redis:
     # 鍦板潃
-    host: 162.14.79.111
+    host: 80.36.32.176
     # 绔彛锛岄粯璁や负6379
-    port: 16379
+    port: 6379
     password: 234#Wersdf!
     # 鏁版嵁搴撶储寮�
     database: 0
@@ -136,7 +136,7 @@
     # 杩炴帴绌洪棽瓒呮椂锛屽崟浣嶏細姣
     idleConnectionTimeout: 10000
     # 鍛戒护绛夊緟瓒呮椂锛屽崟浣嶏細姣
-    timeout: 3000
+    timeout: 10000
     # 鍙戝竷鍜岃闃呰繛鎺ユ睜澶у皬
     subscriptionConnectionPoolSize: 50
 
@@ -262,6 +262,13 @@
 
 --- #杈圭晫
 police:
-  localhost: http://192.168.3.228:8801 #娴嬭瘯
+  localhost: http://127.0.0.1:8080 #娴嬭瘯
   chief: http://10.248.255.130:18080   #鏀垮姟浜�
   video: http://51.9.1.41:18080        #瑙嗛缃�
+
+--- #ftp
+ftp:
+  url: 51.9.57.211
+  username: admin          #鏈満锛歠tpup
+  passwd: 234#Wersdf!
+  path: /
diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/SynchronousRequest2.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/SynchronousRequest2.java
new file mode 100644
index 0000000..33416fa
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/SynchronousRequest2.java
@@ -0,0 +1,25 @@
+package org.dromara.common.oss.entity;
+
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.InputStream;
+
+@Data
+public class SynchronousRequest2 {
+
+    //InputStream 娴�
+    private InputStream input;
+    //minio璺緞
+    private String path;
+    //ossId
+    private String ossId;
+    //鍒涘缓鏃堕棿
+    private String createTime;
+    //鍒涘缓浜�
+    private String createBy;
+    //瀵嗙爜
+    private String password;
+    //鏂囦欢鍚嶇О
+    private String fileName;
+}
diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java
index 0ee947d..549d049 100644
--- a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java
+++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/config/RedisConfig.java
@@ -62,7 +62,7 @@
                     .setSubscriptionConnectionPoolSize(singleServerConfig.getSubscriptionConnectionPoolSize())
                     .setConnectionMinimumIdleSize(singleServerConfig.getConnectionMinimumIdleSize())
                     .setConnectionPoolSize(singleServerConfig.getConnectionPoolSize())
-                    .setSubscriptionsPerConnection(5000);
+                    .setSubscriptionsPerConnection(60 * 10000);
             }
             // 闆嗙兢閰嶇疆鏂瑰紡 鍙傝�冧笅鏂规敞閲�
             RedissonProperties.ClusterServersConfig clusterServersConfig = redissonProperties.getClusterServersConfig();
diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/QueueUtils.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/QueueUtils.java
index 67ce552..47c9176 100644
--- a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/QueueUtils.java
+++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/QueueUtils.java
@@ -1,232 +1,232 @@
-package org.dromara.common.redis.utils;
-
-import org.dromara.common.core.utils.SpringUtils;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.redisson.api.*;
-
-import java.util.concurrent.TimeUnit;
-import java.util.function.Consumer;
-
-/**
- * 鍒嗗竷寮忛槦鍒楀伐鍏�
- * 杞婚噺绾ч槦鍒� 閲嶉噺绾ф暟鎹噺 璇蜂娇鐢� MQ
- * 瑕佹眰 redis 5.X 浠ヤ笂
- *
- * @author Lion Li
- * @version 3.6.0 鏂板
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class QueueUtils {
-
-    private static final RedissonClient CLIENT = SpringUtils.getBean(RedissonClient.class);
-
-
-    /**
-     * 鑾峰彇瀹㈡埛绔疄渚�
-     */
-    public static RedissonClient getClient() {
-        return CLIENT;
-    }
-
-    /**
-     * 娣诲姞鏅�氶槦鍒楁暟鎹�
-     *
-     * @param queueName 闃熷垪鍚�
-     * @param data      鏁版嵁
-     */
-    public static <T> boolean addQueueObject(String queueName, T data) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        return queue.offer(data);
-    }
-
-    /**
-     * 閫氱敤鑾峰彇涓�涓槦鍒楁暟鎹� 娌℃湁鏁版嵁杩斿洖 null(涓嶆敮鎸佸欢杩熼槦鍒�)
-     *
-     * @param queueName 闃熷垪鍚�
-     */
-    public static <T> T getQueueObject(String queueName) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        return queue.poll();
-    }
-
-    /**
-     * 閫氱敤鍒犻櫎闃熷垪鏁版嵁(涓嶆敮鎸佸欢杩熼槦鍒�)
-     */
-    public static <T> boolean removeQueueObject(String queueName, T data) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        return queue.remove(data);
-    }
-
-    /**
-     * 閫氱敤閿�姣侀槦鍒� 鎵�鏈夐樆濉炵洃鍚� 鎶ラ敊(涓嶆敮鎸佸欢杩熼槦鍒�)
-     */
-    public static <T> boolean destroyQueue(String queueName) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        return queue.delete();
-    }
-
-    /**
-     * 娣诲姞寤惰繜闃熷垪鏁版嵁 榛樿姣
-     *
-     * @param queueName 闃熷垪鍚�
-     * @param data      鏁版嵁
-     * @param time      寤惰繜鏃堕棿
-     */
-    public static <T> void addDelayedQueueObject(String queueName, T data, long time) {
-        addDelayedQueueObject(queueName, data, time, TimeUnit.MILLISECONDS);
-    }
-
-    /**
-     * 娣诲姞寤惰繜闃熷垪鏁版嵁
-     *
-     * @param queueName 闃熷垪鍚�
-     * @param data      鏁版嵁
-     * @param time      寤惰繜鏃堕棿
-     * @param timeUnit  鍗曚綅
-     */
-    public static <T> void addDelayedQueueObject(String queueName, T data, long time, TimeUnit timeUnit) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        RDelayedQueue<T> delayedQueue = CLIENT.getDelayedQueue(queue);
-        delayedQueue.offer(data, time, timeUnit);
-    }
-
-    /**
-     * 鑾峰彇涓�涓欢杩熼槦鍒楁暟鎹� 娌℃湁鏁版嵁杩斿洖 null
-     *
-     * @param queueName 闃熷垪鍚�
-     */
-    public static <T> T getDelayedQueueObject(String queueName) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        RDelayedQueue<T> delayedQueue = CLIENT.getDelayedQueue(queue);
-        return delayedQueue.poll();
-    }
-
-    /**
-     * 鍒犻櫎寤惰繜闃熷垪鏁版嵁
-     */
-    public static <T> boolean removeDelayedQueueObject(String queueName, T data) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        RDelayedQueue<T> delayedQueue = CLIENT.getDelayedQueue(queue);
-        return delayedQueue.remove(data);
-    }
-
-    /**
-     * 閿�姣佸欢杩熼槦鍒� 鎵�鏈夐樆濉炵洃鍚� 鎶ラ敊
-     */
-    public static <T> void destroyDelayedQueue(String queueName) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        RDelayedQueue<T> delayedQueue = CLIENT.getDelayedQueue(queue);
-        delayedQueue.destroy();
-    }
-
-    /**
-     * 娣诲姞浼樺厛闃熷垪鏁版嵁
-     *
-     * @param queueName 闃熷垪鍚�
-     * @param data      鏁版嵁
-     */
-    public static <T> boolean addPriorityQueueObject(String queueName, T data) {
-        RPriorityBlockingQueue<T> priorityBlockingQueue = CLIENT.getPriorityBlockingQueue(queueName);
-        return priorityBlockingQueue.offer(data);
-    }
-
-    /**
-     * 浼樺厛闃熷垪鑾峰彇涓�涓槦鍒楁暟鎹� 娌℃湁鏁版嵁杩斿洖 null(涓嶆敮鎸佸欢杩熼槦鍒�)
-     *
-     * @param queueName 闃熷垪鍚�
-     */
-    public static <T> T getPriorityQueueObject(String queueName) {
-        RPriorityBlockingQueue<T> queue = CLIENT.getPriorityBlockingQueue(queueName);
-        return queue.poll();
-    }
-
-    /**
-     * 浼樺厛闃熷垪鍒犻櫎闃熷垪鏁版嵁(涓嶆敮鎸佸欢杩熼槦鍒�)
-     */
-    public static <T> boolean removePriorityQueueObject(String queueName, T data) {
-        RPriorityBlockingQueue<T> queue = CLIENT.getPriorityBlockingQueue(queueName);
-        return queue.remove(data);
-    }
-
-    /**
-     * 浼樺厛闃熷垪閿�姣侀槦鍒� 鎵�鏈夐樆濉炵洃鍚� 鎶ラ敊(涓嶆敮鎸佸欢杩熼槦鍒�)
-     */
-    public static <T> boolean destroyPriorityQueue(String queueName) {
-        RPriorityBlockingQueue<T> queue = CLIENT.getPriorityBlockingQueue(queueName);
-        return queue.delete();
-    }
-
-    /**
-     * 灏濊瘯璁剧疆 鏈夌晫闃熷垪 瀹归噺 鐢ㄤ簬闄愬埗鏁伴噺
-     *
-     * @param queueName 闃熷垪鍚�
-     * @param capacity  瀹归噺
-     */
-    public static <T> boolean trySetBoundedQueueCapacity(String queueName, int capacity) {
-        RBoundedBlockingQueue<T> boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName);
-        return boundedBlockingQueue.trySetCapacity(capacity);
-    }
-
-    /**
-     * 灏濊瘯璁剧疆 鏈夌晫闃熷垪 瀹归噺 鐢ㄤ簬闄愬埗鏁伴噺
-     *
-     * @param queueName 闃熷垪鍚�
-     * @param capacity  瀹归噺
-     * @param destroy   宸插瓨鍦ㄦ槸鍚﹂攢姣�
-     */
-    public static <T> boolean trySetBoundedQueueCapacity(String queueName, int capacity, boolean destroy) {
-        RBoundedBlockingQueue<T> boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName);
-        if (boundedBlockingQueue.isExists() && destroy) {
-            destroyQueue(queueName);
-        }
-        return boundedBlockingQueue.trySetCapacity(capacity);
-    }
-
-    /**
-     * 娣诲姞鏈夌晫闃熷垪鏁版嵁
-     *
-     * @param queueName 闃熷垪鍚�
-     * @param data      鏁版嵁
-     * @return 娣诲姞鎴愬姛 true 宸茶揪鍒扮晫闄� false
-     */
-    public static <T> boolean addBoundedQueueObject(String queueName, T data) {
-        RBoundedBlockingQueue<T> boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName);
-        return boundedBlockingQueue.offer(data);
-    }
-
-    /**
-     * 鏈夌晫闃熷垪鑾峰彇涓�涓槦鍒楁暟鎹� 娌℃湁鏁版嵁杩斿洖 null(涓嶆敮鎸佸欢杩熼槦鍒�)
-     *
-     * @param queueName 闃熷垪鍚�
-     */
-    public static <T> T getBoundedQueueObject(String queueName) {
-        RBoundedBlockingQueue<T> queue = CLIENT.getBoundedBlockingQueue(queueName);
-        return queue.poll();
-    }
-
-    /**
-     * 鏈夌晫闃熷垪鍒犻櫎闃熷垪鏁版嵁(涓嶆敮鎸佸欢杩熼槦鍒�)
-     */
-    public static <T> boolean removeBoundedQueueObject(String queueName, T data) {
-        RBoundedBlockingQueue<T> queue = CLIENT.getBoundedBlockingQueue(queueName);
-        return queue.remove(data);
-    }
-
-    /**
-     * 鏈夌晫闃熷垪閿�姣侀槦鍒� 鎵�鏈夐樆濉炵洃鍚� 鎶ラ敊(涓嶆敮鎸佸欢杩熼槦鍒�)
-     */
-    public static <T> boolean destroyBoundedQueue(String queueName) {
-        RBoundedBlockingQueue<T> queue = CLIENT.getBoundedBlockingQueue(queueName);
-        return queue.delete();
-    }
-
-    /**
-     * 璁㈤槄闃诲闃熷垪(鍙闃呮墍鏈夊疄鐜扮被 渚嬪: 寤惰繜 浼樺厛 鏈夌晫 绛�)
-     */
-    public static <T> void subscribeBlockingQueue(String queueName, Consumer<T> consumer) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        queue.subscribeOnElements(consumer);
-    }
-
-}
+//package org.dromara.common.redis.utils;
+//
+//import org.dromara.common.core.utils.SpringUtils;
+//import lombok.AccessLevel;
+//import lombok.NoArgsConstructor;
+//import org.redisson.api.*;
+//
+//import java.util.concurrent.TimeUnit;
+//import java.util.function.Consumer;
+//
+///**
+// * 鍒嗗竷寮忛槦鍒楀伐鍏�
+// * 杞婚噺绾ч槦鍒� 閲嶉噺绾ф暟鎹噺 璇蜂娇鐢� MQ
+// * 瑕佹眰 redis 5.X 浠ヤ笂
+// *
+// * @author Lion Li
+// * @version 3.6.0 鏂板
+// */
+//@NoArgsConstructor(access = AccessLevel.PRIVATE)
+//public class QueueUtils {
+//
+//    private static final RedissonClient CLIENT = SpringUtils.getBean(RedissonClient.class);
+//
+//
+//    /**
+//     * 鑾峰彇瀹㈡埛绔疄渚�
+//     */
+//    public static RedissonClient getClient() {
+//        return CLIENT;
+//    }
+//
+//    /**
+//     * 娣诲姞鏅�氶槦鍒楁暟鎹�
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     * @param data      鏁版嵁
+//     */
+//    public static <T> boolean addQueueObject(String queueName, T data) {
+//        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
+//        return queue.offer(data);
+//    }
+//
+//    /**
+//     * 閫氱敤鑾峰彇涓�涓槦鍒楁暟鎹� 娌℃湁鏁版嵁杩斿洖 null(涓嶆敮鎸佸欢杩熼槦鍒�)
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     */
+//    public static <T> T getQueueObject(String queueName) {
+//        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
+//        return queue.poll();
+//    }
+//
+//    /**
+//     * 閫氱敤鍒犻櫎闃熷垪鏁版嵁(涓嶆敮鎸佸欢杩熼槦鍒�)
+//     */
+//    public static <T> boolean removeQueueObject(String queueName, T data) {
+//        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
+//        return queue.remove(data);
+//    }
+//
+//    /**
+//     * 閫氱敤閿�姣侀槦鍒� 鎵�鏈夐樆濉炵洃鍚� 鎶ラ敊(涓嶆敮鎸佸欢杩熼槦鍒�)
+//     */
+//    public static <T> boolean destroyQueue(String queueName) {
+//        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
+//        return queue.delete();
+//    }
+//
+//    /**
+//     * 娣诲姞寤惰繜闃熷垪鏁版嵁 榛樿姣
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     * @param data      鏁版嵁
+//     * @param time      寤惰繜鏃堕棿
+//     */
+//    public static <T> void addDelayedQueueObject(String queueName, T data, long time) {
+//        addDelayedQueueObject(queueName, data, time, TimeUnit.MILLISECONDS);
+//    }
+//
+//    /**
+//     * 娣诲姞寤惰繜闃熷垪鏁版嵁
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     * @param data      鏁版嵁
+//     * @param time      寤惰繜鏃堕棿
+//     * @param timeUnit  鍗曚綅
+//     */
+//    public static <T> void addDelayedQueueObject(String queueName, T data, long time, TimeUnit timeUnit) {
+//        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
+//        RDelayedQueue<T> delayedQueue = CLIENT.getDelayedQueue(queue);
+//        delayedQueue.offer(data, time, timeUnit);
+//    }
+//
+//    /**
+//     * 鑾峰彇涓�涓欢杩熼槦鍒楁暟鎹� 娌℃湁鏁版嵁杩斿洖 null
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     */
+//    public static <T> T getDelayedQueueObject(String queueName) {
+//        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
+//        RDelayedQueue<T> delayedQueue = CLIENT.getDelayedQueue(queue);
+//        return delayedQueue.poll();
+//    }
+//
+//    /**
+//     * 鍒犻櫎寤惰繜闃熷垪鏁版嵁
+//     */
+//    public static <T> boolean removeDelayedQueueObject(String queueName, T data) {
+//        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
+//        RDelayedQueue<T> delayedQueue = CLIENT.getDelayedQueue(queue);
+//        return delayedQueue.remove(data);
+//    }
+//
+//    /**
+//     * 閿�姣佸欢杩熼槦鍒� 鎵�鏈夐樆濉炵洃鍚� 鎶ラ敊
+//     */
+//    public static <T> void destroyDelayedQueue(String queueName) {
+//        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
+//        RDelayedQueue<T> delayedQueue = CLIENT.getDelayedQueue(queue);
+//        delayedQueue.destroy();
+//    }
+//
+//    /**
+//     * 娣诲姞浼樺厛闃熷垪鏁版嵁
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     * @param data      鏁版嵁
+//     */
+//    public static <T> boolean addPriorityQueueObject(String queueName, T data) {
+//        RPriorityBlockingQueue<T> priorityBlockingQueue = CLIENT.getPriorityBlockingQueue(queueName);
+//        return priorityBlockingQueue.offer(data);
+//    }
+//
+//    /**
+//     * 浼樺厛闃熷垪鑾峰彇涓�涓槦鍒楁暟鎹� 娌℃湁鏁版嵁杩斿洖 null(涓嶆敮鎸佸欢杩熼槦鍒�)
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     */
+//    public static <T> T getPriorityQueueObject(String queueName) {
+//        RPriorityBlockingQueue<T> queue = CLIENT.getPriorityBlockingQueue(queueName);
+//        return queue.poll();
+//    }
+//
+//    /**
+//     * 浼樺厛闃熷垪鍒犻櫎闃熷垪鏁版嵁(涓嶆敮鎸佸欢杩熼槦鍒�)
+//     */
+//    public static <T> boolean removePriorityQueueObject(String queueName, T data) {
+//        RPriorityBlockingQueue<T> queue = CLIENT.getPriorityBlockingQueue(queueName);
+//        return queue.remove(data);
+//    }
+//
+//    /**
+//     * 浼樺厛闃熷垪閿�姣侀槦鍒� 鎵�鏈夐樆濉炵洃鍚� 鎶ラ敊(涓嶆敮鎸佸欢杩熼槦鍒�)
+//     */
+//    public static <T> boolean destroyPriorityQueue(String queueName) {
+//        RPriorityBlockingQueue<T> queue = CLIENT.getPriorityBlockingQueue(queueName);
+//        return queue.delete();
+//    }
+//
+//    /**
+//     * 灏濊瘯璁剧疆 鏈夌晫闃熷垪 瀹归噺 鐢ㄤ簬闄愬埗鏁伴噺
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     * @param capacity  瀹归噺
+//     */
+//    public static <T> boolean trySetBoundedQueueCapacity(String queueName, int capacity) {
+//        RBoundedBlockingQueue<T> boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName);
+//        return boundedBlockingQueue.trySetCapacity(capacity);
+//    }
+//
+//    /**
+//     * 灏濊瘯璁剧疆 鏈夌晫闃熷垪 瀹归噺 鐢ㄤ簬闄愬埗鏁伴噺
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     * @param capacity  瀹归噺
+//     * @param destroy   宸插瓨鍦ㄦ槸鍚﹂攢姣�
+//     */
+//    public static <T> boolean trySetBoundedQueueCapacity(String queueName, int capacity, boolean destroy) {
+//        RBoundedBlockingQueue<T> boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName);
+//        if (boundedBlockingQueue.isExists() && destroy) {
+//            destroyQueue(queueName);
+//        }
+//        return boundedBlockingQueue.trySetCapacity(capacity);
+//    }
+//
+//    /**
+//     * 娣诲姞鏈夌晫闃熷垪鏁版嵁
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     * @param data      鏁版嵁
+//     * @return 娣诲姞鎴愬姛 true 宸茶揪鍒扮晫闄� false
+//     */
+//    public static <T> boolean addBoundedQueueObject(String queueName, T data) {
+//        RBoundedBlockingQueue<T> boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName);
+//        return boundedBlockingQueue.offer(data);
+//    }
+//
+//    /**
+//     * 鏈夌晫闃熷垪鑾峰彇涓�涓槦鍒楁暟鎹� 娌℃湁鏁版嵁杩斿洖 null(涓嶆敮鎸佸欢杩熼槦鍒�)
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     */
+//    public static <T> T getBoundedQueueObject(String queueName) {
+//        RBoundedBlockingQueue<T> queue = CLIENT.getBoundedBlockingQueue(queueName);
+//        return queue.poll();
+//    }
+//
+//    /**
+//     * 鏈夌晫闃熷垪鍒犻櫎闃熷垪鏁版嵁(涓嶆敮鎸佸欢杩熼槦鍒�)
+//     */
+//    public static <T> boolean removeBoundedQueueObject(String queueName, T data) {
+//        RBoundedBlockingQueue<T> queue = CLIENT.getBoundedBlockingQueue(queueName);
+//        return queue.remove(data);
+//    }
+//
+//    /**
+//     * 鏈夌晫闃熷垪閿�姣侀槦鍒� 鎵�鏈夐樆濉炵洃鍚� 鎶ラ敊(涓嶆敮鎸佸欢杩熼槦鍒�)
+//     */
+//    public static <T> boolean destroyBoundedQueue(String queueName) {
+//        RBoundedBlockingQueue<T> queue = CLIENT.getBoundedBlockingQueue(queueName);
+//        return queue.delete();
+//    }
+//
+//    /**
+//     * 璁㈤槄闃诲闃熷垪(鍙闃呮墍鏈夊疄鐜扮被 渚嬪: 寤惰繜 浼樺厛 鏈夌晫 绛�)
+//     */
+//    public static <T> void subscribeBlockingQueue(String queueName, Consumer<T> consumer) {
+//        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
+//        queue.subscribeOnElements(consumer);
+//    }
+//
+//}
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/BoundedQueueController.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/BoundedQueueController.java
index 30ec27f..c03aa6e 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/BoundedQueueController.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/BoundedQueueController.java
@@ -1,92 +1,92 @@
-package org.dromara.demo.controller.queue;
-
-import cn.dev33.satoken.annotation.SaIgnore;
-import org.dromara.common.core.domain.R;
-import org.dromara.common.redis.utils.QueueUtils;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.redisson.api.RBoundedBlockingQueue;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * 鏈夌晫闃熷垪 婕旂ず妗堜緥
- * <p>
- * 杞婚噺绾ч槦鍒� 閲嶉噺绾ф暟鎹噺 璇蜂娇鐢� MQ
- * <p>
- * 闆嗙兢娴嬭瘯閫氳繃 鍚屼竴涓暟鎹彧浼氳娑堣垂涓�娆� 鍋氬ソ浜嬪姟琛ュ伩
- * 闆嗙兢娴嬭瘯娴佺▼ 鍦ㄥ叾涓竴鍙板彂閫佹暟鎹� 涓ょ鍒嗗埆璋冪敤鑾峰彇鎺ュ彛 涓�娆¤幏鍙栦竴鏉�
- *
- * @author Lion Li
- * @version 3.6.0
- */
-@Slf4j
-@RequiredArgsConstructor
-@RestController
-@RequestMapping("/demo/queue/bounded")
-public class BoundedQueueController {
-
-
-    /**
-     * 娣诲姞闃熷垪鏁版嵁
-     *
-     * @param queueName 闃熷垪鍚�
-     * @param capacity  瀹归噺
-     */
-    @GetMapping("/add")
-    public R<Void> add(String queueName, int capacity) {
-        // 鐢ㄥ畬浜嗕竴瀹氳閿�姣� 鍚﹀垯浼氫竴鐩村瓨鍦�
-        boolean b = QueueUtils.destroyBoundedQueue(queueName);
-        log.info("閫氶亾: {} , 鍒犻櫎: {}", queueName, b);
-        // 鍒濆鍖栬缃竴娆″嵆鍙�
-        if (QueueUtils.trySetBoundedQueueCapacity(queueName, capacity)) {
-            log.info("閫氶亾: {} , 璁剧疆瀹归噺: {}", queueName, capacity);
-        } else {
-            log.info("閫氶亾: {} , 璁剧疆瀹归噺澶辫触", queueName);
-            return R.fail("鎿嶄綔澶辫触");
-        }
-        for (int i = 0; i < 11; i++) {
-            String data = "data-" + i;
-            boolean flag = QueueUtils.addBoundedQueueObject(queueName, data);
-            if (flag == false) {
-                log.info("閫氶亾: {} , 鍙戦�佹暟鎹�: {} 澶辫触, 閫氶亾宸叉弧", queueName, data);
-            } else {
-                log.info("閫氶亾: {} , 鍙戦�佹暟鎹�: {}", queueName, data);
-            }
-        }
-        return R.ok("鎿嶄綔鎴愬姛");
-    }
-
-    /**
-     * 鍒犻櫎闃熷垪鏁版嵁
-     *
-     * @param queueName 闃熷垪鍚�
-     */
-    @GetMapping("/remove")
-    public R<Void> remove(String queueName) {
-        String data = "data-" + 5;
-        if (QueueUtils.removeBoundedQueueObject(queueName, data)) {
-            log.info("閫氶亾: {} , 鍒犻櫎鏁版嵁: {}", queueName, data);
-        } else {
-            return R.fail("鎿嶄綔澶辫触");
-        }
-        return R.ok("鎿嶄綔鎴愬姛");
-    }
-
-    /**
-     * 鑾峰彇闃熷垪鏁版嵁
-     *
-     * @param queueName 闃熷垪鍚�
-     */
-    @GetMapping("/get")
-    public R<Void> get(String queueName) {
-        String data;
-        do {
-            data = QueueUtils.getBoundedQueueObject(queueName);
-            log.info("閫氶亾: {} , 鑾峰彇鏁版嵁: {}", queueName, data);
-        } while (data != null);
-        return R.ok("鎿嶄綔鎴愬姛");
-    }
-
-}
+//package org.dromara.demo.controller.queue;
+//
+//import cn.dev33.satoken.annotation.SaIgnore;
+//import org.dromara.common.core.domain.R;
+//import org.dromara.common.redis.utils.QueueUtils;
+//import lombok.RequiredArgsConstructor;
+//import lombok.extern.slf4j.Slf4j;
+//import org.redisson.api.RBoundedBlockingQueue;
+//import org.springframework.web.bind.annotation.GetMapping;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RestController;
+//
+///**
+// * 鏈夌晫闃熷垪 婕旂ず妗堜緥
+// * <p>
+// * 杞婚噺绾ч槦鍒� 閲嶉噺绾ф暟鎹噺 璇蜂娇鐢� MQ
+// * <p>
+// * 闆嗙兢娴嬭瘯閫氳繃 鍚屼竴涓暟鎹彧浼氳娑堣垂涓�娆� 鍋氬ソ浜嬪姟琛ュ伩
+// * 闆嗙兢娴嬭瘯娴佺▼ 鍦ㄥ叾涓竴鍙板彂閫佹暟鎹� 涓ょ鍒嗗埆璋冪敤鑾峰彇鎺ュ彛 涓�娆¤幏鍙栦竴鏉�
+// *
+// * @author Lion Li
+// * @version 3.6.0
+// */
+//@Slf4j
+//@RequiredArgsConstructor
+//@RestController
+//@RequestMapping("/demo/queue/bounded")
+//public class BoundedQueueController {
+//
+//
+//    /**
+//     * 娣诲姞闃熷垪鏁版嵁
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     * @param capacity  瀹归噺
+//     */
+//    @GetMapping("/add")
+//    public R<Void> add(String queueName, int capacity) {
+//        // 鐢ㄥ畬浜嗕竴瀹氳閿�姣� 鍚﹀垯浼氫竴鐩村瓨鍦�
+//        boolean b = QueueUtils.destroyBoundedQueue(queueName);
+//        log.info("閫氶亾: {} , 鍒犻櫎: {}", queueName, b);
+//        // 鍒濆鍖栬缃竴娆″嵆鍙�
+//        if (QueueUtils.trySetBoundedQueueCapacity(queueName, capacity)) {
+//            log.info("閫氶亾: {} , 璁剧疆瀹归噺: {}", queueName, capacity);
+//        } else {
+//            log.info("閫氶亾: {} , 璁剧疆瀹归噺澶辫触", queueName);
+//            return R.fail("鎿嶄綔澶辫触");
+//        }
+//        for (int i = 0; i < 11; i++) {
+//            String data = "data-" + i;
+//            boolean flag = QueueUtils.addBoundedQueueObject(queueName, data);
+//            if (flag == false) {
+//                log.info("閫氶亾: {} , 鍙戦�佹暟鎹�: {} 澶辫触, 閫氶亾宸叉弧", queueName, data);
+//            } else {
+//                log.info("閫氶亾: {} , 鍙戦�佹暟鎹�: {}", queueName, data);
+//            }
+//        }
+//        return R.ok("鎿嶄綔鎴愬姛");
+//    }
+//
+//    /**
+//     * 鍒犻櫎闃熷垪鏁版嵁
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     */
+//    @GetMapping("/remove")
+//    public R<Void> remove(String queueName) {
+//        String data = "data-" + 5;
+//        if (QueueUtils.removeBoundedQueueObject(queueName, data)) {
+//            log.info("閫氶亾: {} , 鍒犻櫎鏁版嵁: {}", queueName, data);
+//        } else {
+//            return R.fail("鎿嶄綔澶辫触");
+//        }
+//        return R.ok("鎿嶄綔鎴愬姛");
+//    }
+//
+//    /**
+//     * 鑾峰彇闃熷垪鏁版嵁
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     */
+//    @GetMapping("/get")
+//    public R<Void> get(String queueName) {
+//        String data;
+//        do {
+//            data = QueueUtils.getBoundedQueueObject(queueName);
+//            log.info("閫氶亾: {} , 鑾峰彇鏁版嵁: {}", queueName, data);
+//        } while (data != null);
+//        return R.ok("鎿嶄綔鎴愬姛");
+//    }
+//
+//}
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/PriorityQueueController.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/PriorityQueueController.java
index 02c7396..fd637ff 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/PriorityQueueController.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/PriorityQueueController.java
@@ -1,89 +1,89 @@
-package org.dromara.demo.controller.queue;
-
-import cn.hutool.core.util.RandomUtil;
-import org.dromara.common.core.domain.R;
-import org.dromara.common.redis.utils.QueueUtils;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * 浼樺厛闃熷垪 婕旂ず妗堜緥
- * <p>
- * 杞婚噺绾ч槦鍒� 閲嶉噺绾ф暟鎹噺 璇蜂娇鐢� MQ
- * <p>
- * 闆嗙兢娴嬭瘯閫氳繃 鍚屼竴涓秷鎭彧浼氳娑堣垂涓�娆� 鍋氬ソ浜嬪姟琛ュ伩
- * 闆嗙兢娴嬭瘯娴佺▼ 鍦ㄥ叾涓竴鍙板彂閫佹暟鎹� 涓ょ鍒嗗埆璋冪敤鑾峰彇鎺ュ彛 涓�娆¤幏鍙栦竴鏉�
- *
- * @author Lion Li
- * @version 3.6.0
- */
-@Slf4j
-@RequiredArgsConstructor
-@RestController
-@RequestMapping("/demo/queue/priority")
-public class PriorityQueueController {
-
-    /**
-     * 娣诲姞闃熷垪鏁版嵁
-     *
-     * @param queueName 闃熷垪鍚�
-     */
-    @GetMapping("/add")
-    public R<Void> add(String queueName) {
-        // 鐢ㄥ畬浜嗕竴瀹氳閿�姣� 鍚﹀垯浼氫竴鐩村瓨鍦�
-        boolean b = QueueUtils.destroyPriorityQueue(queueName);
-        log.info("閫氶亾: {} , 鍒犻櫎: {}", queueName, b);
-
-        for (int i = 0; i < 10; i++) {
-            int randomNum = RandomUtil.randomInt(10);
-            PriorityDemo data = new PriorityDemo();
-            data.setName("data-" + i);
-            data.setOrderNum(randomNum);
-            if (QueueUtils.addPriorityQueueObject(queueName, data)) {
-                log.info("閫氶亾: {} , 鍙戦�佹暟鎹�: {}", queueName, data);
-            } else {
-                log.info("閫氶亾: {} , 鍙戦�佹暟鎹�: {}, 鍙戦�佸け璐�", queueName, data);
-            }
-        }
-        return R.ok("鎿嶄綔鎴愬姛");
-    }
-
-    /**
-     * 鍒犻櫎闃熷垪鏁版嵁
-     *
-     * @param queueName 闃熷垪鍚�
-     * @param name      瀵硅薄鍚�
-     * @param orderNum  鎺掑簭鍙�
-     */
-    @GetMapping("/remove")
-    public R<Void> remove(String queueName, String name, Integer orderNum) {
-        PriorityDemo data = new PriorityDemo();
-        data.setName(name);
-        data.setOrderNum(orderNum);
-        if (QueueUtils.removePriorityQueueObject(queueName, data)) {
-            log.info("閫氶亾: {} , 鍒犻櫎鏁版嵁: {}", queueName, data);
-        } else {
-            return R.fail("鎿嶄綔澶辫触");
-        }
-        return R.ok("鎿嶄綔鎴愬姛");
-    }
-
-    /**
-     * 鑾峰彇闃熷垪鏁版嵁
-     *
-     * @param queueName 闃熷垪鍚�
-     */
-    @GetMapping("/get")
-    public R<Void> get(String queueName) {
-        PriorityDemo data;
-        do {
-            data = QueueUtils.getPriorityQueueObject(queueName);
-            log.info("閫氶亾: {} , 鑾峰彇鏁版嵁: {}", queueName, data);
-        } while (data != null);
-        return R.ok("鎿嶄綔鎴愬姛");
-    }
-
-}
+//package org.dromara.demo.controller.queue;
+//
+//import cn.hutool.core.util.RandomUtil;
+//import org.dromara.common.core.domain.R;
+//import org.dromara.common.redis.utils.QueueUtils;
+//import lombok.RequiredArgsConstructor;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.web.bind.annotation.GetMapping;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RestController;
+//
+///**
+// * 浼樺厛闃熷垪 婕旂ず妗堜緥
+// * <p>
+// * 杞婚噺绾ч槦鍒� 閲嶉噺绾ф暟鎹噺 璇蜂娇鐢� MQ
+// * <p>
+// * 闆嗙兢娴嬭瘯閫氳繃 鍚屼竴涓秷鎭彧浼氳娑堣垂涓�娆� 鍋氬ソ浜嬪姟琛ュ伩
+// * 闆嗙兢娴嬭瘯娴佺▼ 鍦ㄥ叾涓竴鍙板彂閫佹暟鎹� 涓ょ鍒嗗埆璋冪敤鑾峰彇鎺ュ彛 涓�娆¤幏鍙栦竴鏉�
+// *
+// * @author Lion Li
+// * @version 3.6.0
+// */
+//@Slf4j
+//@RequiredArgsConstructor
+//@RestController
+//@RequestMapping("/demo/queue/priority")
+//public class PriorityQueueController {
+//
+//    /**
+//     * 娣诲姞闃熷垪鏁版嵁
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     */
+//    @GetMapping("/add")
+//    public R<Void> add(String queueName) {
+//        // 鐢ㄥ畬浜嗕竴瀹氳閿�姣� 鍚﹀垯浼氫竴鐩村瓨鍦�
+//        boolean b = QueueUtils.destroyPriorityQueue(queueName);
+//        log.info("閫氶亾: {} , 鍒犻櫎: {}", queueName, b);
+//
+//        for (int i = 0; i < 10; i++) {
+//            int randomNum = RandomUtil.randomInt(10);
+//            PriorityDemo data = new PriorityDemo();
+//            data.setName("data-" + i);
+//            data.setOrderNum(randomNum);
+//            if (QueueUtils.addPriorityQueueObject(queueName, data)) {
+//                log.info("閫氶亾: {} , 鍙戦�佹暟鎹�: {}", queueName, data);
+//            } else {
+//                log.info("閫氶亾: {} , 鍙戦�佹暟鎹�: {}, 鍙戦�佸け璐�", queueName, data);
+//            }
+//        }
+//        return R.ok("鎿嶄綔鎴愬姛");
+//    }
+//
+//    /**
+//     * 鍒犻櫎闃熷垪鏁版嵁
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     * @param name      瀵硅薄鍚�
+//     * @param orderNum  鎺掑簭鍙�
+//     */
+//    @GetMapping("/remove")
+//    public R<Void> remove(String queueName, String name, Integer orderNum) {
+//        PriorityDemo data = new PriorityDemo();
+//        data.setName(name);
+//        data.setOrderNum(orderNum);
+//        if (QueueUtils.removePriorityQueueObject(queueName, data)) {
+//            log.info("閫氶亾: {} , 鍒犻櫎鏁版嵁: {}", queueName, data);
+//        } else {
+//            return R.fail("鎿嶄綔澶辫触");
+//        }
+//        return R.ok("鎿嶄綔鎴愬姛");
+//    }
+//
+//    /**
+//     * 鑾峰彇闃熷垪鏁版嵁
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     */
+//    @GetMapping("/get")
+//    public R<Void> get(String queueName) {
+//        PriorityDemo data;
+//        do {
+//            data = QueueUtils.getPriorityQueueObject(queueName);
+//            log.info("閫氶亾: {} , 鑾峰彇鏁版嵁: {}", queueName, data);
+//        } while (data != null);
+//        return R.ok("鎿嶄綔鎴愬姛");
+//    }
+//
+//}
diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml
index d1f1a2d..fdafe1d 100644
--- a/ruoyi-modules/ruoyi-system/pom.xml
+++ b/ruoyi-modules/ruoyi-system/pom.xml
@@ -96,6 +96,21 @@
             <version>3.1</version>
         </dependency>
 
+<!--        ftp鏈嶅姟-->
+        <dependency>
+            <groupId>commons-net</groupId>
+            <artifactId>commons-net</artifactId>
+            <version>3.6</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-test</artifactId>
+        </dependency>
+        <!--        <dependency>-->
+<!--            <groupId>org.springframework</groupId>-->
+<!--            <artifactId>spring-test</artifactId>-->
+<!--        </dependency>-->
+
     </dependencies>
 
 </project>
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SynchronizationController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SynchronizationController.java
index b1138ac..99cdb16 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SynchronizationController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SynchronizationController.java
@@ -2,6 +2,7 @@
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.annotation.SaIgnore;
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
@@ -9,23 +10,38 @@
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.core.domain.R;
+import org.dromara.common.core.utils.DateUtils;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.log.annotation.Log;
 import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.oss.core.OssClient;
 import org.dromara.common.oss.entity.SynchronousRequest;
+import org.dromara.common.oss.entity.SynchronousRequest2;
+import org.dromara.common.oss.entity.UploadResult;
 import org.dromara.common.oss.entity.VideoRequest;
-import org.dromara.common.redis.utils.QueueUtils;
+import org.dromara.common.oss.factory.OssFactory;
+import org.dromara.system.domain.SysOss;
 import org.dromara.system.domain.properties.Boundary;
+import org.dromara.system.domain.properties.FtpConfig;
 import org.dromara.system.domain.vo.SysOssUploadVo;
 import org.dromara.system.domain.vo.SysOssVo;
+import org.dromara.system.mapper.SysOssMapper;
 import org.dromara.system.service.ISysOssService;
+import org.dromara.system.uitil.FtpApche;
 import org.dromara.system.uitil.HttpUtils;
+import org.dromara.system.uitil.PasswordUtil;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.http.MediaType;
+
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.HashMap;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
@@ -38,25 +54,23 @@
 @RequestMapping("/resource/synchronization")
 public class SynchronizationController {
 
-
+    private final FtpConfig ftpConfig;
     private final ISysOssService ossService;
+    private final SysOssMapper baseMapper;
+
 
     /**
      * 涓婁紶鍚屾  瑙嗛涓撶綉
+     *
      * @param
      * @return
      */
     @PostMapping(value = "/upload")
-    public R synchronization(SynchronousRequest request) throws ParseException {
+    public R synchronization(SynchronousRequest request) throws IOException, ParseException {
         if (ObjectUtil.isNull(request.getFile())) {
             return R.fail("涓婁紶鏂囦欢涓嶈兘涓虹┖");
         }
-        log.info("ossId:{},path:{}",request.getOssId(),request.getPath());
-        SysOssVo oss = ossService.upload2(request);
-
-        //娣诲姞闃熷垪鏁版嵁
-        QueueUtils.addDelayedQueueObject("OSS", oss.getOssId().toString(), 1, TimeUnit.HOURS);
-        log.info("閫氶亾: {} , 鍙戦�佹暟鎹�: {}", "OSS", oss.getOssId());
+        ossService.upload2(request);
         return R.ok();
     }
 
@@ -66,9 +80,8 @@
             return R.fail("涓婁紶鏂囦欢涓嶈兘涓虹┖");
         }
         SysOssVo oss = ossService.upload3(request1);
-
         //娣诲姞闃熷垪鏁版嵁
-        QueueUtils.addDelayedQueueObject("OSS", oss.getOssId().toString(), 1, TimeUnit.DAYS);
+//        QueueUtils.addDelayedQueueObject("OSS", oss.getOssId().toString(), 1, TimeUnit.DAYS);
         log.info("閫氶亾: {} , 鍙戦�佹暟鎹�: {}", "OSS", oss.getOssId());
         SysOssUploadVo uploadVo = new SysOssUploadVo();
         uploadVo.setUrl(oss.getUrl());
@@ -85,8 +98,74 @@
      */
     @PostMapping(value = "/delete")
     public R<Void> remove(String ossId) throws Exception {
-        return ossService.deleteWithValidByIds(List.of(convert(ossId)), true,"000000") ? R.ok() : R.fail("鎻愬彇鐮侀敊璇紒");
+        return ossService.deleteWithValidByIds(List.of(convert(ossId)), true, "000000") ? R.ok() : R.fail("鎻愬彇鐮侀敊璇紒");
     }
+
+    /**
+     * 涓婁紶鍚屾  鍏畨鍐呯綉
+     *
+     * @param request
+     */
+    @PostMapping(value = "/uploadByFileName")
+    public R<Void> uploadByFileName(VideoRequest request) throws Exception {
+        if (ObjectUtil.isNull(request.getFile())) {
+            return R.fail("涓婁紶鏂囦欢涓嶈兘涓虹┖");
+        }
+        SysOssVo oss = ossService.upload3(request);
+
+        InputStream input = request.getFile().getInputStream();
+        String fileName = request.getFileName();
+        OssClient storage = OssFactory.instance();
+        UploadResult uploadResult = storage.upload(input,getPath(fileName),
+            fileName.substring(14,fileName.length()));
+        buildResultEntity1(fileName, fileName.substring(14,fileName.length()), "minio", uploadResult);
+        return R.ok();
+    }
+
+    public String getPath(String suffix) {
+        return DateUtils.datePath() + "/" + suffix;
+    }
+
+    @NotNull
+    private void buildResultEntity1(String originalfileName, String suffix, String configKey, UploadResult uploadResult) {
+        SysOss oss = new SysOss();
+        oss.setUrl(uploadResult.getUrl());
+        oss.setFileSuffix(suffix);
+        oss.setFileName(uploadResult.getFilename());
+        oss.setOriginalName(originalfileName);
+        oss.setService(configKey);
+        oss.setPassword(PasswordUtil.randomPassword(6));
+        baseMapper.insert(oss);
+    }
+
+        @NotNull
+    private void buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult
+    ,MultipartFile file) {
+        SysOss oss = new SysOss();
+        oss.setUrl(uploadResult.getUrl());
+        oss.setFileSuffix(suffix);
+        oss.setFileName(uploadResult.getFilename());
+        oss.setOriginalName(originalfileName);
+        oss.setService(configKey);
+        oss.setPassword(PasswordUtil.randomPassword(6));
+        baseMapper.insert(oss);
+
+        //鎷兼帴鍚屾淇℃伅
+
+
+//        SynchronousRequest request = new SynchronousRequest();
+//        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//        request.setFile(file);
+//        request.setFileName(oss.getOriginalName()+"1");
+//        request.setPath(uploadResult.getFilename());
+//        request.setCreateTime(format.format(oss.getCreateTime()));
+//        request.setPassword(oss.getPassword());
+//        request.setCreateBy("1731588854831022081");
+//        request.setOssId(String.valueOf(oss.getOssId()));
+//        request.setOssId("123890");
+//        post(request);
+    }
+
 
     public static Long[] convert(String input) {
         String[] stringArray = input.split(",");
@@ -99,4 +178,16 @@
         return longArray;
     }
 
+    @NotNull
+    private void buildResultEntity2(String originalfileName, String suffix, String configKey, UploadResult uploadResult
+        , String password) throws IOException {
+        SysOss oss = new SysOss();
+        oss.setUrl(uploadResult.getUrl());
+        oss.setFileSuffix(suffix);
+        oss.setFileName(uploadResult.getFilename());
+        oss.setOriginalName(originalfileName);
+        oss.setService(configKey);
+        oss.setPassword(password);
+        baseMapper.insert(oss);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java
index 276429f..ceed063 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java
@@ -5,16 +5,19 @@
 import cn.dev33.satoken.annotation.SaIgnore;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.domain.R;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.core.utils.file.FileUtils;
 import org.dromara.common.core.validate.QueryGroup;
 import org.dromara.common.oss.entity.SynchronousRequest;
 import org.dromara.common.oss.entity.VideoRequest;
 import org.dromara.common.redis.utils.CacheUtils;
-import org.dromara.common.redis.utils.QueueUtils;
 import org.dromara.common.web.core.BaseController;
 import org.dromara.common.log.annotation.Log;
 import org.dromara.common.log.enums.BusinessType;
@@ -23,6 +26,7 @@
 import org.dromara.system.domain.SysOss;
 import org.dromara.system.domain.bo.SysOssBo;
 import org.dromara.system.domain.properties.Boundary;
+import org.dromara.system.domain.properties.FtpConfig;
 import org.dromara.system.domain.vo.SysOssUploadVo;
 import org.dromara.system.domain.vo.SysOssVo;
 import org.dromara.system.mapper.SysOssMapper;
@@ -30,7 +34,10 @@
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.NotEmpty;
 import lombok.RequiredArgsConstructor;
+import org.dromara.system.uitil.FTPUtil;
+import org.dromara.system.uitil.FtpApche;
 import org.dromara.system.uitil.HttpUtils;
+import org.dromara.system.uitil.PasswordUtil;
 import org.springframework.http.MediaType;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -55,9 +62,11 @@
 @RequestMapping("/resource/oss")
 public class SysOssController extends BaseController {
 
+    private final FtpConfig ftpConfig;
     private final Boundary boundary;
     private final ISysOssService ossService;
     private final SysOssMapper ossMapper;
+
     /**
      * 鏌ヨOSS瀵硅薄瀛樺偍鍒楄〃
      */
@@ -89,23 +98,18 @@
     @Log(title = "OSS瀵硅薄瀛樺偍", businessType = BusinessType.INSERT)
     @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     public R<SysOssUploadVo> upload(@RequestPart("file") MultipartFile file) throws IOException {
+
         if (ObjectUtil.isNull(file)) {
             return R.fail("涓婁紶鏂囦欢涓嶈兘涓虹┖");
         }
         SysOssVo oss = ossService.upload(file);
-        SynchronousRequest request = new SynchronousRequest();
-        request.setFile(file);
 
-
-
-        //娣诲姞闃熷垪鏁版嵁
-        QueueUtils.addDelayedQueueObject("OSS", oss.getOssId().toString(), 1, TimeUnit.DAYS);
-        log.info("閫氶亾: {} , 鍙戦�佹暟鎹�: {}", "OSS", oss.getOssId());
         SysOssUploadVo uploadVo = new SysOssUploadVo();
         uploadVo.setUrl(oss.getUrl());
         uploadVo.setFileName(oss.getOriginalName());
         uploadVo.setOssId(oss.getOssId().toString());
         uploadVo.setPassword(oss.getPassword());
+
         return R.ok(uploadVo);
     }
 
@@ -118,20 +122,17 @@
 //    @Log(title = "OSS瀵硅薄瀛樺偍", businessType = BusinessType.INSERT)
 //    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
 //    public R<String> upload(@RequestPart("file") MultipartFile file) throws IOException {
-//        if (ObjectUtil.isNull(file)) {
-//            return R.fail("涓婁紶鏂囦欢涓嶈兘涓虹┖");
-//        }
-//        VideoRequest request = new VideoRequest();
-//        request.setFile(file);
-//        request.setFileName(file.getOriginalFilename());
-//        String post = post(request);
-//        String password = post.substring(post.indexOf("password\":\"") + 9, post.indexOf("\"}"));
+//        String originalfileName = file.getOriginalFilename();
+//        long l = System.currentTimeMillis();
+//        String password = PasswordUtil.randomPassword(6);
+//        String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
+//        FtpApche.uploadFile(ftpConfig, file, password + String.valueOf(l) + suffix);
 //        return R.ok(password);
 //    }
 
     private String post(VideoRequest request) throws IOException {
         HashMap<String, String> headers = new HashMap<>(3);
-        String requestUrl = boundary.getChief() +  "/resource/synchronization/uploadTwo";
+        String requestUrl = boundary.getChief() + "/resource/synchronization/uploadTwo";
         ObjectMapper objectMapper = new ObjectMapper();
         objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
         headers.put("content-type", "application/json");
@@ -150,11 +151,23 @@
     @SaCheckPermission("system:oss:download")
     @GetMapping("/download/{ossId}/{password}")
     public R<String> download(@PathVariable Long ossId, @PathVariable String password, HttpServletResponse response) throws IOException {
-        SysOss oss = ossMapper.selectById(ossId);
-        if(!oss.getPassword().equals(password)){
-            return R.fail("鎻愬彇鐮侀敊璇紒");
+        if (String.valueOf(ossId).equals("12345678")) {
+            SysOssVo sysOssVo = ossMapper.selectVoOne(new LambdaQueryWrapper<SysOss>()
+                .eq(SysOss::getPassword, password));
+            if (sysOssVo == null) {
+                return R.fail("鎻愬彇鐮侀敊璇紒");
+            }
+            ossService.download(sysOssVo.getOssId(), response);
+        } else {
+            SysOss oss = ossMapper.selectById(ossId);
+
+            if (!oss.getPassword().equals(password)) {
+                return R.fail("鎻愬彇鐮侀敊璇紒");
+            }
+            ossService.download(ossId, response);
         }
-        ossService.download(ossId, response);
+
+
         return R.ok();
     }
 
@@ -169,7 +182,7 @@
     public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
                           @PathVariable Long[] ossIds,
                           @PathVariable String password) throws Exception {
-        return ossService.deleteWithValidByIds(List.of(ossIds), true,password) ? R.ok() : R.fail("鎻愬彇鐮侀敊璇紒");
+        return ossService.deleteWithValidByIds(List.of(ossIds), true, password) ? R.ok() : R.fail("鎻愬彇鐮侀敊璇紒");
     }
 
     /**
@@ -183,22 +196,22 @@
         return ossService.viewPasswordById(ossId);
     }
 
-    /**
-     * 璁㈤槄闃熷垪(鐩戝惉)
-     *
-     * @param queueName 闃熷垪鍚�
-     */
-    @GetMapping("/subscribe")
-    public R<Void> subscribe(String queueName) {
-        log.info("閫氶亾: {} 鐩戝惉涓�......", queueName);
-        // 椤圭洰鍒濆鍖栬缃竴娆″嵆鍙�
-        QueueUtils.subscribeBlockingQueue(queueName, (String ossId) -> {
-            // 瑙傚療鎺ユ敹鏃堕棿
-            log.info("閫氶亾: {}, 鏀跺埌鏁版嵁: {}", queueName, ossId);
-//            ossMapper.deleteById(Long.valueOf(ossId));
-        });
-        return R.ok("鎿嶄綔鎴愬姛");
-    }
+//    /**
+//     * 璁㈤槄闃熷垪(鐩戝惉)
+//     *
+//     * @param queueName 闃熷垪鍚�
+//     */
+//    @GetMapping("/subscribe")
+//    public R<Void> subscribe(String queueName) {
+//        log.info("閫氶亾: {} 鐩戝惉涓�......", queueName);
+//        // 椤圭洰鍒濆鍖栬缃竴娆″嵆鍙�
+//        QueueUtils.subscribeBlockingQueue(queueName, (String ossId) -> {
+//            // 瑙傚療鎺ユ敹鏃堕棿
+//            log.info("閫氶亾: {}, 鏀跺埌鏁版嵁: {}", queueName, ossId);
+////            ossMapper.deleteById(Long.valueOf(ossId));
+//        });
+//        return R.ok("鎿嶄綔鎴愬姛");
+//    }
 
 
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/properties/FtpConfig.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/properties/FtpConfig.java
new file mode 100644
index 0000000..5b45451
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/properties/FtpConfig.java
@@ -0,0 +1,24 @@
+package org.dromara.system.domain.properties;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * ftp瀹炰綋绫�
+ */
+@Data
+@Component
+@ConfigurationProperties(prefix = "ftp")
+public class FtpConfig {
+
+    private String url;
+
+    private String port;
+
+    private String username;
+
+    private String passwd;
+
+    private String path;
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java
index d5ee534..0aaa2b2 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java
@@ -1,14 +1,15 @@
 package org.dromara.system.runner;
 
+import cn.hutool.extra.ftp.Ftp;
 import com.amazonaws.services.s3.AmazonS3;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.oss.core.OssClient;
 import org.dromara.common.oss.factory.OssFactory;
 import org.dromara.common.oss.properties.OssProperties;
-import org.dromara.common.redis.utils.QueueUtils;
 import org.dromara.system.convert.SysOssConfigClassConvert;
 import org.dromara.system.domain.SysOssConfig;
 import org.dromara.system.domain.properties.Boundary;
+import org.dromara.system.domain.properties.FtpConfig;
 import org.dromara.system.domain.vo.SysOssVo;
 import org.dromara.system.mapper.SysOssConfigMapper;
 import org.dromara.system.mapper.SysOssMapper;
@@ -16,6 +17,7 @@
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.system.service.ISysOssService;
+import org.dromara.system.uitil.FtpApche;
 import org.dromara.system.uitil.HttpUtils;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
@@ -35,35 +37,44 @@
 @Component
 public class SystemApplicationRunner implements ApplicationRunner {
 
-    private final Boundary boundary;
+//    private final FtpConfig ftpConfig;
+//    private final Boundary boundary;
     private final ISysOssConfigService ossConfigService;
-    private final SysOssMapper ossMapper;
-    private final SysOssConfigMapper sysOssConfigMapper;
+//    private final SysOssMapper ossMapper;
+//    private final SysOssConfigMapper sysOssConfigMapper;
 //    private final AmazonS3 client;
 
     @Override
     public void run(ApplicationArguments args) throws Exception {
+//        FtpApche.connect(ftpConfig);
+//        log.info("杩炴帴ftp鏈嶅姟鎴愬姛");
         ossConfigService.init();
         //鍒濆鍖杘ssclient
-        List<SysOssConfig> collect = sysOssConfigMapper.selectList().stream().filter(e -> e.getStatus().equals("0"))
-            .collect(Collectors.toList());
-        OssProperties properties = SysOssConfigClassConvert.INSTANCE.sysOssConfigToossProperties(collect.get(0));
-        OssClient client = new OssClient("minio",properties);
-        log.info("鍒濆鍖朞SS閰嶇疆鎴愬姛");
-        log.info("閫氶亾: {} 鐩戝惉涓�......", "OSS");
+//        List<SysOssConfig> collect = sysOssConfigMapper.selectList().stream().filter(e -> e.getStatus().equals("0"))
+//            .collect(Collectors.toList());
+//        OssProperties properties = SysOssConfigClassConvert.INSTANCE.sysOssConfigToossProperties(collect.get(0));
+//        OssClient client = new OssClient("minio",properties);
+//        log.info("鍒濆鍖朞SS閰嶇疆鎴愬姛");
+//        log.info("閫氶亾: {} 鐩戝惉涓�......", "OSS");
         // 椤圭洰鍒濆鍖栬缃竴娆″嵆鍙�
-        QueueUtils.subscribeBlockingQueue("OSS", (String ossId) -> {
-            // 瑙傚療鎺ユ敹鏃堕棿
-            log.info("閫氶亾: {}, 鏀跺埌鏁版嵁: {}", "OSS", ossId);
-            SysOssVo vo = ossMapper.selectVoById(ossId);
-            client.delete( vo.getUrl());
-            ossMapper.deleteById(Long.valueOf(ossId));
-            try {
-                HttpUtils.sendDeleteRequest(boundary.getVideo() + "/resource/synchronization/delete",ossId);
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
-        });
+//        QueueUtils.subscribeBlockingQueue("OSS", (String name) -> {
+//            // 瑙傚療鎺ユ敹鏃堕棿
+//            log.info("閫氶亾: {}, 鏀跺埌鏁版嵁: {}", "OSS", name);
+////            try {
+////                HttpUtils.sendDeleteRequest2(boundary.getLocalhost() + "/resource/synchronization/uploadByFileName",name);
+////            } catch (IOException e) {
+////                throw new RuntimeException(e);
+////            }
+//
+////            SysOssVo vo = ossMapper.selectVoById(ossId);
+////            client.delete( vo.getUrl());
+////            ossMapper.deleteById(Long.valueOf(ossId));
+////            try {
+////                HttpUtils.sendDeleteRequest(boundary.getVideo() + "/resource/synchronization/delete",ossId);
+////            } catch (IOException e) {
+////                throw new RuntimeException(e);
+////            }
+//        });
     }
 
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java
index 6f338a2..ad0b1d8 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java
@@ -35,6 +35,8 @@
 
     SysOssVo upload2(SynchronousRequest request) throws ParseException;
 
+    SysOssVo upload3(SynchronousRequest request) throws ParseException;
+
 //    SysOssVo upload(File file);
 
     void download(Long ossId, HttpServletResponse response) throws IOException;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
index 22d6d70..345b542 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
@@ -10,6 +10,8 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 import com.github.therapi.runtimejavadoc.repack.com.eclipsesource.json.Json;
+import org.apache.commons.io.IOUtils;
+import org.apache.xmlbeans.impl.common.IOUtil;
 import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.domain.model.LoginUser;
@@ -45,9 +47,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
 import java.net.URLEncoder;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -177,13 +177,39 @@
     }
 
     /**
-     * 鍚屾
+     * 鍚屾 瀹氭椂鎷夊彇
      * @param
      * @param
      * @return
      */
     @Override
     public SysOssVo upload2(SynchronousRequest request) throws ParseException {
+        String originalfileName = request.getFileName();
+        String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
+        OssClient storage = OssFactory.instance();
+//        String type = request.getFileName().substring(14,request.getFileName().length());
+        String type = request.getFile().getContentType();
+        UploadResult uploadResult;
+        try {
+            uploadResult = storage.uploadSuffix2(request.getFile().getBytes(), request.getPath(), type);
+        } catch (IOException e) {
+            throw new ServiceException(e.getMessage());
+        }
+        // 淇濆瓨鏂囦欢淇℃伅
+        System.out.println("canshu:" + "," + originalfileName +"," + suffix +"," + storage.getConfigKey() +"," + uploadResult + "," +request.getOssId()
+         +"," + request.getPassword() +"," + request.getCreateBy() +"," + request.getFileName() +"," +  request.getCreateTime());
+        return buildResultEntity2(originalfileName, suffix, storage.getConfigKey(), uploadResult,request.getOssId(),
+            request.getPassword(), "1731588854831022081", request.getFileName(), request.getCreateTime());
+    }
+
+    /**
+     * 鍚屾 瀹氭椂鎷夊彇
+     * @param
+     * @param
+     * @return
+     */
+    @Override
+    public SysOssVo upload3(SynchronousRequest request) throws ParseException {
         String originalfileName = request.getFileName();
         String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
         OssClient storage = OssFactory.instance();
@@ -195,7 +221,7 @@
         }
         // 淇濆瓨鏂囦欢淇℃伅
         System.out.println("canshu:" + "," + originalfileName +"," + suffix +"," + storage.getConfigKey() +"," + uploadResult + "," +request.getOssId()
-         +"," + request.getPassword() +"," + request.getCreateBy() +"," + request.getFileName() +"," +  request.getCreateTime());
+            +"," + request.getPassword() +"," + request.getCreateBy() +"," + request.getFileName() +"," +  request.getCreateTime());
         return buildResultEntity2(originalfileName, suffix, storage.getConfigKey(), uploadResult,request.getOssId(),
             request.getPassword(), "1731588854831022081", request.getFileName(), request.getCreateTime());
     }
@@ -230,8 +256,8 @@
         request.setPassword(oss.getPassword());
         request.setCreateBy("1731588854831022081");
         request.setOssId(String.valueOf(oss.getOssId()));
-//        request.setOssId();
-//        post(request);
+//        request.setOssId("123890");
+        post(request);
 
         SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class);
         return this.matchingUrl(sysOssVo);
@@ -281,13 +307,15 @@
             storage.delete(sysOss.getUrl());
             if(sysOss.getPassword().equals(password) || password.equals("000000")){
                 baseMapper.deleteById(sysOss.getOssId());
-                HttpUtils.sendDeleteRequest(boundary.getVideo() + "/resource/synchronization/delete",String.valueOf(sysOss.getOssId()));
+//                HttpUtils.sendDeleteRequest(boundary.getVideo() + "/resource/synchronization/delete",String.valueOf(sysOss.getOssId()));
                 return true;
             }
             return false;
         }
         return true;
     }
+
+
 
     @Override
     public R viewPasswordById(Long ossId) {
@@ -322,14 +350,6 @@
         String requestUrl = boundary.getVideo() +  "/resource/synchronization/upload";
         ObjectMapper objectMapper = new ObjectMapper();
         objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
-        String jsonString = "";
-        try {
-            // 灏咼ava瀵硅薄杞崲涓篔SON瀛楃涓�
-            jsonString = objectMapper.writeValueAsString(request);
-//            System.out.println(jsonString);
-        } catch (Exception e) {
-//            e.printStackTrace();
-        }
         headers.put("content-type", "application/json");
         // 鍙戦�乸ost璇锋眰
         String resultData = HttpUtils.sendPostRequest(requestUrl, request);
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/sync/VideoPulSync.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/sync/VideoPulSync.java
new file mode 100644
index 0000000..192eda8
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/sync/VideoPulSync.java
@@ -0,0 +1,117 @@
+package org.dromara.system.sync;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import org.dromara.common.core.utils.DateUtils;
+import org.dromara.common.oss.core.OssClient;
+import org.dromara.common.oss.entity.SynchronousRequest;
+import org.dromara.common.oss.entity.SynchronousRequest2;
+import org.dromara.common.oss.entity.UploadResult;
+import org.dromara.common.oss.entity.VideoRequest;
+import org.dromara.common.oss.factory.OssFactory;
+import org.dromara.system.domain.SysOss;
+import org.dromara.system.domain.properties.Boundary;
+import org.dromara.system.domain.properties.FtpConfig;
+import org.dromara.system.mapper.SysOssMapper;
+import org.dromara.system.uitil.FtpApche;
+import org.dromara.system.uitil.HttpUtils;
+import org.dromara.system.uitil.PasswordUtil;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.http.MediaType;
+import org.springframework.mock.web.MockMultipartFile;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+@Component
+public class VideoPulSync {
+
+    private final Boundary boundary;
+    private final FtpConfig ftpConfig;
+    private final SysOssMapper baseMapper;
+
+    public VideoPulSync(Boundary boundary, FtpConfig ftpConfig, SysOssMapper baseMapper) {
+        this.boundary = boundary;
+        this.ftpConfig = ftpConfig;
+        this.baseMapper = baseMapper;
+    }
+
+//    @Scheduled(cron = "0 0/1 * * * ?")
+    public void get() throws IOException {
+        System.out.println("鍚屾涓婁紶......");
+
+        List<String> list = FtpApche.downloadList(ftpConfig);
+        if(list.size() == 0){
+            return;
+        }
+        for (String str : list) {
+            //瀵嗙爜
+            String password = str.substring(0,6);
+            //鏂囦欢鍚嶇О
+            String fileName = str.substring(6,str.length());
+            InputStream input = FtpApche.downloadFileFromDailyDir(str);
+            byte[] fileBytesByName = FtpApche.getFileBytesByName(input);
+            OssClient storage = OssFactory.instance();
+            UploadResult uploadResult = storage.upload(input,getPath(fileName),fileName.substring(14,fileName.length()));
+            FtpApche.deleteFile(str);
+            MultipartFile file = new MockMultipartFile(fileName,fileName, fileName.substring(14,fileName.length()), input);
+            buildResultEntity(fileName, fileName.substring(14,fileName.length()), "minio", uploadResult, file,
+                password, fileBytesByName);
+
+        }
+
+    }
+
+    @NotNull
+    private void buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult
+        , MultipartFile file, String password, byte[] fileBytesByName) throws IOException {
+        SysOss oss = new SysOss();
+        oss.setUrl(uploadResult.getUrl());
+        oss.setFileSuffix(suffix);
+        oss.setFileName(uploadResult.getFilename());
+        oss.setOriginalName(originalfileName);
+        oss.setService(configKey);
+        oss.setPassword(password);
+        baseMapper.insert(oss);
+        //鎷兼帴鍚屾淇℃伅
+
+
+        SynchronousRequest request = new SynchronousRequest();
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        request.setFile(file);
+        request.setFileName(oss.getOriginalName());
+        request.setPath(uploadResult.getFilename());
+        request.setCreateTime(format.format(oss.getCreateTime()));
+        request.setPassword(oss.getPassword());
+        request.setCreateBy("1731588854831022081");
+        request.setOssId(String.valueOf(oss.getOssId()));
+//        request.setOssId("999999900");
+        post(request, fileBytesByName);
+    }
+
+    private String post(SynchronousRequest request, byte[] bytes) throws IOException {
+        HashMap<String, String> headers = new HashMap<>(3);
+        String requestUrl = boundary.getVideo() +  "/resource/synchronization/upload";
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
+        headers.put("content-type", "application/json");
+        // 鍙戦�乸ost璇锋眰
+        String resultData = HttpUtils.sendPostRequest2(requestUrl, request, bytes);
+        // 骞舵帴鏀惰繑鍥炵粨鏋�
+        System.out.println(resultData);
+        return resultData;
+    }
+
+    public String getPath(String suffix) {
+        return DateUtils.datePath() + "/" + suffix;
+    }
+
+
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/sync/deleteSync.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/sync/deleteSync.java
new file mode 100644
index 0000000..a7a9066
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/sync/deleteSync.java
@@ -0,0 +1,43 @@
+package org.dromara.system.sync;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.dromara.system.domain.SysOss;
+import org.dromara.system.domain.properties.Boundary;
+import org.dromara.system.domain.vo.SysOssVo;
+import org.dromara.system.mapper.SysOssMapper;
+import org.dromara.system.uitil.HttpUtils;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Component
+public class deleteSync {
+
+    private final SysOssMapper baseMapper;
+    private final Boundary boundary;
+
+    public deleteSync(SysOssMapper baseMapper, Boundary boundary) {
+        this.baseMapper = baseMapper;
+        this.boundary = boundary;
+    }
+
+
+//    @Scheduled(cron = "0 */10 * * * ?")
+    public void remove() throws IOException {
+        System.out.println("鍚屾鍒犻櫎......");
+        List<SysOssVo> list = baseMapper.selectVoList(new LambdaQueryWrapper<SysOss>()
+            .le(SysOss::getCreateTime, LocalDateTime.now().minusDays(1)));
+
+        if (list.size() == 0) {
+            return;
+        }
+        for (SysOssVo vo : list) {
+            baseMapper.deleteById(vo.getOssId());
+            HttpUtils.sendDeleteRequest(boundary.getVideo() + "/resource/synchronization/delete",
+                String.valueOf(vo.getOssId()));
+        }
+    }
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/FTPUtil.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/FTPUtil.java
new file mode 100644
index 0000000..fafadf3
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/FTPUtil.java
@@ -0,0 +1,547 @@
+package org.dromara.system.uitil;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.net.ftp.FTP;
+import org.apache.commons.net.ftp.FTPClient;
+import org.apache.commons.net.ftp.FTPFile;
+import org.apache.commons.net.ftp.FTPReply;
+import org.dromara.system.domain.properties.FtpConfig;
+
+import java.io.*;
+import java.net.UnknownHostException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * FTP宸ュ叿绫�
+ *
+ * @author: simon
+ * @date: 2019/7/3 14:37
+ */
+public class FTPUtil {
+    /**
+     * 瀛楃闆�
+     */
+    private static final String DEFAULT_CHARSET = "UTF-8";
+
+    /**
+     * 瓒呮椂鏃堕棿
+     */
+    private static final int DEFAULT_TIMEOUT = 60 * 1000;
+
+    /**
+     * 涓绘満鍚嶆垨鑰卛p鍦板潃
+     */
+    private final String host;
+
+    /**
+     * ftp鏈嶅姟鍣ㄧ鍙�
+     */
+    private final int port;
+
+    /**
+     * ftp鐢ㄦ埛鍚�
+     */
+    private final String username;
+
+    /**
+     * ftp瀵嗙爜
+     */
+    private final String password;
+
+    /**
+     * ftpClient瀵硅薄
+     */
+    private FTPClient ftpClient;
+
+    /**
+     * 鍒濆鍖栨椂ftp鏈嶅姟鍣ㄨ矾寰�
+     */
+    private volatile String ftpBasePath = "";
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param host     涓绘満鍚嶆垨鑰卛p鍦板潃
+     * @param username ftp 鐢ㄦ埛鍚�
+     * @param password ftp 瀵嗙爜
+     * @param ftpBasePath 鍒濆鍖栨椂ftp鏈嶅姟鍣ㄨ矾寰�
+     */
+    private FTPUtil(String host, String username, String password,String ftpBasePath) {
+        this(host, 21, username, password, DEFAULT_CHARSET,ftpBasePath);
+        setTimeout(DEFAULT_TIMEOUT, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT);
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+//     * @param host     涓绘満鍚嶆垨鑰卛p鍦板潃
+//     * @param username ftp 鐢ㄦ埛鍚�
+//     * @param password ftp 瀵嗙爜
+//     * @param ftpBasePath 鍒濆鍖栨椂ftp鏈嶅姟鍣ㄨ矾寰�
+     */
+    public FTPUtil(FtpConfig ftpConfig) {
+        this(ftpConfig.getUrl(), 21, ftpConfig.getUsername(), ftpConfig.getPasswd(), DEFAULT_CHARSET,ftpConfig.getPath());
+        setTimeout(DEFAULT_TIMEOUT, DEFAULT_TIMEOUT, DEFAULT_TIMEOUT);
+    }
+
+    /**
+     * 鏋勯�犲嚱鏁�
+     *
+     * @param host     涓绘満鍚嶆垨鑰卛p鍦板潃
+     * @param port     ftp 绔彛
+     * @param username 鐢ㄦ埛鍚�
+     * @param password 瀵嗙爜
+     * @param ftpBasePath 鍒濆鍖栨椂ftp鏈嶅姟鍣ㄨ矾寰�
+     */
+    private FTPUtil(String host, int port, String username, String password, String charset, String ftpBasePath) {
+        ftpClient = new FTPClient();
+        ftpClient.setControlEncoding(charset);
+        this.host = StringUtils.isEmpty(host) ? "localhost" : host;
+        this.port = (port <= 0) ? 21 : port;
+        this.username = StringUtils.isEmpty(username) ? "anonymous" : username;
+        this.password = password;
+        this.ftpBasePath = ftpBasePath;
+    }
+
+    /**
+     * 鍒涘缓榛樿鐨刦tp瀹㈡埛绔�
+     *
+     * @param host     涓绘満鍚嶆垨鑰卛p鍦板潃
+     * @param username ftp鐢ㄦ埛鍚�
+     * @param password ftp瀵嗙爜
+     * @param ftpBasePath 鍒濆鍖栨椂ftp鏈嶅姟鍣ㄨ矾寰�
+     * @return com.siniswift.efb.acars.utils.FTPUtil
+     */
+    public static FTPUtil createFtpCli(String host, String username, String password,String ftpBasePath) {
+        return new FTPUtil(host, username, password,ftpBasePath);
+    }
+
+    /**
+     * 鍒涘缓鑷畾涔夊睘鎬х殑ftp瀹㈡埛绔�
+     *
+     * @param host     涓绘満鍚嶆垨鑰卛p鍦板潃
+     * @param port     ftp绔彛
+     * @param username ftp鐢ㄦ埛鍚�
+     * @param password ftp瀵嗙爜
+     * @param charset  瀛楃闆�
+     * @param ftpBasePath 鍒濆鍖栨椂ftp鏈嶅姟鍣ㄨ矾寰�
+     * @return com.siniswift.efb.acars.utils.FTPUtil
+     */
+    public static FTPUtil createFtpCli(String host, int port, String username, String password, String charset,String ftpBasePath) {
+        return new FTPUtil(host, port, username, password, charset,ftpBasePath);
+    }
+
+    /**
+     * 璁剧疆瓒呮椂鏃堕棿
+     *
+     * @param defaultTimeout 瓒呮椂鏃堕棿
+     * @param connectTimeout 瓒呮椂鏃堕棿
+     * @param dataTimeout    瓒呮椂鏃堕棿
+     */
+    private void setTimeout(int defaultTimeout, int connectTimeout, int dataTimeout) {
+        ftpClient.setDefaultTimeout(defaultTimeout);
+        ftpClient.setConnectTimeout(connectTimeout);
+        ftpClient.setDataTimeout(dataTimeout);
+    }
+
+    /**
+     * 杩炴帴鍒癴tp
+     */
+    public void connect() throws IOException {
+        try {
+            ftpClient.connect(host, port);
+        } catch (UnknownHostException e) {
+            throw new IOException("Can't find FTP server :" + host);
+        }
+
+        int reply = ftpClient.getReplyCode();
+        if (!FTPReply.isPositiveCompletion(reply)) {
+            disconnect();
+            throw new IOException("Can't connect to server :" + host);
+        }
+
+        if (!ftpClient.login(username, password)) {
+            disconnect();
+            throw new IOException("Can't login to server :" + host);
+        }
+
+        // set data transfer mode.
+        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
+
+        // Use passive mode to pass firewalls.
+        ftpClient.enterLocalPassiveMode();
+
+        initFtpBasePath();
+    }
+
+    /**
+     * 杩炴帴ftp鏃朵繚瀛樺垰鐧婚檰ftp鏃剁殑璺緞
+     */
+    private void initFtpBasePath() throws IOException {
+        if (StringUtils.isEmpty(ftpBasePath)) {
+            synchronized (this) {
+                if (StringUtils.isEmpty(ftpBasePath)) {
+                    ftpBasePath = ftpClient.printWorkingDirectory();
+                }
+            }
+        }
+    }
+
+    /**
+     * ftp鏄惁澶勪簬杩炴帴鐘舵�侊紝鏄繛鎺ョ姸鎬佽繑鍥�<tt>true</tt>
+     *
+     * @return boolean  鏄繛鎺ョ姸鎬佽繑鍥�<tt>true</tt>
+     */
+    public boolean isConnected() {
+        return ftpClient.isConnected();
+    }
+
+    /**
+     * 涓婁紶鏂囦欢鍒板搴旂洰褰曚笅
+     *
+     * @param fileName    鏂囦欢鍚�
+     * @param inputStream 鏂囦欢杈撳叆娴�
+     * @param uploadDir   涓婁紶鏂囦欢鐨勭埗璺緞
+     * @return java.lang.String
+     */
+    public String uploadFile(String fileName, InputStream inputStream, String uploadDir) throws IOException {
+        changeWorkingDirectory(ftpBasePath);
+        SimpleDateFormat dateFormat = new SimpleDateFormat("/yyyy/MM/dd");
+        makeDirs(uploadDir);
+        storeFile(fileName, inputStream);
+        return uploadDir + "/" + fileName;
+    }
+
+    /**
+     * 鏍规嵁uploadFile杩斿洖鐨勮矾寰勶紝浠巉tp涓嬭浇鏂囦欢鍒版寚瀹氳緭鍑烘祦涓�
+     *
+     * @param ftpRealFilePath 鏂规硶uploadFile杩斿洖鐨勮矾寰�
+     * @param outputStream    杈撳嚭娴�
+     */
+    public void downloadFileFromDailyDir(String ftpRealFilePath, OutputStream outputStream) throws IOException {
+        changeWorkingDirectory(ftpBasePath);
+        ftpClient.retrieveFile(ftpRealFilePath, outputStream);
+    }
+
+    /**
+     * 鑾峰彇ftp涓婃寚瀹氭枃浠跺悕鍒拌緭鍑烘祦涓�
+     *
+     * @param ftpFileName 鏂囦欢鍦╢tp涓婄殑璺緞  濡傜粷瀵硅矾寰� /home/ftpuser/123.txt 鎴栬�呯浉瀵硅矾寰� 123.txt
+     * @param out         杈撳嚭娴�
+     */
+    public void retrieveFile(String ftpFileName, OutputStream out) throws IOException {
+        try {
+            FTPFile[] fileInfoArray = ftpClient.listFiles(ftpFileName);
+            if (fileInfoArray == null || fileInfoArray.length == 0) {
+                throw new FileNotFoundException("File '" + ftpFileName + "' was not found on FTP server.");
+            }
+
+            FTPFile fileInfo = fileInfoArray[0];
+            if (fileInfo.getSize() > Integer.MAX_VALUE) {
+                throw new IOException("File '" + ftpFileName + "' is too large.");
+            }
+
+            if (!ftpClient.retrieveFile(ftpFileName, out)) {
+                throw new IOException("Error loading file '" + ftpFileName + "' from FTP server. Check FTP permissions and path.");
+            }
+            out.flush();
+        } finally {
+            closeStream(out);
+        }
+    }
+
+
+    /**
+     * 灏嗚緭鍏ユ祦瀛樺偍鍒版寚瀹氱殑ftp璺緞涓�
+     *
+     * @param ftpFileName 鏂囦欢鍦╢tp涓婄殑璺緞 濡傜粷瀵硅矾寰� /home/ftpuser/123.txt 鎴栬�呯浉瀵硅矾寰� 123.txt
+     * @param in          杈撳叆娴�
+     */
+    private void storeFile(String ftpFileName, InputStream in) throws IOException {
+        try {
+            if (!ftpClient.storeFile(ftpFileName, in)) {
+                throw new IOException("Can't upload file '" + ftpFileName + "' to FTP server. Check FTP permissions and path.");
+            }
+        } finally {
+            closeStream(in);
+        }
+    }
+
+    /**
+     * 鏍规嵁鏂囦欢ftp璺緞鍚嶇О鍒犻櫎鏂囦欢
+     *
+     * @param ftpFileName 鏂囦欢ftp璺緞鍚嶇О
+     */
+    public void deleteFile(String ftpFileName) throws IOException {
+        if (!ftpClient.deleteFile(ftpFileName)) {
+            throw new IOException("Can't remove file '" + ftpFileName + "' from FTP server.");
+        }
+    }
+
+    /**
+     * 涓婁紶鏂囦欢鍒癴tp
+     *
+     * @param ftpFileName 涓婁紶鍒癴tp鏂囦欢璺緞鍚嶇О
+     * @param localFile   鏈湴鏂囦欢璺緞鍚嶇О
+     */
+    public void upload(String ftpFileName, File localFile) throws IOException {
+        if (!localFile.exists()) {
+            throw new IOException("Can't upload '" + localFile.getAbsolutePath() + "'. This file doesn't exist.");
+        }
+
+        InputStream in = null;
+        try {
+            in = new BufferedInputStream(new FileInputStream(localFile));
+            if (!ftpClient.storeFile(ftpFileName, in)) {
+                throw new IOException("Can't upload file '" + ftpFileName + "' to FTP server. Check FTP permissions and path.");
+            }
+        } finally {
+            closeStream(in);
+        }
+    }
+
+    /**
+     * 涓婁紶鏂囦欢澶瑰埌ftp涓�
+     *
+     * @param remotePath ftp涓婃枃浠跺す璺緞鍚嶇О
+     * @param localPath  鏈湴涓婁紶鐨勬枃浠跺す璺緞鍚嶇О
+     */
+    public void uploadDir(String remotePath, String localPath) throws IOException {
+        localPath = localPath.replace("\\\\", "/");
+        File file = new File(localPath);
+        if (file.exists()) {
+            if (!ftpClient.changeWorkingDirectory(remotePath)) {
+                ftpClient.makeDirectory(remotePath);
+                ftpClient.changeWorkingDirectory(remotePath);
+            }
+            File[] files = file.listFiles();
+            if (null != files) {
+                for (File f : files) {
+                    if (f.isDirectory() && !f.getName().equals(".") && !f.getName().equals("..")) {
+                        uploadDir(remotePath + "/" + f.getName(), f.getPath());
+                    } else if (f.isFile()) {
+                        upload(remotePath + "/" + f.getName(), f);
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * 涓嬭浇ftp鏂囦欢鍒版湰鍦颁笂
+     *
+     * @param ftpFileName ftp鏂囦欢璺緞鍚嶇О
+     * @param localFile   鏈湴鏂囦欢璺緞鍚嶇О
+     */
+    public void download(String ftpFileName, File localFile) throws IOException {
+        OutputStream out = null;
+        try {
+            FTPFile[] fileInfoArray = ftpClient.listFiles(ftpFileName);
+            if (fileInfoArray == null || fileInfoArray.length == 0) {
+                throw new FileNotFoundException("File " + ftpFileName + " was not found on FTP server.");
+            }
+
+            FTPFile fileInfo = fileInfoArray[0];
+            if (fileInfo.getSize() > Integer.MAX_VALUE) {
+                throw new IOException("File " + ftpFileName + " is too large.");
+            }
+
+            out = new BufferedOutputStream(new FileOutputStream(localFile));
+            if (!ftpClient.retrieveFile(ftpFileName, out)) {
+                throw new IOException("Error loading file " + ftpFileName + " from FTP server. Check FTP permissions and path.");
+            }
+            out.flush();
+        } finally {
+            closeStream(out);
+        }
+    }
+
+
+    /**
+     * 鏀瑰彉宸ヤ綔鐩綍
+     *
+     * @param dir ftp鏈嶅姟鍣ㄤ笂鐩綍
+     * @return boolean 鏀瑰彉鎴愬姛杩斿洖true
+     */
+    public boolean changeWorkingDirectory(String dir) {
+        if (!ftpClient.isConnected()) {
+            return false;
+        }
+        try {
+            return ftpClient.changeWorkingDirectory(dir);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+    /**
+     * 涓嬭浇ftp鏈嶅姟鍣ㄤ笅鏂囦欢澶瑰埌鏈湴
+     *
+     * @param remotePath ftp涓婃枃浠跺す璺緞鍚嶇О
+     * @param localPath  鏈湴涓婁紶鐨勬枃浠跺す璺緞鍚嶇О
+     */
+    public void downloadDir(String remotePath, String localPath) throws IOException {
+        localPath = localPath.replace("\\\\", "/");
+        File file = new File(localPath);
+        if (!file.exists()) {
+            file.mkdirs();
+        }
+        FTPFile[] ftpFiles = ftpClient.listFiles(remotePath);
+        for (int i = 0; ftpFiles != null && i < ftpFiles.length; i++) {
+            FTPFile ftpFile = ftpFiles[i];
+            if (ftpFile.isDirectory() && !ftpFile.getName().equals(".") && !ftpFile.getName().equals("..")) {
+                downloadDir(remotePath + "/" + ftpFile.getName(), localPath + "/" + ftpFile.getName());
+            } else {
+                download(remotePath + "/" + ftpFile.getName(), new File(localPath + "/" + ftpFile.getName()));
+            }
+        }
+    }
+
+
+    /**
+     * 鍒楀嚭ftp涓婃枃浠剁洰褰曚笅鐨勬枃浠�
+     *
+     * @param filePath ftp涓婃枃浠剁洰褰�
+     * @return java.util.List<java.lang.String>
+     */
+    public List<String> listFileNames(String filePath) throws IOException {
+        FTPFile[] ftpFiles = ftpClient.listFiles(filePath);
+        List<String> fileList = new ArrayList<>();
+        if (ftpFiles != null) {
+            for (int i = 0; i < ftpFiles.length; i++) {
+                FTPFile ftpFile = ftpFiles[i];
+                if (ftpFile.isFile()) {
+                    fileList.add(ftpFile.getName());
+                }
+            }
+        }
+
+        return fileList;
+    }
+
+    /**
+     * 鍙戦�乫tp鍛戒护鍒癴tp鏈嶅姟鍣ㄤ腑
+     *
+     * @param args ftp鍛戒护
+     */
+    public void sendSiteCommand(String args) throws IOException {
+        if (!ftpClient.isConnected()) {
+            ftpClient.sendSiteCommand(args);
+        }
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鎵�澶勭殑宸ヤ綔鐩綍
+     *
+     * @return java.lang.String 褰撳墠鎵�澶勭殑宸ヤ綔鐩綍
+     */
+    public String printWorkingDirectory() {
+        if (!ftpClient.isConnected()) {
+            return "";
+        }
+        try {
+            return ftpClient.printWorkingDirectory();
+        } catch (IOException e) {
+            // do nothing
+        }
+
+        return "";
+    }
+
+    /**
+     * 鍒囨崲鍒板綋鍓嶅伐浣滅洰褰曠殑鐖剁洰褰曚笅
+     *
+     * @return boolean 鍒囨崲鎴愬姛杩斿洖true
+     */
+    public boolean changeToParentDirectory() {
+
+        if (!ftpClient.isConnected()) {
+            return false;
+        }
+
+        try {
+            return ftpClient.changeToParentDirectory();
+        } catch (IOException e) {
+            // do nothing
+        }
+
+        return false;
+    }
+
+    /**
+     * 杩斿洖褰撳墠宸ヤ綔鐩綍鐨勪笂涓�绾х洰褰�
+     *
+     * @return java.lang.String 褰撳墠宸ヤ綔鐩綍鐨勭埗鐩綍
+     */
+    public String printParentDirectory() {
+        if (!ftpClient.isConnected()) {
+            return "";
+        }
+
+        String w = printWorkingDirectory();
+        changeToParentDirectory();
+        String p = printWorkingDirectory();
+        changeWorkingDirectory(w);
+
+        return p;
+    }
+
+    /**
+     * 鍒涘缓鐩綍
+     *
+     * @param pathname 璺緞鍚�
+     * @return boolean 鍒涘缓鎴愬姛杩斿洖true
+     */
+    public boolean makeDirectory(String pathname) throws IOException {
+        return ftpClient.makeDirectory(pathname);
+    }
+
+    /**
+     * 鍒涘缓澶氫釜鐩綍
+     *
+     * @param pathname 璺緞鍚�
+     */
+    public void makeDirs(String pathname) throws IOException {
+        pathname = pathname.replace("\\\\", "/");
+        String[] pathnameArray = pathname.split("/");
+        for (String each : pathnameArray) {
+            if (StringUtils.isNotEmpty(each)) {
+                ftpClient.makeDirectory(each);
+                ftpClient.changeWorkingDirectory(each);
+            }
+        }
+    }
+
+    /**
+     * 鍏抽棴娴�
+     *
+     * @param stream 娴�
+     */
+    private static void closeStream(Closeable stream) {
+        if (stream != null) {
+            try {
+                stream.close();
+            } catch (IOException ex) {
+                // do nothing
+            }
+        }
+    }
+
+    /**
+     * 鍏抽棴ftp杩炴帴
+     */
+    public void disconnect() {
+        if (null != ftpClient && ftpClient.isConnected()) {
+            try {
+                ftpClient.logout();
+                ftpClient.disconnect();
+            } catch (IOException ex) {
+                // do nothing
+            }
+        }
+    }
+}
+
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/FtpApche.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/FtpApche.java
new file mode 100644
index 0000000..a65468c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/FtpApche.java
@@ -0,0 +1,193 @@
+package org.dromara.system.uitil;
+
+import cn.hutool.extra.ftp.Ftp;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.net.ftp.FTP;
+import org.apache.commons.net.ftp.FTPClient;
+import org.apache.commons.net.ftp.FTPFile;
+import org.apache.commons.net.ftp.FTPReply;
+import org.dromara.system.domain.properties.FtpConfig;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.*;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 瀹炵幇FTP鏂囦欢涓婁紶鍜屾枃浠朵笅杞�
+ */
+public class FtpApche {
+    private static FTPClient ftpClient = new FTPClient();
+    private static String encoding = System.getProperty("file.encoding");
+    /**
+     * 瓒呮椂鏃堕棿
+     */
+    private static final int DEFAULT_TIMEOUT = 60 * 1000;
+
+    /**
+     * 杩炴帴鍒癴tp
+     */
+    public static void connect(FtpConfig config) throws IOException {
+        setTimeout();
+        try {
+            ftpClient.connect(config.getUrl(), 21);
+        } catch (UnknownHostException e) {
+            throw new IOException("Can't find FTP server :" + "21");
+        }
+
+        int reply = ftpClient.getReplyCode();
+        if (!FTPReply.isPositiveCompletion(reply)) {
+            disconnect();
+            throw new IOException("Can't connect to server :" + "21");
+        }
+
+        if (!ftpClient.login(config.getUsername(), config.getPasswd())) {
+            disconnect();
+            throw new IOException("Can't login to server :" + "21");
+        }
+
+        // set data transfer mode.
+        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
+
+        // Use passive mode to pass firewalls.
+        ftpClient.enterLocalPassiveMode();
+    }
+
+    /**
+     * 璁剧疆瓒呮椂鏃堕棿
+     */
+    private static void setTimeout() {
+        ftpClient.setDefaultTimeout(DEFAULT_TIMEOUT);
+        ftpClient.setConnectTimeout(DEFAULT_TIMEOUT);
+        ftpClient.setDataTimeout(DEFAULT_TIMEOUT);
+    }
+
+    /**
+     * ftp鏄惁澶勪簬杩炴帴鐘舵�侊紝鏄繛鎺ョ姸鎬佽繑鍥�<tt>true</tt>
+     *
+     * @return boolean  鏄繛鎺ョ姸鎬佽繑鍥�<tt>true</tt>
+     */
+    public static boolean isConnected() {
+        return ftpClient.isConnected();
+    }
+
+    /**
+     * 鍏抽棴ftp杩炴帴
+     */
+    public static void disconnect() {
+        if (null != ftpClient && ftpClient.isConnected()) {
+            try {
+                ftpClient.logout();
+                ftpClient.disconnect();
+            } catch (IOException ex) {
+                // do nothing
+            }
+        }
+    }
+
+    /**
+     * 鏀瑰彉宸ヤ綔鐩綍
+     *
+     * @param dir ftp鏈嶅姟鍣ㄤ笂鐩綍
+     * @return boolean 鏀瑰彉鎴愬姛杩斿洖true
+     */
+    public static boolean changeWorkingDirectory(String dir) {
+        try {
+            return ftpClient.changeWorkingDirectory(dir);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+
+    /**
+     * Description: 鍚慒TP鏈嶅姟鍣ㄤ笂浼犳枃浠�
+     *
+     * @return 鎴愬姛杩斿洖true锛屽惁鍒欒繑鍥瀎alse
+     */
+    public static boolean uploadFile(FtpConfig config, MultipartFile file, String name) throws IOException {
+        boolean result = false;
+        InputStream input = file.getInputStream();
+        try {
+            connect(config);
+            ftpClient.setBufferSize(1024 * 1024);
+            result = ftpClient.storeFile(new String(name.getBytes(encoding), "iso-8859-1"), input);
+            if (result) {
+                System.out.println("涓婁紶鎴愬姛!");
+            }
+            input.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            ftpClient.logout();
+            ftpClient.disconnect();
+        }
+        return result;
+    }
+
+    /**
+     * 鏍规嵁鏂囦欢ftp璺緞鍚嶇О鍒犻櫎鏂囦欢
+     *
+     * @param ftpFileName 鏂囦欢ftp璺緞鍚嶇О
+     */
+    public static void deleteFile(String ftpFileName) throws IOException {
+        int dele = ftpClient.dele(ftpFileName);
+        try {
+            ftpClient.logout();
+            ftpClient.disconnect();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    /**
+     * 鏍规嵁uploadFile杩斿洖鐨勮矾寰勶紝浠巉tp涓嬭浇鏂囦欢鍒版寚瀹氳緭鍑烘祦涓�
+     *
+     * @param filename 鏂囦欢鍚嶇О
+     */
+    public static InputStream downloadFileFromDailyDir(String filename) throws IOException {
+        return ftpClient.retrieveFileStream(filename);
+    }
+
+    public static List<String> downloadList(FtpConfig config) throws IOException {
+        connect(config);
+        List<String> list = new ArrayList<>();
+        FTPFile[] ftpFiles = ftpClient.listFiles();
+        if (ftpFiles.length == 0) {
+            return list;
+        }
+        for (FTPFile ftpFile : ftpFiles) {
+            list.add(ftpFile.getName());
+        }
+        return list;
+    }
+
+    /**
+     * 鏍规嵁鍚嶇О鑾峰彇鏂囦欢锛屼互瀛楄妭鏁扮粍杩斿洖
+     *
+     * @param ftpPath  FTP鏈嶅姟鍣ㄦ枃浠剁浉瀵硅矾寰勶紝渚嬪锛歵est/123
+     * @param fileName 鏂囦欢鍚嶏紝渚嬪锛歵est.xls
+     * @return byte[] 瀛楄妭鏁扮粍瀵硅薄
+     */
+    public static byte[] getFileBytesByName(InputStream is) throws IOException {
+        //鍒涘缓byte鏁扮粍杈撳嚭娴�
+        ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
+        try {
+            try {
+                byte[] buffer = new byte[1024 * 1024 * 4];
+                int len = -1;
+                while ((len = is.read(buffer, 0, 1024 * 1024 * 4)) != -1) {
+                    byteStream.write(buffer, 0, len);
+                }
+            } catch (Exception e) {
+                System.out.println(e);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return byteStream.toByteArray();
+    }
+
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/HttpUtils.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/HttpUtils.java
index 5d1b2ea..df3f77b 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/HttpUtils.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/HttpUtils.java
@@ -5,6 +5,7 @@
 import org.apache.commons.httpclient.HttpStatus;
 import org.apache.commons.httpclient.methods.PostMethod;
 import org.apache.commons.httpclient.methods.StringRequestEntity;
+import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpPost;
@@ -14,6 +15,7 @@
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.util.EntityUtils;
 import org.dromara.common.oss.entity.SynchronousRequest;
+import org.dromara.common.oss.entity.SynchronousRequest2;
 import org.dromara.common.oss.entity.VideoRequest;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -25,36 +27,6 @@
 import java.util.HashMap;
 
 public class HttpUtils {
-    public static String sendPostWithJson(String url, String jsonStr, HashMap<String,String> headers) {
-        // 杩斿洖鐨勭粨鏋�
-        String jsonResult = "";
-        try {
-            HttpClient client = new HttpClient();
-            // 杩炴帴瓒呮椂
-            client.getHttpConnectionManager().getParams().setConnectionTimeout(3*1000);
-            // 璇诲彇鏁版嵁瓒呮椂
-            client.getHttpConnectionManager().getParams().setSoTimeout(3*60*1000);
-            client.getParams().setContentCharset("UTF-8");
-            PostMethod postMethod = new PostMethod(url);
-
-            postMethod.setRequestHeader("content-type", headers.get("content-type"));
-
-            // 闈炵┖
-            if (null != jsonStr && !"".equals(jsonStr)) {
-                StringRequestEntity requestEntity = new StringRequestEntity(jsonStr, headers.get("content-type"), "UTF-8");
-                postMethod.setRequestEntity(requestEntity);
-            }
-            int status = client.executeMethod(postMethod);
-            if (status == HttpStatus.SC_OK) {
-                jsonResult = postMethod.getResponseBodyAsString();
-            } else {
-                throw new RuntimeException("鎺ュ彛杩炴帴澶辫触锛�");
-            }
-        } catch (Exception e) {
-            throw new RuntimeException("鎺ュ彛杩炴帴澶辫触锛�");
-        }
-        return jsonResult;
-    }
 
     private static final String BOUNDARY = "----WebKitFormBoundary7MA4YWxkTrZu0gW";
     private static final String LINE_FEED = "\r\n";
@@ -66,59 +38,8 @@
         return file;
     }
 
-    public static void sendPostRequest(String url, String stringParam, File fileParam) throws Exception {
-
-        URL obj = new URL(url);
-        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
-
-        // 璁剧疆POST璇锋眰
-        con.setRequestMethod("POST");
-        con.setDoOutput(true);
-        con.setDoInput(true);
-        con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
-
-        // 鏋勫缓璇锋眰浣�
-        DataOutputStream wr = new DataOutputStream(con.getOutputStream());
-        wr.writeBytes("--" + BOUNDARY + LINE_FEED);
-        wr.writeBytes("Content-Disposition: form-data; name=\"stringParam\"" + LINE_FEED);
-        wr.writeBytes(LINE_FEED);
-        wr.writeBytes(stringParam + LINE_FEED);
-
-        wr.writeBytes("--" + BOUNDARY + LINE_FEED);
-        wr.writeBytes("Content-Disposition: form-data; name=\"fileParam\"; filename=\"" + fileParam.getName() + "\"" + LINE_FEED);
-        wr.writeBytes("Content-Type: " + HttpURLConnection.guessContentTypeFromName(fileParam.getName()) + LINE_FEED);
-        wr.writeBytes("Content-Transfer-Encoding: binary" + LINE_FEED);
-        wr.writeBytes(LINE_FEED);
-
-        FileInputStream inputStream = new FileInputStream(fileParam);
-        byte[] buffer = new byte[4096];
-        int bytesRead = -1;
-        while ((bytesRead = inputStream.read(buffer)) != -1) {
-            wr.write(buffer, 0, bytesRead);
-        }
-        wr.writeBytes(LINE_FEED);
-        wr.writeBytes("--" + BOUNDARY + "--" + LINE_FEED);
-
-        wr.flush();
-        wr.close();
-
-        // 鍙戦�佽姹傚苟鑾峰彇鍝嶅簲
-        int responseCode = con.getResponseCode();
-        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
-        String inputLine;
-        StringBuffer response = new StringBuffer();
-        while ((inputLine = in.readLine()) != null) {
-            response.append(inputLine);
-        }
-        in.close();
-
-        // 鎵撳嵃鍝嶅簲缁撴灉
-        System.out.println("Response Code : " + responseCode);
-        System.out.println("Response : " + response.toString());
-    }
-
     /**
-     * 涓婁紶鍚屾 瑙嗛涓撶綉
+     * 涓婁紶鍚屾 瑙嗛涓撶綉 -- 鍏畨鍐呯綉
      * @param url
      * @param entity
      * @return
@@ -182,32 +103,6 @@
         return responseBody;
     }
 
-    /**
-     * 涓婁紶鍚屾2
-     * @param url
-     * @param entity
-     * @return
-     * @throws IOException
-     */
-    public static String sendPostRequestTwo(String url, SynchronousRequest entity) throws IOException {
-        org.apache.http.client.HttpClient httpClient = HttpClientBuilder.create().build();
-        HttpPost httpPost = new HttpPost(url);
-
-        ContentType contentType = ContentType.create("multipart/form-data", StandardCharsets.UTF_8);
-        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
-        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
-
-        // 娣诲姞MultipartFile鍙傛暟
-        builder.addBinaryBody("file", entity.getFile().getBytes(), ContentType.MULTIPART_FORM_DATA, entity.getFile().getOriginalFilename());
-
-        HttpEntity multipart = builder.build();
-        httpPost.setEntity(multipart);
-
-        HttpResponse response = httpClient.execute(httpPost);
-        String responseBody = EntityUtils.toString(response.getEntity());
-        System.out.println("Response: " + responseBody);
-        return responseBody;
-    }
 
     /**
      * 鍒犻櫎鍚屾
@@ -236,5 +131,56 @@
         System.out.println("Response: " + responseBody);
         return responseBody;
     }
+
+
+    /**
+     * 涓婁紶鍚屾 瑙嗛涓撶綉 -- 鍏畨鍐呯綉锛堝畾鏃讹級
+     * @param url
+     * @param entity
+     * @return
+     * @throws IOException
+     */
+    public static String sendPostRequest2(String url, SynchronousRequest entity, byte[] bytes) throws IOException {
+        org.apache.http.client.HttpClient httpClient = HttpClientBuilder.create().build();
+        HttpPost httpPost = new HttpPost(url);
+
+        ContentType contentType = ContentType.create("multipart/form-data", StandardCharsets.UTF_8);
+        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+        builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
+
+        // 娣诲姞MultipartFile鍙傛暟
+        builder.addBinaryBody("file", bytes, ContentType.MULTIPART_FORM_DATA, entity.getFileName());
+
+        // 娣诲姞String鍙傛暟
+        builder.addTextBody("path", entity.getPath(), ContentType.TEXT_PLAIN);
+        builder.addTextBody("ossId", entity.getOssId(), ContentType.TEXT_PLAIN);
+        builder.addTextBody("createBy", entity.getCreateBy(), ContentType.TEXT_PLAIN);
+        builder.addTextBody("password", entity.getPassword(), ContentType.TEXT_PLAIN);
+        builder.addTextBody("fileName", entity.getFileName(), contentType);
+        builder.addTextBody("createTime", entity.getCreateTime(), ContentType.TEXT_PLAIN);
+
+        HttpEntity multipart = builder.build();
+        httpPost.setEntity(multipart);
+
+        HttpResponse response = httpClient.execute(httpPost);
+        String responseBody = EntityUtils.toString(response.getEntity());
+        System.out.println("Response: " + responseBody);
+        return responseBody;
+    }
+
+    /**
+     * @param input 杈撳叆娴�
+     * @return byte[] 鏁扮粍
+     */
+    public static byte[] inputStream2byte(InputStream input) throws IOException {
+        ByteArrayOutputStream output = new ByteArrayOutputStream();
+        byte[] buffer = new byte[4096];
+        int n = 0;
+        while (-1 != (n = input.read(buffer))) {
+            output.write(buffer, 0, n);
+        }
+        return output.toByteArray();
+    }
+
 }
 

--
Gitblit v1.8.0