From c738530fb3890f50b788375ec5a81b8f03242cc6 Mon Sep 17 00:00:00 2001
From: qirong <2032486488@qq.com>
Date: 星期三, 22 十一月 2023 16:11:21 +0800
Subject: [PATCH] 修改

---
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/PasswordUtil.java                    |  109 ++++++
 ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java                 |    4 
 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginBody.java       |   20 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssUploadVo.java              |    5 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssVo.java                    |    5 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysConfigController.java |   10 
 ruoyi-modules/ruoyi-system/pom.xml                                                                     |    6 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysOssService.java                |   10 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java    |   80 ++++
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/convert/SysOssConfigClassConvert.java      |   17 +
 ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java                               |   36 ++
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysOss.java                         |    5 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java        |  137 ++++++++
 ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java             |    1 
 ruoyi-admin/src/main/resources/application.yml                                                         |    6 
 ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/SynchronousRequest.java      |   25 +
 ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java                              |   12 
 ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java      |    2 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/IpMacUtil.java                       |  226 ++++++++++++++
 ruoyi-admin/src/main/resources/application-prod.yml                                                    |   72 ++--
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/enums/RoleType.java                        |   20 +
 ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java                       |    2 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java                   |    2 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/HttpUtils.java                       |   42 ++
 ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java   |   10 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java   |    1 
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/runner/SystemApplicationRunner.java        |   32 ++
 ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/AutoLoginUtil.java                   |   49 +++
 28 files changed, 873 insertions(+), 73 deletions(-)

diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java
index 86452e5..a1bf9ba 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java
@@ -3,6 +3,7 @@
 import cn.dev33.satoken.annotation.SaIgnore;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import jakarta.servlet.http.HttpServletRequest;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -23,12 +24,13 @@
 import org.dromara.common.social.utils.SocialUtils;
 import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.system.domain.SysClient;
+import org.dromara.system.domain.SysUser;
 import org.dromara.system.domain.bo.SysTenantBo;
+import org.dromara.system.domain.bo.SysUserBo;
 import org.dromara.system.domain.vo.SysTenantVo;
-import org.dromara.system.service.ISysClientService;
-import org.dromara.system.service.ISysConfigService;
-import org.dromara.system.service.ISysSocialService;
-import org.dromara.system.service.ISysTenantService;
+import org.dromara.system.mapper.SysUserMapper;
+import org.dromara.system.service.*;
+import org.dromara.system.uitil.AutoLoginUtil;
 import org.dromara.web.domain.vo.LoginTenantVo;
 import org.dromara.web.domain.vo.LoginVo;
 import org.dromara.web.domain.vo.TenantListVo;
@@ -61,6 +63,8 @@
     private final ISysTenantService tenantService;
     private final ISysSocialService socialUserService;
     private final ISysClientService clientService;
+    private final ISysUserService userService;
+    private final SysUserMapper userMapper;
 
 
     /**
@@ -186,4 +190,28 @@
         return R.ok(vo);
     }
 
+    /**
+     * 鑷姩娉ㄥ唽骞剁櫥褰�
+     */
+//    @SaCheckPermission("system:user:auto")
+    @PutMapping(value = "auto")
+    public R<LoginVo> auto(@Validated @RequestBody RegisterBody user) {
+        AutoLoginUtil.padding(user);
+        String clientId = "e5cd7e4891bf95d1d19206ce24a7b32e";
+        //pc
+        SysClient client = clientService.queryByClientId(clientId);
+        //妫�楠屾槸鍚﹀瓨鍦ㄨ处鍙�
+        boolean exists = userMapper.exists(new LambdaQueryWrapper<SysUser>()
+            .eq(SysUser::getUserName, user.getUsername())
+            .eq(SysUser::getStatus, "0")
+            .eq(SysUser::getDelFlag, "0"));
+        if(!exists){
+            registerService.register(user);
+        }
+
+        LoginBody loginBody = AutoLoginUtil.create(user,clientId);
+//         鐧诲綍
+        return R.ok(IAuthStrategy.login(loginBody, client));
+    }
+
 }
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 4d4b072..c5aaea3 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
@@ -19,8 +19,12 @@
 import org.dromara.common.tenant.helper.TenantHelper;
 import org.dromara.common.web.config.properties.CaptchaProperties;
 import org.dromara.system.domain.SysUser;
+import org.dromara.system.domain.SysUserRole;
 import org.dromara.system.domain.bo.SysUserBo;
+import org.dromara.system.domain.vo.SysUserVo;
+import org.dromara.system.enums.RoleType;
 import org.dromara.system.mapper.SysUserMapper;
+import org.dromara.system.mapper.SysUserRoleMapper;
 import org.dromara.system.service.ISysUserService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -37,6 +41,7 @@
     private final ISysUserService userService;
     private final SysUserMapper userMapper;
     private final CaptchaProperties captchaProperties;
