Browse Source

Update 优化代码

Yue 1 tuần trước cách đây
mục cha
commit
e9118f6a3b
25 tập tin đã thay đổi với 134 bổ sung98 xóa
  1. 1 1
      SERVER/VberAdminPlusV3/.script/docker/sql/init.sql
  2. 1 1
      SERVER/VberAdminPlusV3/.script/sql/admin.sql
  3. 2 2
      SERVER/VberAdminPlusV3/pom.xml
  4. 3 3
      SERVER/VberAdminPlusV3/vber-admin/src/main/resources/i18n/messages.properties
  5. 3 3
      SERVER/VberAdminPlusV3/vber-admin/src/main/resources/i18n/messages_zh_CN.properties
  6. 2 2
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/domain/dto/CompleteTaskDTO.java
  7. 1 2
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/domain/dto/UserDTO.java
  8. 1 1
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/service/ConfigService.java
  9. 2 2
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/json/validate/JsonPattern.java
  10. 1 1
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/json/validate/JsonPatternValidator.java
  11. 1 1
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/json/validate/JsonType.java
  12. 45 28
      SERVER/VberAdminPlusV3/vber-common/vber-common-mail/src/main/java/com/vber/common/mail/utils/MailUtils.java
  13. 1 1
      SERVER/VberAdminPlusV3/vber-common/vber-common-redis/src/main/java/com/vber/common/redis/manager/PlusSpringCacheManager.java
  14. 1 1
      SERVER/VberAdminPlusV3/vber-common/vber-common-web/src/main/java/com/vber/common/web/core/I18nLocaleResolver.java
  15. 41 22
      SERVER/VberAdminPlusV3/vber-common/vber-common-web/src/main/java/com/vber/common/web/handler/GlobalExceptionHandler.java
  16. 4 0
      SERVER/VberAdminPlusV3/vber-modules/vber-generator/src/main/java/com/vber/generator/controller/GenController.java
  17. 1 1
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/SysOssExt.java
  18. 2 7
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/SysUser.java
  19. 1 1
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/bo/SysUserBo.java
  20. 2 2
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/vo/SysUserExportVo.java
  21. 2 2
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/vo/SysUserImportVo.java
  22. 1 2
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/vo/SysUserVo.java
  23. 2 2
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/ISysUserService.java
  24. 1 1
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/impl/SysUserServiceImpl.java
  25. 12 9
      SERVER/VberAdminPlusV3/vber-modules/vber-workflow/src/main/java/com/vber/workflow/listener/WorkflowGlobalListener.java

+ 1 - 1
SERVER/VberAdminPlusV3/.script/docker/sql/init.sql

@@ -45,7 +45,7 @@ CREATE TABLE sys_user
     sex         CHAR(1)      DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
     sex         CHAR(1)      DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
     avatar      BIGINT(20) COMMENT '头像地址',
     avatar      BIGINT(20) COMMENT '头像地址',
     password    VARCHAR(100) DEFAULT '' COMMENT '密码',
     password    VARCHAR(100) DEFAULT '' COMMENT '密码',
-    status      CHAR(1)      DEFAULT '0' COMMENT '号状态(0正常 1停用)',
+    status      CHAR(1)      DEFAULT '0' COMMENT '号状态(0正常 1停用)',
     del_flag    CHAR(1)      DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
     del_flag    CHAR(1)      DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
     login_ip    VARCHAR(128) DEFAULT '' COMMENT '最后登录IP',
     login_ip    VARCHAR(128) DEFAULT '' COMMENT '最后登录IP',
     login_date  DATETIME COMMENT '最后登录时间',
     login_date  DATETIME COMMENT '最后登录时间',

+ 1 - 1
SERVER/VberAdminPlusV3/.script/sql/admin.sql

@@ -46,7 +46,7 @@ CREATE TABLE sys_user
     sex         CHAR(1)      DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
     sex         CHAR(1)      DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
     avatar      BIGINT(20) COMMENT '头像地址',
     avatar      BIGINT(20) COMMENT '头像地址',
     password    VARCHAR(100) DEFAULT '' COMMENT '密码',
     password    VARCHAR(100) DEFAULT '' COMMENT '密码',
-    status      CHAR(1)      DEFAULT '0' COMMENT '号状态(0正常 1停用)',
+    status      CHAR(1)      DEFAULT '0' COMMENT '号状态(0正常 1停用)',
     del_flag    CHAR(1)      DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
     del_flag    CHAR(1)      DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
     login_ip    VARCHAR(128) DEFAULT '' COMMENT '最后登录IP',
     login_ip    VARCHAR(128) DEFAULT '' COMMENT '最后登录IP',
     login_date  DATETIME COMMENT '最后登录时间',
     login_date  DATETIME COMMENT '最后登录时间',

+ 2 - 2
SERVER/VberAdminPlusV3/pom.xml

@@ -22,7 +22,7 @@
         <java.version>17</java.version>
         <java.version>17</java.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
-        <spring-boot.version>3.5.8</spring-boot.version>
+        <spring-boot.version>3.5.9</spring-boot.version>
         <spring-boot-admin.version>3.5.5</spring-boot-admin.version>
         <spring-boot-admin.version>3.5.5</spring-boot-admin.version>
         <springdoc.version>2.8.14</springdoc.version>
         <springdoc.version>2.8.14</springdoc.version>
         <mybatis.version>3.5.16</mybatis.version>
         <mybatis.version>3.5.16</mybatis.version>
@@ -54,7 +54,7 @@
         <!-- 限制框架中的fastjson版本 -->
         <!-- 限制框架中的fastjson版本 -->
         <fastjson.version>1.2.83</fastjson.version>
         <fastjson.version>1.2.83</fastjson.version>
         <!-- 面向运行时的D-ORM依赖 -->
         <!-- 面向运行时的D-ORM依赖 -->
-        <anyline.version>8.7.2-20250603</anyline.version>
+        <anyline.version>8.7.3-20251210</anyline.version>
 
 
         <!-- 工作流配置 -->
         <!-- 工作流配置 -->
         <warm-flow.version>1.8.1</warm-flow.version>
         <warm-flow.version>1.8.1</warm-flow.version>

+ 3 - 3
SERVER/VberAdminPlusV3/vber-admin/src/main/resources/i18n/messages.properties

@@ -5,7 +5,7 @@ user.jcaptcha.expire=验证码已失效
 user.not.exists=对不起, 您的账号:{0} 不存在.
 user.not.exists=对不起, 您的账号:{0} 不存在.
 user.password.not.match=用户不存在/密码错误
 user.password.not.match=用户不存在/密码错误
 user.password.retry.limit.count=密码输入错误{0}次
 user.password.retry.limit.count=密码输入错误{0}次