+    private final SysUserRoleMapper userRoleMapper;
 
     /**
      * 娉ㄥ唽
@@ -50,7 +55,7 @@
 
         boolean captchaEnabled = captchaProperties.getEnable();
         // 楠岃瘉鐮佸紑鍏�
-        if (captchaEnabled) {
+        if (!captchaEnabled) {
             validateCaptcha(tenantId, username, registerBody.getCode(), registerBody.getUuid());
         }
         SysUserBo sysUser = new SysUserBo();
@@ -70,6 +75,11 @@
         if (!regFlag) {
             throw new UserException("user.register.error");
         }
+        SysUserVo sysUserVo = userMapper.selectUserByUserName(username);
+        SysUserRole userRole = new SysUserRole();
+        userRole.setUserId(sysUserVo.getUserId());
+        userRole.setRoleId(Long.valueOf(RoleType.INTERNET.getType()));
+        userRoleMapper.insert(userRole);
         recordLogininfor(tenantId, username, Constants.REGISTER, MessageUtils.message("user.register.success"));
     }
 
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java
index 46bd566..decca53 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java
@@ -62,7 +62,7 @@
 
         boolean captchaEnabled = captchaProperties.getEnable();
         // 楠岃瘉鐮佸紑鍏�
-        if (captchaEnabled) {
+        if (!captchaEnabled) {
             validateCaptcha(tenantId, username, code, uuid);
         }
 
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
index 148b50e..8b91cb9 100644
--- a/ruoyi-admin/src/main/resources/application-prod.yml
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -1,6 +1,3 @@
---- # 涓存椂鏂囦欢瀛樺偍浣嶇疆 閬垮厤涓存椂鏂囦欢琚郴缁熸竻鐞嗘姤閿�
-spring.servlet.multipart.location: /ruoyi/server/temp
-
 --- # 鐩戞帶涓績閰嶇疆
 spring.boot.admin.client:
   # 澧炲姞瀹㈡埛绔紑鍏�
@@ -34,7 +31,7 @@
     # 鍔ㄦ�佹暟鎹簮鏂囨。 https://www.kancloud.cn/tracy5546/dynamic-datasource/content
     dynamic:
       # 鎬ц兘鍒嗘瀽鎻掍欢(鏈夋�ц兘鎹熻�� 涓嶅缓璁敓浜х幆澧冧娇鐢�)
-      p6spy: false
+      p6spy: true
       # 璁剧疆榛樿鐨勬暟鎹簮鎴栬�呮暟鎹簮缁�,榛樿鍊煎嵆涓� master
       primary: master
       # 涓ユ牸妯″紡 鍖归厤涓嶅埌鏁版嵁婧愬垯鎶ラ敊
@@ -46,9 +43,18 @@
           driverClassName: com.mysql.cj.jdbc.Driver
           # jdbc 鎵�鏈夊弬鏁伴厤缃弬鑰� https://lionli.blog.csdn.net/article/details/122018562
           # rewriteBatchedStatements=true 鎵瑰鐞嗕紭鍖� 澶у箙鎻愬崌鎵归噺鎻掑叆鏇存柊鍒犻櫎鎬ц兘(瀵规暟鎹簱鏈夋�ц兘鎹熻�� 浣跨敤鎵归噺鎿嶄綔搴旇�冭檻鎬ц兘闂)
-          url: jdbc:mysql://localhost:3306/ry-vue?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: root
+          password: 234#Wersdf!
+#          url: jdbc:mysql://80.36.32.175: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!
+#          url: jdbc:mysql://172.35.50.34:3306/qysp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+#          username: root
+#          password: 234#Wersdf!
         # 浠庡簱鏁版嵁婧�
         slave:
           lazy: true
@@ -57,26 +63,26 @@
           url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
           username:
           password:
-#        oracle:
-#          type: ${spring.datasource.type}
-#          driverClassName: oracle.jdbc.OracleDriver
-#          url: jdbc:oracle:thin:@//localhost:1521/XE
-#          username: ROOT
-#          password: root
-#          hikari:
-#            connectionTestQuery: SELECT 1 FROM DUAL
-#        postgres:
-#          type: ${spring.datasource.type}
-#          driverClassName: org.postgresql.Driver
-#          url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
-#          username: root
-#          password: root
-#        sqlserver:
-#          type: ${spring.datasource.type}
-#          driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
-#          url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true
-#          username: SA
-#          password: root
+      #        oracle:
+      #          type: ${spring.datasource.type}
+      #          driverClassName: oracle.jdbc.OracleDriver
+      #          url: jdbc:oracle:thin:@//localhost:1521/XE
+      #          username: ROOT
+      #          password: root
+      #          hikari:
+      #            connectionTestQuery: SELECT 1 FROM DUAL
+      #        postgres:
+      #          type: ${spring.datasource.type}
+      #          driverClassName: org.postgresql.Driver
+      #          url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
+      #          username: root
+      #          password: root
+      #        sqlserver:
+      #          type: ${spring.datasource.type}
+      #          driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
+      #          url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true
+      #          username: SA
+      #          password: root
       hikari:
         # 鏈�澶ц繛鎺ユ睜鏁伴噺
         maxPoolSize: 20
@@ -99,9 +105,10 @@
 spring.data:
   redis:
     # 鍦板潃
-    host: localhost
+    host: 162.14.79.111
     # 绔彛锛岄粯璁や负6379
-    port: 6379
+    port: 16379
+    password: 234#Wersdf!
     # 鏁版嵁搴撶储寮�
     database: 0
     # 瀵嗙爜(濡傛病鏈夊瘑鐮佽娉ㄩ噴鎺�)
@@ -115,17 +122,17 @@
   # redis key鍓嶇紑
   keyPrefix:
   # 绾跨▼姹犳暟閲�
-  threads: 16
+  threads: 4
   # Netty绾跨▼姹犳暟閲�
-  nettyThreads: 32
+  nettyThreads: 8
   # 鍗曡妭鐐归厤缃�
   singleServerConfig:
     # 瀹㈡埛绔悕绉�
     clientName: ${ruoyi.name}
     # 鏈�灏忕┖闂茶繛鎺ユ暟
-    connectionMinimumIdleSize: 32
+    connectionMinimumIdleSize: 8
     # 杩炴帴姹犲ぇ灏�
-    connectionPoolSize: 64
+    connectionPoolSize: 32
     # 杩炴帴绌洪棽瓒呮椂锛屽崟浣嶏細姣
     idleConnectionTimeout: 10000
     # 鍛戒护绛夊緟瓒呮椂锛屽崟浣嶏細姣
@@ -182,6 +189,7 @@
     #鍦板煙淇℃伅榛樿涓� ap-guangzhou 濡傛棤鐗规畩鏀瑰彉鍙笉鐢ㄨ缃�
     territory: ap-guangzhou
 
+
 --- # 涓夋柟鎺堟潈
 justauth:
   enabled: true
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 2b508e2..6d6628d 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -71,9 +71,9 @@
   servlet:
     multipart:
       # 鍗曚釜鏂囦欢澶у皬
-      max-file-size: 10MB
+      max-file-size: 500MB
       # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬
-      max-request-size: 20MB
+      max-request-size: 500MB
   mvc:
     format:
       date-time: yyyy-MM-dd HH:mm:ss
@@ -97,7 +97,7 @@
   timeout: 604800
   # 澶氱涓嶅悓 token 鏈夋晥鏈� 鍙煡鐪� LoginHelper.loginByDevice 鏂规硶鑷畾涔�
   # token鏈�浣庢椿璺冩椂闂� (鎸囧畾鏃堕棿鏃犳搷浣滃氨杩囨湡) 鍗曚綅: 绉�
-  active-timeout: 1800
+  active-timeout: 86400
   # 鏄惁鍏佽鍚屼竴璐﹀彿骞跺彂鐧诲綍 (涓簍rue鏃跺厑璁镐竴璧风櫥褰�, 涓篺alse鏃舵柊鐧诲綍鎸ゆ帀鏃х櫥褰�)
   is-concurrent: true
   # 鍦ㄥ浜虹櫥褰曞悓涓�璐﹀彿鏃讹紝鏄惁鍏辩敤涓�涓猼oken (涓簍rue鏃舵墍鏈夌櫥褰曞叡鐢ㄤ竴涓猼oken, 涓篺alse鏃舵瘡娆$櫥褰曟柊寤轰竴涓猼oken)
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginBody.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginBody.java
index 71e4991..3665a18 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginBody.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/model/LoginBody.java
@@ -19,7 +19,7 @@
     /**
      * 瀹㈡埛绔痠d
      */
-    @NotBlank(message = "{auth.clientid.not.blank}")
+//    @NotBlank(message = "{auth.clientid.not.blank}")
     private String clientId;
 
     /**
@@ -35,7 +35,7 @@
     /**
      * 鎺堟潈绫诲瀷
      */
-    @NotBlank(message = "{auth.grant.type.not.blank}")
+//    @NotBlank(message = "{auth.grant.type.not.blank}")
     private String grantType;
 
     /**
@@ -70,49 +70,49 @@
     /**
      * 鎵嬫満鍙�
      */
-    @NotBlank(message = "{user.phonenumber.not.blank}", groups = {SmsGroup.class})
+//    @NotBlank(message = "{user.phonenumber.not.blank}", groups = {SmsGroup.class})
     private String phonenumber;
 
     /**
      * 鐭俊code
      */
-    @NotBlank(message = "{sms.code.not.blank}", groups = {SmsGroup.class})
+//    @NotBlank(message = "{sms.code.not.blank}", groups = {SmsGroup.class})
     private String smsCode;
 
     /**
      * 閭
      */
-    @NotBlank(message = "{user.email.not.blank}", groups = {EmailGroup.class})
+//    @NotBlank(message = "{user.email.not.blank}", groups = {EmailGroup.class})
     @Email(message = "{user.email.not.valid}")
     private String email;
 
     /**
      * 閭code
      */
-    @NotBlank(message = "{email.code.not.blank}", groups = {EmailGroup.class})
+//    @NotBlank(message = "{email.code.not.blank}", groups = {EmailGroup.class})
     private String emailCode;
 
     /**
      * 灏忕▼搴廲ode
      */
-    @NotBlank(message = "{xcx.code.not.blank}", groups = {WechatGroup.class})
+//    @NotBlank(message = "{xcx.code.not.blank}", groups = {WechatGroup.class})
     private String xcxCode;
 
     /**
      * 绗笁鏂圭櫥褰曞钩鍙�
      */
-    @NotBlank(message = "{social.source.not.blank}" , groups = {SocialGroup.class})
+//    @NotBlank(message = "{social.source.not.blank}" , groups = {SocialGroup.class})
     private String source;
 
     /**
      * 绗笁鏂圭櫥褰昪ode
      */
-    @NotBlank(message = "{social.code.not.blank}" , groups = {SocialGroup.class})
+//    @NotBlank(message = "{social.code.not.blank}" , groups = {SocialGroup.class})
     private String socialCode;
 
     /**
      * 绗笁鏂圭櫥褰晄ocialState
      */
-    @NotBlank(message = "{social.state.not.blank}" , groups = {SocialGroup.class})
+//    @NotBlank(message = "{social.state.not.blank}" , groups = {SocialGroup.class})
     private String socialState;
 }
diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
index 53e05c9..9d90e3c 100644
--- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
+++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/core/OssClient.java
@@ -141,6 +141,10 @@
         return upload(data, getPath(properties.getPrefix(), suffix), contentType);
     }
 
+    public UploadResult uploadSuffix2(byte[] data, String path, String contentType) {
+        return upload(data, path, contentType);
+    }
+
     public UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType) {
         return upload(inputStream, getPath(properties.getPrefix(), suffix), contentType);
     }
diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/SynchronousRequest.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/SynchronousRequest.java
new file mode 100644
index 0000000..c052ffc
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/entity/SynchronousRequest.java
@@ -0,0 +1,25 @@
+package org.dromara.common.oss.entity;
+
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class SynchronousRequest implements Serializable {
+
+    //鏂囦欢
+    private MultipartFile file;
+    //minio璺緞
+    private String path;
+    //ossId
+    private String ossId;
+    //鍒涘缓鏃堕棿
+    private Date createTime;
+    //鍒涘缓浜�
+    private String createBy;
+    //瀵嗙爜
+    private String password;
+
+}
diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java
index 6503eb1..c41c4f5 100644
--- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java
+++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/factory/OssFactory.java
@@ -40,6 +40,7 @@
      * 鏍规嵁绫诲瀷鑾峰彇瀹炰緥
      */
     public static OssClient instance(String configKey) {
+
         String json = CacheUtils.get(CacheNames.SYS_OSS_CONFIG, configKey);
         if (json == null) {
             throw new OssException("绯荤粺寮傚父, '" + configKey + "'閰嶇疆淇℃伅涓嶅瓨鍦�!");
diff --git a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java
index 8d435a3..9918862 100644
--- a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java
+++ b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java
@@ -130,7 +130,7 @@
      * 鑾峰彇褰撳墠绉熸埛id(鍔ㄦ�佺鎴蜂紭鍏�)
      */
     public static String getTenantId() {
-        String tenantId = TenantHelper.getDynamic();
+        String tenantId = "000000";
         if (StringUtils.isBlank(tenantId)) {
             tenantId = LoginHelper.getTenantId();
         }
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java
index f9b81c1..edd10ff 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/queue/DelayedQueueController.java
@@ -1,11 +1,13 @@
 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.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.concurrent.TimeUnit;
@@ -22,6 +24,7 @@
  * @author Lion Li
  * @version 3.6.0
  */
+@SaIgnore
 @Slf4j
 @RequiredArgsConstructor
 @RestController
@@ -40,6 +43,7 @@
         QueueUtils.subscribeBlockingQueue(queueName, (String orderNum) -> {
             // 瑙傚療鎺ユ敹鏃堕棿
             log.info("閫氶亾: {}, 鏀跺埌鏁版嵁: {}", queueName, orderNum);
+
         });
         return R.ok("鎿嶄綔鎴愬姛");
     }
@@ -49,11 +53,11 @@
      *
      * @param queueName 闃熷垪鍚�
      * @param orderNum  璁㈠崟鍙�
-     * @param time      寤惰繜鏃堕棿(绉�)
+//     * @param time      寤惰繜鏃堕棿(绉�)
      */
     @GetMapping("/add")
-    public R<Void> add(String queueName, String orderNum, Long time) {
-        QueueUtils.addDelayedQueueObject(queueName, orderNum, time, TimeUnit.SECONDS);
+    public R<Void> add(@RequestParam("queueName") String queueName, @RequestParam("orderNum")String orderNum) {
+        QueueUtils.addDelayedQueueObject(queueName, orderNum, 5, TimeUnit.SECONDS);
         // 瑙傚療鍙戦�佹椂闂�
         log.info("閫氶亾: {} , 鍙戦�佹暟鎹�: {}", queueName, orderNum);
         return R.ok("鎿嶄綔鎴愬姛");
diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml
index 9591ac1..d1f1a2d 100644
--- a/ruoyi-modules/ruoyi-system/pom.xml
+++ b/ruoyi-modules/ruoyi-system/pom.xml
@@ -90,6 +90,12 @@
             <artifactId>ruoyi-common-encrypt</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>commons-httpclient</groupId>
+            <artifactId>commons-httpclient</artifactId>
+            <version>3.1</version>
+        </dependency>
+
     </dependencies>
 
 </project>
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysConfigController.java
index c73c386..80d1f58 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysConfigController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysConfigController.java
@@ -1,6 +1,8 @@
 package org.dromara.system.controller.system;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.annotation.SaIgnore;
+import cn.hutool.core.net.NetUtil;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.excel.utils.ExcelUtil;
 import org.dromara.common.log.annotation.Log;
@@ -16,6 +18,12 @@
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.*;
+import java.util.ArrayList;
+import java.util.Enumeration;
 import java.util.List;
 
 /**
@@ -23,6 +31,7 @@
  *
  * @author Lion Li
  */
+@SaIgnore
 @Validated
 @RequiredArgsConstructor
 @RestController
@@ -134,4 +143,5 @@
         configService.resetConfigCache();
         return R.ok();
     }
+
 }
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 73ada3b..9b9ac96 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
@@ -2,17 +2,25 @@
 
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.annotation.SaIgnore;
 import cn.hutool.core.util.ObjectUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.validate.QueryGroup;
+import org.dromara.common.oss.entity.SynchronousRequest;
+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;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.system.domain.SysOss;
 import org.dromara.system.domain.bo.SysOssBo;
 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 jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.NotEmpty;
@@ -25,12 +33,15 @@
 import java.io.IOException;
 import java.util.Arrays;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 鏂囦欢涓婁紶 鎺у埗灞�
  *
  * @author Lion Li
  */
+@Slf4j
+//@SaIgnore
 @Validated
 @RequiredArgsConstructor
 @RestController
@@ -38,7 +49,7 @@
 public class SysOssController extends BaseController {
 
     private final ISysOssService ossService;
-
+    private final SysOssMapper ossMapper;
     /**
      * 鏌ヨOSS瀵硅薄瀛樺偍鍒楄〃
      */
@@ -74,10 +85,19 @@
             return R.fail("涓婁紶鏂囦欢涓嶈兘涓虹┖");
         }
         SysOssVo oss = ossService.upload(file);
+        SynchronousRequest request = new SynchronousRequest();
+        request.setFile(file);
+
+
+
+        //娣诲姞闃熷垪鏁版嵁
+        QueueUtils.addDelayedQueueObject("OSS", oss.getOssId().toString(), 1, TimeUnit.HOURS);
+        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);
     }
 