-user.password.retry.limit.exceed=密码输入错误{0}次,户锁定{1}分钟
+user.password.retry.limit.exceed=密码输入错误{0}次,户锁定{1}分钟
 user.password.delete=对不起,您的账号:{0} 已被删除
 user.password.delete=对不起,您的账号:{0} 已被删除
 user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员
 user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员
 role.blocked=角色已封禁,请联系管理员
 role.blocked=角色已封禁,请联系管理员
@@ -47,10 +47,10 @@ repeat.submit.message=不允许重复提交,请稍候再试
 rate.limiter.message=访问过于频繁,请稍候再试
 rate.limiter.message=访问过于频繁,请稍候再试
 sms.code.not.blank=短信验证码不能为空
 sms.code.not.blank=短信验证码不能为空
 sms.code.retry.limit.count=短信验证码输入错误{0}次
 sms.code.retry.limit.count=短信验证码输入错误{0}次
-sms.code.retry.limit.exceed=短信验证码输入错误{0}次,户锁定{1}分钟
+sms.code.retry.limit.exceed=短信验证码输入错误{0}次,户锁定{1}分钟
 email.code.not.blank=邮箱验证码不能为空
 email.code.not.blank=邮箱验证码不能为空
 email.code.retry.limit.count=邮箱验证码输入错误{0}次
 email.code.retry.limit.count=邮箱验证码输入错误{0}次
-email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,户锁定{1}分钟
+email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,户锁定{1}分钟
 xcx.code.not.blank=小程序[code]不能为空
 xcx.code.not.blank=小程序[code]不能为空
 social.source.not.blank=第三方登录平台[source]不能为空
 social.source.not.blank=第三方登录平台[source]不能为空
 social.code.not.blank=第三方登录平台[code]不能为空
 social.code.not.blank=第三方登录平台[code]不能为空

+ 3 - 3
SERVER/VberAdminPlusV3/vber-admin/src/main/resources/i18n/messages_zh_CN.properties

@@ -5,7 +5,7 @@ user.jcaptcha.expire=验证码已失效
 user.not.exists=对不起, 您的账号:{0} 不存在.
 user.not.exists=对不起, 您的账号:{0} 不存在.
 user.password.not.match=用户不存在/密码错误
 user.password.not.match=用户不存在/密码错误
 user.password.retry.limit.count=密码输入错误{0}次
 user.password.retry.limit.count=密码输入错误{0}次
-user.password.retry.limit.exceed=密码输入错误{0}次,户锁定{1}分钟
+user.password.retry.limit.exceed=密码输入错误{0}次,户锁定{1}分钟
 user.password.delete=对不起,您的账号:{0} 已被删除
 user.password.delete=对不起,您的账号:{0} 已被删除
 user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员
 user.blocked=对不起,您的账号:{0} 已禁用,请联系管理员
 role.blocked=角色已封禁,请联系管理员
 role.blocked=角色已封禁,请联系管理员
@@ -48,10 +48,10 @@ repeat.submit.message=不允许重复提交,请稍候再试
 rate.limiter.message=访问过于频繁,请稍候再试
 rate.limiter.message=访问过于频繁,请稍候再试
 sms.code.not.blank=短信验证码不能为空
 sms.code.not.blank=短信验证码不能为空
 sms.code.retry.limit.count=短信验证码输入错误{0}次
 sms.code.retry.limit.count=短信验证码输入错误{0}次
-sms.code.retry.limit.exceed=短信验证码输入错误{0}次,户锁定{1}分钟
+sms.code.retry.limit.exceed=短信验证码输入错误{0}次,户锁定{1}分钟
 email.code.not.blank=邮箱验证码不能为空
 email.code.not.blank=邮箱验证码不能为空
 email.code.retry.limit.count=邮箱验证码输入错误{0}次
 email.code.retry.limit.count=邮箱验证码输入错误{0}次
-email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,户锁定{1}分钟
+email.code.retry.limit.exceed=邮箱验证码输入错误{0}次,户锁定{1}分钟
 xcx.code.not.blank=小程序[code]不能为空
 xcx.code.not.blank=小程序[code]不能为空
 social.source.not.blank=第三方登录平台[source]不能为空
 social.source.not.blank=第三方登录平台[source]不能为空
 social.code.not.blank=第三方登录平台[code]不能为空
 social.code.not.blank=第三方登录平台[code]不能为空

+ 2 - 2
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/domain/dto/CompleteTaskDTO.java