@@ -87,9 +107,14 @@
      * @param ossId OSS瀵硅薄ID
      */
     @SaCheckPermission("system:oss:download")
-    @GetMapping("/download/{ossId}")
-    public void download(@PathVariable Long ossId, HttpServletResponse response) throws IOException {
+    @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("鎻愬彇鐮侀敊璇紒");
+        }
         ossService.download(ossId, response);
+        return R.ok();
     }
 
     /**
@@ -99,10 +124,53 @@
      */
     @SaCheckPermission("system:oss:remove")
     @Log(title = "OSS瀵硅薄瀛樺偍", businessType = BusinessType.DELETE)
-    @DeleteMapping("/{ossIds}")
+    @DeleteMapping("/{ossIds}/{password}")
     public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
-                          @PathVariable Long[] ossIds) {
-        return toAjax(ossService.deleteWithValidByIds(List.of(ossIds), true));
+                          @PathVariable Long[] ossIds,
+                          @PathVariable String password) {
+        return ossService.deleteWithValidByIds(List.of(ossIds), true,password) ? R.ok() : R.fail("鎻愬彇鐮侀敊璇紒");
     }
 
+    /**
+     * 鏌ョ湅OSS瀵硅薄瀛樺偍涓存椂瀵嗙爜
+     *
+     * @param ossId OSS瀵硅薄ID
+     */
+    @SaCheckPermission("system:oss:view")
+    @GetMapping("/{ossId}")
+    public R<String> view(@PathVariable Long ossId) {
+        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
+     * @return
+     */
+    @PostMapping(value = "/synchronization")
+    public R synchronization(SynchronousRequest request) {
+        if (ObjectUtil.isNull(request.getFile())) {
+            return R.fail("涓婁紶鏂囦欢涓嶈兘涓虹┖");
+        }
+        log.info("ossId:{}",request.getOssId());
+        SysOssVo oss = ossService.upload2(request);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
index 628060a..b3daef8 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysUserController.java
@@ -1,6 +1,7 @@
 package org.dromara.system.controller.system;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.annotation.SaIgnore;
 import cn.dev33.satoken.secure.BCrypt;
 import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.util.ArrayUtil;
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/convert/SysOssConfigClassConvert.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/convert/SysOssConfigClassConvert.java
new file mode 100644
index 0000000..cf7df2e
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/convert/SysOssConfigClassConvert.java
@@ -0,0 +1,17 @@
+package org.dromara.system.convert;
+
+import org.dromara.common.oss.properties.OssProperties;
+import org.dromara.system.domain.SysOssConfig;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+@Mapper
+public interface SysOssConfigClassConvert {
+
+    SysOssConfigClassConvert INSTANCE = Mappers.getMapper(SysOssConfigClassConvert.class);
+
+    OssProperties sysOssConfigToossProperties(SysOssConfig sysOssConfig);
+
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysOss.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysOss.java
index af88898..7f73d34 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysOss.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysOss.java
@@ -47,4 +47,9 @@
      */
     private String service;
 
+    /**
+     * 涓存椂瀵嗙爜
+     */
+    private String password;
+
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java
index 011254e..7dbf330 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysUserBo.java
@@ -46,7 +46,7 @@
      * 鐢ㄦ埛鏄电О
      */
     @Xss(message = "鐢ㄦ埛鏄电О涓嶈兘鍖呭惈鑴氭湰瀛楃")
-    @NotBlank(message = "鐢ㄦ埛鏄电О涓嶈兘涓虹┖")
+//    @NotBlank(message = "鐢ㄦ埛鏄电О涓嶈兘涓虹┖")
     @Size(min = 0, max = 30, message = "鐢ㄦ埛鏄电О闀垮害涓嶈兘瓒呰繃{max}涓瓧绗�")
     private String nickName;
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssUploadVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssUploadVo.java
index 11e0ff8..d8bbba9 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssUploadVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssUploadVo.java
@@ -25,4 +25,9 @@
      */
     private String ossId;
 
+    /**
+     * 瀵嗙爜
+     */
+    private String password;
+
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssVo.java
index 8d5c429..cc184e0 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssVo.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysOssVo.java
@@ -68,5 +68,10 @@
      */
     private String service;
 
+    /**
+     * 瀵嗙爜
+     */
+    private String password;
+
 
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/enums/RoleType.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/enums/RoleType.java
new file mode 100644
index 0000000..3957c93
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/enums/RoleType.java
@@ -0,0 +1,20 @@
+package org.dromara.system.enums;
+
+/**
+ * 涓夋柟瑙掕壊鍖哄垎
+ */
+public enum RoleType {
+
+    INTERNET("1719598385997795330"),       //浜掕仈缃�
+    VIDEO("1719598772146393089"),          //瑙嗛涓撶綉
+    POLICE("1719598977939918850");         //鍏畨鍐呯綉
+    private final String type;
+
+
+    RoleType(String id) {
+        this.type = id;
+    }
+    public String getType(){
+        return type;
+    }
+}
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 27dad7d..04c2ea9 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,11 +1,26 @@
 package org.dromara.system.runner;
 
+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.vo.SysOssVo;
+import org.dromara.system.mapper.SysOssConfigMapper;
+import org.dromara.system.mapper.SysOssMapper;
 import org.dromara.system.service.ISysOssConfigService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.system.service.ISysOssService;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 鍒濆鍖� system 妯″潡瀵瑰簲涓氬姟鏁版嵁
@@ -18,11 +33,28 @@
 public class SystemApplicationRunner implements ApplicationRunner {
 
     private final ISysOssConfigService ossConfigService;
+    private final SysOssMapper ossMapper;
+    private final SysOssConfigMapper sysOssConfigMapper;
+//    private final AmazonS3 client;
 
     @Override
     public void run(ApplicationArguments args) throws Exception {
         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");
+        // 椤圭洰鍒濆鍖栬缃竴娆″嵆鍙�
+        QueueUtils.subscribeBlockingQueue("OSS", (String ossId) -> {
+            // 瑙傚療鎺ユ敹鏃堕棿
+            log.info("閫氶亾: {}, 鏀跺埌鏁版嵁: {}", "OSS", ossId);
+            SysOssVo vo = ossMapper.selectVoById(ossId);
+            client.delete( vo.getUrl());
+            ossMapper.deleteById(Long.valueOf(ossId));
+        });
     }
 
 }
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 2dfe01f..bb53158 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
@@ -1,7 +1,9 @@
 package org.dromara.system.service;
 
+import org.dromara.common.core.domain.R;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.oss.entity.SynchronousRequest;
 import org.dromara.system.domain.bo.SysOssBo;
 import org.dromara.system.domain.vo.SysOssVo;
 import jakarta.servlet.http.HttpServletResponse;
@@ -27,10 +29,14 @@
 
     SysOssVo upload(MultipartFile file);
 
-    SysOssVo upload(File file);
+    SysOssVo upload2(SynchronousRequest request);
+
+//    SysOssVo upload(File file);
 
     void download(Long ossId, HttpServletResponse response) throws IOException;
 
-    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid, String password);
+
+    R viewPasswordById(Long ossId);
 
 }
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 f0e12f6..45f98aa 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
@@ -3,10 +3,15 @@
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.therapi.runtimejavadoc.repack.com.eclipsesource.json.Json;
 import org.dromara.common.core.constant.CacheNames;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.domain.model.LoginUser;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.service.OssService;
 import org.dromara.common.core.utils.MapstructUtils;
@@ -17,9 +22,11 @@
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
 import org.dromara.common.oss.core.OssClient;
+import org.dromara.common.oss.entity.SynchronousRequest;
 import org.dromara.common.oss.entity.UploadResult;
 import org.dromara.common.oss.enumd.AccessPolicyType;
 import org.dromara.common.oss.factory.OssFactory;
+import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.system.domain.SysOss;
 import org.dromara.system.domain.bo.SysOssBo;
 import org.dromara.system.domain.vo.SysOssVo;
@@ -27,6 +34,8 @@
 import org.dromara.system.service.ISysOssService;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
+import org.dromara.system.uitil.HttpUtils;
+import org.dromara.system.uitil.PasswordUtil;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.http.MediaType;
@@ -85,6 +94,7 @@
     private LambdaQueryWrapper<SysOss> buildQueryWrapper(SysOssBo bo) {
         Map<String, Object> params = bo.getParams();
         LambdaQueryWrapper<SysOss> lqw = Wrappers.lambdaQuery();
+        lqw.select(SysOss.class,x->get(x.getColumn()));
         lqw.like(StringUtils.isNotBlank(bo.getFileName()), SysOss::getFileName, bo.getFileName());
         lqw.like(StringUtils.isNotBlank(bo.getOriginalName()), SysOss::getOriginalName, bo.getOriginalName());
         lqw.eq(StringUtils.isNotBlank(bo.getFileSuffix()), SysOss::getFileSuffix, bo.getFileSuffix());
@@ -93,8 +103,15 @@
             SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime"));
         lqw.eq(ObjectUtil.isNotNull(bo.getCreateBy()), SysOss::getCreateBy, bo.getCreateBy());
         lqw.eq(StringUtils.isNotBlank(bo.getService()), SysOss::getService, bo.getService());
-        lqw.orderByAsc(SysOss::getOssId);
+        lqw.orderByDesc(SysOss::getCreateTime);
         return lqw;
+    }
+
+    public boolean get(String str){
+        if(str.equals("password") || str.equals("url") || str.equals("file_name")){
+            return false;
+        }
+        return true;
     }
 
     @Cacheable(cacheNames = CacheNames.SYS_OSS, key = "#ossId")
@@ -133,34 +150,98 @@
             throw new ServiceException(e.getMessage());
         }
         // 淇濆瓨鏂囦欢淇℃伅
-        return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult);
+        return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult, file);
     }
 
+    /**
+     * 鍚屾
+     * @param
+     * @param
+     * @return
+     */
     @Override
-    public SysOssVo upload(File file) {
-        String originalfileName = file.getName();
+    public SysOssVo upload2(SynchronousRequest request) {
+        String originalfileName = request.getFile().getOriginalFilename();
         String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
         OssClient storage = OssFactory.instance();
-        UploadResult uploadResult = storage.uploadSuffix(file, suffix);
+        UploadResult uploadResult;
+        try {
+            uploadResult = storage.uploadSuffix2(request.getFile().getBytes(), request.getPath(), request.getFile().getContentType());
+        } catch (IOException e) {
+            throw new ServiceException(e.getMessage());
+        }
         // 淇濆瓨鏂囦欢淇℃伅
-        return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult);
+        return buildResultEntity2(originalfileName, suffix, storage.getConfigKey(), uploadResult,request.getOssId(),
+            request.getPassword(), request.getCreateTime(), request.getCreateBy());
     }
 
+//    @Override
+//    public SysOssVo upload(File file) {
+//        String originalfileName = file.getName();
+//        String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
+//        OssClient storage = OssFactory.instance();
+//        UploadResult uploadResult = storage.uploadSuffix(file, suffix);
+//        // 淇濆瓨鏂囦欢淇℃伅
+//        return buildResultEntity(originalfileName, suffix, storage.getConfigKey(), uploadResult);
+//    }
+
     @NotNull