@@ -17,7 +17,6 @@ import java.util.Objects;
 @Data
 @Data
 public class CompleteTaskDTO implements Serializable {
 public class CompleteTaskDTO implements Serializable {
 
 
-
     @Serial
     @Serial
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
 
 
@@ -68,7 +67,8 @@ public class CompleteTaskDTO implements Serializable {
 
 
     public Map<String, Object> getVariables() {
     public Map<String, Object> getVariables() {
         if (variables == null) {
         if (variables == null) {
-            return new HashMap<>(16);
+            variables = new HashMap<>(16);
+            return variables;
         }
         }
         variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
         variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
         return variables;
         return variables;

+ 1 - 2
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/domain/dto/UserDTO.java

@@ -7,7 +7,6 @@ import java.io.Serial;
 import java.io.Serializable;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
 
 
-
 /**
 /**
  * 用户
  * 用户
  *
  *
@@ -61,7 +60,7 @@ public class UserDTO implements Serializable {
     private String sex;
     private String sex;
 
 
     /**
     /**
-     * 号状态(0正常 1停用)
+     * 号状态(0正常 1停用)
      */
      */
     private String status;
     private String status;
 
 

+ 1 - 1
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/service/ConfigService.java

@@ -9,7 +9,7 @@ import java.util.List;
 /**
 /**
  * 通用 参数配置服务
  * 通用 参数配置服务
  *
  *
- * @author Lion Li
+ * @author Iwb
  */
  */
 public interface ConfigService {
 public interface ConfigService {
 
 

+ 2 - 2
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/json/validate/JsonPattern.java

@@ -8,10 +8,10 @@ import java.lang.annotation.*;
 /**
 /**
  * JSON 格式校验注解
  * JSON 格式校验注解
  *
  *
- * @author AprilWind
+ * @author Iwb
  */
  */
 @Documented
 @Documented
-@Target({ElementType.METHOD, ElementType.FIELD})
+@Target({ ElementType.METHOD, ElementType.FIELD })
 @Retention(RetentionPolicy.RUNTIME)
 @Retention(RetentionPolicy.RUNTIME)
 @Constraint(validatedBy = JsonPatternValidator.class)
 @Constraint(validatedBy = JsonPatternValidator.class)
 public @interface JsonPattern {
 public @interface JsonPattern {

+ 1 - 1
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/json/validate/JsonPatternValidator.java

@@ -8,7 +8,7 @@ import jakarta.validation.ConstraintValidatorContext;
 /**
 /**
  * JSON 格式校验器
  * JSON 格式校验器
  *
  *
- * @author AprilWind
+ * @author Iwb
  */
  */
 public class JsonPatternValidator implements ConstraintValidator<JsonPattern, String> {
 public class JsonPatternValidator implements ConstraintValidator<JsonPattern, String> {
 
 

+ 1 - 1
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/json/validate/JsonType.java

@@ -6,7 +6,7 @@ import lombok.Getter;
 /**
 /**
  * JSON 类型枚举
  * JSON 类型枚举
  *
  *
- * @author AprilWind
+ * @author Iwb
  */
  */
 @Getter
 @Getter
 @AllArgsConstructor
 @AllArgsConstructor

+ 45 - 28
SERVER/VberAdminPlusV3/vber-common/vber-common-mail/src/main/java/com/vber/common/mail/utils/MailUtils.java

@@ -21,7 +21,6 @@ import java.util.Collection;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
-
 /**
 /**
  * 邮件工具类
  * 邮件工具类
  */
  */
@@ -109,7 +108,8 @@ public class MailUtils {
      * @return message-id
      * @return message-id
      * @since 4.0.3
      * @since 4.0.3
      */
      */
-    public static String send(String to, String cc, String bcc, String subject, String content, boolean isHtml, File... files) {
+    public static String send(String to, String cc, String bcc, String subject, String content, boolean isHtml,
+            File... files) {
         return send(splitAddress(to), splitAddress(cc), splitAddress(bcc), subject, content, isHtml, files);
         return send(splitAddress(to), splitAddress(cc), splitAddress(bcc), subject, content, isHtml, files);
     }
     }
 
 
@@ -167,11 +167,13 @@ public class MailUtils {
      * @return message-id
      * @return message-id
      * @since 4.0.3
      * @since 4.0.3
      */
      */
-    public static String send(Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content, boolean isHtml, File... files) {
+    public static String send(Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject,
+            String content, boolean isHtml, File... files) {
         return send(getMailAccount(), true, tos, ccs, bccs, subject, content, null, isHtml, files);
         return send(getMailAccount(), true, tos, ccs, bccs, subject, content, null, isHtml, files);
     }
     }
 
 
-    // ------------------------------------------------------------------------------------------------------------------------------- Custom MailAccount
+    // -------------------------------------------------------------------------------------------------------------------------------
+    // Custom MailAccount
 
 
     /**
     /**
      * 发送邮件给多人
      * 发送邮件给多人
@@ -185,14 +187,15 @@ public class MailUtils {
      * @return message-id
      * @return message-id
      * @since 3.2.0
      * @since 3.2.0
      */
      */
-    public static String send(MailAccount mailAccount, String to, String subject, String content, boolean isHtml, File... files) {
+    public static String send(MailAccount mailAccount, String to, String subject, String content, boolean isHtml,
+            File... files) {
         return send(mailAccount, splitAddress(to), subject, content, isHtml, files);
         return send(mailAccount, splitAddress(to), subject, content, isHtml, files);
     }
     }
 
 
     /**
     /**
      * 发送邮件给多人
      * 发送邮件给多人
      *
      *
-     * @param mailAccount 邮件户信息
+     * @param mailAccount 邮件户信息
      * @param tos         收件人列表
      * @param tos         收件人列表
      * @param subject     标题
      * @param subject     标题
      * @param content     正文
      * @param content     正文
@@ -200,14 +203,15 @@ public class MailUtils {
      * @param files       附件列表
      * @param files       附件列表
      * @return message-id
      * @return message-id
      */
      */
-    public static String send(MailAccount mailAccount, Collection<String> tos, String subject, String content, boolean isHtml, File... files) {
+    public static String send(MailAccount mailAccount, Collection<String> tos, String subject, String content,
+            boolean isHtml, File... files) {
         return send(mailAccount, tos, null, null, subject, content, isHtml, files);
         return send(mailAccount, tos, null, null, subject, content, isHtml, files);
     }
     }
 
 
     /**
     /**
      * 发送邮件给多人
      * 发送邮件给多人
      *
      *
-     * @param mailAccount 邮件户信息
+     * @param mailAccount 邮件户信息
      * @param tos         收件人列表
      * @param tos         收件人列表
      * @param ccs         抄送人列表,可以为null或空
      * @param ccs         抄送人列表,可以为null或空
      * @param bccs        密送人列表,可以为null或空
      * @param bccs        密送人列表,可以为null或空
@@ -218,7 +222,8 @@ public class MailUtils {
      * @return message-id
      * @return message-id
      * @since 4.0.3
      * @since 4.0.3
      */
      */
-    public static String send(MailAccount mailAccount, Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content, boolean isHtml, File... files) {
+    public static String send(MailAccount mailAccount, Collection<String> tos, Collection<String> ccs,
+            Collection<String> bccs, String subject, String content, boolean isHtml, File... files) {
         return send(mailAccount, false, tos, ccs, bccs, subject, content, null, isHtml, files);
         return send(mailAccount, false, tos, ccs, bccs, subject, content, null, isHtml, files);
     }
     }
 
 
@@ -234,7 +239,8 @@ public class MailUtils {
      * @return message-id
      * @return message-id
      * @since 3.2.0
      * @since 3.2.0
      */
      */
-    public static String sendHtml(String to, String subject, String content, Map<String, InputStream> imageMap, File... files) {
+    public static String sendHtml(String to, String subject, String content, Map<String, InputStream> imageMap,
+            File... files) {
         return send(to, subject, content, imageMap, true, files);
         return send(to, subject, content, imageMap, true, files);
     }
     }
 
 
@@ -250,7 +256,8 @@ public class MailUtils {
      * @param files    附件列表
      * @param files    附件列表
      * @return message-id
      * @return message-id
      */
      */
-    public static String send(String to, String subject, String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
+    public static String send(String to, String subject, String content, Map<String, InputStream> imageMap,
+            boolean isHtml, File... files) {
         return send(splitAddress(to), subject, content, imageMap, isHtml, files);
         return send(splitAddress(to), subject, content, imageMap, isHtml, files);
     }
     }
 
 
@@ -269,7 +276,8 @@ public class MailUtils {
      * @return message-id
      * @return message-id
      * @since 4.0.3
      * @since 4.0.3
      */
      */
-    public static String send(String to, String cc, String bcc, String subject, String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
+    public static String send(String to, String cc, String bcc, String subject, String content,
+            Map<String, InputStream> imageMap, boolean isHtml, File... files) {
         return send(splitAddress(to), splitAddress(cc), splitAddress(bcc), subject, content, imageMap, isHtml, files);
         return send(splitAddress(to), splitAddress(cc), splitAddress(bcc), subject, content, imageMap, isHtml, files);
     }
     }
 
 
@@ -284,7 +292,8 @@ public class MailUtils {
      * @return message-id
      * @return message-id
      * @since 3.2.0
      * @since 3.2.0
      */
      */
-    public static String sendHtml(Collection<String> tos, String subject, String content, Map<String, InputStream> imageMap, File... files) {
+    public static String sendHtml(Collection<String> tos, String subject, String content,
+            Map<String, InputStream> imageMap, File... files) {
         return send(tos, subject, content, imageMap, true, files);
         return send(tos, subject, content, imageMap, true, files);
     }
     }
 
 
@@ -299,7 +308,8 @@ public class MailUtils {
      * @param files    附件列表
      * @param files    附件列表
      * @return message-id
      * @return message-id
      */
      */
-    public static String send(Collection<String> tos, String subject, String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
+    public static String send(Collection<String> tos, String subject, String content, Map<String, InputStream> imageMap,
+            boolean isHtml, File... files) {
         return send(tos, null, null, subject, content, imageMap, isHtml, files);
         return send(tos, null, null, subject, content, imageMap, isHtml, files);
     }
     }
 
 
@@ -317,11 +327,13 @@ public class MailUtils {
      * @return message-id
      * @return message-id
      * @since 4.0.3
      * @since 4.0.3
      */
      */
-    public static String send(Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
+    public static String send(Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject,
+            String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
         return send(getMailAccount(), true, tos, ccs, bccs, subject, content, imageMap, isHtml, files);
         return send(getMailAccount(), true, tos, ccs, bccs, subject, content, imageMap, isHtml, files);
     }
     }
 
 
-    // ------------------------------------------------------------------------------------------------------------------------------- Custom MailAccount
+    // -------------------------------------------------------------------------------------------------------------------------------
+    // Custom MailAccount
 
 
     /**
     /**
      * 发送邮件给多人
      * 发送邮件给多人
@@ -336,14 +348,15 @@ public class MailUtils {
      * @return message-id
      * @return message-id
      * @since 3.2.0
      * @since 3.2.0
      */
      */
-    public static String send(MailAccount mailAccount, String to, String subject, String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
+    public static String send(MailAccount mailAccount, String to, String subject, String content,
+            Map<String, InputStream> imageMap, boolean isHtml, File... files) {
         return send(mailAccount, splitAddress(to), subject, content, imageMap, isHtml, files);
         return send(mailAccount, splitAddress(to), subject, content, imageMap, isHtml, files);
     }
     }
 
 
     /**
     /**
      * 发送邮件给多人
      * 发送邮件给多人
      *
      *
-     * @param mailAccount 邮件户信息
+     * @param mailAccount 邮件户信息
      * @param tos         收件人列表
      * @param tos         收件人列表
      * @param subject     标题
      * @param subject     标题
      * @param content     正文
      * @param content     正文
@@ -353,14 +366,15 @@ public class MailUtils {
      * @return message-id
      * @return message-id
      * @since 4.6.3
      * @since 4.6.3
      */
      */
-    public static String send(MailAccount mailAccount, Collection<String> tos, String subject, String content, Map<String, InputStream> imageMap, boolean isHtml, File... files) {
+    public static String send(MailAccount mailAccount, Collection<String> tos, String subject, String content,
+            Map<String, InputStream> imageMap, boolean isHtml, File... files) {
         return send(mailAccount, tos, null, null, subject, content, imageMap, isHtml, files);
         return send(mailAccount, tos, null, null, subject, content, imageMap, isHtml, files);
     }
     }
 
 
     /**
     /**
      * 发送邮件给多人
      * 发送邮件给多人
      *
      *
-     * @param mailAccount 邮件户信息
+     * @param mailAccount 邮件户信息
      * @param tos         收件人列表
      * @param tos         收件人列表
      * @param ccs         抄送人列表,可以为null或空
      * @param ccs         抄送人列表,可以为null或空
      * @param bccs        密送人列表,可以为null或空
      * @param bccs        密送人列表,可以为null或空
@@ -372,8 +386,9 @@ public class MailUtils {
      * @return message-id
      * @return message-id
      * @since 4.6.3
      * @since 4.6.3
      */
      */
-    public static String send(MailAccount mailAccount, Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content, Map<String, InputStream> imageMap,
-                              boolean isHtml, File... files) {
+    public static String send(MailAccount mailAccount, Collection<String> tos, Collection<String> ccs,
+            Collection<String> bccs, String subject, String content, Map<String, InputStream> imageMap,
+            boolean isHtml, File... files) {
         return send(mailAccount, false, tos, ccs, bccs, subject, content, imageMap, isHtml, files);
         return send(mailAccount, false, tos, ccs, bccs, subject, content, imageMap, isHtml, files);
     }
     }
 
 
@@ -395,12 +410,13 @@ public class MailUtils {
                 : Session.getInstance(mailAccount.getSmtpProps(), authenticator);
                 : Session.getInstance(mailAccount.getSmtpProps(), authenticator);
     }
     }
 
 
-    // ------------------------------------------------------------------------------------------------------------------------ Private method start
+    // ------------------------------------------------------------------------------------------------------------------------
+    // Private method start
 
 
     /**
     /**
      * 发送邮件给多人
      * 发送邮件给多人
      *
      *
-     * @param mailAccount      邮件户信息
+     * @param mailAccount      邮件户信息
      * @param useGlobalSession 是否全局共享Session
      * @param useGlobalSession 是否全局共享Session
      * @param tos              收件人列表
      * @param tos              收件人列表
      * @param ccs              抄送人列表,可以为null或空
      * @param ccs              抄送人列表,可以为null或空
@@ -413,8 +429,9 @@ public class MailUtils {
      * @return message-id
      * @return message-id
      * @since 4.6.3
      * @since 4.6.3
      */
      */
-    private static String send(MailAccount mailAccount, boolean useGlobalSession, Collection<String> tos, Collection<String> ccs, Collection<String> bccs, String subject, String content,
-                               Map<String, InputStream> imageMap, boolean isHtml, File... files) {
+    private static String send(MailAccount mailAccount, boolean useGlobalSession, Collection<String> tos,
+            Collection<String> ccs, Collection<String> bccs, String subject, String content,
+            Map<String, InputStream> imageMap, boolean isHtml, File... files) {
         final JakartaMail mail = JakartaMail.create(mailAccount).setUseGlobalSession(useGlobalSession);
         final JakartaMail mail = JakartaMail.create(mailAccount).setUseGlobalSession(useGlobalSession);
 
 
         // 可选抄送人
         // 可选抄送人
@@ -465,6 +482,6 @@ public class MailUtils {
         }
         }
         return result;
         return result;
     }
     }
-    // ------------------------------------------------------------------------------------------------------------------------ Private method end
+    // ------------------------------------------------------------------------------------------------------------------------
+    // Private method end
 }
 }
-

+ 1 - 1
SERVER/VberAdminPlusV3/vber-common/vber-common-redis/src/main/java/com/vber/common/redis/manager/PlusSpringCacheManager.java

@@ -156,8 +156,8 @@ public class PlusSpringCacheManager implements CacheManager {
         return cache;
         return cache;
     }
     }
 
 
-    @Override
     @SuppressWarnings("null")
     @SuppressWarnings("null")
+    @Override
     public @NonNull Collection<String> getCacheNames() {
     public @NonNull Collection<String> getCacheNames() {
         return Collections.unmodifiableCollection(configMap.keySet());
         return Collections.unmodifiableCollection(configMap.keySet());
     }
     }

+ 1 - 1
SERVER/VberAdminPlusV3/vber-common/vber-common-web/src/main/java/com/vber/common/web/core/I18nLocaleResolver.java

@@ -32,7 +32,7 @@ public class I18nLocaleResolver implements LocaleResolver {
 
 
     @Override
     @Override
     public void setLocale(@NonNull HttpServletRequest httpServletRequest,
     public void setLocale(@NonNull HttpServletRequest httpServletRequest,
-                          @Nullable HttpServletResponse httpServletResponse, @Nullable Locale locale) {
+            @Nullable HttpServletResponse httpServletResponse, @Nullable Locale locale) {
 
 
     }
     }
 }
 }

+ 41 - 22
SERVER/VberAdminPlusV3/vber-common/vber-common-web/src/main/java/com/vber/common/web/handler/GlobalExceptionHandler.java

@@ -14,7 +14,10 @@ import jakarta.servlet.http.HttpServletRequest;
 import jakarta.validation.ConstraintViolation;
 import jakarta.validation.ConstraintViolation;
 import jakarta.validation.ConstraintViolationException;
 import jakarta.validation.ConstraintViolationException;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.context.MessageSourceResolvable;
 import org.springframework.context.support.DefaultMessageSourceResolvable;
 import org.springframework.context.support.DefaultMessageSourceResolvable;
+import org.springframework.expression.ExpressionException;
 import org.springframework.http.converter.HttpMessageNotReadableException;
 import org.springframework.http.converter.HttpMessageNotReadableException;
 import org.springframework.validation.BindException;
 import org.springframework.validation.BindException;
 import org.springframework.web.HttpRequestMethodNotSupportedException;
 import org.springframework.web.HttpRequestMethodNotSupportedException;
@@ -26,6 +29,7 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
 import org.springframework.web.context.request.async.AsyncRequestTimeoutException;
 import org.springframework.web.context.request.async.AsyncRequestTimeoutException;
 import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
 import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
 import org.springframework.web.servlet.NoHandlerFoundException;
 import org.springframework.web.servlet.NoHandlerFoundException;
+import org.springframework.web.method.annotation.HandlerMethodValidationException;
 
 
 import java.io.IOException;
 import java.io.IOException;
 
 
@@ -43,7 +47,7 @@ public class GlobalExceptionHandler {
      */
      */
     @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
     @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
     public R<Void> handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,
     public R<Void> handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e,
-                                                       HttpServletRequest request) {
+            HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         String requestURI = request.getRequestURI();
         log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod());
         log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod());
         return R.fail(HttpStatus.HTTP_BAD_METHOD, e.getMessage());
         return R.fail(HttpStatus.HTTP_BAD_METHOD, e.getMessage());
@@ -77,7 +81,7 @@ public class GlobalExceptionHandler {
     public R<Void> handleServletException(ServletException e, HttpServletRequest request) {
     public R<Void> handleServletException(ServletException e, HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         String requestURI = request.getRequestURI();
         log.error("请求地址'{}',发生未知异常.", requestURI, e);
         log.error("请求地址'{}',发生未知异常.", requestURI, e);
-        return R.fail(e.getMessage());
+        return R.fail("发生未知异常,请联系管理员");
     }
     }
 
 
     /**
     /**
@@ -96,8 +100,7 @@ public class GlobalExceptionHandler {
     public R<Void> handleMissingPathVariableException(MissingPathVariableException e, HttpServletRequest request) {
     public R<Void> handleMissingPathVariableException(MissingPathVariableException e, HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         String requestURI = request.getRequestURI();
         log.error("请求路径中缺少必需的路径变量'{}',发生系统异常.", requestURI);
         log.error("请求路径中缺少必需的路径变量'{}',发生系统异常.", requestURI);
-        String variableName = e.getVariableName() != null ? e.getVariableName() : "unknown";
-        return R.fail(String.format("请求路径中缺少必需的路径变量[%s]", variableName));
+        return R.fail(String.format("请求路径中缺少必需的路径变量[%s]", e.getVariableName()));
     }
     }
 
 
     /**
     /**
@@ -105,7 +108,7 @@ public class GlobalExceptionHandler {
      */
      */
     @ExceptionHandler(MethodArgumentTypeMismatchException.class)
     @ExceptionHandler(MethodArgumentTypeMismatchException.class)
     public R<Void> handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e,
     public R<Void> handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e,
-                                                             HttpServletRequest request) {
+            HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         String requestURI = request.getRequestURI();
         log.error("请求参数类型不匹配'{}',发生系统异常.", requestURI);
         log.error("请求参数类型不匹配'{}',发生系统异常.", requestURI);
         Class<?> requiredType = e.getRequiredType();
         Class<?> requiredType = e.getRequiredType();
@@ -113,8 +116,7 @@ public class GlobalExceptionHandler {
         String paramName = e.getName() != null ? e.getName() : "unknown";
         String paramName = e.getName() != null ? e.getName() : "unknown";
         Object value = e.getValue();
         Object value = e.getValue();
         String paramValue = value != null ? value.toString() : "null";
         String paramValue = value != null ? value.toString() : "null";
-        return R.fail(
-                String.format("请求参数类型不匹配,参数[%s]要求类型为:'%s',但输入值为:'%s'", paramName, requiredTypeName, paramValue));
+        return R.fail(String.format("请求参数类型不匹配,参数[%s]要求类型为:'%s',但输入值为:'%s'", paramName, requiredTypeName, paramValue));
     }
     }
 
 
     /**
     /**
@@ -124,18 +126,11 @@ public class GlobalExceptionHandler {
     public R<Void> handleNoHandlerFoundException(NoHandlerFoundException e, HttpServletRequest request) {
     public R<Void> handleNoHandlerFoundException(NoHandlerFoundException e, HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         String requestURI = request.getRequestURI();
         log.error("请求地址'{}'不存在.", requestURI);
         log.error("请求地址'{}'不存在.", requestURI);
-        return R.fail(HttpStatus.HTTP_NOT_FOUND, e.getMessage());
+        return R.fail(HttpStatus.HTTP_NOT_FOUND, "请求地址不存在");
     }
     }
 
 
     /**
     /**
-     * sse 连接超时异常 不需要处理
-     */
-    @ExceptionHandler(AsyncRequestTimeoutException.class)
-    public void handleRuntimeException(AsyncRequestTimeoutException e) {
-    }
-
-    /**
-     * 拦截IO异常
+     * 拦截未知的运行时异常
      */
      */
     @ResponseStatus(org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR)
     @ResponseStatus(org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR)
     @ExceptionHandler(IOException.class)
     @ExceptionHandler(IOException.class)
@@ -148,6 +143,13 @@ public class GlobalExceptionHandler {
         log.error("请求地址'{}',连接中断", requestURI, e);
         log.error("请求地址'{}',连接中断", requestURI, e);
     }
     }
 
 
+    /**
+     * sse 连接超时异常 不需要处理
+     */
+    @ExceptionHandler(AsyncRequestTimeoutException.class)
+    public void handleRuntimeException(AsyncRequestTimeoutException e) {
+    }
+
     /**
     /**
      * 拦截未知的运行时异常
      * 拦截未知的运行时异常
      */
      */
@@ -155,7 +157,7 @@ public class GlobalExceptionHandler {
     public R<Void> handleRuntimeException(RuntimeException e, HttpServletRequest request) {
     public R<Void> handleRuntimeException(RuntimeException e, HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         String requestURI = request.getRequestURI();
         log.error("请求地址'{}',发生未知异常.", requestURI, e);
         log.error("请求地址'{}',发生未知异常.", requestURI, e);
-        return R.fail(e.getMessage());
+        return R.fail("发生未知异常,请联系管理员");
     }
     }
 
 
     /**
     /**
@@ -165,7 +167,7 @@ public class GlobalExceptionHandler {
     public R<Void> handleException(Exception e, HttpServletRequest request) {
     public R<Void> handleException(Exception e, HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         String requestURI = request.getRequestURI();
         log.error("请求地址'{}',发生系统异常.", requestURI, e);
         log.error("请求地址'{}',发生系统异常.", requestURI, e);
-        return R.fail(e.getMessage());
+        return R.fail("发生系统异常,请联系管理员");
     }
     }
 
 
     /**
     /**
@@ -199,6 +201,16 @@ public class GlobalExceptionHandler {
         return R.fail(message);
         return R.fail(message);
     }
     }
 
 
+    /**
+     * 方法参数校验异常 用于处理 @Validated 注解
+     */
+    @ExceptionHandler(HandlerMethodValidationException.class)
+    public R<Void> handlerMethodValidationException(HandlerMethodValidationException e) {
+        log.error(e.getMessage());
+        String message = StreamUtils.join(e.getAllErrors(), MessageSourceResolvable::getDefaultMessage, ", ");
+        return R.fail(message);
+    }
+
     /**
     /**
      * JSON 解析异常(Jackson 在处理 JSON 格式出错时抛出)
      * JSON 解析异常(Jackson 在处理 JSON 格式出错时抛出)
      * 可能是请求体格式非法,也可能是服务端反序列化失败
      * 可能是请求体格式非法,也可能是服务端反序列化失败
@@ -215,11 +227,18 @@ public class GlobalExceptionHandler {
      */
      */
     @ExceptionHandler(HttpMessageNotReadableException.class)
     @ExceptionHandler(HttpMessageNotReadableException.class)
     public R<Void> handleHttpMessageNotReadableException(HttpMessageNotReadableException e,
     public R<Void> handleHttpMessageNotReadableException(HttpMessageNotReadableException e,
-                                                         HttpServletRequest request) {
+            HttpServletRequest request) {
         log.error("请求地址'{}', 参数解析失败: {}", request.getRequestURI(), e.getMessage());
         log.error("请求地址'{}', 参数解析失败: {}", request.getRequestURI(), e.getMessage());
-        Throwable cause = e.getMostSpecificCause();
-        String errorMessage = cause != null ? cause.getMessage() : e.getMessage();
-        return R.fail(HttpStatus.HTTP_BAD_REQUEST, "请求参数格式错误:" + errorMessage);
+        return R.fail(HttpStatus.HTTP_BAD_REQUEST, "请求参数格式错误:" + e.getMostSpecificCause().getMessage());
+    }
+
+    /**
+     * SpEL 表达式相关异常
+     */
+    @ExceptionHandler(ExpressionException.class)
+    public R<Void> handleSpelException(ExpressionException e, HttpServletRequest request) {
+        log.error("请求地址'{}',SpEL解析异常: {}", request.getRequestURI(), e.getMessage());
+        return R.fail(HttpStatus.HTTP_INTERNAL_ERROR, "SpEL解析失败:" + e.getMessage());
     }
     }
 
 
 }
 }

+ 4 - 0
SERVER/VberAdminPlusV3/vber-modules/vber-generator/src/main/java/com/vber/generator/controller/GenController.java

@@ -3,6 +3,8 @@ package com.vber.generator.controller;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.io.IoUtil;
+
+import com.baomidou.lock.annotation.Lock4j;
 import com.vber.common.core.domain.R;
 import com.vber.common.core.domain.R;
 import com.vber.common.idempotent.annotation.RepeatSubmit;
 import com.vber.common.idempotent.annotation.RepeatSubmit;
 import com.vber.common.log.annotation.Log;
 import com.vber.common.log.annotation.Log;
@@ -94,6 +96,7 @@ public class GenController extends BaseController {
     @RepeatSubmit()
     @RepeatSubmit()
     @SaCheckPermission("tool:gen:import")
     @SaCheckPermission("tool:gen:import")
     @Log(title = "代码生成", businessType = BusinessType.IMPORT)
     @Log(title = "代码生成", businessType = BusinessType.IMPORT)
+    @Lock4j(keys = { "#dataName" }, acquireTimeout = 10000)
     @PostMapping("/importTable")
     @PostMapping("/importTable")
     public R<Void> importTableSave(String tables, String dataName) {
     public R<Void> importTableSave(String tables, String dataName) {
         String[] tableNames = Convert.toStrArray(tables);
         String[] tableNames = Convert.toStrArray(tables);
@@ -188,6 +191,7 @@ public class GenController extends BaseController {
     @RepeatSubmit()
     @RepeatSubmit()
     @SaCheckPermission("tool:gen:edit")
     @SaCheckPermission("tool:gen:edit")
     @Log(title = "代码生成", businessType = BusinessType.UPDATE)
     @Log(title = "代码生成", businessType = BusinessType.UPDATE)
+    @Lock4j(keys = { "#tableId" }, acquireTimeout = 10000)
     @GetMapping("/syncDb/{tableId}")
     @GetMapping("/syncDb/{tableId}")
     public R<Void> syncDb(@PathVariable("tableId") Long tableId) {
     public R<Void> syncDb(@PathVariable("tableId") Long tableId) {
         genTableService.syncDb(tableId);
         genTableService.syncDb(tableId);

+ 1 - 1
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/SysOssExt.java

@@ -9,7 +9,7 @@ import java.util.List;
 /**
 /**
  * 附件扩展字段对象(存储在 SysOss.ext1 的 JSON 字符串中)
  * 附件扩展字段对象(存储在 SysOss.ext1 的 JSON 字符串中)
  *
  *
- * @author AprilWind
+ * @author Iwb
  */
  */
 @Data
 @Data
 public class SysOssExt implements Serializable {
 public class SysOssExt implements Serializable {

+ 2 - 7
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/SysUser.java

@@ -70,15 +70,11 @@ public class SysUser extends TenantEntity {
     /**
     /**
      * 密码
      * 密码
      */
      */
-    @TableField(
-            insertStrategy = FieldStrategy.NOT_EMPTY,
-            updateStrategy = FieldStrategy.NOT_EMPTY,
-            whereStrategy = FieldStrategy.NOT_EMPTY
-    )
+    @TableField(insertStrategy = FieldStrategy.NOT_EMPTY, updateStrategy = FieldStrategy.NOT_EMPTY, whereStrategy = FieldStrategy.NOT_EMPTY)
     private String password;
     private String password;
 
 
     /**
     /**
-     * 号状态(0正常 1停用)
+     * 账号状态(0正常 1停用)
      */
      */
     private String status;
     private String status;
 
 
@@ -103,7 +99,6 @@ public class SysUser extends TenantEntity {
      */
      */
     private String remark;
     private String remark;
 
 
-
     public SysUser(Long userId) {
     public SysUser(Long userId) {
         this.userId = userId;
         this.userId = userId;
     }
     }

+ 1 - 1
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/bo/SysUserBo.java

@@ -78,7 +78,7 @@ public class SysUserBo extends BaseEntity {
     private String password;
     private String password;
 
 
     /**
     /**
-     * 号状态(0正常 1停用)
+     * 号状态(0正常 1停用)
      */
      */
     private String status;
     private String status;
 
 

+ 2 - 2
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/vo/SysUserExportVo.java

@@ -62,9 +62,9 @@ public class SysUserExportVo implements Serializable {
     private String sex;
     private String sex;
 
 
     /**
     /**
-     * 号状态(0正常 1停用)
+     * 号状态(0正常 1停用)
      */
      */
-    @ExcelProperty(value = "号状态", converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "号状态", converter = ExcelDictConvert.class)
     @ExcelDictFormat(dictType = "sys_normal_disable")
     @ExcelDictFormat(dictType = "sys_normal_disable")
     private String status;
     private String status;
 
 

+ 2 - 2
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/vo/SysUserImportVo.java

@@ -67,9 +67,9 @@ public class SysUserImportVo implements Serializable {
     private String sex;
     private String sex;
 
 
     /**
     /**
-     * 号状态(0正常 1停用)
+     * 号状态(0正常 1停用)
      */
      */
-    @ExcelProperty(value = "号状态", converter = ExcelDictConvert.class)
+    @ExcelProperty(value = "号状态", converter = ExcelDictConvert.class)
     @ExcelDictFormat(dictType = "sys_normal_disable")
     @ExcelDictFormat(dictType = "sys_normal_disable")
     private String status;
     private String status;
 
 

+ 1 - 2
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/vo/SysUserVo.java

@@ -15,7 +15,6 @@ import java.io.Serializable;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
-
 /**
 /**
  * 用户信息视图对象 sys_user
  * 用户信息视图对象 sys_user
  *
  *
@@ -89,7 +88,7 @@ public class SysUserVo implements Serializable {
     private String password;
     private String password;
 
 
     /**
     /**
-     * 号状态(0正常 1停用)
+     * 号状态(0正常 1停用)
      */
      */
     private String status;
     private String status;
 
 

+ 2 - 2
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/ISysUserService.java

@@ -181,7 +181,7 @@ public interface ISysUserService {
      * 修改用户状态
      * 修改用户状态
      *
      *
      * @param userId 用户ID
      * @param userId 用户ID
-     * @param status 号状态
+     * @param status 号状态
      * @return 结果
      * @return 结果
      */
      */
     int updateUserStatus(Long userId, String status);
     int updateUserStatus(Long userId, String status);
@@ -239,7 +239,7 @@ public interface ISysUserService {
     /**
     /**
      * 通过用户ID查询用户账户
      * 通过用户ID查询用户账户
      *
      *
-     * @param userIds 用户ID  多个用逗号隔开
+     * @param userIds 用户ID 多个用逗号隔开
      * @return 用户昵称
      * @return 用户昵称
      */
      */
     String selectNicknameByIds(String userIds);
     String selectNicknameByIds(String userIds);

+ 1 - 1
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/impl/SysUserServiceImpl.java

@@ -388,7 +388,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
      * 修改用户状态
      * 修改用户状态
      *
      *
      * @param userId 用户ID
      * @param userId 用户ID
-     * @param status 号状态
+     * @param status 号状态
      * @return 结果
      * @return 结果
      */
      */
     @Override
     @Override

+ 12 - 9
SERVER/VberAdminPlusV3/vber-modules/vber-workflow/src/main/java/com/vber/workflow/listener/WorkflowGlobalListener.java

@@ -75,7 +75,7 @@ public class WorkflowGlobalListener implements GlobalListener {
             NodeExtVo nodeExt = nodeExtService.parseNodeExt(ext);
             NodeExtVo nodeExt = nodeExtService.parseNodeExt(ext);
             Map<String, Object> variable = listenerVariable.getVariable();
             Map<String, Object> variable = listenerVariable.getVariable();
             Set<String> copyList = nodeExt.getCopySettings();
             Set<String> copyList = nodeExt.getCopySettings();
-            if (CollUtil.isNotEmpty(copyList)) {
+            if (CollUtil.isEmpty(copyList)) {
                 List<FlowCopyBo> list = StreamUtils.toList(copyList, x -> {
                 List<FlowCopyBo> list = StreamUtils.toList(copyList, x -> {
                     FlowCopyBo bo = new FlowCopyBo();
                     FlowCopyBo bo = new FlowCopyBo();
                     Long id = Convert.toLong(x);
                     Long id = Convert.toLong(x);
@@ -106,7 +106,8 @@ public class WorkflowGlobalListener implements GlobalListener {
         String applyNodeCode = flwCommonService.applyNodeCode(definition.getId());
         String applyNodeCode = flwCommonService.applyNodeCode(definition.getId());
         for (Task flowTask : nextTasks) {
         for (Task flowTask : nextTasks) {
             // 如果办理或者退回并行存在需要指定办理人,则直接覆盖办理人
             // 如果办理或者退回并行存在需要指定办理人,则直接覆盖办理人
-            if (variable.containsKey(flowTask.getNodeCode()) && TaskStatusEnum.isPassOrBack(flowParams.getHisStatus())) {
+            if (variable.containsKey(flowTask.getNodeCode())
+                    && TaskStatusEnum.isPassOrBack(flowParams.getHisStatus())) {
                 String userIds = variable.get(flowTask.getNodeCode()).toString();
                 String userIds = variable.get(flowTask.getNodeCode()).toString();
                 flowTask.setPermissionList(List.of(userIds.split(StringUtils.SEPARATOR)));
                 flowTask.setPermissionList(List.of(userIds.split(StringUtils.SEPARATOR)));
                 variable.remove(flowTask.getNodeCode());
                 variable.remove(flowTask.getNodeCode());
@@ -141,10 +142,11 @@ public class WorkflowGlobalListener implements GlobalListener {
             params.put("message", flowParams.getMessage());
             params.put("message", flowParams.getMessage());
             variable = flowParams.getVariable();
             variable = flowParams.getVariable();
         }
         }
-        //申请人提交事件
+        // 申请人提交事件
         Boolean submit = MapUtil.getBool(variable, FlowConstant.SUBMIT);
         Boolean submit = MapUtil.getBool(variable, FlowConstant.SUBMIT);
         if (submit != null && submit) {
         if (submit != null && submit) {
-            flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, instance.getFlowStatus(), variable, true);
+            flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, instance.getFlowStatus(),
+                    variable, true);
         } else {
         } else {
             // 判断流程状态(发布:撤销,退回,作废,终止,已完成事件)
             // 判断流程状态(发布:撤销,退回,作废,终止,已完成事件)
             String status = determineFlowStatus(instance);
             String status = determineFlowStatus(instance);
@@ -155,17 +157,19 @@ public class WorkflowGlobalListener implements GlobalListener {
                 if (task != null && CollUtil.isNotEmpty(nextTasks) && nextTasks.size() == 1
                 if (task != null && CollUtil.isNotEmpty(nextTasks) && nextTasks.size() == 1
                         && flwCommonService.applyNodeCode(definition.getId()).equals(nextTasks.get(0).getNodeCode())) {
                         && flwCommonService.applyNodeCode(definition.getId()).equals(nextTasks.get(0).getNodeCode())) {
                     // 如果为画线指定驳回 线条指定为驳回 驳回得节点为申请人节点 则修改流程状态为退回
                     // 如果为画线指定驳回 线条指定为驳回 驳回得节点为申请人节点 则修改流程状态为退回
-                    flowProcessEventHandler.processHandler(definition.getFlowCode(), instance, BusinessStatusEnum.BACK.getStatus(), params, false);
+                    flowProcessEventHandler.processHandler(definition.getFlowCode(), instance,
+                            BusinessStatusEnum.BACK.getStatus(), params, false);
                     // 修改流程实例状态
                     // 修改流程实例状态
                     instance.setFlowStatus(BusinessStatusEnum.BACK.getStatus());
                     instance.setFlowStatus(BusinessStatusEnum.BACK.getStatus());
                     FlowEngine.insService().updateById(instance);
                     FlowEngine.insService().updateById(instance);
                 }
                 }
             }
             }
         }
         }
-        //发布任务事件
+        // 发布任务事件
         if (CollUtil.isNotEmpty(nextTasks)) {
         if (CollUtil.isNotEmpty(nextTasks)) {
             for (Task nextTask : nextTasks) {
             for (Task nextTask : nextTasks) {
-                flowProcessEventHandler.processTaskHandler(definition.getFlowCode(), instance, nextTask.getId(), params);
+                flowProcessEventHandler.processTaskHandler(definition.getFlowCode(), instance, nextTask.getId(),
+                        params);
             }
             }
         }
         }
         if (ObjectUtil.isNull(flowParams)) {
         if (ObjectUtil.isNull(flowParams)) {
@@ -195,8 +199,7 @@ public class WorkflowGlobalListener implements GlobalListener {
                 FlowConstant.FLOW_COPY_LIST,
                 FlowConstant.FLOW_COPY_LIST,
                 FlowConstant.MESSAGE_TYPE,
                 FlowConstant.MESSAGE_TYPE,
                 FlowConstant.MESSAGE_NOTICE,
                 FlowConstant.MESSAGE_NOTICE,
-                FlowConstant.SUBMIT
-        );
+                FlowConstant.SUBMIT);
     }
     }
 
 
     /**
     /**