-    private SysOssVo buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult) {
+    private SysOssVo 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();
+        request.setFile(file);
+        request.setPath(uploadResult.getFilename());
+        request.setCreateTime(oss.getCreateTime());
+        request.setPassword(oss.getPassword());
+        request.setCreateBy(String.valueOf(oss.getCreateBy()));
+        request.setOssId(String.valueOf(oss.getOssId()));
+//        post(request);
+        
+        SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class);
+        return this.matchingUrl(sysOssVo);
+    }
+
+    /**
+     * 鍚屾
+     * @param originalfileName
+     * @param suffix
+     * @param configKey
+     * @param uploadResult
+     * @param ossId
+     * @param password
+     * @param createTime
+     * @param createBy
+     * @return
+     */
+    @NotNull
+    private SysOssVo buildResultEntity2(String originalfileName, String suffix, String configKey,
+                                        UploadResult uploadResult, String ossId, String password,
+                                        Date createTime, String createBy) {
+        SysOss oss = new SysOss();
+        oss.setOssId(Long.valueOf(ossId));
+        oss.setUrl(uploadResult.getUrl());
+        oss.setFileSuffix(suffix);
+        oss.setFileName(uploadResult.getFilename());
+        oss.setOriginalName(originalfileName);
+        oss.setService(configKey);
+        oss.setPassword(password);
+        oss.setCreateTime(createTime);
+        oss.setCreateBy(Long.valueOf(createBy));
         baseMapper.insert(oss);
         SysOssVo sysOssVo = MapstructUtils.convert(oss, SysOssVo.class);
         return this.matchingUrl(sysOssVo);
     }
 
     @Override
-    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid, String password) {
         if (isValid) {
             // 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠�
         }
@@ -168,8 +249,26 @@
         for (SysOss sysOss : list) {
             OssClient storage = OssFactory.instance(sysOss.getService());
             storage.delete(sysOss.getUrl());
+            if(sysOss.getPassword().equals(password)){
+                baseMapper.deleteById(sysOss.getOssId());
+                return true;
+            }
+            return false;
         }
-        return baseMapper.deleteBatchIds(ids) > 0;
+        return true;
+    }
+
+    @Override
+    public R viewPasswordById(Long ossId) {
+        LoginUser loginUser = LoginHelper.getLoginUser();
+        SysOss oss = baseMapper.selectById(ossId);
+        if(oss == null){
+            return R.fail("鏂囦欢宸茶娓呯悊锛岃鑱旂郴绠$悊鍛橈紒");
+        }
+        if(!oss.getCreateBy().equals(loginUser.getUserId())){
+            return R.fail("鎮ㄦ病鏈夋潈闄愭煡鐪嬶紒");
+        }
+        return R.ok(oss.getPassword());
     }
 
     /**
@@ -186,4 +285,24 @@
         }
         return oss;
     }
+
+    private String post(SynchronousRequest request){
+        HashMap<String, String> headers = new HashMap<>(3);
+        String requestUrl = "http://192.168.3.43:8080/resource/oss/synchronization";
+        ObjectMapper objectMapper = new ObjectMapper();
+        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.sendPostWithJson(requestUrl, jsonString,headers);
+        // 骞舵帴鏀惰繑鍥炵粨鏋�
+        System.out.println(resultData);
+        return resultData;
+    }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/AutoLoginUtil.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/AutoLoginUtil.java
new file mode 100644
index 0000000..fa82fe5
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/AutoLoginUtil.java
@@ -0,0 +1,49 @@
+package org.dromara.system.uitil;
+
+import cn.hutool.core.util.IdUtil;
+import org.dromara.common.core.domain.model.LoginBody;
+import org.dromara.common.core.domain.model.RegisterBody;
+import org.dromara.system.domain.bo.SysUserBo;
+
+/**
+ * 鑷姩鐧诲綍宸ュ叿绫�
+ */
+public class AutoLoginUtil {
+
+    //榛樿瀵嗙爜
+    private static String PASSWORD = "123456";
+    //榛樿绠$悊
+    private static String TENANT_ID = "000000";
+
+    /**
+     * 濉厖娉ㄥ唽
+     *
+     * @param user
+     */
+    public static void padding(RegisterBody user) {
+        String uuid = IdUtil.simpleUUID();
+        user.setTenantId(TENANT_ID);
+        user.setPassword(PASSWORD);
+        user.setUserType("sys_user");
+        user.setUuid(uuid);
+
+    }
+
+    /**
+     * 濉厖鐢ㄦ埛鐧诲綍淇℃伅
+     *
+     * @return
+     */
+    public static LoginBody create(RegisterBody user, String clientId) {
+        String uuid = IdUtil.simpleUUID();
+        LoginBody loginBody = new LoginBody();
+        loginBody.setClientId(clientId);
+        loginBody.setPassword(PASSWORD);
+        loginBody.setGrantType("password");
+        loginBody.setTenantId(TENANT_ID);
+        loginBody.setUsername(user.getUsername());
+        loginBody.setUuid(uuid);
+        return loginBody;
+    }
+
+}
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
new file mode 100644
index 0000000..d3fb7aa
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/HttpUtils.java
@@ -0,0 +1,42 @@
+package org.dromara.system.uitil;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.StringRequestEntity;
+
+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;
+    }
+}
+
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/IpMacUtil.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/IpMacUtil.java
new file mode 100644
index 0000000..51dfa36
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/IpMacUtil.java
@@ -0,0 +1,226 @@
+package org.dromara.system.uitil;
+
+import jakarta.servlet.http.HttpServletRequest;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 鑾峰彇瀹㈡埛绔痠p鍜宮ac鍦板潃
+ *
+ * @date 2023/06/27
+ */
+@Slf4j
+public final class IpMacUtil {
+    private IpMacUtil() {
+    }
+
+    /**
+     * 鑾峰彇鐢ㄦ埛鐪熷疄IP鍦板潃锛屼笉浣跨敤request.getRemoteAddr();鐨勫師鍥犳槸鏈夊彲鑳界敤鎴蜂娇鐢ㄤ簡浠g悊杞欢鏂瑰紡閬垮厤鐪熷疄IP鍦板潃,
+     * 鍙傝�冩枃绔狅細 http://developer.51cto.com/art/201111/305181.htm
+     * <p>
+     * 鍙槸锛屽鏋滈�氳繃浜嗗绾у弽鍚戜唬鐞嗙殑璇濓紝X-Forwarded-For鐨勫�煎苟涓嶆涓�涓紝鑰屾槸涓�涓睮P鍊硷紝绌剁珶鍝釜鎵嶆槸鐪熸鐨勭敤鎴风鐨勭湡瀹濱P鍛紵
+     * 绛旀鏄彇X-Forwarded-For涓涓�涓潪unknown鐨勬湁鏁圛P瀛楃涓层��
+     * <p>
+     * 濡傦細X-Forwarded-For锛�192.168.1.110, 192.168.1.120, 192.168.1.130,
+     * 192.168.1.100
+     * <p>
+     * 鐢ㄦ埛鐪熷疄IP涓猴細 192.168.1.110
+     *
+     * @param request
+     * @return
+     */
+    @SuppressWarnings("all")
+    public static String getIpAddress(HttpServletRequest request) {
+        String ip = request.getHeader("x-forwarded-for");
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_CLIENT_IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getRemoteAddr();
+        }
+        return ip;
+    }
+
+    /**
+     * 鑾峰彇瀹㈡埛绔疘P锛屾敮鎸佸弽鍚戜唬鐞嗭紝濡俷ginx锛屼絾涓嶆敮鎸佹鍚戜唬鐞嗭紝姣斿瀹㈡埛绔祻瑙堝櫒鑷繁浣跨敤浠g悊宸ュ叿
+     *
+     * @param request 璇锋眰
+     * @return 瀹㈡埛绔疘P
+     */
+    @SuppressWarnings("all")
+    public static String getClientIP(HttpServletRequest request) {
+        String ip = request.getHeader("X-Real-IP");
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("X-Forwarded-For");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getRemoteAddr();
+        }
+        return ip;
+    }
+
+    /**
+     * 浠庣被unix鏈哄櫒涓婅幏鍙杕ac鍦板潃
+     *
+     * @param ip ipv4鍦板潃
+     * @return mac
+     */
+    public static String getMacInLinux(String ip) {
+        String mac = "";
+        if (ip != null) {
+            try {
+                Process process = Runtime.getRuntime().exec("arp " + ip);
+                InputStreamReader ir = new InputStreamReader(process.getInputStream());
+                LineNumberReader input = new LineNumberReader(ir);
+                String line;
+                StringBuffer s = new StringBuffer();
+                while ((line = input.readLine()) != null) {
+                    s.append(line);
+                }
+                mac = s.toString();
+                if (StringUtils.isNotBlank(mac)) {
+                    mac = mac.substring(mac.indexOf(":") - 2, mac.lastIndexOf(":") + 3);
+                }
+                return mac;
+            } catch (Exception e) {
+                log.error("---> 鑾峰彇mac鍦板潃閿欒锛歿}", e.getMessage());
+            }
+        }
+        return mac;
+    }
+
+    /**
+     * 浠巜indows鏈哄櫒涓婅幏鍙杕ac鍦板潃
+     *
+     * @param ip ipv4鍦板潃
+     * @return mac
+     */
+    public static String getMacInWindows(final String ip) {
+        String result;
+        String[] cmd = {"cmd", "/c", "ping " + ip};
+        String[] another = {"cmd", "/c", "ipconfig -all"};
+        // 鑾峰彇鎵ц鍛戒护鍚庣殑result
+        String cmdResult = callCmd(cmd, another);
+        // 浠庝笂涓�姝ョ殑缁撴灉涓幏鍙杕ac鍦板潃
+        result = filterMacAddress(ip, cmdResult, "-");
+        return result;
+    }
+
+    /**
+     * 鍛戒护鎵ц
+     *
+     * @param cmd     鍛戒护
+     * @param another another
+     * @return 缁撴灉
+     */
+    public static String callCmd(String[] cmd, String[] another) {
+        StringBuilder result = new StringBuilder();
+        String line;
+        try {
+            Runtime rt = Runtime.getRuntime();
+            // 鎵ц绗竴涓懡浠�
+            Process proc = rt.exec(cmd);
+            proc.waitFor();
+            // 鎵ц绗簩涓懡浠�
+            proc = rt.exec(another);
+            InputStreamReader is = new InputStreamReader(proc.getInputStream());
+            BufferedReader br = new BufferedReader(is);
+            while ((line = br.readLine()) != null) {
+                result.append(line);
+            }
+        } catch (Exception e) {
+            log.error("---> 鎵ц鑾峰彇mac鍦板潃鍛戒护閿欒锛歿}", e.getMessage());
+        }
+        return result.toString();
+    }
+
+    /**
+     * 鑾峰彇mac鍦板潃
+     *
+     * @param ip           ip鍦板潃
+     * @param sourceString s
+     * @param macSeparator s
+     * @return mac
+     */
+    @SuppressWarnings("all")
+    public static String filterMacAddress(final String ip, final String sourceString, final String macSeparator) {
+        String result = "";
+        String regExp = "((([0-9,A-F,a-f]{1,2}" + macSeparator + "){1,5})[0-9,A-F,a-f]{1,2})";
+        Pattern pattern = Pattern.compile(regExp);
+        Matcher matcher = pattern.matcher(sourceString);
+        while (matcher.find()) {
+            result = matcher.group(1);
+            // 鍥犺绠楁満澶氱綉鍗¢棶棰橈紝鎴彇绱ч潬IP鍚庣殑绗竴涓猰ac鍦板潃
+            //int num = sourceString.indexOf(ip) - sourceString.indexOf(": " + result + " ");
+            //if (num > 0 && num < 300) {
+            //break;
+            //}
+            if (sourceString.indexOf(ip) <= sourceString.lastIndexOf(matcher.group(1))) {
+                break; //濡傛灉鏈夊涓狪P,鍙尮閰嶆湰IP瀵瑰簲鐨凪ac.
+            }
+        }
+        return result;
+    }
+
+    public static String commond(String cmd) throws IOException {
+        Process process = Runtime.getRuntime().exec(cmd);
+        InputStream inputStream = process.getInputStream();
+        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
+        StringBuilder stringBuilder = new StringBuilder();
+        String line = null;
+        while ((line = bufferedReader.readLine()) != null) {
+            stringBuilder.append(line);
+        }
+        return stringBuilder.toString();
+    }
+
+    @SuppressWarnings("all")
+    public static String getMacByIP(String ipAddress) {
+        try {
+            String result;
+            // 鑾峰彇褰撳墠绯荤粺
+            String os = System.getProperty("os.name");
+            if (os.toLowerCase().startsWith("win")) {
+                result = commond("ping -n 2 " + ipAddress);
+                if (result.contains("TTL") || result.contains("Ping")) {
+                    result = commond("arp -a " + ipAddress);
+                }
+            } else {
+                result = commond("ping -c 2 " + ipAddress);
+                if (result.contains("TTL") || result.contains("ttl") || result.contains("statistics")) {
+                    result = commond("arp -a " + ipAddress);
+                }
+            }
+            String regExp = "([0-9A-Fa-f]{2})([-:][0-9A-Fa-f]{2}){5}";
+            Pattern pattern = Pattern.compile(regExp);
+            Matcher matcher = pattern.matcher(result);
+            StringBuilder stringBuilder = new StringBuilder();
+            while (matcher.find()) {
+                String temp = matcher.group();
+                stringBuilder.append(temp);
+            }
+            return stringBuilder.toString();
+        } catch (Exception e) {
+            return null;
+        }
+    }
+}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/PasswordUtil.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/PasswordUtil.java
new file mode 100644
index 0000000..ed339de
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/uitil/PasswordUtil.java
@@ -0,0 +1,109 @@
+package org.dromara.system.uitil;
+
+
+import java.util.*;
+
+/**
+ * 闅忔満瀵嗙爜鐢熸垚宸ュ叿 *
+ */
+public class PasswordUtil {
+
+    // 鐗规畩瀛楃
+    private static final String SPECIAL_CHARS = "ABCDEFGHJKMNPRSTUVWXYZ";
+    // 鍘绘帀I銆丩銆丱銆丵鏄撴贩娣嗗瓧绗�
+    private static final String UPPER_WORD_CHARS = "ABCDEFGHJKMNPRSTUVWXYZ";
+    // 鍘绘帀i銆乴銆乷銆乹鏄撴贩娣嗗瓧绗�
+    private static final String LOWER_WORD_CHARS = "abcdefghjkmnprstuvwxyz";
+    // 鍘绘帀1銆�0鏄撴贩娣嗗瓧绗�
+    private static final String NUMBER_CHARS = "23456789";
+
+
+    /**
+     * 鐢熸垚鍥哄畾闀垮害鐨勫鏉傚瘑鐮�
+     * @param length
+     * @return
+     */
+    public static String randomPassword(int length){
+        return randomPassword(length,true,true,true,true);
+    }
+
+    /**
+     * @param length        鐢熸垚瀵嗙爜鐨勯暱搴�  寤鸿鑷冲皯6浣�
+     * @param isLowerWord   鏄惁鍖呭惈灏忓啓瀛楁瘝
+     * @param isUpperWord   鏄惁鍖呭惈澶у啓瀛楁瘝
+     * @param isSpecialChar 鏄惁鍖呭惈鐗规畩瀛楃
+     * @param isNum         鏄惁鍖呭惈鏁板瓧
+     * @return String 闅忔満瀵嗙爜
+     * @description: 鐢熸垚闅忔満瀵嗙爜鐨勫伐鍏锋柟娉�
+     */
+    public static String randomPassword(int length, Boolean isLowerWord, Boolean isUpperWord, Boolean isSpecialChar, Boolean isNum) {
+        Random rnd = new Random();
+        // 鍏堝彇蹇呭~椤�1涓�
+        Map<Integer, String> map = new HashMap<>();
+        if (isLowerWord) {
+            map.put(1, LOWER_WORD_CHARS);
+        }
+        if (isUpperWord) {
+            map.put(2, UPPER_WORD_CHARS);
+        }
+        if (isSpecialChar) {
+            map.put(3, SPECIAL_CHARS);
+        }
+        if (isNum) {
+            map.put(4, NUMBER_CHARS);
+        }
+        StringBuilder sb = new StringBuilder();
+        for (Map.Entry<Integer, String> entry : map.entrySet()) {
+            String value = entry.getValue();
+            sb.append(value.charAt(rnd.nextInt(value.length())));
+        }
+        char[] chars = new char[length - sb.length()];
+        for (int i = 0; i < length - sb.length(); i++) {
+            chars[i] = nextChar(rnd, isLowerWord, isUpperWord, isSpecialChar, isNum);
+        }
+        StringBuilder resultSb = sb.append(new String(chars));
+        // 瀵圭粨鏋滄暟鎹贡搴忓鐞嗭紙鍓嶉潰鍥哄畾鏀惧埌鍓嶅嚑涓簡锛屾晠闇�涔卞簭锛�
+        String[] split = resultSb.toString().split("");
+        List<String> strings = Arrays.asList(split);
+        Collections.shuffle(strings);
+        StringBuilder stringBuilder = new StringBuilder(strings.size());
+        strings.forEach(stringBuilder::append);
+        return stringBuilder.toString();
+    }
+
+
+    private static char nextChar(Random rnd, Boolean isLowerWord, Boolean isUpperWord, Boolean isSpecialChar, Boolean isNum) {
+        List<Integer> list = new ArrayList<>();
+        if (isLowerWord) {
+            list.add(1);
+        }
+        if (isUpperWord) {
+            list.add(2);
+        }
+        if (isSpecialChar) {
+            list.add(3);
+        }
+        if (isNum) {
+            list.add(4);
+        }
+        if (list.size() == 0) {
+            // 榛樿鏁板瓧瀵嗙爜
+            list.add(4);
+        }
+
+        // 闅忔満list绱㈠紩
+        int index = rnd.nextInt(list.size());
+        Integer integer = list.get(index);
+        switch (integer) {
+            case 1:
+                return LOWER_WORD_CHARS.charAt(rnd.nextInt(LOWER_WORD_CHARS.length()));
+            case 2:
+                return UPPER_WORD_CHARS.charAt(rnd.nextInt(UPPER_WORD_CHARS.length()));
+            case 3:
+                return SPECIAL_CHARS.charAt(rnd.nextInt(SPECIAL_CHARS.length()));
+            default:
+                return NUMBER_CHARS.charAt(rnd.nextInt(NUMBER_CHARS.length()));
+        }
+    }
+
+}

--
Gitblit v1.8.0