瀏覽代碼

Update 代码优化

Yue 2 周之前
父節點
當前提交
b0e781f435
共有 100 個文件被更改,包括 1018 次插入985 次删除
  1. 11 10
      SERVER/VberAdminPlusV3/.script/run/DC_Vap3.run.xml
  2. 11 10
      SERVER/VberAdminPlusV3/.script/run/DC_Vap3_remote.run.xml
  3. 12 11
      SERVER/VberAdminPlusV3/.script/run/DF_UI.run.xml
  4. 11 10
      SERVER/VberAdminPlusV3/.script/run/DF_VberJob.run.xml
  5. 11 10
      SERVER/VberAdminPlusV3/.script/run/DF_VberMonitor.run.xml
  6. 11 10
      SERVER/VberAdminPlusV3/.script/run/DF_VberServer.run.xml
  7. 16 15
      SERVER/VberAdminPlusV3/.script/sql/flow.sql
  8. 12 16
      SERVER/VberAdminPlusV3/vber-admin/src/main/java/com/vber/web/controller/AuthController.java
  9. 10 5
      SERVER/VberAdminPlusV3/vber-admin/src/main/java/com/vber/web/service/SysLoginService.java
  10. 3 4
      SERVER/VberAdminPlusV3/vber-admin/src/main/java/com/vber/web/service/SysRegisterService.java
  11. 10 9
      SERVER/VberAdminPlusV3/vber-admin/src/main/java/com/vber/web/service/impl/AuthStrategy.java
  12. 9 7
      SERVER/VberAdminPlusV3/vber-admin/src/main/java/com/vber/web/service/impl/PasswordAuthStrategy.java
  13. 2 0
      SERVER/VberAdminPlusV3/vber-admin/src/main/java/com/vber/web/service/impl/XcxAuthStrategy.java
  14. 23 23
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/config/ThreadPoolConfig.java
  15. 2 1
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/config/ValidatorConfig.java
  16. 1 2
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/exception/base/BaseException.java
  17. 10 2
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/factory/YmlPropertySourceFactory.java
  18. 2 0
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/utils/MessageUtils.java
  19. 6 5
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/utils/SpringUtils.java
  20. 6 6
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/utils/StringUtils.java
  21. 0 1
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/utils/reflect/ReflectUtils.java
  22. 4 1
      SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/json/config/JacksonConfig.java
  23. 16 6
      SERVER/VberAdminPlusV3/vber-common/vber-common-encrypt/src/main/java/com/vber/common/encrypt/core/EncryptorManager.java
  24. 31 18
      SERVER/VberAdminPlusV3/vber-common/vber-common-encrypt/src/main/java/com/vber/common/encrypt/filter/CryptoFilter.java
  25. 19 19
      SERVER/VberAdminPlusV3/vber-common/vber-common-excel/src/main/java/com/vber/common/excel/core/CellMergeHandler.java
  26. 9 7
      SERVER/VberAdminPlusV3/vber-common/vber-common-excel/src/main/java/com/vber/common/excel/core/DropDownOptions.java
  27. 42 42
      SERVER/VberAdminPlusV3/vber-common/vber-common-excel/src/main/java/com/vber/common/excel/utils/ExcelWriterWrapper.java
  28. 3 1
      SERVER/VberAdminPlusV3/vber-common/vber-common-mybatis/src/main/java/com/vber/common/mybatis/aspect/DataPermissionAdvice.java
  29. 29 29
      SERVER/VberAdminPlusV3/vber-common/vber-common-mybatis/src/main/java/com/vber/common/mybatis/handler/MybatisExceptionHandler.java
  30. 4 2
      SERVER/VberAdminPlusV3/vber-common/vber-common-mybatis/src/main/java/com/vber/common/mybatis/helper/DataPermissionHelper.java
  31. 4 2
      SERVER/VberAdminPlusV3/vber-common/vber-common-mybatis/src/main/java/com/vber/common/mybatis/interceptor/PlusDataPermissionInterceptor.java
  32. 2 2
      SERVER/VberAdminPlusV3/vber-common/vber-common-notice/pom.xml
  33. 3 0
      SERVER/VberAdminPlusV3/vber-common/vber-common-oss/src/main/java/com/vber/common/oss/factory/OssFactory.java
  34. 22 2
      SERVER/VberAdminPlusV3/vber-common/vber-common-oss/src/main/java/com/vber/common/oss/properties/OssProperties.java
  35. 8 5
      SERVER/VberAdminPlusV3/vber-common/vber-common-ratelimiter/src/main/java/com/vber/common/ratelimiter/aspectj/RateLimiterAspect.java
  36. 41 40
      SERVER/VberAdminPlusV3/vber-common/vber-common-redis/src/main/java/com/vber/common/redis/config/RedisConfig.java
  37. 19 10
      SERVER/VberAdminPlusV3/vber-common/vber-common-redis/src/main/java/com/vber/common/redis/manager/CaffeineCacheDecorator.java
  38. 18 15
      SERVER/VberAdminPlusV3/vber-common/vber-common-redis/src/main/java/com/vber/common/redis/manager/PlusSpringCacheManager.java
  39. 7 5
      SERVER/VberAdminPlusV3/vber-common/vber-common-redis/src/main/java/com/vber/common/redis/utils/CacheUtils.java
  40. 0 239
      SERVER/VberAdminPlusV3/vber-common/vber-common-redis/src/main/java/com/vber/common/redis/utils/QueueUtils.java
  41. 1 2
      SERVER/VberAdminPlusV3/vber-common/vber-common-satoken/src/main/java/com/vber/common/satoken/core/dao/PlusSaTokenDao.java
  42. 9 10
      SERVER/VberAdminPlusV3/vber-common/vber-common-satoken/src/main/java/com/vber/common/satoken/utils/LoginHelper.java
  43. 14 12
      SERVER/VberAdminPlusV3/vber-common/vber-common-security/src/main/java/com/vber/common/security/config/SecurityConfig.java
  44. 7 3
      SERVER/VberAdminPlusV3/vber-common/vber-common-security/src/main/java/com/vber/common/security/handler/AllUrlHandler.java
  45. 4 6
      SERVER/VberAdminPlusV3/vber-common/vber-common-social/src/main/java/com/vber/common/social/utils/SocialUtils.java
  46. 1 1
      SERVER/VberAdminPlusV3/vber-common/vber-common-sse/src/main/java/com/vber/common/sse/core/SseEmitterManager.java
  47. 14 14
      SERVER/VberAdminPlusV3/vber-common/vber-common-tenant/src/main/java/com/vber/common/tenant/config/TenantConfig.java
  48. 2 1
      SERVER/VberAdminPlusV3/vber-common/vber-common-tenant/src/main/java/com/vber/common/tenant/manager/TenantSpringCacheManager.java
  49. 4 4
      SERVER/VberAdminPlusV3/vber-common/vber-common-web/src/main/java/com/vber/common/web/config/ResourcesConfig.java
  50. 10 3
      SERVER/VberAdminPlusV3/vber-common/vber-common-web/src/main/java/com/vber/common/web/core/I18nLocaleResolver.java
  51. 1 1
      SERVER/VberAdminPlusV3/vber-common/vber-common-web/src/main/java/com/vber/common/web/filter/XssFilter.java
  52. 18 6
      SERVER/VberAdminPlusV3/vber-common/vber-common-web/src/main/java/com/vber/common/web/handler/GlobalExceptionHandler.java
  53. 13 5
      SERVER/VberAdminPlusV3/vber-common/vber-common-web/src/main/java/com/vber/common/web/interceptor/PlusWebInvokeTimeInterceptor.java
  54. 4 2
      SERVER/VberAdminPlusV3/vber-common/vber-common-websocket/src/main/java/com/vber/common/websocket/config/WebSocketConfig.java
  55. 13 9
      SERVER/VberAdminPlusV3/vber-common/vber-common-websocket/src/main/java/com/vber/common/websocket/handler/PlusWebSocketHandler.java
  56. 6 3
      SERVER/VberAdminPlusV3/vber-common/vber-common-websocket/src/main/java/com/vber/common/websocket/holder/WebSocketSessionHolder.java
  57. 6 2
      SERVER/VberAdminPlusV3/vber-common/vber-common-websocket/src/main/java/com/vber/common/websocket/interceptor/PlusWebSocketInterceptor.java
  58. 4 2
      SERVER/VberAdminPlusV3/vber-common/vber-common-websocket/src/main/java/com/vber/common/websocket/utils/WebSocketUtils.java
  59. 10 6
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/IndexController.java
  60. 7 3
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/JobApiController.java
  61. 15 11
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/JobInfoController.java
  62. 33 24
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/JobLogController.java
  63. 12 7
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/UserController.java
  64. 2 1
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/interceptor/CookieInterceptor.java
  65. 1 0
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/interceptor/WebMvcConfig.java
  66. 2 1
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/resolver/WebExceptionResolver.java
  67. 5 2
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/alarm/impl/EmailJobAlarm.java
  68. 13 6
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/complete/XxlJobCompleter.java
  69. 47 36
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/cron/CronExpression.java
  70. 4 3
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/route/strategy/ExecutorRouteLFU.java
  71. 34 22
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/thread/JobScheduleHelper.java
  72. 43 23
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/trigger/XxlJobTrigger.java
  73. 1 0
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/util/I18nUtil.java
  74. 5 1
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/util/LocalCacheUtil.java
  75. 4 5
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/service/LoginService.java
  76. 82 45
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/service/impl/XxlJobServiceImpl.java
  77. 1 1
      SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/resources/application-dev.yml
  78. 25 17
      SERVER/VberAdminPlusV3/vber-modules/vber-generator/src/main/java/com/vber/generator/service/GenTableServiceImpl.java
  79. 0 5
      SERVER/VberAdminPlusV3/vber-modules/vber-generator/src/main/resources/vm/java/bo.java.vm
  80. 2 5
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysClientController.java
  81. 0 2
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysMenuController.java
  82. 1 4
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysNoticeController.java
  83. 2 4
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysOssConfigController.java
  84. 0 1
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysOssController.java
  85. 2 2
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysPostController.java
  86. 5 3
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysProfileController.java
  87. 12 6
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysUserController.java
  88. 2 1
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/test/ShardingTestController.java
  89. 0 1
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/bo/SysClientBo.java
  90. 0 1
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/bo/SysConfigBo.java
  91. 0 1
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/bo/SysDictTypeBo.java
  92. 0 1
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/bo/SysLogininforBo.java
  93. 0 1
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/bo/SysMenuBo.java
  94. 0 2
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/bo/SysOssBo.java
  95. 0 3
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/bo/SysPostBo.java
  96. 21 9
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/impl/SysLogininforServiceImpl.java
  97. 13 14
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/impl/SysNoticeServiceImpl.java
  98. 16 8
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/impl/SysOssServiceImpl.java
  99. 5 4
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/impl/SysRoleServiceImpl.java
  100. 0 5
      SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/impl/SysSocialServiceImpl.java

+ 11 - 10
SERVER/VberAdminPlusV3/.script/run/DC_Vap3.run.xml

@@ -1,12 +1,13 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="DC_Vap3" type="docker-deploy" factoryName="docker-compose.yml" folderName="DockerRun" server-name="Docker">
-    <deployment type="docker-compose.yml">
-      <settings>
-        <option name="composeProjectName" value="vap3" />
-        <option name="envFilePath" value="" />
-        <option name="sourceFilePath" value=".script/docker/docker-compose.yml" />
-      </settings>
-    </deployment>
-    <method v="2" />
-  </configuration>
+    <configuration default="false" name="DC_Vap3" type="docker-deploy" factoryName="docker-compose.yml"
+                   folderName="DockerRun" server-name="Docker">
+        <deployment type="docker-compose.yml">
+            <settings>
+                <option name="composeProjectName" value="vap3"/>
+                <option name="envFilePath" value=""/>
+                <option name="sourceFilePath" value=".script/docker/docker-compose.yml"/>
+            </settings>
+        </deployment>
+        <method v="2"/>
+    </configuration>
 </component>

+ 11 - 10
SERVER/VberAdminPlusV3/.script/run/DC_Vap3_remote.run.xml

@@ -1,12 +1,13 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="DC_Vap3_remote" type="docker-deploy" factoryName="docker-compose.yml" folderName="DockerRun" server-name="Docker">
-    <deployment type="docker-compose.yml">
-      <settings>
-        <option name="composeProjectName" value="vap3" />
-        <option name="envFilePath" value="" />
-        <option name="sourceFilePath" value=".script/docker/docker-compose_liunx.yml" />
-      </settings>
-    </deployment>
-    <method v="2" />
-  </configuration>
+    <configuration default="false" name="DC_Vap3_remote" type="docker-deploy" factoryName="docker-compose.yml"
+                   folderName="DockerRun" server-name="Docker">
+        <deployment type="docker-compose.yml">
+            <settings>
+                <option name="composeProjectName" value="vap3"/>
+                <option name="envFilePath" value=""/>
+                <option name="sourceFilePath" value=".script/docker/docker-compose_liunx.yml"/>
+            </settings>
+        </deployment>
+        <method v="2"/>
+    </configuration>
 </component>

+ 12 - 11
SERVER/VberAdminPlusV3/.script/run/DF_UI.run.xml

@@ -1,13 +1,14 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="DF_UI" type="docker-deploy" factoryName="dockerfile" folderName="DockerfileBuild" server-name="Docker">
-    <deployment type="dockerfile">
-      <settings>
-        <option name="imageTag" value="vber/vber_ui:3.0.0" />
-        <option name="buildOnly" value="true" />
-        <option name="contextFolderPath" value="." />
-        <option name="sourceFilePath" value=".script/docker/ui/Dockerfile" />
-      </settings>
-    </deployment>
-    <method v="2" />
-  </configuration>
+    <configuration default="false" name="DF_UI" type="docker-deploy" factoryName="dockerfile"
+                   folderName="DockerfileBuild" server-name="Docker">
+        <deployment type="dockerfile">
+            <settings>
+                <option name="imageTag" value="vber/vber_ui:3.0.0"/>
+                <option name="buildOnly" value="true"/>
+                <option name="contextFolderPath" value="."/>
+                <option name="sourceFilePath" value=".script/docker/ui/Dockerfile"/>
+            </settings>
+        </deployment>
+        <method v="2"/>
+    </configuration>
 </component>

+ 11 - 10
SERVER/VberAdminPlusV3/.script/run/DF_VberJob.run.xml

@@ -1,12 +1,13 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="DF_VberJob" type="docker-deploy" factoryName="dockerfile" folderName="DockerfileBuild">
-    <deployment type="dockerfile">
-      <settings>
-        <option name="imageTag" value="vber/vber_job-server:3.0.0" />
-        <option name="buildOnly" value="true" />
-        <option name="sourceFilePath" value="vber-extend/vber-job-admin/Dockerfile" />
-      </settings>
-    </deployment>
-    <method v="2" />
-  </configuration>
+    <configuration default="false" name="DF_VberJob" type="docker-deploy" factoryName="dockerfile"
+                   folderName="DockerfileBuild">
+        <deployment type="dockerfile">
+            <settings>
+                <option name="imageTag" value="vber/vber_job-server:3.0.0"/>
+                <option name="buildOnly" value="true"/>
+                <option name="sourceFilePath" value="vber-extend/vber-job-admin/Dockerfile"/>
+            </settings>
+        </deployment>
+        <method v="2"/>
+    </configuration>
 </component>

+ 11 - 10
SERVER/VberAdminPlusV3/.script/run/DF_VberMonitor.run.xml

@@ -1,12 +1,13 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="DF_VberMonitor" type="docker-deploy" factoryName="dockerfile" folderName="DockerfileBuild">
-    <deployment type="dockerfile">
-      <settings>
-        <option name="imageTag" value="vber/vber_monitor-admin:3.0.0" />
-        <option name="buildOnly" value="true" />
-        <option name="sourceFilePath" value="vber-extend/vber-monitor-admin/Dockerfile" />
-      </settings>
-    </deployment>
-    <method v="2" />
-  </configuration>
+    <configuration default="false" name="DF_VberMonitor" type="docker-deploy" factoryName="dockerfile"
+                   folderName="DockerfileBuild">
+        <deployment type="dockerfile">
+            <settings>
+                <option name="imageTag" value="vber/vber_monitor-admin:3.0.0"/>
+                <option name="buildOnly" value="true"/>
+                <option name="sourceFilePath" value="vber-extend/vber-monitor-admin/Dockerfile"/>
+            </settings>
+        </deployment>
+        <method v="2"/>
+    </configuration>
 </component>

+ 11 - 10
SERVER/VberAdminPlusV3/.script/run/DF_VberServer.run.xml

@@ -1,12 +1,13 @@
 <component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="DF_VberServer" type="docker-deploy" factoryName="dockerfile" folderName="DockerfileBuild" server-name="Docker">
-    <deployment type="dockerfile">
-      <settings>
-        <option name="imageTag" value="vber/vber_server:3.0.0" />
-        <option name="buildOnly" value="true" />
-        <option name="sourceFilePath" value="vber-admin/Dockerfile" />
-      </settings>
-    </deployment>
-    <method v="2" />
-  </configuration>
+    <configuration default="false" name="DF_VberServer" type="docker-deploy" factoryName="dockerfile"
+                   folderName="DockerfileBuild" server-name="Docker">
+        <deployment type="dockerfile">
+            <settings>
+                <option name="imageTag" value="vber/vber_server:3.0.0"/>
+                <option name="buildOnly" value="true"/>
+                <option name="sourceFilePath" value="vber-admin/Dockerfile"/>
+            </settings>
+        </deployment>
+        <method v="2"/>
+    </configuration>
 </component>

+ 16 - 15
SERVER/VberAdminPlusV3/.script/sql/flow.sql

@@ -166,21 +166,22 @@ VALUES (1, 'spelRuleComponent', 'selectOrgLeaderById', 'initiatorOrgId',
 -- 流程实例业务扩展表
 -- ----------------------------
 
-create table flow_instance_biz_ext (
-   id             bigint                       not null comment '主键id',
-   tenant_id      varchar(20) default '000000' null comment '租户编号',
-   create_dept    bigint                       null comment '创建部门',
-   create_by      bigint                       null comment '创建者',
-   create_time    datetime                     null comment '创建时间',
-   update_by      bigint                       null comment '更新者',
-   update_time    datetime                     null comment '更新时间',
-   business_code  varchar(255)                 null comment '业务编码',
-   business_title varchar(1000)                null comment '业务标题',
-   del_flag       char        default '0'      null comment '删除标志(0代表存在 1代表删除)',
-   instance_id    bigint                       null comment '流程实例Id',
-   business_id    varchar(255)                 null comment '业务Id',
-   PRIMARY KEY (id)
-)  ENGINE = InnoDB COMMENT '流程实例业务扩展表';
+create table flow_instance_biz_ext
+(
+    id             bigint not null comment '主键id',
+    tenant_id      varchar(20) default '000000' null comment '租户编号',
+    create_dept    bigint null comment '创建部门',
+    create_by      bigint null comment '创建者',
+    create_time    datetime null comment '创建时间',
+    update_by      bigint null comment '更新者',
+    update_time    datetime null comment '更新时间',
+    business_code  varchar(255) null comment '业务编码',
+    business_title varchar(1000) null comment '业务标题',
+    del_flag       char        default '0' null comment '删除标志(0代表存在 1代表删除)',
+    instance_id    bigint null comment '流程实例Id',
+    business_id    varchar(255) null comment '业务Id',
+    PRIMARY KEY (id)
+) ENGINE = InnoDB COMMENT '流程实例业务扩展表';
 
 
 CREATE TABLE `flow_user`

+ 12 - 16
SERVER/VberAdminPlusV3/vber-admin/src/main/java/com/vber/web/controller/AuthController.java

@@ -20,8 +20,6 @@ import com.vber.common.satoken.utils.LoginHelper;
 import com.vber.common.social.config.properties.SocialLoginConfigProperties;
 import com.vber.common.social.config.properties.SocialProperties;
 import com.vber.common.social.utils.SocialUtils;
-import com.vber.common.sse.dto.SseMessageDto;
-import com.vber.common.sse.utils.SseMessageUtils;
 import com.vber.common.tenant.helper.TenantHelper;
 import com.vber.system.domain.bo.SysTenantBo;
 import com.vber.system.domain.vo.SysClientVo;
@@ -52,7 +50,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
 
 /**
  * 认证
@@ -73,10 +70,11 @@ public class AuthController {
     private final ISysTenantService tenantService;
     private final ISysSocialService socialUserService;
     private final ISysClientService clientService;
+    @SuppressWarnings("unused")
     private final ScheduledExecutorService scheduledExecutorService;
+    @SuppressWarnings("unused")
     private final VbConfig vbConfig;
 
-
     /**
      * 登录方法
      *
@@ -108,13 +106,13 @@ public class AuthController {
         // 登录
         LoginVo loginVo = IAuthStrategy.login(body, client, grantType);
 
-        Long userId = LoginHelper.getUserId();
-        scheduledExecutorService.schedule(() -> {
-            SseMessageDto dto = new SseMessageDto();
-            dto.setUserIds(List.of(userId));
-            dto.setMessage("欢迎登录" + vbConfig.getName());
-            SseMessageUtils.publishMessage(dto);
-        }, 3, TimeUnit.SECONDS);
+        // Long userId = LoginHelper.getUserId();
+        // scheduledExecutorService.schedule(() -> {
+        // SseMessageDto dto = new SseMessageDto();
+        // dto.setUserIds(List.of(userId));
+        // dto.setMessage("欢迎登录" + vbConfig.getName());
+        // SseMessageUtils.publishMessage(dto);
+        // }, 3, TimeUnit.SECONDS);
         return R.ok(loginVo);
     }
 
@@ -125,7 +123,8 @@ public class AuthController {
      * @return 结果
      */
     @GetMapping("/binding/{source}")
-    public R<String> authBinding(@PathVariable("source") String source, @RequestParam String tenantId, @RequestParam String domain) {
+    public R<String> authBinding(@PathVariable("source") String source, @RequestParam String tenantId,
+                                 @RequestParam String domain) {
         SocialLoginConfigProperties obj = socialProperties.getType().get(source);
         if (ObjectUtil.isNull(obj)) {
             return R.fail(source + "平台账号暂不支持");
@@ -160,7 +159,6 @@ public class AuthController {
         return R.ok();
     }
 
-
     /**
      * 取消授权
      *
@@ -172,7 +170,6 @@ public class AuthController {
         return rows ? R.ok() : R.fail("取消授权失败");
     }
 
-
     /**
      * 退出登录
      */
@@ -233,8 +230,7 @@ public class AuthController {
             host = new URL(request.getRequestURL().toString()).getHost();
         }
         // 根据域名进行筛选
-        List<TenantListVo> list = StreamUtils.filter(voList, vo ->
-                StringUtils.equalsIgnoreCase(vo.getDomain(), host));
+        List<TenantListVo> list = StreamUtils.filter(voList, vo -> StringUtils.equalsIgnoreCase(vo.getDomain(), host));
         result.setVoList(CollUtil.isNotEmpty(list) ? list : voList);
         return R.ok(result);
     }

+ 10 - 5
SERVER/VberAdminPlusV3/vber-admin/src/main/java/com/vber/web/service/SysLoginService.java

@@ -123,7 +123,8 @@ public class SysLoginService {
                 // 超级管理员 登出清除动态租户
                 TenantHelper.clearDynamic();
             }
-            recordLogininfor(loginUser.getTenantId(), loginUser.getUsername(), Constants.LOGOUT, MessageUtils.message("user.logout.success"));
+            recordLogininfor(loginUser.getTenantId(), loginUser.getUsername(), Constants.LOGOUT,
+                    MessageUtils.message("user.logout.success"));
         } catch (NotLoginException ignored) {
         } finally {
             try {
@@ -170,7 +171,8 @@ public class SysLoginService {
             if (ObjectUtil.isNotNull(user.getOrgId())) {
                 org = orgService.selectOrgById(user.getOrgId());
             }
-            loginUser.setOrgName(ObjectUtil.isNull(org) ? "" : org.getOrgName());
+            loginUser.setOrgName(org == null ? "" : org.getOrgName());
+            loginUser.setOrgCategory(org == null ? "" : org.getOrgCategory());
         });
         List<SysRoleVo> roles = roleService.selectRolesByUserId(userId);
         List<SysPostVo> posts = postService.selectPostsByUserId(userId);
@@ -204,7 +206,8 @@ public class SysLoginService {
         int errorNumber = ObjectUtil.defaultIfNull(RedisUtils.getCacheObject(errorKey), 0);
         // 锁定时间内登录 则踢出
         if (errorNumber >= maxRetryCount) {
-            recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime));
+            recordLogininfor(tenantId, username, loginFail,
+                    MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime));
             throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime);
         }
 
@@ -214,11 +217,13 @@ public class SysLoginService {
             RedisUtils.setCacheObject(errorKey, errorNumber, Duration.ofMinutes(lockTime));
             // 达到规定错误次数 则锁定登录
             if (errorNumber >= maxRetryCount) {
-                recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime));
+                recordLogininfor(tenantId, username, loginFail,
+                        MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime));
                 throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime);
             } else {
                 // 未达到规定错误次数
-                recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitCount(), errorNumber));
+                recordLogininfor(tenantId, username, loginFail,
+                        MessageUtils.message(loginType.getRetryLimitCount(), errorNumber));
                 throw new UserException(loginType.getRetryLimitCount(), errorNumber);
             }
         }

+ 3 - 4
SERVER/VberAdminPlusV3/vber-admin/src/main/java/com/vber/web/service/SysRegisterService.java

@@ -1,6 +1,6 @@
 package com.vber.web.service;
 
-import cn.dev33.satoken.secure.BCrypt;
+import cn.hutool.crypto.digest.BCrypt;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.vber.common.core.constant.Constants;
 import com.vber.common.core.constant.GlobalConstants;
@@ -21,7 +21,6 @@ import com.vber.system.service.ISysUserService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
-
 /**
  * 注册校验方法
  *
@@ -56,7 +55,8 @@ public class SysRegisterService {
         sysUser.setPassword(BCrypt.hashpw(password));
         sysUser.setUserType(userType);
 
-        boolean exist = TenantHelper.dynamic(tenantId, () -> userMapper.exists(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, sysUser.getUserName())));
+        boolean exist = TenantHelper.dynamic(tenantId, () -> userMapper
+                .exists(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, sysUser.getUserName())));
         if (exist) {
             throw new UserException("user.register.save.error", username);
         }
@@ -99,5 +99,4 @@ public class SysRegisterService {
         SysLoginService.buildLoginEvent(tenantId, username, Constants.LOGIN_FAIL, message);
     }
 
-
 }

+ 10 - 9
SERVER/VberAdminPlusV3/vber-admin/src/main/java/com/vber/web/service/impl/AuthStrategy.java

@@ -1,7 +1,7 @@
 package com.vber.web.service.impl;
 
-import cn.dev33.satoken.stp.SaLoginModel;
 import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.stp.parameter.SaLoginParameter;
 import com.vber.common.core.domain.model.LoginUser;
 import com.vber.common.satoken.utils.LoginHelper;
 import com.vber.system.domain.vo.SysClientVo;
@@ -14,22 +14,23 @@ import java.util.function.BiConsumer;
  * @author Yue
  */
 public class AuthStrategy implements IAuthStrategy {
-    protected LoginVo buildLoginUser(SysClientVo client, LoginUser loginUser, BiConsumer<SaLoginModel, LoginVo> func) {
+    protected LoginVo buildLoginUser(SysClientVo client, LoginUser loginUser,
+                                     BiConsumer<SaLoginParameter, LoginVo> func) {
         loginUser.setClientKey(client.getClientKey());
         loginUser.setDeviceType(client.getDeviceType());
-        SaLoginModel model = new SaLoginModel();
+        SaLoginParameter loginParams = new SaLoginParameter();
         LoginVo loginVo = new LoginVo();
-        model.setDevice(client.getDeviceType());
+        loginParams.setDeviceType(client.getDeviceType());
         // 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置
         // 例如: 后台用户30分钟过期 app用户1天过期
-        model.setTimeout(client.getTimeout());
-        model.setActiveTimeout(client.getActiveTimeout());
-        model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId());
+        loginParams.setTimeout(client.getTimeout());
+        loginParams.setActiveTimeout(client.getActiveTimeout());
+        loginParams.setExtra(LoginHelper.CLIENT_KEY, client.getClientId());
         if (func != null) {
-            func.accept(model, loginVo);
+            func.accept(loginParams, loginVo);
         }
         // 生成token
-        LoginHelper.login(loginUser, model);
+        LoginHelper.login(loginUser, loginParams);
         loginVo.setAccessToken(StpUtil.getTokenValue());
         loginVo.setExpireIn(StpUtil.getTokenTimeout());
         loginVo.setClientId(client.getClientId());

+ 9 - 7
SERVER/VberAdminPlusV3/vber-admin/src/main/java/com/vber/web/service/impl/PasswordAuthStrategy.java

@@ -1,7 +1,7 @@
 package com.vber.web.service.impl;
 
-import cn.dev33.satoken.secure.BCrypt;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.crypto.digest.BCrypt;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.vber.common.core.config.VbConfig;
 import com.vber.common.core.constant.Constants;
@@ -31,7 +31,6 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
-
 /**
  * 密码认证策略
  *
@@ -64,13 +63,13 @@ public class PasswordAuthStrategy extends AuthStrategy {
         }
 
         SysUserVo user = loadUserByUsername(tenantId, username);
-        loginService.checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword()));
+        loginService.checkLogin(LoginType.PASSWORD, tenantId, username,
+                () -> !BCrypt.checkpw(password, user.getPassword()));
         // 此处可根据登录用户的数据不同 自行创建 loginUser
         LoginUser loginUser = loginService.buildLoginUser(user);
         return buildLoginUser(client, loginUser, null);
     }
 
-
     /**
      * 校验验证码
      *
@@ -86,18 +85,21 @@ public class PasswordAuthStrategy extends AuthStrategy {
         String captcha = RedisUtils.getCacheObject(verifyKey);
         RedisUtils.deleteObject(verifyKey);
         if (captcha == null) {
-            loginService.recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
+            loginService.recordLogininfor(tenantId, username, Constants.LOGIN_FAIL,
+                    MessageUtils.message("user.jcaptcha.expire"));
             throw new CaptchaExpireException();
         }
         if (!StringUtils.equalsIgnoreCase(code, captcha)) {
-            loginService.recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"));
+            loginService.recordLogininfor(tenantId, username, Constants.LOGIN_FAIL,
+                    MessageUtils.message("user.jcaptcha.error"));
             throw new CaptchaException();
         }
     }
 
     private SysUserVo loadUserByUsername(String tenantId, String username) {
         return TenantHelper.dynamic(tenantId, () -> {
-            SysUserVo user = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, username));
+            SysUserVo user = userMapper
+                    .selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, username));
             if (ObjectUtil.isNull(user)) {
                 log.info("登录用户:用户名 {} 不存在.", username);
                 throw new UserException("user.not.exists", username);

+ 2 - 0
SERVER/VberAdminPlusV3/vber-admin/src/main/java/com/vber/web/service/impl/XcxAuthStrategy.java

@@ -33,6 +33,7 @@ import org.springframework.stereotype.Service;
 @RequiredArgsConstructor
 public class XcxAuthStrategy extends AuthStrategy {
 
+    @SuppressWarnings("unused")
     private final SysLoginService loginService;
 
     @Override
@@ -51,6 +52,7 @@ public class XcxAuthStrategy extends AuthStrategy {
         AuthCallback authCallback = new AuthCallback();
         authCallback.setCode(xcxCode);
         AuthResponse<AuthUser> resp = authRequest.login(authCallback);
+        @SuppressWarnings("unused")
         String openid, unionId;
         if (resp.ok()) {
             AuthToken token = resp.getData().getToken();

+ 23 - 23
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/config/ThreadPoolConfig.java

@@ -28,6 +28,29 @@ public class ThreadPoolConfig {
 
     private ScheduledExecutorService scheduledExecutorService;
 
+    /**
+     * 打印线程异常信息
+     */
+    public static void printException(Runnable r, Throwable t) {
+        if (t == null && r instanceof Future<?>) {
+            try {
+                Future<?> future = (Future<?>) r;
+                if (future.isDone()) {
+                    future.get();
+                }
+            } catch (CancellationException ce) {
+                t = ce;
+            } catch (ExecutionException ee) {
+                t = ee.getCause();
+            } catch (InterruptedException ie) {
+                Thread.currentThread().interrupt();
+            }
+        }
+        if (t != null) {
+            log.error(t.getMessage(), t);
+        }
+    }
+
     /**
      * 执行周期性或定时任务
      */
@@ -85,27 +108,4 @@ public class ThreadPoolConfig {
         }
     }
 
-    /**
-     * 打印线程异常信息
-     */
-    public static void printException(Runnable r, Throwable t) {
-        if (t == null && r instanceof Future<?>) {
-            try {
-                Future<?> future = (Future<?>) r;
-                if (future.isDone()) {
-                    future.get();
-                }
-            } catch (CancellationException ce) {
-                t = ce;
-            } catch (ExecutionException ee) {
-                t = ee.getCause();
-            } catch (InterruptedException ie) {
-                Thread.currentThread().interrupt();
-            }
-        }
-        if (t != null) {
-            log.error(t.getMessage(), t);
-        }
-    }
-
 }

+ 2 - 1
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/config/ValidatorConfig.java

@@ -6,6 +6,7 @@ import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration;
 import org.springframework.context.MessageSource;
 import org.springframework.context.annotation.Bean;
+import org.springframework.lang.NonNull;
 import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
 
 import java.util.Properties;
@@ -22,7 +23,7 @@ public class ValidatorConfig {
      * 配置校验框架 快速失败模式
      */
     @Bean
-    public Validator validator(MessageSource messageSource) {
+    public Validator validator(@NonNull MessageSource messageSource) {
         try (LocalValidatorFactoryBean factoryBean = new LocalValidatorFactoryBean()) {
             // 国际化
             factoryBean.setValidationMessageSource(messageSource);

+ 1 - 2
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/exception/base/BaseException.java

@@ -1,7 +1,6 @@
 package com.vber.common.core.exception.base;
 
 import com.vber.common.core.utils.MessageUtils;
-import com.vber.common.core.utils.StringUtils;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -62,7 +61,7 @@ public class BaseException extends RuntimeException {
     @Override
     public String getMessage() {
         String message = null;
-        if (!StringUtils.isEmpty(code)) {
+        if (code != null) {
             message = MessageUtils.message(code, args);
         }
         if (message == null) {

+ 10 - 2
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/factory/YmlPropertySourceFactory.java

@@ -6,8 +6,11 @@ import org.springframework.core.env.PropertiesPropertySource;
 import org.springframework.core.env.PropertySource;
 import org.springframework.core.io.support.DefaultPropertySourceFactory;
 import org.springframework.core.io.support.EncodedResource;
+import org.springframework.lang.NonNull;
+import org.springframework.lang.Nullable;
 
 import java.io.IOException;
+import java.util.Properties;
 
 /**
  * yml 配置源工厂
@@ -17,13 +20,18 @@ import java.io.IOException;
 public class YmlPropertySourceFactory extends DefaultPropertySourceFactory {
 
     @Override
-    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
+    @NonNull
+    public PropertySource<?> createPropertySource(@Nullable String name, @NonNull EncodedResource resource)
+            throws IOException {
         String sourceName = resource.getResource().getFilename();
         if (StringUtils.isNotBlank(sourceName) && StringUtils.endsWithAny(sourceName, ".yml", ".yaml")) {
             YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
             factory.setResources(resource.getResource());
             factory.afterPropertiesSet();
-            return new PropertiesPropertySource(sourceName, factory.getObject());
+            Properties properties = factory.getObject();
+            if (properties != null && sourceName != null) {
+                return new PropertiesPropertySource(sourceName, properties);
+            }
         }
         return super.createPropertySource(name, resource);
     }

+ 2 - 0
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/utils/MessageUtils.java

@@ -25,6 +25,8 @@ public class MessageUtils {
      */
     public static String message(String code, Object... args) {
         try {
+            if (code == null || code.isEmpty())
+                return code;
             return MESSAGE_SOURCE.getMessage(code, args, LocaleContextHolder.getLocale());
         } catch (NoSuchMessageException e) {
             return code;

+ 6 - 5
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/utils/SpringUtils.java

@@ -5,6 +5,7 @@ import org.springframework.beans.factory.NoSuchBeanDefinitionException;
 import org.springframework.boot.autoconfigure.thread.Threading;
 import org.springframework.context.ApplicationContext;
 import org.springframework.core.env.Environment;
+import org.springframework.lang.NonNull;
 import org.springframework.stereotype.Component;
 
 /**
@@ -18,7 +19,8 @@ public final class SpringUtils extends SpringUtil {
     /**
      * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
      */
-    public static boolean containsBean(String name) {
+    public static boolean containsBean(@NonNull String name) {
+
         return getBeanFactory().containsBean(name);
     }
 
@@ -26,21 +28,21 @@ public final class SpringUtils extends SpringUtil {
      * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
      * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
      */
-    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
+    public static boolean isSingleton(@NonNull String name) throws NoSuchBeanDefinitionException {
         return getBeanFactory().isSingleton(name);
     }
 
     /**
      * @return Class 注册对象的类型
      */
-    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException {
+    public static Class<?> getType(@NonNull String name) throws NoSuchBeanDefinitionException {
         return getBeanFactory().getType(name);
     }
 
     /**
      * 如果给定的bean名字在bean定义中有别名,则返回这些别名
      */
-    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
+    public static String[] getAliases(@NonNull String name) throws NoSuchBeanDefinitionException {
         return getBeanFactory().getAliases(name);
     }
 
@@ -52,7 +54,6 @@ public final class SpringUtils extends SpringUtil {
         return (T) getBean(invoker.getClass());
     }
 
-
     /**
      * 获取spring上下文
      */

+ 6 - 6
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/utils/StringUtils.java

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
+import org.springframework.lang.NonNull;
 import org.springframework.util.AntPathMatcher;
 
 import java.nio.charset.Charset;
@@ -207,7 +208,8 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
     }
 
     /**
-     * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld
+     * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
+     * 例如:HELLO_WORLD->HelloWorld
      *
      * @param name 转换前的下划线大写方式命名的字符串
      * @return 转换后的驼峰式命名的字符串
@@ -230,12 +232,12 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
      * @param strs 需要检查的字符串数组
      * @return 是否匹配
      */
-    public static boolean matches(String str, List<String> strs) {
+    public static boolean matches(@NonNull String str, @NonNull List<String> strs) {
         if (isEmpty(str) || CollUtil.isEmpty(strs)) {
             return false;
         }
         for (String pattern : strs) {
-            if (isMatch(pattern, str)) {
+            if (pattern != null && isMatch(pattern, str)) {
                 return true;
             }
         }
@@ -251,7 +253,7 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
      * @param pattern 匹配规则
      * @param url     需要匹配的url
      */
-    public static boolean isMatch(String pattern, String url) {
+    public static boolean isMatch(@NonNull String pattern, @NonNull String url) {
         AntPathMatcher matcher = new AntPathMatcher();
         return matcher.match(pattern, url);
     }
@@ -392,7 +394,6 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
         return StringUtils.join(iterable, SEPARATOR);
     }
 
-
     /**
      * 将数组中的元素使用逗号拼接成字符串
      *
@@ -403,5 +404,4 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
         return StringUtils.join(array, SEPARATOR);
     }
 
-
 }

+ 0 - 1
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/core/utils/reflect/ReflectUtils.java

@@ -12,7 +12,6 @@ import java.lang.reflect.Method;
  *
  * @author Iwb
  */
-@SuppressWarnings("rawtypes")
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public class ReflectUtils extends ReflectUtil {
 

+ 4 - 1
SERVER/VberAdminPlusV3/vber-common/vber-common-core/src/main/java/com/vber/common/json/config/JacksonConfig.java

@@ -42,7 +42,10 @@ public class JacksonConfig {
             javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(formatter));
             javaTimeModule.addDeserializer(Date.class, new CustomDateDeserializer());
             builder.modules(javaTimeModule);
-            builder.timeZone(TimeZone.getDefault());
+            TimeZone timeZone = TimeZone.getDefault();
+            if (timeZone != null) {
+                builder.timeZone(timeZone);
+            }
             log.info("初始化 jackson 配置");
         };
     }

+ 16 - 6
SERVER/VberAdminPlusV3/vber-common/vber-common-encrypt/src/main/java/com/vber/common/encrypt/core/EncryptorManager.java

@@ -53,7 +53,6 @@ public class EncryptorManager {
         scanEncryptClasses(typeAliasesPackage);
     }
 
-
     /**
      * 获取类加密字段缓存
      */
@@ -92,7 +91,7 @@ public class EncryptorManager {
      * @param encryptContext 加密相关的配置信息
      */
     public String encrypt(String value, EncryptContext encryptContext) {
-        if (StringUtils.startsWith(value, Constants.ENCRYPT_HEADER)) {
+        if (value == null || StringUtils.startsWith(value, Constants.ENCRYPT_HEADER)) {
             return value;
         }
         IEncryptor encryptor = this.registAndGetEncryptor(encryptContext);
@@ -107,7 +106,7 @@ public class EncryptorManager {
      * @param encryptContext 加密相关的配置信息
      */
     public String decrypt(String value, EncryptContext encryptContext) {
-        if (!StringUtils.startsWith(value, Constants.ENCRYPT_HEADER)) {
+        if (value == null || !StringUtils.startsWith(value, Constants.ENCRYPT_HEADER)) {
             return value;
         }
         IEncryptor encryptor = this.registAndGetEncryptor(encryptContext);
@@ -119,15 +118,26 @@ public class EncryptorManager {
      * 通过 typeAliasesPackage 设置的扫描包 扫描缓存实体
      */
     private void scanEncryptClasses(String typeAliasesPackage) {
+        if (typeAliasesPackage == null || typeAliasesPackage.trim().isEmpty()) {
+            return;
+        }
+
         PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
         CachingMetadataReaderFactory factory = new CachingMetadataReaderFactory();
-        String[] packagePatternArray = StringUtils.splitPreserveAllTokens(typeAliasesPackage, ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
+        String[] packagePatternArray = StringUtils.splitPreserveAllTokens(typeAliasesPackage,
+                ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
         String classpath = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX;
         try {
             for (String packagePattern : packagePatternArray) {
+                if (packagePattern == null) {
+                    continue;
+                }
                 String path = ClassUtils.convertClassNameToResourcePath(packagePattern);
                 Resource[] resources = resolver.getResources(classpath + path + "/*.class");
                 for (Resource resource : resources) {
+                    if (resource == null) {
+                        continue;
+                    }
                     ClassMetadata classMetadata = factory.getMetadataReader(resource).getClassMetadata();
                     Class<?> clazz = Resources.classForName(classMetadata.getClassName());
                     Set<Field> encryptFieldSet = getEncryptFieldSetFromClazz(clazz);
@@ -155,8 +165,8 @@ public class EncryptorManager {
             fieldSet.addAll(Arrays.asList(fields));
             clazz = clazz.getSuperclass();
         }
-        fieldSet = fieldSet.stream().filter(field ->
-                        field.isAnnotationPresent(EncryptField.class) && field.getType() == String.class)
+        fieldSet = fieldSet.stream()
+                .filter(field -> field.isAnnotationPresent(EncryptField.class) && field.getType() == String.class)
                 .collect(Collectors.toSet());
         for (Field field : fieldSet) {
             field.setAccessible(true);

+ 31 - 18
SERVER/VberAdminPlusV3/vber-common/vber-common-encrypt/src/main/java/com/vber/common/encrypt/filter/CryptoFilter.java

@@ -18,7 +18,6 @@ import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandl
 
 import java.io.IOException;
 
-
 /**
  * Crypto 过滤器
  *
@@ -32,7 +31,8 @@ public class CryptoFilter implements Filter {
     }
 
     @Override
-    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+            throws IOException, ServletException {
         HttpServletRequest servletRequest = (HttpServletRequest) request;
         HttpServletResponse servletResponse = (HttpServletResponse) response;
 
@@ -44,19 +44,27 @@ public class CryptoFilter implements Filter {
         EncryptResponseBodyWrapper responseBodyWrapper = null;
 
         // 是否为 put 或者 post 请求
-        if (HttpMethod.PUT.matches(servletRequest.getMethod()) || HttpMethod.POST.matches(servletRequest.getMethod())) {
+        String method = servletRequest.getMethod();
+        if (method != null && (HttpMethod.PUT.matches(method) || HttpMethod.POST.matches(method))) {
             // 是否存在加密标头
             String headerValue = servletRequest.getHeader(properties.getHeaderFlag());
             if (StringUtils.isNotBlank(headerValue)) {
                 // 请求解密
-                requestWrapper = new DecryptRequestBodyWrapper(servletRequest, properties.getPrivateKey(), properties.getHeaderFlag());
+                requestWrapper = new DecryptRequestBodyWrapper(servletRequest, properties.getPrivateKey(),
+                        properties.getHeaderFlag());
             } else {
                 // 是否有注解,有就报错,没有放行
                 if (ObjectUtil.isNotNull(apiEncrypt)) {
-                    HandlerExceptionResolver exceptionResolver = SpringUtils.getBean("handlerExceptionResolver", HandlerExceptionResolver.class);
-                    exceptionResolver.resolveException(
-                            servletRequest, servletResponse, null,
-                            new ServiceException("没有访问权限,请联系管理员授权", HttpStatus.FORBIDDEN));
+                    HandlerExceptionResolver exceptionResolver = SpringUtils.getBean("handlerExceptionResolver",
+                            HandlerExceptionResolver.class);
+                    HttpServletResponse finalResponse = servletResponse != null ? servletResponse
+                            : (HttpServletResponse) response;
+                    if (finalResponse != null) {
+                        exceptionResolver.resolveException(
+                                servletRequest, finalResponse,
+                                null,
+                                new ServiceException("没有访问权限,请联系管理员授权", HttpStatus.FORBIDDEN));
+                    }
                     return;
                 }
             }
@@ -70,13 +78,15 @@ public class CryptoFilter implements Filter {
                 ObjectUtil.defaultIfNull(requestWrapper, request),
                 ObjectUtil.defaultIfNull(responseWrapper, response));
 
-        if (responseFlag) {
+        if (responseFlag && responseBodyWrapper != null) {
             servletResponse.reset();
             // 对原始内容加密
             String encryptContent = responseBodyWrapper.getEncryptContent(
                     servletResponse, properties.getPublicKey(), properties.getHeaderFlag());
             // 对加密后的内容写出
-            servletResponse.getWriter().write(encryptContent);
+            if (encryptContent != null) {
+                servletResponse.getWriter().write(encryptContent);
+            }
         }
     }
 
@@ -84,16 +94,19 @@ public class CryptoFilter implements Filter {
      * 获取 ApiEncrypt 注解
      */
     private ApiEncrypt getApiEncryptAnnotation(HttpServletRequest servletRequest) {
-        RequestMappingHandlerMapping handlerMapping = SpringUtils.getBean("requestMappingHandlerMapping", RequestMappingHandlerMapping.class);
+        RequestMappingHandlerMapping handlerMapping = SpringUtils.getBean("requestMappingHandlerMapping",
+                RequestMappingHandlerMapping.class);
         // 获取注解
         try {
-            HandlerExecutionChain mappingHandler = handlerMapping.getHandler(servletRequest);
-            if (ObjectUtil.isNotNull(mappingHandler)) {
-                Object handler = mappingHandler.getHandler();
-                if (ObjectUtil.isNotNull(handler)) {
-                    // 从handler获取注解
-                    if (handler instanceof HandlerMethod handlerMethod) {
-                        return handlerMethod.getMethodAnnotation(ApiEncrypt.class);
+            if (servletRequest != null) {
+                HandlerExecutionChain mappingHandler = handlerMapping.getHandler(servletRequest);
+                if (mappingHandler != null && ObjectUtil.isNotNull(mappingHandler)) {
+                    Object handler = mappingHandler.getHandler();
+                    if (handler != null && ObjectUtil.isNotNull(handler)) {
+                        // 从handler获取注解
+                        if (handler instanceof HandlerMethod handlerMethod) {
+                            return handlerMethod.getMethodAnnotation(ApiEncrypt.class);
+                        }
                     }
                 }
             }

+ 19 - 19
SERVER/VberAdminPlusV3/vber-common/vber-common-excel/src/main/java/com/vber/common/excel/core/CellMergeHandler.java

@@ -30,6 +30,25 @@ public class CellMergeHandler {
         this.rowIndex = hasTitle ? 1 : 0;
     }
 
+    /**
+     * 创建一个单元格合并处理器实例
+     *
+     * @param hasTitle 是否合并标题
+     * @return 单元格合并处理器
+     */
+    public static CellMergeHandler of(final boolean hasTitle) {
+        return new CellMergeHandler(hasTitle);
+    }
+
+    /**
+     * 创建一个单元格合并处理器实例(默认不合并标题)
+     *
+     * @return 单元格合并处理器
+     */
+    public static CellMergeHandler of() {
+        return new CellMergeHandler(false);
+    }
+
     @SneakyThrows
     public List<CellRangeAddress> handle(List<?> rows) {
         // 如果入参为空集合则返回空集
@@ -178,23 +197,4 @@ public class CellMergeHandler {
         }
     }
 
-    /**
-     * 创建一个单元格合并处理器实例
-     *
-     * @param hasTitle 是否合并标题
-     * @return 单元格合并处理器
-     */
-    public static CellMergeHandler of(final boolean hasTitle) {
-        return new CellMergeHandler(hasTitle);
-    }
-
-    /**
-     * 创建一个单元格合并处理器实例(默认不合并标题)
-     *
-     * @return 单元格合并处理器
-     */
-    public static CellMergeHandler of() {
-        return new CellMergeHandler(false);
-    }
-
 }

+ 9 - 7
SERVER/VberAdminPlusV3/vber-common/vber-common-excel/src/main/java/com/vber/common/excel/core/DropDownOptions.java

@@ -23,7 +23,6 @@ import java.util.stream.Collectors;
 @Data
 @AllArgsConstructor
 @NoArgsConstructor
-@SuppressWarnings("unused")
 public class DropDownOptions {
     /**
      * 分隔符
@@ -43,7 +42,9 @@ public class DropDownOptions {
     private List<String> options = new ArrayList<>();
     /**
      * 二级下拉所包含的数据Map
-     * <p>以每一个一级选项值为Key,每个一级选项对应的二级数据为Value</p>
+     * <p>
+     * 以每一个一级选项值为Key,每个一级选项对应的二级数据为Value
+     * </p>
      */
     private Map<String, List<String>> nextOptions = new HashMap<>();
 
@@ -57,7 +58,9 @@ public class DropDownOptions {
 
     /**
      * <h2>创建每个选项可选值</h2>
-     * <p>注意:不能以数字,特殊符号开头,选项中不可以包含任何运算符号</p>
+     * <p>
+     * 注意:不能以数字,特殊符号开头,选项中不可以包含任何运算符号
+     * </p>
      *
      * @param vars 可选值内包含的参数
      * @return 合规的可选值
@@ -117,13 +120,12 @@ public class DropDownOptions {
         parentLinkSonOptions.setOptions(
                 parentList.stream()
                         .map(howToBuildEveryOption)
-                        .collect(Collectors.toList())
-        );
+                        .collect(Collectors.toList()));
         // 提取父-子级联下拉
         Map<String, List<String>> sonOptions = new HashMap<>();
         // 父级依据自己的ID分组
-        Map<Number, List<T>> parentGroupByIdMap =
-                parentList.stream().collect(Collectors.groupingBy(parentHowToGetIdFunction));
+        Map<Number, List<T>> parentGroupByIdMap = parentList.stream()
+                .collect(Collectors.groupingBy(parentHowToGetIdFunction));
         // 遍历每个子集,提取到Map中
         sonList.forEach(everySon -> {
             if (parentGroupByIdMap.containsKey(sonHowToGetParentIdFunction.apply(everySon))) {

+ 42 - 42
SERVER/VberAdminPlusV3/vber-common/vber-common-excel/src/main/java/com/vber/common/excel/utils/ExcelWriterWrapper.java

@@ -22,42 +22,6 @@ import java.util.function.Supplier;
  */
 public record ExcelWriterWrapper<T>(ExcelWriter excelWriter) {
 
-    public void write(Collection<T> data, WriteSheet writeSheet) {
-        excelWriter.write(data, writeSheet);
-    }
-
-    public void write(Supplier<Collection<T>> supplier, WriteSheet writeSheet) {
-        excelWriter.write(supplier.get(), writeSheet);
-    }
-
-    public void write(Collection<T> data, WriteSheet writeSheet, WriteTable writeTable) {
-        excelWriter.write(data, writeSheet, writeTable);
-    }
-
-    public void write(Supplier<Collection<T>> supplier, WriteSheet writeSheet, WriteTable writeTable) {
-        excelWriter.write(supplier.get(), writeSheet, writeTable);
-    }
-
-    public void fill(Object data, WriteSheet writeSheet) {
-        excelWriter.fill(data, writeSheet);
-    }
-
-    public void fill(Object data, FillConfig fillConfig, WriteSheet writeSheet) {
-        excelWriter.fill(data, fillConfig, writeSheet);
-    }
-
-    public void fill(Supplier<Object> supplier, WriteSheet writeSheet) {
-        excelWriter.fill(supplier, writeSheet);
-    }
-
-    public void fill(Supplier<Object> supplier, FillConfig fillConfig, WriteSheet writeSheet) {
-        excelWriter.fill(supplier, fillConfig, writeSheet);
-    }
-
-    public WriteContext writeContext() {
-        return excelWriter.writeContext();
-    }
-
     /**
      * 创建一个 ExcelWriterWrapper
      *
@@ -68,8 +32,6 @@ public record ExcelWriterWrapper<T>(ExcelWriter excelWriter) {
         return new ExcelWriterWrapper<>(excelWriter);
     }
 
-    // -------------------------------- sheet start
-
     public static WriteSheet buildSheet(Integer sheetNo, String sheetName) {
         return sheetBuilder(sheetNo, sheetName).build();
     }
@@ -102,14 +64,12 @@ public record ExcelWriterWrapper<T>(ExcelWriter excelWriter) {
         return FastExcel.writerSheet();
     }
 
-    // -------------------------------- sheet end
-
-    // -------------------------------- table start
-
     public static WriteTable buildTable(Integer tableNo) {
         return tableBuilder(tableNo).build();
     }
 
+    // -------------------------------- sheet start
+
     public static WriteTable buildTable() {
         return tableBuilder().build();
     }
@@ -122,6 +82,46 @@ public record ExcelWriterWrapper<T>(ExcelWriter excelWriter) {
         return FastExcel.writerTable();
     }
 
+    public void write(Collection<T> data, WriteSheet writeSheet) {
+        excelWriter.write(data, writeSheet);
+    }
+
+    public void write(Supplier<Collection<T>> supplier, WriteSheet writeSheet) {
+        excelWriter.write(supplier.get(), writeSheet);
+    }
+
+    public void write(Collection<T> data, WriteSheet writeSheet, WriteTable writeTable) {
+        excelWriter.write(data, writeSheet, writeTable);
+    }
+
+    public void write(Supplier<Collection<T>> supplier, WriteSheet writeSheet, WriteTable writeTable) {
+        excelWriter.write(supplier.get(), writeSheet, writeTable);
+    }
+
+    public void fill(Object data, WriteSheet writeSheet) {
+        excelWriter.fill(data, writeSheet);
+    }
+
+    // -------------------------------- sheet end
+
+    // -------------------------------- table start
+
+    public void fill(Object data, FillConfig fillConfig, WriteSheet writeSheet) {
+        excelWriter.fill(data, fillConfig, writeSheet);
+    }
+
+    public void fill(Supplier<Object> supplier, WriteSheet writeSheet) {
+        excelWriter.fill(supplier, writeSheet);
+    }
+
+    public void fill(Supplier<Object> supplier, FillConfig fillConfig, WriteSheet writeSheet) {
+        excelWriter.fill(supplier, fillConfig, writeSheet);
+    }
+
+    public WriteContext writeContext() {
+        return excelWriter.writeContext();
+    }
+
     // -------------------------------- table end
 
 }

+ 3 - 1
SERVER/VberAdminPlusV3/vber-common/vber-common-mybatis/src/main/java/com/vber/common/mybatis/aspect/DataPermissionAdvice.java

@@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.aopalliance.intercept.MethodInterceptor;
 import org.aopalliance.intercept.MethodInvocation;
 
+import javax.annotation.Nonnull;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 
@@ -18,7 +19,8 @@ import java.lang.reflect.Proxy;
 public class DataPermissionAdvice implements MethodInterceptor {
 
     @Override
-    public Object invoke(MethodInvocation invocation) throws Throwable {
+    public Object invoke(@Nonnull MethodInvocation invocation) throws Throwable {
+
         Object target = invocation.getThis();
         Method method = invocation.getMethod();
         Object[] args = invocation.getArguments();

+ 29 - 29
SERVER/VberAdminPlusV3/vber-common/vber-common-mybatis/src/main/java/com/vber/common/mybatis/handler/MybatisExceptionHandler.java

@@ -21,35 +21,6 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
 public class MybatisExceptionHandler {
 
 
-    /**
-     * 主键或UNIQUE索引,数据重复异常
-     */
-    @ExceptionHandler(DuplicateKeyException.class)
-    public R<Void> handleDuplicateKeyException(DuplicateKeyException e, HttpServletRequest request) {
-        String requestURI = request.getRequestURI();
-        log.error("请求地址'{}',数据库中已存在记录'{}'", requestURI, e.getMessage());
-        return R.fail(HttpStatus.HTTP_CONFLICT, "数据库中已存在该记录,请联系管理员确认");
-    }
-
-    /**
-     * Mybatis系统异常 通用处理
-     */
-    @ExceptionHandler(MyBatisSystemException.class)
-    public R<Void> handleCannotFindDataSourceException(MyBatisSystemException e, HttpServletRequest request) {
-        String requestURI = request.getRequestURI();
-        Throwable root = getRootCause(e);
-        if (root instanceof NotLoginException) {
-            log.error("请求地址'{}',认证失败'{}',无法访问系统资源", requestURI, root.getMessage());
-            return R.fail(HttpStatus.HTTP_UNAUTHORIZED, "认证失败,无法访问系统资源");
-        }
-        if (root instanceof CannotFindDataSourceException) {
-            log.error("请求地址'{}', 未找到数据源", requestURI);
-            return R.fail(HttpStatus.HTTP_INTERNAL_ERROR, "未找到数据源,请联系管理员确认");
-        }
-        log.error("请求地址'{}', Mybatis系统异常", requestURI, e);
-        return R.fail(HttpStatus.HTTP_INTERNAL_ERROR, e.getMessage());
-    }
-
     /**
      * 获取异常的根因(递归查找)
      *
@@ -87,4 +58,33 @@ public class MybatisExceptionHandler {
         return null;
     }
 
+    /**
+     * 主键或UNIQUE索引,数据重复异常
+     */
+    @ExceptionHandler(DuplicateKeyException.class)
+    public R<Void> handleDuplicateKeyException(DuplicateKeyException e, HttpServletRequest request) {
+        String requestURI = request.getRequestURI();
+        log.error("请求地址'{}',数据库中已存在记录'{}'", requestURI, e.getMessage());
+        return R.fail(HttpStatus.HTTP_CONFLICT, "数据库中已存在该记录,请联系管理员确认");
+    }
+
+    /**
+     * Mybatis系统异常 通用处理
+     */
+    @ExceptionHandler(MyBatisSystemException.class)
+    public R<Void> handleCannotFindDataSourceException(MyBatisSystemException e, HttpServletRequest request) {
+        String requestURI = request.getRequestURI();
+        Throwable root = getRootCause(e);
+        if (root instanceof NotLoginException) {
+            log.error("请求地址'{}',认证失败'{}',无法访问系统资源", requestURI, root.getMessage());
+            return R.fail(HttpStatus.HTTP_UNAUTHORIZED, "认证失败,无法访问系统资源");
+        }
+        if (root instanceof CannotFindDataSourceException) {
+            log.error("请求地址'{}', 未找到数据源", requestURI);
+            return R.fail(HttpStatus.HTTP_INTERNAL_ERROR, "未找到数据源,请联系管理员确认");
+        }
+        log.error("请求地址'{}', Mybatis系统异常", requestURI, e);
+        return R.fail(HttpStatus.HTTP_INTERNAL_ERROR, e.getMessage());
+    }
+
 }

+ 4 - 2
SERVER/VberAdminPlusV3/vber-common/vber-common-mybatis/src/main/java/com/vber/common/mybatis/helper/DataPermissionHelper.java

@@ -56,7 +56,6 @@ public class DataPermissionHelper {
         PERMISSION_CACHE.remove();
     }
 
-
     /**
      * 从上下文中获取指定键的变量值,并将其转换为指定的类型
      *
@@ -64,6 +63,7 @@ public class DataPermissionHelper {
      * @param <T> 变量值的类型
      * @return 指定键的变量值,如果不存在则返回 null
      */
+    @SuppressWarnings("unchecked")
     public static <T> T getVariable(String key) {
         Map<String, Object> context = getContext();
         return (T) context.get(key);
@@ -87,6 +87,7 @@ public class DataPermissionHelper {
      * @return 存储在SaStorage中的Map对象,用于存储数据权限相关的上下文信息
      * @throws NullPointerException 如果数据权限上下文类型异常,则抛出NullPointerException
      */
+    @SuppressWarnings("unchecked")
     public static Map<String, Object> getContext() {
         SaStorage saStorage = SaHolder.getStorage();
         Object attribute = saStorage.get(DATA_PERMISSION_KEY);
@@ -101,7 +102,8 @@ public class DataPermissionHelper {
     }
 
     private static IgnoreStrategy getIgnoreStrategy() {
-        Object ignoreStrategyLocal = ReflectUtils.getStaticFieldValue(ReflectUtils.getField(InterceptorIgnoreHelper.class, "IGNORE_STRATEGY_LOCAL"));
+        Object ignoreStrategyLocal = ReflectUtils
+                .getStaticFieldValue(ReflectUtils.getField(InterceptorIgnoreHelper.class, "IGNORE_STRATEGY_LOCAL"));
         if (ignoreStrategyLocal instanceof ThreadLocal<?> IGNORE_STRATEGY_LOCAL) {
             if (IGNORE_STRATEGY_LOCAL.get() instanceof IgnoreStrategy ignoreStrategy) {
                 return ignoreStrategy;

+ 4 - 2
SERVER/VberAdminPlusV3/vber-common/vber-common-mybatis/src/main/java/com/vber/common/mybatis/interceptor/PlusDataPermissionInterceptor.java

@@ -31,6 +31,7 @@ import java.util.List;
  *
  * @author Iwb
  */
+@SuppressWarnings("unused")
 @Slf4j
 public class PlusDataPermissionInterceptor extends BaseMultiTableInnerInterceptor implements InnerInterceptor {
 
@@ -47,8 +48,10 @@ public class PlusDataPermissionInterceptor extends BaseMultiTableInnerIntercepto
      * @param boundSql      绑定的 SQL 对象
      * @throws SQLException 如果发生 SQL 异常
      */
+    @SuppressWarnings("rawtypes")
     @Override
-    public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
+    public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds,
+                            ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
         // 检查是否需要忽略数据权限处理
         if (InterceptorIgnoreHelper.willIgnoreDataPermission(ms.getId())) {
             return;
@@ -168,4 +171,3 @@ public class PlusDataPermissionInterceptor extends BaseMultiTableInnerIntercepto
         return handler.getSqlSegment(table, where, whereSegment);
     }
 }
-

+ 2 - 2
SERVER/VberAdminPlusV3/vber-common/vber-common-notice/pom.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xmlns="http://maven.apache.org/POM/4.0.0"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>

+ 3 - 0
SERVER/VberAdminPlusV3/vber-common/vber-common-oss/src/main/java/com/vber/common/oss/factory/OssFactory.java

@@ -42,6 +42,9 @@ public class OssFactory {
      * 根据类型获取实例
      */
     public static OssClient instance(String configKey) {
+        if (configKey == null) {
+            throw new OssException("文件存储服务类型无法找到!");
+        }
         String json = CacheUtils.get(CacheNames.SYS_OSS_CONFIG, configKey);
         if (json == null) {
             throw new OssException("系统异常, '" + configKey + "'配置信息不存在!");

+ 22 - 2
SERVER/VberAdminPlusV3/vber-common/vber-common-oss/src/main/java/com/vber/common/oss/properties/OssProperties.java

@@ -60,7 +60,12 @@ public class OssProperties {
      */
     private String accessPolicy;
 
-    public boolean equals(OssProperties properties) {
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null || getClass() != obj.getClass())
+            return false;
+        OssProperties properties = (OssProperties) obj;
         return properties.getAccessKey().equals(accessKey) &&
                 properties.getSecretKey().equals(secretKey) &&
                 properties.getBucketName().equals(bucketName) &&
@@ -68,7 +73,22 @@ public class OssProperties {
                 properties.getPrefix().equals(prefix) &&
                 properties.getDomain().equals(domain) &&
                 properties.getIsHttps().equals(isHttps) &&
-                (endpoint.isEmpty() || properties.getEndpoint().isEmpty() || properties.getEndpoint().equals(endpoint)) &&
+                (endpoint.isEmpty() || properties.getEndpoint().isEmpty() || properties.getEndpoint().equals(endpoint))
+                &&
                 properties.getAccessPolicy().equals(accessPolicy);
     }
+
+    @Override
+    public int hashCode() {
+        int result = accessKey.hashCode();
+        result = 31 * result + secretKey.hashCode();
+        result = 31 * result + bucketName.hashCode();
+        result = 31 * result + region.hashCode();
+        result = 31 * result + prefix.hashCode();
+        result = 31 * result + domain.hashCode();
+        result = 31 * result + isHttps.hashCode();
+        result = 31 * result + endpoint.hashCode();
+        result = 31 * result + accessPolicy.hashCode();
+        return result;
+    }
 }

+ 8 - 5
SERVER/VberAdminPlusV3/vber-common/vber-common-ratelimiter/src/main/java/com/vber/common/ratelimiter/aspectj/RateLimiterAspect.java

@@ -49,7 +49,6 @@ public class RateLimiterAspect {
      */
     private final ParameterNameDiscoverer pnd = new DefaultParameterNameDiscoverer();
 
-
     @Before("@annotation(rateLimiter)")
     public void doBefore(JoinPoint point, RateLimiter rateLimiter) {
         int time = rateLimiter.time();
@@ -79,6 +78,7 @@ public class RateLimiterAspect {
         }
     }
 
+    @SuppressWarnings("null")
     private String getCombineKey(RateLimiter rateLimiter, JoinPoint point) {
         String key = rateLimiter.key();
         // 判断 key 不为空 和 不是表达式
@@ -86,9 +86,9 @@ public class RateLimiterAspect {
             MethodSignature signature = (MethodSignature) point.getSignature();
             Method targetMethod = signature.getMethod();
             Object[] args = point.getArgs();
-            //noinspection DataFlowIssue
-            MethodBasedEvaluationContext context =
-                    new MethodBasedEvaluationContext(null, targetMethod, args, pnd);
+            Object rootObject = point.getTarget() != null ? point.getTarget() : new Object();
+            MethodBasedEvaluationContext context = new MethodBasedEvaluationContext(rootObject, targetMethod, args,
+                    pnd);
             context.setBeanResolver(new BeanFactoryResolver(SpringUtils.getBeanFactory()));
             Expression expression;
             if (StringUtils.startsWith(key, parserContext.getExpressionPrefix())
@@ -97,7 +97,10 @@ public class RateLimiterAspect {
             } else {
                 expression = parser.parseExpression(key);
             }
-            key = expression.getValue(context, String.class);
+            String evaluatedKey = expression.getValue(context, String.class);
+            if (evaluatedKey != null) {
+                key = evaluatedKey;
+            }
         }
         StringBuilder stringBuffer = new StringBuilder(GlobalConstants.RATE_LIMIT_KEY);
         stringBuffer.append(ServletUtils.getRequest().getRequestURI()).append(":");

+ 41 - 40
SERVER/VberAdminPlusV3/vber-common/vber-common-redis/src/main/java/com/vber/common/redis/config/RedisConfig.java

@@ -40,6 +40,7 @@ public class RedisConfig {
     @Autowired
     private RedissonProperties redissonProperties;
 
+    @SuppressWarnings("unused")
     @Autowired
     private ObjectMapper objectMapper;
 
@@ -71,7 +72,7 @@ public class RedisConfig {
             if (ObjectUtil.isNotNull(singleServerConfig)) {
                 // 使用单机模式
                 config.useSingleServer()
-                        //设置redis key前缀
+                        // 设置redis key前缀
                         .setNameMapper(new KeyPrefixHandler(redissonProperties.getKeyPrefix()))
                         .setTimeout(singleServerConfig.getTimeout())
                         .setClientName(singleServerConfig.getClientName())
@@ -84,7 +85,7 @@ public class RedisConfig {
             RedissonProperties.ClusterServersConfig clusterServersConfig = redissonProperties.getClusterServersConfig();
             if (ObjectUtil.isNotNull(clusterServersConfig)) {
                 config.useClusterServers()
-                        //设置redis key前缀
+                        // 设置redis key前缀
                         .setNameMapper(new KeyPrefixHandler(redissonProperties.getKeyPrefix()))
                         .setTimeout(clusterServersConfig.getTimeout())
                         .setClientName(clusterServersConfig.getClientName())
@@ -114,46 +115,46 @@ public class RedisConfig {
      *
      * --- # redis 集群配置(单机与集群只能开启一个另一个需要注释掉)
      * spring.data:
-     *   redis:
-     *     cluster:
-     *       nodes:
-     *         - 192.168.0.100:6379
-     *         - 192.168.0.101:6379
-     *         - 192.168.0.102:6379
-     *     # 密码
-     *     password:
-     *     # 连接超时时间
-     *     timeout: 10s
-     *     # 是否开启ssl
-     *     ssl.enabled: false
+     * redis:
+     * cluster:
+     * nodes:
+     * - 192.168.0.100:6379
+     * - 192.168.0.101:6379
+     * - 192.168.0.102:6379
+     * # 密码
+     * password:
+     * # 连接超时时间
+     * timeout: 10s
+     * # 是否开启ssl
+     * ssl.enabled: false
      *
      * redisson:
-     *   # 线程池数量
-     *   threads: 16
-     *   # Netty线程池数量
-     *   nettyThreads: 32
-     *   # 集群配置
-     *   clusterServersConfig:
-     *     # 客户端名称
-     *     clientName: ${vber.name}
-     *     # master最小空闲连接数
-     *     masterConnectionMinimumIdleSize: 32
-     *     # master连接池大小
-     *     masterConnectionPoolSize: 64
-     *     # slave最小空闲连接数
-     *     slaveConnectionMinimumIdleSize: 32
-     *     # slave连接池大小
-     *     slaveConnectionPoolSize: 64
-     *     # 连接空闲超时,单位:毫秒
-     *     idleConnectionTimeout: 10000
-     *     # 命令等待超时,单位:毫秒
-     *     timeout: 3000
-     *     # 发布和订阅连接池大小
-     *     subscriptionConnectionPoolSize: 50
-     *     # 读取模式
-     *     readMode: "SLAVE"
-     *     # 订阅模式
-     *     subscriptionMode: "MASTER"
+     * # 线程池数量
+     * threads: 16
+     * # Netty线程池数量
+     * nettyThreads: 32
+     * # 集群配置
+     * clusterServersConfig:
+     * # 客户端名称
+     * clientName: ${vber.name}
+     * # master最小空闲连接数
+     * masterConnectionMinimumIdleSize: 32
+     * # master连接池大小
+     * masterConnectionPoolSize: 64
+     * # slave最小空闲连接数
+     * slaveConnectionMinimumIdleSize: 32
+     * # slave连接池大小
+     * slaveConnectionPoolSize: 64
+     * # 连接空闲超时,单位:毫秒
+     * idleConnectionTimeout: 10000
+     * # 命令等待超时,单位:毫秒
+     * timeout: 3000
+     * # 发布和订阅连接池大小
+     * subscriptionConnectionPoolSize: 50
+     * # 读取模式
+     * readMode: "SLAVE"
+     * # 订阅模式
+     * subscriptionMode: "MASTER"
      */
 
 }

+ 19 - 10
SERVER/VberAdminPlusV3/vber-common/vber-common-redis/src/main/java/com/vber/common/redis/manager/CaffeineCacheDecorator.java

@@ -2,6 +2,8 @@ package com.vber.common.redis.manager;
 
 import com.vber.common.core.utils.SpringUtils;
 import org.springframework.cache.Cache;
+import org.springframework.lang.NonNull;
+import org.springframework.lang.Nullable;
 
 import java.util.concurrent.Callable;
 
@@ -12,23 +14,26 @@ import java.util.concurrent.Callable;
  */
 public class CaffeineCacheDecorator implements Cache {
 
-    private static final com.github.benmanes.caffeine.cache.Cache<Object, Object>
-            CAFFEINE = SpringUtils.getBean("caffeine");
+    private static final com.github.benmanes.caffeine.cache.Cache<Object, Object> CAFFEINE = SpringUtils
+            .getBean("caffeine");
 
+    @NonNull
     private final String name;
     private final Cache cache;
 
-    public CaffeineCacheDecorator(String name, Cache cache) {
+    public CaffeineCacheDecorator(@NonNull String name, Cache cache) {
         this.name = name;
         this.cache = cache;
     }
 
     @Override
+    @NonNull
     public String getName() {
         return name;
     }
 
     @Override
+    @NonNull
     public Object getNativeCache() {
         return cache.getNativeCache();
     }
@@ -38,37 +43,40 @@ public class CaffeineCacheDecorator implements Cache {
     }
 
     @Override
-    public ValueWrapper get(Object key) {
+    @Nullable
+    public ValueWrapper get(@NonNull Object key) {
         Object o = CAFFEINE.get(getUniqueKey(key), k -> cache.get(key));
         return (ValueWrapper) o;
     }
 
     @SuppressWarnings("unchecked")
     @Override
-    public <T> T get(Object key, Class<T> type) {
+    @Nullable
+    public <T> T get(@NonNull Object key, @Nullable Class<T> type) {
         Object o = CAFFEINE.get(getUniqueKey(key), k -> cache.get(key, type));
         return (T) o;
     }
 
     @Override
-    public void put(Object key, Object value) {
+    public void put(@NonNull Object key, @Nullable Object value) {
         CAFFEINE.invalidate(getUniqueKey(key));
         cache.put(key, value);
     }
 
     @Override
-    public ValueWrapper putIfAbsent(Object key, Object value) {
+    @Nullable
+    public ValueWrapper putIfAbsent(@NonNull Object key, @Nullable Object value) {
         CAFFEINE.invalidate(getUniqueKey(key));
         return cache.putIfAbsent(key, value);
     }
 
     @Override
-    public void evict(Object key) {
+    public void evict(@NonNull Object key) {
         evictIfPresent(key);
     }
 
     @Override
-    public boolean evictIfPresent(Object key) {
+    public boolean evictIfPresent(@NonNull Object key) {
         boolean b = cache.evictIfPresent(key);
         if (b) {
             CAFFEINE.invalidate(getUniqueKey(key));
@@ -89,7 +97,8 @@ public class CaffeineCacheDecorator implements Cache {
 
     @SuppressWarnings("unchecked")
     @Override
-    public <T> T get(Object key, Callable<T> valueLoader) {
+    @Nullable
+    public <T> T get(@NonNull Object key, @NonNull Callable<T> valueLoader) {
         Object o = CAFFEINE.get(getUniqueKey(key), k -> cache.get(key, valueLoader));
         return (T) o;
     }

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

@@ -9,6 +9,7 @@ import org.springframework.boot.convert.DurationStyle;
 import org.springframework.cache.Cache;
 import org.springframework.cache.CacheManager;
 import org.springframework.cache.transaction.TransactionAwareCacheDecorator;
+import org.springframework.lang.NonNull;
 import org.springframework.util.StringUtils;
 
 import java.util.Collection;
@@ -41,7 +42,6 @@ public class PlusSpringCacheManager implements CacheManager {
     public PlusSpringCacheManager() {
     }
 
-
     /**
      * Defines possibility of storing {@code null} values.
      * <p>
@@ -55,7 +55,8 @@ public class PlusSpringCacheManager implements CacheManager {
 
     /**
      * Defines if cache aware of Spring-managed transactions.
-     * If {@code true} put/evict operations are executed only for successful transaction in after-commit phase.
+     * If {@code true} put/evict operations are executed only for successful
+     * transaction in after-commit phase.
      * <p>
      * Default is <code>false</code>
      *
@@ -79,12 +80,12 @@ public class PlusSpringCacheManager implements CacheManager {
     }
 
     @Override
-    public Cache getCache(String name) {
+    public Cache getCache(@NonNull String name) {
         // 重写 cacheName 支持多参数
         String[] array = StringUtils.delimitedListToStringArray(name, "#");
-        name = array[0];
+        String cacheName = array[0];
 
-        Cache cache = instanceMap.get(name);
+        Cache cache = instanceMap.get(cacheName);
         if (cache != null) {
             return cache;
         }
@@ -92,10 +93,10 @@ public class PlusSpringCacheManager implements CacheManager {
             return cache;
         }
 
-        CacheConfig config = configMap.get(name);
+        CacheConfig config = configMap.get(cacheName);
         if (config == null) {
             config = createDefaultConfig();
-            configMap.put(name, config);
+            configMap.put(cacheName, config);
         }
 
         if (array.length > 1) {
@@ -113,10 +114,10 @@ public class PlusSpringCacheManager implements CacheManager {
         }
 
         if (config.getMaxIdleTime() == 0 && config.getTTL() == 0 && config.getMaxSize() == 0) {
-            return createMap(name, config, local);
+            return createMap(cacheName, config, local);
         }
 
-        return createMapCache(name, config, local);
+        return createMapCache(cacheName, config, local);
     }
 
     private Cache createMap(String name, CacheConfig config, int local) {
@@ -124,7 +125,7 @@ public class PlusSpringCacheManager implements CacheManager {
 
         Cache cache = new RedissonCache(map, allowNullValues);
         if (local == 1) {
-            cache = new CaffeineCacheDecorator(name, cache);
+            cache = new CaffeineCacheDecorator(name != null ? name : "", cache);
         }
         if (transactionAware) {
             cache = new TransactionAwareCacheDecorator(cache);
@@ -141,7 +142,7 @@ public class PlusSpringCacheManager implements CacheManager {
 
         Cache cache = new RedissonCache(map, config, allowNullValues);
         if (local == 1) {
-            cache = new CaffeineCacheDecorator(name, cache);
+            cache = new CaffeineCacheDecorator(name != null ? name : "", cache);
         }
         if (transactionAware) {
             cache = new TransactionAwareCacheDecorator(cache);
@@ -156,8 +157,9 @@ public class PlusSpringCacheManager implements CacheManager {
     }
 
     @Override
-    public Collection<String> getCacheNames() {
-        return Collections.unmodifiableSet(configMap.keySet());
+    @SuppressWarnings("null")
+    public @NonNull Collection<String> getCacheNames() {
+        return Collections.unmodifiableCollection(configMap.keySet());
     }
 
     /**
@@ -171,7 +173,9 @@ public class PlusSpringCacheManager implements CacheManager {
     public void setCacheNames(Collection<String> names) {
         if (names != null) {
             for (String name : names) {
-                getCache(name);
+                if (name != null) {
+                    getCache(name);
+                }
             }
             dynamic = false;
         } else {
@@ -179,5 +183,4 @@ public class PlusSpringCacheManager implements CacheManager {
         }
     }
 
-
 }

+ 7 - 5
SERVER/VberAdminPlusV3/vber-common/vber-common-redis/src/main/java/com/vber/common/redis/utils/CacheUtils.java

@@ -5,6 +5,8 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.springframework.cache.Cache;
 import org.springframework.cache.CacheManager;
+import org.springframework.lang.NonNull;
+import org.springframework.lang.Nullable;
 
 import java.util.Objects;
 
@@ -19,14 +21,14 @@ public class CacheUtils {
 
     private static final CacheManager CACHE_MANAGER = SpringUtils.getBean(CacheManager.class);
 
-
     /**
      * 获取缓存值
      *
      * @param cacheNames 缓存组名称
      * @param key        缓存key
      */
-    public static <T> T get(String cacheNames, Object key) {
+    @Nullable
+    public static <T> T get(@NonNull String cacheNames, @NonNull Object key) {
         Cache.ValueWrapper wrapper = Objects.requireNonNull(CACHE_MANAGER.getCache(cacheNames)).get(key);
         return wrapper != null ? (T) wrapper.get() : null;
     }
@@ -38,7 +40,7 @@ public class CacheUtils {
      * @param key        缓存key
      * @param value      缓存值
      */
-    public static void put(String cacheNames, Object key, Object value) {
+    public static void put(@NonNull String cacheNames, @NonNull Object key, @Nullable Object value) {
         Objects.requireNonNull(CACHE_MANAGER.getCache(cacheNames)).put(key, value);
     }
 
@@ -48,7 +50,7 @@ public class CacheUtils {
      * @param cacheNames 缓存组名称
      * @param key        缓存key
      */
-    public static void evict(String cacheNames, Object key) {
+    public static void evict(@NonNull String cacheNames, @NonNull Object key) {
         Objects.requireNonNull(CACHE_MANAGER.getCache(cacheNames)).evict(key);
     }
 
@@ -57,7 +59,7 @@ public class CacheUtils {
      *
      * @param cacheNames 缓存组名称
      */
-    public static void clear(String cacheNames) {
+    public static void clear(@NonNull String cacheNames) {
         Objects.requireNonNull(CACHE_MANAGER.getCache(cacheNames)).clear();
     }
 

+ 0 - 239
SERVER/VberAdminPlusV3/vber-common/vber-common-redis/src/main/java/com/vber/common/redis/utils/QueueUtils.java

@@ -1,239 +0,0 @@
-package com.vber.common.redis.utils;
-
-import com.vber.common.core.utils.SpringUtils;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.redisson.api.*;
-
-import java.util.concurrent.CompletionStage;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Function;
-
-/**
- * 分布式队列工具
- * 轻量级队列 重量级数据量 请使用 MQ
- * 要求 redis 5.X 以上
- *
- * @author Iwb
- * @version 3.6.0 新增
- * @deprecated redisson 新版本已经将队列功能标记删除 一些技术问题无法解决 建议搭建MQ使用
- */
-@Deprecated
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class QueueUtils {
-
-    private static final RedissonClient CLIENT = SpringUtils.getBean(RedissonClient.class);
-
-
-    /**
-     * 获取客户端实例
-     */
-    public static RedissonClient getClient() {
-        return CLIENT;
-    }
-
-    /**
-     * 添加普通队列数据
-     *
-     * @param queueName 队列名
-     * @param data      数据
-     */
-    public static <T> boolean addQueueObject(String queueName, T data) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        return queue.offer(data);
-    }
-
-    /**
-     * 通用获取一个队列数据 没有数据返回 null(不支持延迟队列)
-     *
-     * @param queueName 队列名
-     */
-    public static <T> T getQueueObject(String queueName) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        return queue.poll();
-    }
-
-    /**
-     * 通用删除队列数据(不支持延迟队列)
-     */
-    public static <T> boolean removeQueueObject(String queueName, T data) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        return queue.remove(data);
-    }
-
-    /**
-     * 通用销毁队列 所有阻塞监听 报错(不支持延迟队列)
-     */
-    public static <T> boolean destroyQueue(String queueName) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        return queue.delete();
-    }
-
-    /**
-     * 添加延迟队列数据 默认毫秒
-     *
-     * @param queueName 队列名
-     * @param data      数据
-     * @param time      延迟时间
-     */
-    public static <T> void addDelayedQueueObject(String queueName, T data, long time) {
-        addDelayedQueueObject(queueName, data, time, TimeUnit.MILLISECONDS);
-    }
-
-    /**
-     * 添加延迟队列数据
-     *
-     * @param queueName 队列名
-     * @param data      数据
-     * @param time      延迟时间
-     * @param timeUnit  单位
-     */
-    public static <T> void addDelayedQueueObject(String queueName, T data, long time, TimeUnit timeUnit) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        RDelayedQueue<T> delayedQueue = CLIENT.getDelayedQueue(queue);
-        delayedQueue.offer(data, time, timeUnit);
-    }
-
-    /**
-     * 获取一个延迟队列数据 没有数据返回 null
-     *
-     * @param queueName 队列名
-     */
-    public static <T> T getDelayedQueueObject(String queueName) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        RDelayedQueue<T> delayedQueue = CLIENT.getDelayedQueue(queue);
-        return delayedQueue.poll();
-    }
-
-    /**
-     * 删除延迟队列数据
-     */
-    public static <T> boolean removeDelayedQueueObject(String queueName, T data) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        RDelayedQueue<T> delayedQueue = CLIENT.getDelayedQueue(queue);
-        return delayedQueue.remove(data);
-    }
-
-    /**
-     * 销毁延迟队列 所有阻塞监听 报错
-     */
-    public static <T> void destroyDelayedQueue(String queueName) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        RDelayedQueue<T> delayedQueue = CLIENT.getDelayedQueue(queue);
-        delayedQueue.destroy();
-    }
-
-    /**
-     * 添加优先队列数据
-     *
-     * @param queueName 队列名
-     * @param data      数据
-     */
-    public static <T> boolean addPriorityQueueObject(String queueName, T data) {
-        RPriorityBlockingQueue<T> priorityBlockingQueue = CLIENT.getPriorityBlockingQueue(queueName);
-        return priorityBlockingQueue.offer(data);
-    }
-
-    /**
-     * 优先队列获取一个队列数据 没有数据返回 null(不支持延迟队列)
-     *
-     * @param queueName 队列名
-     */
-    public static <T> T getPriorityQueueObject(String queueName) {
-        RPriorityBlockingQueue<T> queue = CLIENT.getPriorityBlockingQueue(queueName);
-        return queue.poll();
-    }
-
-    /**
-     * 优先队列删除队列数据(不支持延迟队列)
-     */
-    public static <T> boolean removePriorityQueueObject(String queueName, T data) {
-        RPriorityBlockingQueue<T> queue = CLIENT.getPriorityBlockingQueue(queueName);
-        return queue.remove(data);
-    }
-
-    /**
-     * 优先队列销毁队列 所有阻塞监听 报错(不支持延迟队列)
-     */
-    public static <T> boolean destroyPriorityQueue(String queueName) {
-        RPriorityBlockingQueue<T> queue = CLIENT.getPriorityBlockingQueue(queueName);
-        return queue.delete();
-    }
-
-    /**
-     * 尝试设置 有界队列 容量 用于限制数量
-     *
-     * @param queueName 队列名
-     * @param capacity  容量
-     */
-    public static <T> boolean trySetBoundedQueueCapacity(String queueName, int capacity) {
-        RBoundedBlockingQueue<T> boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName);
-        return boundedBlockingQueue.trySetCapacity(capacity);
-    }
-
-    /**
-     * 尝试设置 有界队列 容量 用于限制数量
-     *
-     * @param queueName 队列名
-     * @param capacity  容量
-     * @param destroy   是否销毁
-     */
-    public static <T> boolean trySetBoundedQueueCapacity(String queueName, int capacity, boolean destroy) {
-        RBoundedBlockingQueue<T> boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName);
-        if (destroy) {
-            boundedBlockingQueue.delete();
-        }
-        return boundedBlockingQueue.trySetCapacity(capacity);
-    }
-
-    /**
-     * 添加有界队列数据
-     *
-     * @param queueName 队列名
-     * @param data      数据
-     * @return 添加成功 true 已达到界限 false
-     */
-    public static <T> boolean addBoundedQueueObject(String queueName, T data) {
-        RBoundedBlockingQueue<T> boundedBlockingQueue = CLIENT.getBoundedBlockingQueue(queueName);
-        return boundedBlockingQueue.offer(data);
-    }
-
-    /**
-     * 有界队列获取一个队列数据 没有数据返回 null(不支持延迟队列)
-     *
-     * @param queueName 队列名
-     */
-    public static <T> T getBoundedQueueObject(String queueName) {
-        RBoundedBlockingQueue<T> queue = CLIENT.getBoundedBlockingQueue(queueName);
-        return queue.poll();
-    }
-
-    /**
-     * 有界队列删除队列数据(不支持延迟队列)
-     */
-    public static <T> boolean removeBoundedQueueObject(String queueName, T data) {
-        RBoundedBlockingQueue<T> queue = CLIENT.getBoundedBlockingQueue(queueName);
-        return queue.remove(data);
-    }
-
-    /**
-     * 有界队列销毁队列 所有阻塞监听 报错(不支持延迟队列)
-     */
-    public static <T> boolean destroyBoundedQueue(String queueName) {
-        RBoundedBlockingQueue<T> queue = CLIENT.getBoundedBlockingQueue(queueName);
-        return queue.delete();
-    }
-
-    /**
-     * 订阅阻塞队列(可订阅所有实现类 例如: 延迟 优先 有界 等)
-     */
-    public static <T> void subscribeBlockingQueue(String queueName, Function<T, CompletionStage<Void>> consumer, boolean isDelayed) {
-        RBlockingQueue<T> queue = CLIENT.getBlockingQueue(queueName);
-        if (isDelayed) {
-            // 订阅延迟队列
-            CLIENT.getDelayedQueue(queue);
-        }
-        queue.subscribeOnElements(consumer);
-    }
-
-}

+ 1 - 2
SERVER/VberAdminPlusV3/vber-common/vber-common-satoken/src/main/java/com/vber/common/satoken/core/dao/PlusSaTokenDao.java

@@ -95,7 +95,6 @@ public class PlusSaTokenDao implements SaTokenDaoBySessionFollowObject {
         RedisUtils.expire(key, Duration.ofSeconds(timeout));
     }
 
-
     /**
      * 获取Object,如无返空
      */
@@ -111,7 +110,7 @@ public class PlusSaTokenDao implements SaTokenDaoBySessionFollowObject {
      * @param key 键名称
      * @return object
      */
-    @SuppressWarnings("unchecked cast")
+    @SuppressWarnings("unchecked")
     @Override
     public <T> T getObject(String key, Class<T> classType) {
         Object o = CAFFEINE.get(key, k -> RedisUtils.getCacheObject(key));

+ 9 - 10
SERVER/VberAdminPlusV3/vber-common/vber-common-satoken/src/main/java/com/vber/common/satoken/utils/LoginHelper.java

@@ -1,8 +1,8 @@
 package com.vber.common.satoken.utils;
 
 import cn.dev33.satoken.session.SaSession;
-import cn.dev33.satoken.stp.SaLoginModel;
 import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.stp.parameter.SaLoginParameter;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.ObjectUtil;
@@ -43,26 +43,25 @@ public class LoginHelper {
      * 登录系统 基于 设备类型
      * 针对相同用户体系不同设备
      *
-     * @param loginUser 登录用户信息
-     * @param model     配置参数
+     * @param loginUser  登录用户信息
+     * @param loginParam 配置参数
      */
-    public static void login(LoginUser loginUser, SaLoginModel model) {
-        model = ObjectUtil.defaultIfNull(model, new SaLoginModel());
+    public static void login(LoginUser loginUser, SaLoginParameter loginParam) {
+        loginParam = ObjectUtil.defaultIfNull(loginParam, new SaLoginParameter());
         StpUtil.login(loginUser.getLoginId(),
-                model.setExtra(TENANT_KEY, loginUser.getTenantId())
+                loginParam.setExtra(TENANT_KEY, loginUser.getTenantId())
                         .setExtra(USER_KEY, loginUser.getUserId())
                         .setExtra(USER_NAME_KEY, loginUser.getUsername())
                         .setExtra(ORG_KEY, loginUser.getOrgId())
                         .setExtra(ORG_NAME_KEY, loginUser.getOrgName())
-                        .setExtra(ORG_CATEGORY_KEY, loginUser.getOrgCategory())
-        );
+                        .setExtra(ORG_CATEGORY_KEY, loginUser.getOrgCategory()));
         StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser);
     }
 
     /**
      * 获取用户(多级缓存)
      */
-    @SuppressWarnings("unchecked cast")
+    @SuppressWarnings("unchecked")
     public static <T extends LoginUser> T getLoginUser() {
         SaSession session = StpUtil.getTokenSession();
         if (ObjectUtil.isNull(session)) {
@@ -74,7 +73,7 @@ public class LoginHelper {
     /**
      * 获取用户基于token
      */
-    @SuppressWarnings("unchecked cast")
+    @SuppressWarnings("unchecked")
     public static <T extends LoginUser> T getLoginUser(String token) {
         SaSession session = StpUtil.getTokenSessionByToken(token);
         if (ObjectUtil.isNull(session)) {

+ 14 - 12
SERVER/VberAdminPlusV3/vber-common/vber-common-security/src/main/java/com/vber/common/security/config/SecurityConfig.java

@@ -21,6 +21,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
+import org.springframework.lang.NonNull;
 import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
@@ -44,7 +45,7 @@ public class SecurityConfig implements WebMvcConfigurer {
      * 注册sa-token的拦截器
      */
     @Override
-    public void addInterceptors(InterceptorRegistry registry) {
+    public void addInterceptors(@NonNull InterceptorRegistry registry) {
         // 注册路由拦截器,自定义验证规则
         registry.addInterceptor(new SaInterceptor(handler -> {
                     AllUrlHandler allUrlHandler = SpringUtils.getBean(AllUrlHandler.class);
@@ -55,8 +56,8 @@ public class SecurityConfig implements WebMvcConfigurer {
                             // 对未排除的路径进行检查
                             .check(() -> {
                                 HttpServletRequest request = ServletUtils.getRequest();
-//                                HttpServletResponse response = ServletUtils.getResponse();
-//                                response.setContentType(SaTokenConsts.CONTENT_TYPE_APPLICATION_JSON);
+                                // HttpServletResponse response = ServletUtils.getResponse();
+                                // response.setContentType(SaTokenConsts.CONTENT_TYPE_APPLICATION_JSON);
                                 try {
                                     // 检查是否登录 是否有token
                                     StpUtil.checkLogin();
@@ -72,19 +73,20 @@ public class SecurityConfig implements WebMvcConfigurer {
                                 String clientId = StpUtil.getExtra(LoginHelper.CLIENT_KEY).toString();
                                 if (!StringUtils.equalsAny(clientId, headerCid, paramCid)) {
                                     // token 无效
-                                    throw NotLoginException.newInstance(StpUtil.getLoginType(), "-100", "客户端ID与Token不匹配", StpUtil.getTokenValue());
+                                    throw NotLoginException.newInstance(StpUtil.getLoginType(), "-100", "客户端ID与Token不匹配",
+                                            StpUtil.getTokenValue());
                                 }
 
                                 // 有效率影响 用于临时测试
                                 // if (log.isDebugEnabled()) {
-                                //     log.info("剩余有效时间: {}", StpUtil.getTokenTimeout());
-                                //     log.info("临时有效时间: {}", StpUtil.getTokenActivityTimeout());
+                                // log.info("剩余有效时间: {}", StpUtil.getTokenTimeout());
+                                // log.info("临时有效时间: {}", StpUtil.getTokenActivityTimeout());
                                 // }
 
                             });
                 })).addPathPatterns("/**")
                 // 排除不需要拦截的路径
-                .excludePathPatterns(securityProperties.getExcludes());
+                .excludePathPatterns(Objects.requireNonNull(securityProperties.getExcludes()));
     }
 
     /**
@@ -100,10 +102,10 @@ public class SecurityConfig implements WebMvcConfigurer {
                     SaHttpBasicUtil.check(username + ":" + password);
                 })
                 .setError(e -> SaResult.error(e.getMessage()).setCode(HttpStatus.UNAUTHORIZED));
-//                .setError(e -> {
-//                    HttpServletResponse response = ServletUtils.getResponse();
-//                    response.setContentType(SaTokenConsts.CONTENT_TYPE_APPLICATION_JSON);
-//                    return SaResult.error(e.getMessage()).setCode(HttpStatus.UNAUTHORIZED);
-//                });
+        // .setError(e -> {
+        // HttpServletResponse response = ServletUtils.getResponse();
+        // response.setContentType(SaTokenConsts.CONTENT_TYPE_APPLICATION_JSON);
+        // return SaResult.error(e.getMessage()).setCode(HttpStatus.UNAUTHORIZED);
+        // });
     }
 }

+ 7 - 3
SERVER/VberAdminPlusV3/vber-common/vber-common-security/src/main/java/com/vber/common/security/handler/AllUrlHandler.java

@@ -26,12 +26,16 @@ public class AllUrlHandler implements InitializingBean {
     @Override
     public void afterPropertiesSet() {
         Set<String> set = new HashSet<>();
-        RequestMappingHandlerMapping mapping = SpringUtils.getBean("requestMappingHandlerMapping", RequestMappingHandlerMapping.class);
+        RequestMappingHandlerMapping mapping = SpringUtils.getBean("requestMappingHandlerMapping",
+                RequestMappingHandlerMapping.class);
         Map<RequestMappingInfo, HandlerMethod> map = mapping.getHandlerMethods();
         map.keySet().forEach(info -> {
             // 获取注解上边的 path 替代 path variable 为 *
-            Objects.requireNonNull(info.getPathPatternsCondition().getPatterns())
-                    .forEach(url -> set.add(ReUtil.replaceAll(url.getPatternString(), PATTERN, "*")));
+            var pathPatternsCondition = info.getPathPatternsCondition();
+            if (pathPatternsCondition != null && pathPatternsCondition.getPatterns() != null) {
+                pathPatternsCondition.getPatterns()
+                        .forEach(url -> set.add(ReUtil.replaceAll(url.getPatternString(), PATTERN, "*")));
+            }
         });
         urls.addAll(set);
     }

+ 4 - 6
SERVER/VberAdminPlusV3/vber-common/vber-common-social/src/main/java/com/vber/common/social/utils/SocialUtils.java

@@ -14,7 +14,6 @@ import me.zhyd.oauth.model.AuthResponse;
 import me.zhyd.oauth.model.AuthUser;
 import me.zhyd.oauth.request.*;
 
-
 /**
  * 认证授权工具类
  *
@@ -24,8 +23,8 @@ public class SocialUtils {
 
     private static final AuthRedisStateCache STATE_CACHE = SpringUtils.getBean(AuthRedisStateCache.class);
 
-    @SuppressWarnings("unchecked")
-    public static AuthResponse<AuthUser> loginAuth(String source, String code, String state, SocialProperties socialProperties) throws AuthException {
+    public static AuthResponse<AuthUser> loginAuth(String source, String code, String state,
+                                                   SocialProperties socialProperties) throws AuthException {
         AuthRequest authRequest = getAuthRequest(source, socialProperties);
         AuthCallback callback = new AuthCallback();
         callback.setCode(code);
@@ -52,8 +51,8 @@ public class SocialUtils {
             case "coding" -> new AuthCodingRequest(builder.build(), STATE_CACHE);
             case "oschina" -> new AuthOschinaRequest(builder.build(), STATE_CACHE);
             // 支付宝在创建回调地址时,不允许使用localhost或者127.0.0.1,所以这儿的回调地址使用的局域网内的ip
-            case "alipay_wallet" ->
-                    new AuthAlipayRequest(builder.build(), socialProperties.getType().get("alipay_wallet").getAlipayPublicKey(), STATE_CACHE);
+            case "alipay_wallet" -> new AuthAlipayRequest(builder.build(),
+                    socialProperties.getType().get("alipay_wallet").getAlipayPublicKey(), STATE_CACHE);
             case "qq" -> new AuthQqRequest(builder.build(), STATE_CACHE);
             case "wechat_open" -> new AuthWeChatOpenRequest(builder.build(), STATE_CACHE);
             case "taobao" -> new AuthTaobaoRequest(builder.build(), STATE_CACHE);
@@ -75,4 +74,3 @@ public class SocialUtils {
         };
     }
 }
-

+ 1 - 1
SERVER/VberAdminPlusV3/vber-common/vber-common-sse/src/main/java/com/vber/common/sse/core/SseEmitterManager.java

@@ -119,7 +119,7 @@ public class SseEmitterManager {
                 try {
                     entry.getValue().send(SseEmitter.event()
                             .name("message")
-                            .data(message));
+                            .data(message != null ? message : ""));
                 } catch (Exception e) {
                     SseEmitter remove = emitters.remove(entry.getKey());
                     if (remove != null) {

+ 14 - 14
SERVER/VberAdminPlusV3/vber-common/vber-common-tenant/src/main/java/com/vber/common/tenant/config/TenantConfig.java

@@ -34,20 +34,6 @@ import org.springframework.context.annotation.Primary;
 public class TenantConfig {
 
 
-    @ConditionalOnClass(TenantLineInnerInterceptor.class)
-    @AutoConfiguration
-    static class MybatisPlusConfiguration {
-
-        /**
-         * 多租户插件
-         */
-        @Bean
-        public TenantLineInnerInterceptor tenantLineInnerInterceptor(TenantProperties tenantProperties) {
-            return new TenantLineInnerInterceptor(new PlusTenantLineHandler(tenantProperties));
-        }
-
-    }
-
     @Bean
     public RedissonAutoConfigurationCustomizer tenantRedissonCustomizer(RedissonProperties redissonProperties) {
         return config -> {
@@ -85,5 +71,19 @@ public class TenantConfig {
         return new TenantSaTokenDao();
     }
 
+    @ConditionalOnClass(TenantLineInnerInterceptor.class)
+    @AutoConfiguration
+    static class MybatisPlusConfiguration {
+
+        /**
+         * 多租户插件
+         */
+        @Bean
+        public TenantLineInnerInterceptor tenantLineInnerInterceptor(TenantProperties tenantProperties) {
+            return new TenantLineInnerInterceptor(new PlusTenantLineHandler(tenantProperties));
+        }
+
+    }
+
 
 }

+ 2 - 1
SERVER/VberAdminPlusV3/vber-common/vber-common-tenant/src/main/java/com/vber/common/tenant/manager/TenantSpringCacheManager.java

@@ -7,6 +7,7 @@ import com.vber.common.redis.manager.PlusSpringCacheManager;
 import com.vber.common.tenant.helper.TenantHelper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.cache.Cache;
+import org.springframework.lang.NonNull;
 
 /**
  * 重写 cacheName 处理方法 支持多租户
@@ -20,7 +21,7 @@ public class TenantSpringCacheManager extends PlusSpringCacheManager {
     }
 
     @Override
-    public Cache getCache(String name) {
+    public Cache getCache(@NonNull String name) {
         if (InterceptorIgnoreHelper.willIgnoreTenantLine("")) {
             return super.getCache(name);
         }

+ 4 - 4
SERVER/VberAdminPlusV3/vber-common/vber-common-web/src/main/java/com/vber/common/web/config/ResourcesConfig.java

@@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.context.annotation.Bean;
 import org.springframework.format.FormatterRegistry;
+import org.springframework.lang.NonNull;
 import org.springframework.web.cors.CorsConfiguration;
 import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
 import org.springframework.web.filter.CorsFilter;
@@ -30,7 +31,7 @@ public class ResourcesConfig implements WebMvcConfigurer {
     private String mode;
 
     @Override
-    public void addInterceptors(InterceptorRegistry registry) {
+    public void addInterceptors(@NonNull InterceptorRegistry registry) {
         // 全局访问性能拦截
         if ("dev".equals(mode)) {
             registry.addInterceptor(new PlusWebInvokeTimeInterceptor());
@@ -38,7 +39,7 @@ public class ResourcesConfig implements WebMvcConfigurer {
     }
 
     @Override
-    public void addFormatters(FormatterRegistry registry) {
+    public void addFormatters(@NonNull FormatterRegistry registry) {
         // 全局日期格式转换配置
         registry.addConverter(String.class, Date.class, source -> {
             DateTime parse = DateUtil.parse(source);
@@ -50,7 +51,7 @@ public class ResourcesConfig implements WebMvcConfigurer {
     }
 
     @Override
-    public void addResourceHandlers(ResourceHandlerRegistry registry) {
+    public void addResourceHandlers(@NonNull ResourceHandlerRegistry registry) {
     }
 
     /**
@@ -75,7 +76,6 @@ public class ResourcesConfig implements WebMvcConfigurer {
         return new CorsFilter(source);
     }
 
-
     /**
      * 全局异常处理器
      */

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

@@ -2,6 +2,8 @@ package com.vber.common.web.core;
 
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.lang.NonNull;
+import org.springframework.lang.Nullable;
 import org.springframework.web.servlet.LocaleResolver;
 
 import java.util.Locale;
@@ -13,19 +15,24 @@ import java.util.Locale;
  */
 public class I18nLocaleResolver implements LocaleResolver {
 
+    @SuppressWarnings("null")
     @Override
-    public Locale resolveLocale(HttpServletRequest httpServletRequest) {
+    @NonNull
+    public Locale resolveLocale(@NonNull HttpServletRequest httpServletRequest) {
         String language = httpServletRequest.getHeader("content-language");
         Locale locale = Locale.getDefault();
         if (language != null && language.length() > 0) {
             String[] split = language.split("_");
-            locale = new Locale(split[0], split[1]);
+            if (split.length >= 2) {
+                locale = new Locale(split[0], split[1]);
+            }
         }
         return locale;
     }
 
     @Override
-    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
+    public void setLocale(@NonNull HttpServletRequest httpServletRequest,
+                          @Nullable HttpServletResponse httpServletResponse, @Nullable Locale locale) {
 
     }
 }

+ 1 - 1
SERVER/VberAdminPlusV3/vber-common/vber-common-web/src/main/java/com/vber/common/web/filter/XssFilter.java

@@ -49,7 +49,7 @@ public class XssFilter implements Filter {
         if (method == null || HttpMethod.GET.matches(method) || HttpMethod.DELETE.matches(method)) {
             return true;
         }
-        return StringUtils.matches(url, excludes);
+        return StringUtils.matches(url != null ? url : "", excludes != null ? excludes : new ArrayList<>());
     }
 
     @Override

+ 18 - 6
SERVER/VberAdminPlusV3/vber-common/vber-common-web/src/main/java/com/vber/common/web/handler/GlobalExceptionHandler.java

@@ -96,17 +96,25 @@ public class GlobalExceptionHandler {
     public R<Void> handleMissingPathVariableException(MissingPathVariableException e, HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         log.error("请求路径中缺少必需的路径变量'{}',发生系统异常.", requestURI);
-        return R.fail(String.format("请求路径中缺少必需的路径变量[%s]", e.getVariableName()));
+        String variableName = e.getVariableName() != null ? e.getVariableName() : "unknown";
+        return R.fail(String.format("请求路径中缺少必需的路径变量[%s]", variableName));
     }
 
     /**
      * 请求参数类型不匹配
      */
     @ExceptionHandler(MethodArgumentTypeMismatchException.class)
-    public R<Void> handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e, HttpServletRequest request) {
+    public R<Void> handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e,
+                                                             HttpServletRequest request) {
         String requestURI = request.getRequestURI();
         log.error("请求参数类型不匹配'{}',发生系统异常.", requestURI);
-        return R.fail(String.format("请求参数类型不匹配,参数[%s]要求类型为:'%s',但输入值为:'%s'", e.getName(), e.getRequiredType().getName(), e.getValue()));
+        Class<?> requiredType = e.getRequiredType();
+        String requiredTypeName = requiredType != null ? requiredType.getName() : "unknown";
+        String paramName = e.getName() != null ? e.getName() : "unknown";
+        Object value = e.getValue();
+        String paramValue = value != null ? value.toString() : "null";
+        return R.fail(
+                String.format("请求参数类型不匹配,参数[%s]要求类型为:'%s',但输入值为:'%s'", paramName, requiredTypeName, paramValue));
     }
 
     /**
@@ -186,7 +194,8 @@ public class GlobalExceptionHandler {
     @ExceptionHandler(MethodArgumentNotValidException.class)
     public R<Void> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
         log.error(e.getMessage());
-        String message = StreamUtils.join(e.getBindingResult().getAllErrors(), DefaultMessageSourceResolvable::getDefaultMessage, ", ");
+        String message = StreamUtils.join(e.getBindingResult().getAllErrors(),
+                DefaultMessageSourceResolvable::getDefaultMessage, ", ");
         return R.fail(message);
     }
 
@@ -205,9 +214,12 @@ public class GlobalExceptionHandler {
      * 请求体读取异常(通常是请求参数格式非法、字段类型不匹配等)
      */
     @ExceptionHandler(HttpMessageNotReadableException.class)
-    public R<Void> handleHttpMessageNotReadableException(HttpMessageNotReadableException e, HttpServletRequest request) {
+    public R<Void> handleHttpMessageNotReadableException(HttpMessageNotReadableException e,
+                                                         HttpServletRequest request) {
         log.error("请求地址'{}', 参数解析失败: {}", request.getRequestURI(), e.getMessage());
-        return R.fail(HttpStatus.HTTP_BAD_REQUEST, "请求参数格式错误:" + e.getMostSpecificCause().getMessage());
+        Throwable cause = e.getMostSpecificCause();
+        String errorMessage = cause != null ? cause.getMessage() : e.getMessage();
+        return R.fail(HttpStatus.HTTP_BAD_REQUEST, "请求参数格式错误:" + errorMessage);
     }
 
 }

+ 13 - 5
SERVER/VberAdminPlusV3/vber-common/vber-common-web/src/main/java/com/vber/common/web/interceptor/PlusWebInvokeTimeInterceptor.java

@@ -13,6 +13,8 @@ import jakarta.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.time.StopWatch;
 import org.springframework.http.MediaType;
+import org.springframework.lang.NonNull;
+import org.springframework.lang.Nullable;
 import org.springframework.web.servlet.HandlerInterceptor;
 import org.springframework.web.servlet.ModelAndView;
 
@@ -27,11 +29,12 @@ import java.util.Map;
 @Slf4j
 public class PlusWebInvokeTimeInterceptor implements HandlerInterceptor {
 
-
     private final static ThreadLocal<StopWatch> KEY_CACHE = new ThreadLocal<>();
 
     @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+    public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response,
+                             @NonNull Object handler)
+            throws Exception {
         String url = request.getMethod() + " " + request.getRequestURI();
         // 请求头获取到租户id,设置动态租户
         String tenantId = request.getHeader(GlobalConstants.TENANT_ID_HEADER);
@@ -63,16 +66,21 @@ public class PlusWebInvokeTimeInterceptor implements HandlerInterceptor {
     }
 
     @Override
-    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+    public void postHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response,
+                           @NonNull Object handler,
+                           @Nullable ModelAndView modelAndView) throws Exception {
 
     }
 
     @Override
-    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+    public void afterCompletion(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response,
+                                @NonNull Object handler, @Nullable Exception ex)
+            throws Exception {
         StopWatch stopWatch = KEY_CACHE.get();
         if (ObjectUtil.isNotNull(stopWatch)) {
             stopWatch.stop();
-            log.info("[PLUS]结束请求 => URL[{}],耗时:[{}]毫秒", request.getMethod() + " " + request.getRequestURI(), stopWatch.getDuration().toMillis());
+            log.info("[PLUS]结束请求 => URL[{}],耗时:[{}]毫秒", request.getMethod() + " " + request.getRequestURI(),
+                    stopWatch.getDuration().toMillis());
             KEY_CACHE.remove();
         }
     }

+ 4 - 2
SERVER/VberAdminPlusV3/vber-common/vber-common-websocket/src/main/java/com/vber/common/websocket/config/WebSocketConfig.java

@@ -26,7 +26,8 @@ import org.springframework.web.socket.server.HandshakeInterceptor;
 public class WebSocketConfig {
 
     @Bean
-    public WebSocketConfigurer webSocketConfigurer(HandshakeInterceptor handshakeInterceptor, WebSocketHandler webSocketHandler, WebSocketProperties webSocketProperties) {
+    public WebSocketConfigurer webSocketConfigurer(HandshakeInterceptor handshakeInterceptor,
+                                                   WebSocketHandler webSocketHandler, WebSocketProperties webSocketProperties) {
         // 如果WebSocket的路径为空,则设置默认路径为 "/websocket"
         if (StrUtil.isBlank(webSocketProperties.getPath())) {
             webSocketProperties.setPath("/websocket");
@@ -39,7 +40,8 @@ public class WebSocketConfig {
         // 返回一个WebSocketConfigurer对象,用于配置WebSocket
         return registry -> registry
                 // 添加WebSocket处理程序和拦截器到指定路径,设置允许的跨域来源
-                .addHandler(webSocketHandler, webSocketProperties.getPath())
+                .addHandler(webSocketHandler != null ? webSocketHandler : new PlusWebSocketHandler(),
+                        webSocketProperties.getPath())
                 .addInterceptors(handshakeInterceptor)
                 .setAllowedOrigins(webSocketProperties.getAllowedOrigins());
     }

+ 13 - 9
SERVER/VberAdminPlusV3/vber-common/vber-common-websocket/src/main/java/com/vber/common/websocket/handler/PlusWebSocketHandler.java

@@ -6,6 +6,7 @@ import com.vber.common.websocket.dto.WebSocketMessageDto;
 import com.vber.common.websocket.holder.WebSocketSessionHolder;
 import com.vber.common.websocket.utils.WebSocketUtils;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.lang.NonNull;
 import org.springframework.web.socket.*;
 import org.springframework.web.socket.handler.AbstractWebSocketHandler;
 
@@ -24,8 +25,9 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler {
     /**
      * 连接成功后
      */
+    @SuppressWarnings("null")
     @Override
-    public void afterConnectionEstablished(WebSocketSession session) throws IOException {
+    public void afterConnectionEstablished(@NonNull WebSocketSession session) throws IOException {
         LoginUser loginUser = (LoginUser) session.getAttributes().get(LOGIN_USER_KEY);
         if (ObjectUtil.isNull(loginUser)) {
             session.close(CloseStatus.BAD_DATA);
@@ -33,7 +35,8 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler {
             return;
         }
         WebSocketSessionHolder.addSession(loginUser.getUserId(), session);
-        log.info("[connect] sessionId: {},userId:{},userType:{}", session.getId(), loginUser.getUserId(), loginUser.getUserType());
+        log.info("[connect] sessionId: {},userId:{},userType:{}", session.getId(), loginUser.getUserId(),
+                loginUser.getUserType());
     }
 
     /**
@@ -44,7 +47,7 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler {
      * @throws Exception 处理消息过程中可能抛出的异常
      */
     @Override
-    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
+    protected void handleTextMessage(@NonNull WebSocketSession session, @NonNull TextMessage message) throws Exception {
         // 从WebSocket会话中获取登录用户信息
         LoginUser loginUser = (LoginUser) session.getAttributes().get(LOGIN_USER_KEY);
 
@@ -63,7 +66,8 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler {
      * @throws Exception 处理消息过程中可能抛出的异常
      */
     @Override
-    protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception {
+    protected void handleBinaryMessage(@NonNull WebSocketSession session, @NonNull BinaryMessage message)
+            throws Exception {
         super.handleBinaryMessage(session, message);
     }
 
@@ -75,7 +79,7 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler {
      * @throws Exception 处理消息过程中可能抛出的异常
      */
     @Override
-    protected void handlePongMessage(WebSocketSession session, PongMessage message) throws Exception {
+    protected void handlePongMessage(@NonNull WebSocketSession session, @NonNull PongMessage message) throws Exception {
         WebSocketUtils.sendPongMessage(session);
     }
 
@@ -87,7 +91,7 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler {
      * @throws Exception 处理过程中可能抛出的异常
      */
     @Override
-    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
+    public void handleTransportError(@NonNull WebSocketSession session, @NonNull Throwable exception) throws Exception {
         log.error("[transport error] sessionId: {} , exception:{}", session.getId(), exception.getMessage());
     }
 
@@ -98,14 +102,15 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler {
      * @param status  关闭状态信息
      */
     @Override
-    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
+    public void afterConnectionClosed(@NonNull WebSocketSession session, @NonNull CloseStatus status) {
         LoginUser loginUser = (LoginUser) session.getAttributes().get(LOGIN_USER_KEY);
         if (ObjectUtil.isNull(loginUser)) {
             log.info("[disconnect] invalid token received. sessionId: {}", session.getId());
             return;
         }
         WebSocketSessionHolder.removeSession(loginUser.getUserId());
-        log.info("[disconnect] sessionId: {},userId:{},userType:{}", session.getId(), loginUser.getUserId(), loginUser.getUserType());
+        log.info("[disconnect] sessionId: {},userId:{},userType:{}", session.getId(), loginUser.getUserId(),
+                loginUser.getUserType());
     }
 
     /**
@@ -118,5 +123,4 @@ public class PlusWebSocketHandler extends AbstractWebSocketHandler {
         return false;
     }
 
-
 }

+ 6 - 3
SERVER/VberAdminPlusV3/vber-common/vber-common-websocket/src/main/java/com/vber/common/websocket/holder/WebSocketSessionHolder.java

@@ -35,11 +35,14 @@ public class WebSocketSessionHolder {
      *
      * @param sessionKey 要移除的会话键
      */
+    @SuppressWarnings("null")
     public static void removeSession(Long sessionKey) {
         WebSocketSession session = USER_SESSION_MAP.remove(sessionKey);
-        try {
-            session.close(CloseStatus.BAD_DATA);
-        } catch (Exception ignored) {
+        if (session != null) {
+            try {
+                session.close(CloseStatus.BAD_DATA);
+            } catch (Exception ignored) {
+            }
         }
     }
 

+ 6 - 2
SERVER/VberAdminPlusV3/vber-common/vber-common-websocket/src/main/java/com/vber/common/websocket/interceptor/PlusWebSocketInterceptor.java

@@ -9,6 +9,8 @@ import com.vber.common.satoken.utils.LoginHelper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.server.ServerHttpRequest;
 import org.springframework.http.server.ServerHttpResponse;
+import org.springframework.lang.NonNull;
+import org.springframework.lang.Nullable;
 import org.springframework.web.socket.WebSocketHandler;
 import org.springframework.web.socket.server.HandshakeInterceptor;
 
@@ -34,7 +36,8 @@ public class PlusWebSocketInterceptor implements HandshakeInterceptor {
      * @return 如果允许握手继续进行,则返回true;否则返回false
      */
     @Override
-    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) {
+    public boolean beforeHandshake(@NonNull ServerHttpRequest request, @NonNull ServerHttpResponse response,
+                                   @NonNull WebSocketHandler wsHandler, @NonNull Map<String, Object> attributes) {
         try {
             // 检查是否登录 是否有token
             LoginUser loginUser = LoginHelper.getLoginUser();
@@ -68,7 +71,8 @@ public class PlusWebSocketInterceptor implements HandshakeInterceptor {
      * @param exception 握手过程中可能出现的异常
      */
     @Override
-    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {
+    public void afterHandshake(@NonNull ServerHttpRequest request, @NonNull ServerHttpResponse response,
+                               @NonNull WebSocketHandler wsHandler, @Nullable Exception exception) {
         // 在这个方法中可以执行一些握手成功后的后续处理逻辑,比如记录日志或者其他操作
     }
 

+ 4 - 2
SERVER/VberAdminPlusV3/vber-common/vber-common-websocket/src/main/java/com/vber/common/websocket/utils/WebSocketUtils.java

@@ -104,7 +104,7 @@ public class WebSocketUtils {
      * @param message 要发送的文本消息内容
      */
     public static void sendMessage(WebSocketSession session, String message) {
-        sendMessage(session, new TextMessage(message));
+        sendMessage(session, new TextMessage(message != null ? message : ""));
     }
 
     /**
@@ -118,7 +118,9 @@ public class WebSocketUtils {
             log.warn("[send] session会话已经关闭");
         } else {
             try {
-                session.sendMessage(message);
+                if (message != null) {
+                    session.sendMessage(message);
+                }
             } catch (IOException e) {
                 log.error("[send] session({}) 发送消息({}) 异常", session, message, e);
             }

+ 10 - 6
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/IndexController.java

@@ -35,7 +35,7 @@ public class IndexController {
     @Resource
     private LoginService loginService;
 
-
+    @SuppressWarnings("null")
     @RequestMapping("/")
     public String index(Model model) {
 
@@ -65,8 +65,10 @@ public class IndexController {
     @RequestMapping(value = "login", method = RequestMethod.POST)
     @ResponseBody
     @PermissionLimit(limit = false)
-    public ReturnT<String> loginDo(HttpServletRequest request, HttpServletResponse response, String userName, String password, String ifRemember) {
-        boolean ifRem = (ifRemember != null && ifRemember.trim().length() > 0 && "on".equals(ifRemember)) ? true : false;
+    public ReturnT<String> loginDo(HttpServletRequest request, HttpServletResponse response, String userName,
+            String password, String ifRemember) {
+        boolean ifRem = (ifRemember != null && ifRemember.trim().length() > 0 && "on".equals(ifRemember)) ? true
+                : false;
         return loginService.login(request, response, userName, password, ifRem);
     }
 
@@ -80,9 +82,11 @@ public class IndexController {
     @RequestMapping("/help")
     public String help() {
 
-		/*if (!PermissionInterceptor.ifLogin(request)) {
-			return "redirect:/toLogin";
-		}*/
+        /*
+         * if (!PermissionInterceptor.ifLogin(request)) {
+         * return "redirect:/toLogin";
+         * }
+         */
 
         return "help";
     }

+ 7 - 3
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/JobApiController.java

@@ -38,7 +38,8 @@ public class JobApiController {
     @RequestMapping("/{uri}")
     @ResponseBody
     @PermissionLimit(limit = false)
-    public ReturnT<String> api(HttpServletRequest request, @PathVariable("uri") String uri, @RequestBody(required = false) String data) {
+    public ReturnT<String> api(HttpServletRequest request, @PathVariable("uri") String uri,
+            @RequestBody(required = false) String data) {
 
         // valid
         if (!"POST".equalsIgnoreCase(request.getMethod())) {
@@ -49,13 +50,16 @@ public class JobApiController {
         }
         if (XxlJobAdminConfig.getAdminConfig().getAccessToken() != null
                 && XxlJobAdminConfig.getAdminConfig().getAccessToken().trim().length() > 0
-                && !XxlJobAdminConfig.getAdminConfig().getAccessToken().equals(request.getHeader(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN))) {
+                && !XxlJobAdminConfig.getAdminConfig().getAccessToken()
+                        .equals(request.getHeader(XxlJobRemotingUtil.XXL_JOB_ACCESS_TOKEN))) {
             return new ReturnT<String>(ReturnT.FAIL_CODE, "The access token is wrong.");
         }
 
         // services mapping
         if ("callback".equals(uri)) {
-            List<HandleCallbackParam> callbackParamList = GsonTool.fromJson(data, List.class, HandleCallbackParam.class);
+            @SuppressWarnings("unchecked")
+            List<HandleCallbackParam> callbackParamList = GsonTool.fromJson(data, List.class,
+                    HandleCallbackParam.class);
             return adminBiz.callback(callbackParamList);
         } else if ("registry".equals(uri)) {
             RegistryParam registryParam = GsonTool.fromJson(data, RegistryParam.class);

+ 15 - 11
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/JobInfoController.java

@@ -43,7 +43,8 @@ public class JobInfoController {
     @Resource
     private XxlJobService xxlJobService;
 
-    public static List<XxlJobGroup> filterJobGroupByRole(HttpServletRequest request, List<XxlJobGroup> jobGroupList_all) {
+    public static List<XxlJobGroup> filterJobGroupByRole(HttpServletRequest request,
+            List<XxlJobGroup> jobGroupList_all) {
         List<XxlJobGroup> jobGroupList = new ArrayList<>();
         if (jobGroupList_all != null && jobGroupList_all.size() > 0) {
             XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
@@ -67,19 +68,21 @@ public class JobInfoController {
     public static void validPermission(HttpServletRequest request, int jobGroup) {
         XxlJobUser loginUser = (XxlJobUser) request.getAttribute(LoginService.LOGIN_IDENTITY_KEY);
         if (!loginUser.validPermission(jobGroup)) {
-            throw new RuntimeException(I18nUtil.getString("system_permission_limit") + "[username=" + loginUser.getUsername() + "]");
+            throw new RuntimeException(
+                    I18nUtil.getString("system_permission_limit") + "[username=" + loginUser.getUsername() + "]");
         }
     }
 
     @RequestMapping
-    public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "-1") int jobGroup) {
+    public String index(HttpServletRequest request, Model model,
+            @RequestParam(required = false, defaultValue = "-1") int jobGroup) {
 
         // 枚举-字典
-        model.addAttribute("ExecutorRouteStrategyEnum", ExecutorRouteStrategyEnum.values());        // 路由策略-列表
-        model.addAttribute("GlueTypeEnum", GlueTypeEnum.values());                                // Glue类型-字典
-        model.addAttribute("ExecutorBlockStrategyEnum", ExecutorBlockStrategyEnum.values());        // 阻塞处理策略-字典
-        model.addAttribute("ScheduleTypeEnum", ScheduleTypeEnum.values());                        // 调度类型
-        model.addAttribute("MisfireStrategyEnum", MisfireStrategyEnum.values());                    // 调度过期策略
+        model.addAttribute("ExecutorRouteStrategyEnum", ExecutorRouteStrategyEnum.values()); // 路由策略-列表
+        model.addAttribute("GlueTypeEnum", GlueTypeEnum.values()); // Glue类型-字典
+        model.addAttribute("ExecutorBlockStrategyEnum", ExecutorBlockStrategyEnum.values()); // 阻塞处理策略-字典
+        model.addAttribute("ScheduleTypeEnum", ScheduleTypeEnum.values()); // 调度类型
+        model.addAttribute("MisfireStrategyEnum", MisfireStrategyEnum.values()); // 调度过期策略
 
         // 执行器列表
         List<XxlJobGroup> jobGroupList_all = xxlJobGroupDao.findAll();
@@ -99,8 +102,8 @@ public class JobInfoController {
     @RequestMapping("/pageList")
     @ResponseBody
     public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,
-                                        @RequestParam(required = false, defaultValue = "10") int length,
-                                        int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) {
+            @RequestParam(required = false, defaultValue = "10") int length,
+            int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) {
 
         return xxlJobService.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);
     }
@@ -165,7 +168,8 @@ public class JobInfoController {
             }
         } catch (Exception e) {
             logger.error(e.getMessage(), e);
-            return new ReturnT<List<String>>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")) + e.getMessage());
+            return new ReturnT<List<String>>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")) + e.getMessage());
         }
         return new ReturnT<List<String>>(result);
 

+ 33 - 24
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/JobLogController.java

@@ -50,7 +50,8 @@ public class JobLogController {
     private XxlJobGroupDao xxlJobGroupDao;
 
     @RequestMapping
-    public String index(HttpServletRequest request, Model model, @RequestParam(required = false, defaultValue = "0") Integer jobId) {
+    public String index(HttpServletRequest request, Model model,
+            @RequestParam(required = false, defaultValue = "0") Integer jobId) {
 
         // 执行器列表
         List<XxlJobGroup> jobGroupList_all = xxlJobGroupDao.findAll();
@@ -67,7 +68,8 @@ public class JobLogController {
         if (jobId > 0) {
             XxlJobInfo jobInfo = xxlJobInfoDao.loadById(jobId);
             if (jobInfo == null) {
-                throw new RuntimeException(I18nUtil.getString("jobinfo_field_id") + I18nUtil.getString("system_unvalid"));
+                throw new RuntimeException(
+                        I18nUtil.getString("jobinfo_field_id") + I18nUtil.getString("system_unvalid"));
             }
 
             model.addAttribute("jobInfo", jobInfo);
@@ -89,12 +91,12 @@ public class JobLogController {
     @RequestMapping("/pageList")
     @ResponseBody
     public Map<String, Object> pageList(HttpServletRequest request,
-                                        @RequestParam(required = false, defaultValue = "0") int start,
-                                        @RequestParam(required = false, defaultValue = "10") int length,
-                                        int jobGroup, int jobId, int logStatus, String filterTime) {
+            @RequestParam(required = false, defaultValue = "0") int start,
+            @RequestParam(required = false, defaultValue = "10") int length,
+            int jobGroup, int jobId, int logStatus, String filterTime) {
 
         // valid permission
-        JobInfoController.validPermission(request, jobGroup);    // 仅管理员支持查询全部;普通用户仅支持查询有权限的 jobGroup
+        JobInfoController.validPermission(request, jobGroup); // 仅管理员支持查询全部;普通用户仅支持查询有权限的 jobGroup
 
         // parse param
         Date triggerTimeStart = null;
@@ -108,14 +110,16 @@ public class JobLogController {
         }
 
         // page query
-        List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd, logStatus);
-        int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd, logStatus);
+        List<XxlJobLog> list = xxlJobLogDao.pageList(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd,
+                logStatus);
+        int list_count = xxlJobLogDao.pageListCount(start, length, jobGroup, jobId, triggerTimeStart, triggerTimeEnd,
+                logStatus);
 
         // package result
         Map<String, Object> maps = new HashMap<String, Object>();
-        maps.put("recordsTotal", list_count);        // 总记录数
-        maps.put("recordsFiltered", list_count);    // 过滤后的总记录数
-        maps.put("data", list);                    // 分页列表
+        maps.put("recordsTotal", list_count); // 总记录数
+        maps.put("recordsFiltered", list_count); // 过滤后的总记录数
+        maps.put("data", list); // 分页列表
         return maps;
     }
 
@@ -123,6 +127,7 @@ public class JobLogController {
     public String logDetailPage(int id, Model model) {
 
         // base check
+        @SuppressWarnings("unused")
         ReturnT<String> logStatue = ReturnT.SUCCESS;
         XxlJobLog jobLog = xxlJobLogDao.load(id);
         if (jobLog == null) {
@@ -135,22 +140,25 @@ public class JobLogController {
         return "joblog/joblog.detail";
     }
 
+    @SuppressWarnings("null")
     @RequestMapping("/logDetailCat")
     @ResponseBody
     public ReturnT<LogResult> logDetailCat(long logId, int fromLineNum) {
         try {
             // valid
-            XxlJobLog jobLog = xxlJobLogDao.load(logId);    // todo, need to improve performance
+            XxlJobLog jobLog = xxlJobLogDao.load(logId); // todo, need to improve performance
             if (jobLog == null) {
                 return new ReturnT<LogResult>(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_logid_unvalid"));
             }
 
             // log cat
             ExecutorBiz executorBiz = XxlJobScheduler.getExecutorBiz(jobLog.getExecutorAddress());
-            ReturnT<LogResult> logResult = executorBiz.log(new LogParam(jobLog.getTriggerTime().getTime(), logId, fromLineNum));
+            ReturnT<LogResult> logResult = executorBiz
+                    .log(new LogParam(jobLog.getTriggerTime().getTime(), logId, fromLineNum));
 
             // is end
-            if (logResult.getContent() != null && logResult.getContent().getFromLineNum() > logResult.getContent().getToLineNum()) {
+            if (logResult.getContent() != null
+                    && logResult.getContent().getFromLineNum() > logResult.getContent().getToLineNum()) {
                 if (jobLog.getHandleCode() > 0) {
                     logResult.getContent().setEnd(true);
                 }
@@ -195,7 +203,8 @@ public class JobLogController {
 
         if (ReturnT.SUCCESS_CODE == runResult.getCode()) {
             log.setHandleCode(ReturnT.FAIL_CODE);
-            log.setHandleMsg(I18nUtil.getString("joblog_kill_log_byman") + ":" + (runResult.getMsg() != null ? runResult.getMsg() : ""));
+            log.setHandleMsg(I18nUtil.getString("joblog_kill_log_byman") + ":"
+                    + (runResult.getMsg() != null ? runResult.getMsg() : ""));
             log.setHandleTime(new Date());
             XxlJobCompleter.updateHandleInfoAndFinish(log);
             return new ReturnT<String>(runResult.getMsg());
@@ -211,23 +220,23 @@ public class JobLogController {
         Date clearBeforeTime = null;
         int clearBeforeNum = 0;
         if (type == 1) {
-            clearBeforeTime = DateUtil.addMonths(new Date(), -1);    // 清理一个月之前日志数据
+            clearBeforeTime = DateUtil.addMonths(new Date(), -1); // 清理一个月之前日志数据
         } else if (type == 2) {
-            clearBeforeTime = DateUtil.addMonths(new Date(), -3);    // 清理三个月之前日志数据
+            clearBeforeTime = DateUtil.addMonths(new Date(), -3); // 清理三个月之前日志数据
         } else if (type == 3) {
-            clearBeforeTime = DateUtil.addMonths(new Date(), -6);    // 清理六个月之前日志数据
+            clearBeforeTime = DateUtil.addMonths(new Date(), -6); // 清理六个月之前日志数据
         } else if (type == 4) {
-            clearBeforeTime = DateUtil.addYears(new Date(), -1);    // 清理一年之前日志数据
+            clearBeforeTime = DateUtil.addYears(new Date(), -1); // 清理一年之前日志数据
         } else if (type == 5) {
-            clearBeforeNum = 1000;        // 清理一千条以前日志数据
+            clearBeforeNum = 1000; // 清理一千条以前日志数据
         } else if (type == 6) {
-            clearBeforeNum = 10000;        // 清理一万条以前日志数据
+            clearBeforeNum = 10000; // 清理一万条以前日志数据
         } else if (type == 7) {
-            clearBeforeNum = 30000;        // 清理三万条以前日志数据
+            clearBeforeNum = 30000; // 清理三万条以前日志数据
         } else if (type == 8) {
-            clearBeforeNum = 100000;    // 清理十万条以前日志数据
+            clearBeforeNum = 100000; // 清理十万条以前日志数据
         } else if (type == 9) {
-            clearBeforeNum = 0;            // 清理所有日志数据
+            clearBeforeNum = 0; // 清理所有日志数据
         } else {
             return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("joblog_clean_type_unvalid"));
         }

+ 12 - 7
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/UserController.java

@@ -49,8 +49,8 @@ public class UserController {
     @ResponseBody
     @PermissionLimit(adminuser = true)
     public Map<String, Object> pageList(@RequestParam(required = false, defaultValue = "0") int start,
-                                        @RequestParam(required = false, defaultValue = "10") int length,
-                                        String username, int role) {
+            @RequestParam(required = false, defaultValue = "10") int length,
+            String username, int role) {
 
         // page list
         List<XxlJobUser> list = xxlJobUserDao.pageList(start, length, username, role);
@@ -65,12 +65,13 @@ public class UserController {
 
         // package result
         Map<String, Object> maps = new HashMap<String, Object>();
-        maps.put("recordsTotal", list_count);        // 总记录数
-        maps.put("recordsFiltered", list_count);    // 过滤后的总记录数
-        maps.put("data", list);                    // 分页列表
+        maps.put("recordsTotal", list_count); // 总记录数
+        maps.put("recordsFiltered", list_count); // 过滤后的总记录数
+        maps.put("data", list); // 分页列表
         return maps;
     }
 
+    @SuppressWarnings("null")
     @RequestMapping("/add")
     @ResponseBody
     @PermissionLimit(adminuser = true)
@@ -78,7 +79,8 @@ public class UserController {
 
         // valid username
         if (!StringUtils.hasText(xxlJobUser.getUsername())) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_please_input") + I18nUtil.getString("user_username"));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    I18nUtil.getString("system_please_input") + I18nUtil.getString("user_username"));
         }
         xxlJobUser.setUsername(xxlJobUser.getUsername().trim());
         if (!(xxlJobUser.getUsername().length() >= 4 && xxlJobUser.getUsername().length() <= 20)) {
@@ -86,7 +88,8 @@ public class UserController {
         }
         // valid password
         if (!StringUtils.hasText(xxlJobUser.getPassword())) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("system_please_input") + I18nUtil.getString("user_password"));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    I18nUtil.getString("system_please_input") + I18nUtil.getString("user_password"));
         }
         xxlJobUser.setPassword(xxlJobUser.getPassword().trim());
         if (!(xxlJobUser.getPassword().length() >= 4 && xxlJobUser.getPassword().length() <= 20)) {
@@ -106,6 +109,7 @@ public class UserController {
         return ReturnT.SUCCESS;
     }
 
+    @SuppressWarnings("null")
     @RequestMapping("/update")
     @ResponseBody
     @PermissionLimit(adminuser = true)
@@ -163,6 +167,7 @@ public class UserController {
         }
 
         // md5 password
+        @SuppressWarnings("null")
         String md5Password = DigestUtils.md5DigestAsHex(password.getBytes());
 
         // update pwd

+ 2 - 1
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/interceptor/CookieInterceptor.java

@@ -19,9 +19,10 @@ import java.util.HashMap;
 @Component
 public class CookieInterceptor implements AsyncHandlerInterceptor {
 
+    @SuppressWarnings("null")
     @Override
     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
-                           ModelAndView modelAndView) throws Exception {
+            ModelAndView modelAndView) throws Exception {
 
         // cookie
         if (modelAndView != null && request.getCookies() != null && request.getCookies().length > 0) {

+ 1 - 0
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/interceptor/WebMvcConfig.java

@@ -19,6 +19,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
     @Resource
     private CookieInterceptor cookieInterceptor;
 
+    @SuppressWarnings("null")
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(permissionInterceptor).addPathPatterns("/**");

+ 2 - 1
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/controller/resolver/WebExceptionResolver.java

@@ -24,9 +24,10 @@ import java.io.IOException;
 public class WebExceptionResolver implements HandlerExceptionResolver {
     private static transient Logger logger = LoggerFactory.getLogger(WebExceptionResolver.class);
 
+    @SuppressWarnings("null")
     @Override
     public ModelAndView resolveException(HttpServletRequest request,
-                                         HttpServletResponse response, Object handler, Exception ex) {
+            HttpServletResponse response, Object handler, Exception ex) {
 
         if (!(ex instanceof XxlJobException)) {
             logger.error("WebExceptionResolver:{}", ex);

+ 5 - 2
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/alarm/impl/EmailJobAlarm.java

@@ -63,6 +63,7 @@ public class EmailJobAlarm implements JobAlarm {
      *
      * @param jobLog
      */
+    @SuppressWarnings("null")
     @Override
     public boolean doAlarm(XxlJobInfo info, XxlJobLog jobLog) {
         boolean alarmResult = true;
@@ -80,7 +81,8 @@ public class EmailJobAlarm implements JobAlarm {
             }
 
             // email info
-            XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao().load(Integer.valueOf(info.getJobGroup()));
+            XxlJobGroup group = XxlJobAdminConfig.getAdminConfig().getXxlJobGroupDao()
+                    .load(Integer.valueOf(info.getJobGroup()));
             String personal = I18nUtil.getString("admin_name_full");
             String title = I18nUtil.getString("jobconf_monitor");
             String content = MessageFormat.format(loadEmailJobAlarmTemplate(),
@@ -104,7 +106,8 @@ public class EmailJobAlarm implements JobAlarm {
 
                     XxlJobAdminConfig.getAdminConfig().getMailSender().send(mimeMessage);
                 } catch (Exception e) {
-                    logger.error(">>>>>>>>>>> xxl-job, job fail alarm email send error, JobLogId:{}", jobLog.getId(), e);
+                    logger.error(">>>>>>>>>>> xxl-job, job fail alarm email send error, JobLogId:{}", jobLog.getId(),
+                            e);
 
                     alarmResult = false;
                 }

+ 13 - 6
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/complete/XxlJobCompleter.java

@@ -17,6 +17,7 @@ import java.text.MessageFormat;
  * @author xuxueli 2020-10-30 20:43:10
  */
 public class XxlJobCompleter {
+    @SuppressWarnings("unused")
     private static Logger logger = LoggerFactory.getLogger(XxlJobCompleter.class);
 
     /**
@@ -39,7 +40,6 @@ public class XxlJobCompleter {
         return XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateHandleInfo(xxlJobLog);
     }
 
-
     /**
      * do somethind to finish job
      */
@@ -48,13 +48,17 @@ public class XxlJobCompleter {
         // 1、handle success, to trigger child job
         String triggerChildMsg = null;
         if (XxlJobContext.HANDLE_CODE_SUCCESS == xxlJobLog.getHandleCode()) {
-            XxlJobInfo xxlJobInfo = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().loadById(xxlJobLog.getJobId());
-            if (xxlJobInfo != null && xxlJobInfo.getChildJobId() != null && xxlJobInfo.getChildJobId().trim().length() > 0) {
-                triggerChildMsg = "<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>" + I18nUtil.getString("jobconf_trigger_child_run") + "<<<<<<<<<<< </span><br>";
+            XxlJobInfo xxlJobInfo = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao()
+                    .loadById(xxlJobLog.getJobId());
+            if (xxlJobInfo != null && xxlJobInfo.getChildJobId() != null
+                    && xxlJobInfo.getChildJobId().trim().length() > 0) {
+                triggerChildMsg = "<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>"
+                        + I18nUtil.getString("jobconf_trigger_child_run") + "<<<<<<<<<<< </span><br>";
 
                 String[] childJobIds = xxlJobInfo.getChildJobId().split(",");
                 for (int i = 0; i < childJobIds.length; i++) {
-                    int childJobId = (childJobIds[i] != null && childJobIds[i].trim().length() > 0 && isNumeric(childJobIds[i])) ? Integer.valueOf(childJobIds[i]) : -1;
+                    int childJobId = (childJobIds[i] != null && childJobIds[i].trim().length() > 0
+                            && isNumeric(childJobIds[i])) ? Integer.valueOf(childJobIds[i]) : -1;
                     if (childJobId > 0) {
 
                         JobTriggerPoolHelper.trigger(childJobId, TriggerTypeEnum.PARENT, -1, null, null, null);
@@ -65,7 +69,9 @@ public class XxlJobCompleter {
                                 (i + 1),
                                 childJobIds.length,
                                 childJobIds[i],
-                                (triggerChildResult.getCode() == ReturnT.SUCCESS_CODE ? I18nUtil.getString("system_success") : I18nUtil.getString("system_fail")),
+                                (triggerChildResult.getCode() == ReturnT.SUCCESS_CODE
+                                        ? I18nUtil.getString("system_success")
+                                        : I18nUtil.getString("system_fail")),
                                 triggerChildResult.getMsg());
                     } else {
                         triggerChildMsg += MessageFormat.format(I18nUtil.getString("jobconf_callback_child_msg2"),
@@ -89,6 +95,7 @@ public class XxlJobCompleter {
 
     private static boolean isNumeric(String str) {
         try {
+            @SuppressWarnings("unused")
             int result = Integer.valueOf(str);
             return true;
         } catch (NumberFormatException e) {

+ 47 - 36
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/cron/CronExpression.java

@@ -106,11 +106,12 @@ import java.util.*;
  * The '/' character is used to specify increments. For example &quot;0/15&quot;
  * in the seconds field means &quot;the seconds 0, 15, 30, and 45&quot;. And
  * &quot;5/15&quot; in the seconds field means &quot;the seconds 5, 20, 35, and
- * 50&quot;.  Specifying '*' before the  '/' is equivalent to specifying 0 is
+ * 50&quot;. Specifying '*' before the '/' is equivalent to specifying 0 is
  * the value to start with. Essentially, for each field in the expression, there
  * is a set of numbers that can be turned on or off. For seconds and minutes,
  * the numbers range from 0 to 59. For hours 0 to 23, for days of the month 0 to
- * 31, and for months 0 to 11 (JAN to DEC). The &quot;/&quot; character simply helps you turn
+ * 31, and for months 0 to 11 (JAN to DEC). The &quot;/&quot; character simply
+ * helps you turn
  * on every &quot;nth&quot; value in the given set. Thus &quot;7/6&quot; in the
  * month field only turns on month &quot;7&quot;, it does NOT mean every 6th
  * month, please note that subtlety.
@@ -123,13 +124,17 @@ import java.util.*;
  * day-of-week field by itself, it simply means &quot;7&quot; or
  * &quot;SAT&quot;. But if used in the day-of-week field after another value, it
  * means &quot;the last xxx day of the month&quot; - for example &quot;6L&quot;
- * means &quot;the last friday of the month&quot;. You can also specify an offset
- * from the last day of the month, such as "L-3" which would mean the third-to-last
- * day of the calendar month. <i>When using the 'L' option, it is important not to
- * specify lists, or ranges of values, as you'll get confusing/unexpected results.</i>
+ * means &quot;the last friday of the month&quot;. You can also specify an
+ * offset
+ * from the last day of the month, such as "L-3" which would mean the
+ * third-to-last
+ * day of the calendar month. <i>When using the 'L' option, it is important not
+ * to
+ * specify lists, or ranges of values, as you'll get confusing/unexpected
+ * results.</i>
  * <P>
- * The 'W' character is allowed for the day-of-month field.  This character
- * is used to specify the weekday (Monday-Friday) nearest the given day.  As an
+ * The 'W' character is allowed for the day-of-month field. This character
+ * is used to specify the weekday (Monday-Friday) nearest the given day. As an
  * example, if you were to specify &quot;15W&quot; as the value for the
  * day-of-month field, the meaning is: &quot;the nearest weekday to the 15th of
  * the month&quot;. So if the 15th is a Saturday, the trigger will fire on
@@ -137,7 +142,7 @@ import java.util.*;
  * 16th. If the 15th is a Tuesday, then it will fire on Tuesday the 15th.
  * However if you specify &quot;1W&quot; as the value for day-of-month, and the
  * 1st is a Saturday, the trigger will fire on Monday the 3rd, as it will not
- * 'jump' over the boundary of a month's days.  The 'W' character can only be
+ * 'jump' over the boundary of a month's days. The 'W' character can only be
  * specified when the day-of-month is a single day, not a range or list of days.
  * <P>
  * The 'L' and 'W' characters can also be combined for the day-of-month
@@ -145,13 +150,13 @@ import java.util.*;
  * month&quot;.
  * <P>
  * The '#' character is allowed for the day-of-week field. This character is
- * used to specify &quot;the nth&quot; XXX day of the month. For example, the
+ * used to specify &quot;the nth&quot; X day of the month. For example, the
  * value of &quot;6#3&quot; in the day-of-week field means the third Friday of
  * the month (day 6 = Friday and &quot;#3&quot; = the 3rd one in the month).
  * Other examples: &quot;2#1&quot; = the first Monday of the month and
  * &quot;4#5&quot; = the fifth Wednesday of the month. Note that if you specify
  * &quot;#5&quot; and there is not 5 of the given day-of-week in the month, then
- * no firing will occur that month.  If the '#' character is used, there can
+ * no firing will occur that month. If the '#' character is used, there can
  * only be one expression in the day-of-week field (&quot;3#1,6#3&quot; is
  * not valid, since there are two expressions).
  * <P>
@@ -178,15 +183,15 @@ import java.util.*;
  * very important to note that overuse of overflowing ranges creates ranges
  * that don't make sense and no effort has been made to determine which
  * interpretation CronExpression chooses. An example would be
- * "0 0 14-6 ? * FRI-MON". </li>
+ * "0 0 14-6 ? * FRI-MON".</li>
  * </ul>
  * </p>
  *
  * @author Sharada Jambula, James House
  * @author Contributions from Mads Henderson
  * @author Refactoring from CronTrigger to CronExpression by Aaron Craven
- * <p>
- * Borrowed from quartz v2.3.1
+ *         <p>
+ *         Borrowed from quartz v2.3.1
  */
 public final class CronExpression implements Serializable, Cloneable {
 
@@ -295,7 +300,7 @@ public final class CronExpression implements Serializable, Cloneable {
      *
      * @param cronExpression the expression to evaluate
      * @return a boolean indicating whether the given expression is a valid cron
-     * expression
+     *         expression
      */
     public static boolean isValidExpression(String cronExpression) {
 
@@ -320,7 +325,7 @@ public final class CronExpression implements Serializable, Cloneable {
      *
      * @param date the date to evaluate
      * @return a boolean indicating whether the given date satisfies the cron
-     * expression
+     *         expression
      */
     public boolean isSatisfiedBy(Date date) {
         Calendar testDateCal = Calendar.getInstance(getTimeZone());
@@ -358,7 +363,7 @@ public final class CronExpression implements Serializable, Cloneable {
     public Date getNextInvalidTimeAfter(Date date) {
         long difference = 1000;
 
-        //move back to the nearest second so differences will be accurate
+        // move back to the nearest second so differences will be accurate
         Calendar adjustCal = Calendar.getInstance(getTimeZone());
         adjustCal.setTime(date);
         adjustCal.set(Calendar.MILLISECOND, 0);
@@ -366,9 +371,11 @@ public final class CronExpression implements Serializable, Cloneable {
 
         Date newDate;
 
-        //FUTURE_TODO: (QUARTZ-481) IMPROVE THIS! The following is a BAD solution to this problem. Performance will be very bad here, depending on the cron expression. It is, however A solution.
+        // FUTURE_TODO: (QUARTZ-481) IMPROVE THIS! The following is a BAD solution to
+        // this problem. Performance will be very bad here, depending on the cron
+        // expression. It is, however A solution.
 
-        //keep getting the next included time until it's farther than one second
+        // keep getting the next included time until it's farther than one second
         // apart. At that point, lastDate is the last valid fire time. We return
         // the second immediately following it.
         while (difference == 1000) {
@@ -399,7 +406,7 @@ public final class CronExpression implements Serializable, Cloneable {
     }
 
     /**
-     * Sets the time zone for which  this <code>CronExpression</code>
+     * Sets the time zone for which this <code>CronExpression</code>
      * will be resolved.
      */
     public void setTimeZone(TimeZone timeZone) {
@@ -416,7 +423,6 @@ public final class CronExpression implements Serializable, Cloneable {
         return cronExpression;
     }
 
-
     ////////////////////////////////////////////////////////////////////////////
     //
     // Expression Parsing Functions
@@ -461,13 +467,16 @@ public final class CronExpression implements Serializable, Cloneable {
 
                 // throw an exception if L is used with other days of the month
                 if (exprOn == DAY_OF_MONTH && expr.indexOf('L') != -1 && expr.length() > 1 && expr.contains(",")) {
-                    throw new ParseException("Support for specifying 'L' and 'LW' with other days of the month is not implemented", -1);
+                    throw new ParseException(
+                            "Support for specifying 'L' and 'LW' with other days of the month is not implemented", -1);
                 }
                 // throw an exception if L is used with other days of the week
                 if (exprOn == DAY_OF_WEEK && expr.indexOf('L') != -1 && expr.length() > 1 && expr.contains(",")) {
-                    throw new ParseException("Support for specifying 'L' with other days of the week is not implemented", -1);
+                    throw new ParseException(
+                            "Support for specifying 'L' with other days of the week is not implemented", -1);
                 }
-                if (exprOn == DAY_OF_WEEK && expr.indexOf('#') != -1 && expr.indexOf('#', expr.indexOf('#') + 1) != -1) {
+                if (exprOn == DAY_OF_WEEK && expr.indexOf('#') != -1
+                        && expr.indexOf('#', expr.indexOf('#') + 1) != -1) {
                     throw new ParseException("Support for specifying multiple \"nth\" days is not implemented.", -1);
                 }
 
@@ -499,7 +508,8 @@ public final class CronExpression implements Serializable, Cloneable {
             if (!dayOfMSpec || dayOfWSpec) {
                 if (!dayOfWSpec || dayOfMSpec) {
                     throw new ParseException(
-                            "Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.", 0);
+                            "Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.",
+                            0);
                 }
             }
         } catch (ParseException pe) {
@@ -554,7 +564,8 @@ public final class CronExpression implements Serializable, Cloneable {
                         if (eval < 0) {
                             throw new ParseException(
                                     "Invalid Day-of-Week value: '" + sub
-                                            + "'", i);
+                                            + "'",
+                                    i);
                         }
                     } else if (c == '#') {
                         try {
@@ -617,7 +628,7 @@ public final class CronExpression implements Serializable, Cloneable {
                 return i + 1;
             } else if (c == '/'
                     && ((i + 1) >= s.length() || s.charAt(i + 1) == ' ' || s
-                    .charAt(i + 1) == '\t')) {
+                            .charAt(i + 1) == '\t')) {
                 throw new ParseException("'/' must be followed by an integer.", i);
             } else if (c == '*') {
                 i++;
@@ -738,7 +749,9 @@ public final class CronExpression implements Serializable, Cloneable {
                 throw new ParseException("'W' option is not valid here. (pos=" + i + ")", i);
             }
             if (val > 31)
-                throw new ParseException("The 'W' option does not make sense with values larger than 31 (max number of days in a month)", i);
+                throw new ParseException(
+                        "The 'W' option does not make sense with values larger than 31 (max number of days in a month)",
+                        i);
             TreeSet<Integer> set = getSet(type);
             set.add(val);
             i++;
@@ -1048,8 +1061,8 @@ public final class CronExpression implements Serializable, Cloneable {
             }
         }
 
-        // if the end of the range is before the start, then we need to overflow into 
-        // the next day, month etc. This is done by adding the maximum amount for that 
+        // if the end of the range is before the start, then we need to overflow into
+        // the next day, month etc. This is done by adding the maximum amount for that
         // type, and using modulus max to determine the value being added.
         int max = -1;
         if (stopAt < startAt) {
@@ -1186,7 +1199,7 @@ public final class CronExpression implements Serializable, Cloneable {
         // loop until we've computed the next time, or we've past the endTime
         while (!gotOne) {
 
-            //if (endTime != null && cl.getTime().after(endTime)) return null;
+            // if (endTime != null && cl.getTime().after(endTime)) return null;
             if (cl.get(Calendar.YEAR) > 2999) { // prevent endless loop...
                 return null;
             }
@@ -1339,7 +1352,6 @@ public final class CronExpression implements Serializable, Cloneable {
                         day += 1;
                     }
 
-
                     tcal.set(Calendar.SECOND, sec);
                     tcal.set(Calendar.MINUTE, min);
                     tcal.set(Calendar.HOUR_OF_DAY, hr);
@@ -1375,7 +1387,7 @@ public final class CronExpression implements Serializable, Cloneable {
                     continue;
                 }
             } else if (dayOfWSpec && !dayOfMSpec) { // get day by day of week rule
-                if (lastdayOfWeek) { // are we looking for the last XXX day of
+                if (lastdayOfWeek) { // are we looking for the last X day of
                     // the month?
                     int dow = daysOfWeek.first(); // desired
                     // d-o-w
@@ -1419,7 +1431,7 @@ public final class CronExpression implements Serializable, Cloneable {
                     }
 
                 } else if (nthdayOfWeek != 0) {
-                    // are we looking for the Nth XXX day in the month?
+                    // are we looking for the Nth X day in the month?
                     int dow = daysOfWeek.first(); // desired
                     // d-o-w
                     int cDow = cl.get(Calendar.DAY_OF_WEEK); // current d-o-w
@@ -1445,7 +1457,7 @@ public final class CronExpression implements Serializable, Cloneable {
                     day += daysToAdd;
                     if (daysToAdd < 0
                             || day > getLastDayOfMonth(mon, cl
-                            .get(Calendar.YEAR))) {
+                                    .get(Calendar.YEAR))) {
                         cl.set(Calendar.SECOND, 0);
                         cl.set(Calendar.MINUTE, 0);
                         cl.set(Calendar.HOUR_OF_DAY, 0);
@@ -1643,7 +1655,6 @@ public final class CronExpression implements Serializable, Cloneable {
         }
     }
 
-
     private void readObject(java.io.ObjectInputStream stream)
             throws java.io.IOException, ClassNotFoundException {
 

+ 4 - 3
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/route/strategy/ExecutorRouteLFU.java

@@ -20,6 +20,7 @@ public class ExecutorRouteLFU extends ExecutorRouter {
     private static ConcurrentMap<Integer, HashMap<String, Integer>> jobLfuMap = new ConcurrentHashMap<Integer, HashMap<String, Integer>>();
     private static long CACHE_VALID_TIME = 0;
 
+    @SuppressWarnings("unused")
     public String route(int jobId, List<String> addressList) {
 
         // cache clear
@@ -29,16 +30,16 @@ public class ExecutorRouteLFU extends ExecutorRouter {
         }
 
         // lfu item init
-        HashMap<String, Integer> lfuItemMap = jobLfuMap.get(jobId);     // Key排序可以用TreeMap+构造入参Compare;Value排序暂时只能通过ArrayList;
+        HashMap<String, Integer> lfuItemMap = jobLfuMap.get(jobId); // Key排序可以用TreeMap+构造入参Compare;Value排序暂时只能通过ArrayList;
         if (lfuItemMap == null) {
             lfuItemMap = new HashMap<String, Integer>();
-            jobLfuMap.putIfAbsent(jobId, lfuItemMap);   // 避免重复覆盖
+            jobLfuMap.putIfAbsent(jobId, lfuItemMap); // 避免重复覆盖
         }
 
         // put new
         for (String address : addressList) {
             if (!lfuItemMap.containsKey(address) || lfuItemMap.get(address) > 1000000) {
-                lfuItemMap.put(address, new Random().nextInt(addressList.size()));  // 初始化时主动Random一次,缓解首次压力
+                lfuItemMap.put(address, new Random().nextInt(addressList.size())); // 初始化时主动Random一次,缓解首次压力
             }
         }
         // remove old

+ 34 - 22
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/thread/JobScheduleHelper.java

@@ -20,7 +20,7 @@ import java.util.concurrent.TimeUnit;
  * @author xuxueli 2019-05-21
  */
 public class JobScheduleHelper {
-    public static final long PRE_READ_MS = 5000;    // pre read
+    public static final long PRE_READ_MS = 5000; // pre read
     private static Logger logger = LoggerFactory.getLogger(JobScheduleHelper.class);
     private static JobScheduleHelper instance = new JobScheduleHelper();
     private volatile static Map<Integer, List<Integer>> ringData = new ConcurrentHashMap<>();
@@ -39,7 +39,7 @@ public class JobScheduleHelper {
         if (ScheduleTypeEnum.CRON == scheduleTypeEnum) {
             Date nextValidTime = new CronExpression(jobInfo.getScheduleConf()).getNextValidTimeAfter(fromTime);
             return nextValidTime;
-        } else if (ScheduleTypeEnum.FIX_RATE == scheduleTypeEnum /*|| ScheduleTypeEnum.FIX_DELAY == scheduleTypeEnum*/) {
+        } else if (ScheduleTypeEnum.FIX_RATE == scheduleTypeEnum /* || ScheduleTypeEnum.FIX_DELAY == scheduleTypeEnum */) {
             return new Date(fromTime.getTime() + Integer.valueOf(jobInfo.getScheduleConf()) * 1000);
         }
         return null;
@@ -49,6 +49,7 @@ public class JobScheduleHelper {
 
         // schedule thread
         scheduleThread = new Thread(new Runnable() {
+            @SuppressWarnings("null")
             @Override
             public void run() {
 
@@ -61,8 +62,10 @@ public class JobScheduleHelper {
                 }
                 logger.info(">>>>>>>>> init xxl-job admin scheduler success.");
 
-                // pre-read count: treadpool-size * trigger-qps (each trigger cost 50ms, qps = 1000/50 = 20)
-                int preReadCount = (XxlJobAdminConfig.getAdminConfig().getTriggerPoolFastMax() + XxlJobAdminConfig.getAdminConfig().getTriggerPoolSlowMax()) * 20;
+                // pre-read count: treadpool-size * trigger-qps (each trigger cost 50ms, qps =
+                // 1000/50 = 20)
+                int preReadCount = (XxlJobAdminConfig.getAdminConfig().getTriggerPoolFastMax()
+                        + XxlJobAdminConfig.getAdminConfig().getTriggerPoolSlowMax()) * 20;
 
                 while (!scheduleThreadToStop) {
 
@@ -80,14 +83,16 @@ public class JobScheduleHelper {
                         connAutoCommit = conn.getAutoCommit();
                         conn.setAutoCommit(false);
 
-                        preparedStatement = conn.prepareStatement("select * from xxl_job_lock where lock_name = 'schedule_lock' for update");
+                        preparedStatement = conn.prepareStatement(
+                                "select * from xxl_job_lock where lock_name = 'schedule_lock' for update");
                         preparedStatement.execute();
 
                         // tx start
 
                         // 1、pre read
                         long nowTime = System.currentTimeMillis();
-                        List<XxlJobInfo> scheduleList = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount);
+                        List<XxlJobInfo> scheduleList = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao()
+                                .scheduleJobQuery(nowTime + PRE_READ_MS, preReadCount);
                         if (scheduleList != null && scheduleList.size() > 0) {
                             // 2、push time-ring
                             for (XxlJobInfo jobInfo : scheduleList) {
@@ -98,11 +103,14 @@ public class JobScheduleHelper {
                                     logger.warn(">>>>>>>>>>> xxl-job, schedule misfire, jobId = " + jobInfo.getId());
 
                                     // 1、misfire match
-                                    MisfireStrategyEnum misfireStrategyEnum = MisfireStrategyEnum.match(jobInfo.getMisfireStrategy(), MisfireStrategyEnum.DO_NOTHING);
+                                    MisfireStrategyEnum misfireStrategyEnum = MisfireStrategyEnum
+                                            .match(jobInfo.getMisfireStrategy(), MisfireStrategyEnum.DO_NOTHING);
                                     if (MisfireStrategyEnum.FIRE_ONCE_NOW == misfireStrategyEnum) {
                                         // FIRE_ONCE_NOW 》 trigger
-                                        JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.MISFIRE, -1, null, null, null);
-                                        logger.debug(">>>>>>>>>>> xxl-job, schedule push trigger : jobId = " + jobInfo.getId());
+                                        JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.MISFIRE, -1, null,
+                                                null, null);
+                                        logger.debug(">>>>>>>>>>> xxl-job, schedule push trigger : jobId = "
+                                                + jobInfo.getId());
                                     }
 
                                     // 2、fresh next
@@ -112,14 +120,17 @@ public class JobScheduleHelper {
                                     // 2.2、trigger-expire < 5s:direct-trigger && make next-trigger-time
 
                                     // 1、trigger
-                                    JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.CRON, -1, null, null, null);
-                                    logger.debug(">>>>>>>>>>> xxl-job, schedule push trigger : jobId = " + jobInfo.getId());
+                                    JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.CRON, -1, null, null,
+                                            null);
+                                    logger.debug(
+                                            ">>>>>>>>>>> xxl-job, schedule push trigger : jobId = " + jobInfo.getId());
 
                                     // 2、fresh next
                                     refreshNextValidTime(jobInfo, new Date());
 
                                     // next-trigger-time in 5s, pre-read again
-                                    if (jobInfo.getTriggerStatus() == 1 && nowTime + PRE_READ_MS > jobInfo.getTriggerNextTime()) {
+                                    if (jobInfo.getTriggerStatus() == 1
+                                            && nowTime + PRE_READ_MS > jobInfo.getTriggerNextTime()) {
 
                                         // 1、make ring second
                                         int ringSecond = (int) ((jobInfo.getTriggerNextTime() / 1000) % 60);
@@ -159,7 +170,6 @@ public class JobScheduleHelper {
 
                         // tx stop
 
-
                     } catch (Exception e) {
                         if (!scheduleThreadToStop) {
                             logger.error(">>>>>>>>>>> xxl-job, JobScheduleHelper#scheduleThread error:{}", e);
@@ -204,12 +214,12 @@ public class JobScheduleHelper {
                     }
                     long cost = System.currentTimeMillis() - start;
 
-
                     // Wait seconds, align second
-                    if (cost < 1000) {  // scan-overtime, not wait
+                    if (cost < 1000) { // scan-overtime, not wait
                         try {
                             // pre-read period: success > scan each second; fail > skip this period;
-                            TimeUnit.MILLISECONDS.sleep((preReadSuc ? 1000 : PRE_READ_MS) - System.currentTimeMillis() % 1000);
+                            TimeUnit.MILLISECONDS
+                                    .sleep((preReadSuc ? 1000 : PRE_READ_MS) - System.currentTimeMillis() % 1000);
                         } catch (InterruptedException e) {
                             if (!scheduleThreadToStop) {
                                 logger.error(e.getMessage(), e);
@@ -226,7 +236,6 @@ public class JobScheduleHelper {
         scheduleThread.setName("xxl-job, admin JobScheduleHelper#scheduleThread");
         scheduleThread.start();
 
-
         // ring thread
         ringThread = new Thread(new Runnable() {
             @Override
@@ -246,7 +255,7 @@ public class JobScheduleHelper {
                     try {
                         // second data
                         List<Integer> ringItemData = new ArrayList<>();
-                        int nowSecond = Calendar.getInstance().get(Calendar.SECOND);   // 避免处理耗时太长,跨过刻度,向前校验一个刻度;
+                        int nowSecond = Calendar.getInstance().get(Calendar.SECOND); // 避免处理耗时太长,跨过刻度,向前校验一个刻度;
                         for (int i = 0; i < 2; i++) {
                             List<Integer> tmpData = ringData.remove((nowSecond + 60 - i) % 60);
                             if (tmpData != null) {
@@ -255,7 +264,8 @@ public class JobScheduleHelper {
                         }
 
                         // ring trigger
-                        logger.debug(">>>>>>>>>>> xxl-job, time-ring beat : " + nowSecond + " = " + Arrays.asList(ringItemData));
+                        logger.debug(">>>>>>>>>>> xxl-job, time-ring beat : " + nowSecond + " = "
+                                + Arrays.asList(ringItemData));
                         if (ringItemData.size() > 0) {
                             // do trigger
                             for (int jobId : ringItemData) {
@@ -288,7 +298,8 @@ public class JobScheduleHelper {
             jobInfo.setTriggerStatus(0);
             jobInfo.setTriggerLastTime(0);
             jobInfo.setTriggerNextTime(0);
-            logger.warn(">>>>>>>>>>> xxl-job, refreshNextValidTime fail for job: jobId={}, scheduleType={}, scheduleConf={}",
+            logger.warn(
+                    ">>>>>>>>>>> xxl-job, refreshNextValidTime fail for job: jobId={}, scheduleType={}, scheduleConf={}",
                     jobInfo.getId(), jobInfo.getScheduleType(), jobInfo.getScheduleConf());
         }
     }
@@ -302,7 +313,8 @@ public class JobScheduleHelper {
         }
         ringItemData.add(jobId);
 
-        logger.debug(">>>>>>>>>>> xxl-job, schedule push time-ring : " + ringSecond + " = " + Arrays.asList(ringItemData));
+        logger.debug(
+                ">>>>>>>>>>> xxl-job, schedule push time-ring : " + ringSecond + " = " + Arrays.asList(ringItemData));
     }
 
     public void toStop() {
@@ -310,7 +322,7 @@ public class JobScheduleHelper {
         // 1、stop schedule
         scheduleThreadToStop = true;
         try {
-            TimeUnit.SECONDS.sleep(1);  // wait
+            TimeUnit.SECONDS.sleep(1); // wait
         } catch (InterruptedException e) {
             logger.error(e.getMessage(), e);
         }

+ 43 - 23
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/trigger/XxlJobTrigger.java

@@ -39,11 +39,11 @@ public class XxlJobTrigger {
      *                              not null: cover
      */
     public static void trigger(int jobId,
-                               TriggerTypeEnum triggerType,
-                               int failRetryCount,
-                               String executorShardingParam,
-                               String executorParam,
-                               String addressList) {
+            TriggerTypeEnum triggerType,
+            int failRetryCount,
+            String executorShardingParam,
+            String executorParam,
+            String addressList) {
 
         // load data
         XxlJobInfo jobInfo = XxlJobAdminConfig.getAdminConfig().getXxlJobInfoDao().loadById(jobId);
@@ -73,7 +73,8 @@ public class XxlJobTrigger {
                 shardingParam[1] = Integer.valueOf(shardingArr[1]);
             }
         }
-        if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST == ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null)
+        if (ExecutorRouteStrategyEnum.SHARDING_BROADCAST == ExecutorRouteStrategyEnum
+                .match(jobInfo.getExecutorRouteStrategy(), null)
                 && group.getRegistryList() != null && !group.getRegistryList().isEmpty()
                 && shardingParam == null) {
             for (int i = 0; i < group.getRegistryList().size(); i++) {
@@ -81,7 +82,7 @@ public class XxlJobTrigger {
             }
         } else {
             if (shardingParam == null) {
-                shardingParam = new int[]{0, 1};
+                shardingParam = new int[] { 0, 1 };
             }
             processTrigger(group, jobInfo, finalFailRetryCount, triggerType, shardingParam[0], shardingParam[1]);
         }
@@ -90,6 +91,7 @@ public class XxlJobTrigger {
 
     private static boolean isNumeric(String str) {
         try {
+            @SuppressWarnings("unused")
             int result = Integer.valueOf(str);
             return true;
         } catch (NumberFormatException e) {
@@ -105,12 +107,17 @@ public class XxlJobTrigger {
      * @param index               sharding index
      * @param total               sharding index
      */
-    private static void processTrigger(XxlJobGroup group, XxlJobInfo jobInfo, int finalFailRetryCount, TriggerTypeEnum triggerType, int index, int total) {
+    private static void processTrigger(XxlJobGroup group, XxlJobInfo jobInfo, int finalFailRetryCount,
+            TriggerTypeEnum triggerType, int index, int total) {
 
         // param
-        ExecutorBlockStrategyEnum blockStrategy = ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), ExecutorBlockStrategyEnum.SERIAL_EXECUTION);  // block strategy
-        ExecutorRouteStrategyEnum executorRouteStrategyEnum = ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null);    // route strategy
-        String shardingParam = (ExecutorRouteStrategyEnum.SHARDING_BROADCAST == executorRouteStrategyEnum) ? String.valueOf(index).concat("/").concat(String.valueOf(total)) : null;
+        ExecutorBlockStrategyEnum blockStrategy = ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(),
+                ExecutorBlockStrategyEnum.SERIAL_EXECUTION); // block strategy
+        ExecutorRouteStrategyEnum executorRouteStrategyEnum = ExecutorRouteStrategyEnum
+                .match(jobInfo.getExecutorRouteStrategy(), null); // route strategy
+        String shardingParam = (ExecutorRouteStrategyEnum.SHARDING_BROADCAST == executorRouteStrategyEnum)
+                ? String.valueOf(index).concat("/").concat(String.valueOf(total))
+                : null;
 
         // 1、save log-id
         XxlJobLog jobLog = new XxlJobLog();
@@ -152,7 +159,8 @@ public class XxlJobTrigger {
                 }
             }
         } else {
-            routeAddressResult = new ReturnT<String>(ReturnT.FAIL_CODE, I18nUtil.getString("jobconf_trigger_address_empty"));
+            routeAddressResult = new ReturnT<String>(ReturnT.FAIL_CODE,
+                    I18nUtil.getString("jobconf_trigger_address_empty"));
         }
 
         // 4、trigger remote executor
@@ -166,20 +174,32 @@ public class XxlJobTrigger {
         // 5、collection trigger info
         StringBuffer triggerMsgSb = new StringBuffer();
         triggerMsgSb.append(I18nUtil.getString("jobconf_trigger_type")).append(":").append(triggerType.getTitle());
-        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_admin_adress")).append(":").append(IpUtil.getIp());
+        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_admin_adress")).append(":")
+                .append(IpUtil.getIp());
         triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_exe_regtype")).append(":")
-                .append((group.getAddressType() == 0) ? I18nUtil.getString("jobgroup_field_addressType_0") : I18nUtil.getString("jobgroup_field_addressType_1"));
-        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_exe_regaddress")).append(":").append(group.getRegistryList());
-        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorRouteStrategy")).append(":").append(executorRouteStrategyEnum.getTitle());
+                .append((group.getAddressType() == 0) ? I18nUtil.getString("jobgroup_field_addressType_0")
+                        : I18nUtil.getString("jobgroup_field_addressType_1"));
+        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobconf_trigger_exe_regaddress")).append(":")
+                .append(group.getRegistryList());
+        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorRouteStrategy")).append(":")
+                .append(executorRouteStrategyEnum.getTitle());
         if (shardingParam != null) {
             triggerMsgSb.append("(" + shardingParam + ")");
         }
-        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorBlockStrategy")).append(":").append(blockStrategy.getTitle());
-        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_timeout")).append(":").append(jobInfo.getExecutorTimeout());
-        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorFailRetryCount")).append(":").append(finalFailRetryCount);
-
-        triggerMsgSb.append("<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>" + I18nUtil.getString("jobconf_trigger_run") + "<<<<<<<<<<< </span><br>")
-                .append((routeAddressResult != null && routeAddressResult.getMsg() != null) ? routeAddressResult.getMsg() + "<br><br>" : "").append(triggerResult.getMsg() != null ? triggerResult.getMsg() : "");
+        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorBlockStrategy")).append(":")
+                .append(blockStrategy.getTitle());
+        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_timeout")).append(":")
+                .append(jobInfo.getExecutorTimeout());
+        triggerMsgSb.append("<br>").append(I18nUtil.getString("jobinfo_field_executorFailRetryCount")).append(":")
+                .append(finalFailRetryCount);
+
+        triggerMsgSb
+                .append("<br><br><span style=\"color:#00c0ef;\" > >>>>>>>>>>>"
+                        + I18nUtil.getString("jobconf_trigger_run") + "<<<<<<<<<<< </span><br>")
+                .append((routeAddressResult != null && routeAddressResult.getMsg() != null)
+                        ? routeAddressResult.getMsg() + "<br><br>"
+                        : "")
+                .append(triggerResult.getMsg() != null ? triggerResult.getMsg() : "");
 
         // 6、save log trigger-info
         jobLog.setExecutorAddress(address);
@@ -187,7 +207,7 @@ public class XxlJobTrigger {
         jobLog.setExecutorParam(jobInfo.getExecutorParam());
         jobLog.setExecutorShardingParam(shardingParam);
         jobLog.setExecutorFailRetryCount(finalFailRetryCount);
-        //jobLog.setTriggerTime();
+        // jobLog.setTriggerTime();
         jobLog.setTriggerCode(triggerResult.getCode());
         jobLog.setTriggerMsg(triggerMsgSb.toString());
         XxlJobAdminConfig.getAdminConfig().getXxlJobLogDao().updateTriggerInfo(jobLog);

+ 1 - 0
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/util/I18nUtil.java

@@ -34,6 +34,7 @@ public class I18nUtil {
             String i18nFile = MessageFormat.format("i18n/message_{0}.properties", i18n);
 
             // load prop
+            @SuppressWarnings("null")
             Resource resource = new ClassPathResource(i18nFile);
             EncodedResource encodedResource = new EncodedResource(resource, "UTF-8");
             prop = PropertiesLoaderUtils.loadProperties(encodedResource);

+ 5 - 1
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/core/util/LocalCacheUtil.java

@@ -10,7 +10,7 @@ import java.util.concurrent.ConcurrentMap;
  */
 public class LocalCacheUtil {
 
-    private static ConcurrentMap<String, LocalCacheData> cacheRepository = new ConcurrentHashMap<String, LocalCacheData>();   // 类型建议用抽象父类,兼容性更好;
+    private static ConcurrentMap<String, LocalCacheData> cacheRepository = new ConcurrentHashMap<String, LocalCacheData>(); // 类型建议用抽象父类,兼容性更好;
 
     /**
      * set cache
@@ -96,6 +96,7 @@ public class LocalCacheUtil {
         private Object val;
         private long timeoutTime;
 
+        @SuppressWarnings("unused")
         public LocalCacheData() {
         }
 
@@ -109,6 +110,7 @@ public class LocalCacheUtil {
             return key;
         }
 
+        @SuppressWarnings("unused")
         public void setKey(String key) {
             this.key = key;
         }
@@ -117,6 +119,7 @@ public class LocalCacheUtil {
             return val;
         }
 
+        @SuppressWarnings("unused")
         public void setVal(Object val) {
             this.val = val;
         }
@@ -125,6 +128,7 @@ public class LocalCacheUtil {
             return timeoutTime;
         }
 
+        @SuppressWarnings("unused")
         public void setTimeoutTime(long timeoutTime) {
             this.timeoutTime = timeoutTime;
         }

+ 4 - 5
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/service/LoginService.java

@@ -25,7 +25,6 @@ public class LoginService {
     @Resource
     private XxlJobUserDao xxlJobUserDao;
 
-
     private String makeToken(XxlJobUser xxlJobUser) {
         String tokenJson = JacksonUtil.writeValueAsString(xxlJobUser);
         String tokenHex = new BigInteger(tokenJson.getBytes()).toString(16);
@@ -35,14 +34,14 @@ public class LoginService {
     private XxlJobUser parseToken(String tokenHex) {
         XxlJobUser xxlJobUser = null;
         if (tokenHex != null) {
-            String tokenJson = new String(new BigInteger(tokenHex, 16).toByteArray());      // username_password(md5)
+            String tokenJson = new String(new BigInteger(tokenHex, 16).toByteArray()); // username_password(md5)
             xxlJobUser = JacksonUtil.readValue(tokenJson, XxlJobUser.class);
         }
         return xxlJobUser;
     }
 
-
-    public ReturnT<String> login(HttpServletRequest request, HttpServletResponse response, String username, String password, boolean ifRemember) {
+    public ReturnT<String> login(HttpServletRequest request, HttpServletResponse response, String username,
+            String password, boolean ifRemember) {
 
         // param
         if (username == null || username.trim().length() == 0 || password == null || password.trim().length() == 0) {
@@ -54,6 +53,7 @@ public class LoginService {
         if (xxlJobUser == null) {
             return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
         }
+        @SuppressWarnings("null")
         String passwordMd5 = DigestUtils.md5DigestAsHex(password.getBytes());
         if (!passwordMd5.equals(xxlJobUser.getPassword())) {
             return new ReturnT<String>(500, I18nUtil.getString("login_param_unvalid"));
@@ -104,5 +104,4 @@ public class LoginService {
         return null;
     }
 
-
 }

+ 82 - 45
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/java/com/vber/job/admin/service/impl/XxlJobServiceImpl.java

@@ -46,17 +46,20 @@ public class XxlJobServiceImpl implements XxlJobService {
     private XxlJobLogReportDao xxlJobLogReportDao;
 
     @Override
-    public Map<String, Object> pageList(int start, int length, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) {
+    public Map<String, Object> pageList(int start, int length, int jobGroup, int triggerStatus, String jobDesc,
+            String executorHandler, String author) {
 
         // page list
-        List<XxlJobInfo> list = xxlJobInfoDao.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);
-        int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);
+        List<XxlJobInfo> list = xxlJobInfoDao.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler,
+                author);
+        int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, triggerStatus, jobDesc, executorHandler,
+                author);
 
         // package result
         Map<String, Object> maps = new HashMap<String, Object>();
-        maps.put("recordsTotal", list_count);        // 总记录数
-        maps.put("recordsFiltered", list_count);    // 过滤后的总记录数
-        maps.put("data", list);                    // 分页列表
+        maps.put("recordsTotal", list_count); // 总记录数
+        maps.put("recordsFiltered", list_count); // 过滤后的总记录数
+        maps.put("data", list); // 分页列表
         return maps;
     }
 
@@ -66,43 +69,51 @@ public class XxlJobServiceImpl implements XxlJobService {
         // valid base
         XxlJobGroup group = xxlJobGroupDao.load(jobInfo.getJobGroup());
         if (group == null) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_choose") + I18nUtil.getString("jobinfo_field_jobgroup")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("system_please_choose") + I18nUtil.getString("jobinfo_field_jobgroup")));
         }
         if (jobInfo.getJobDesc() == null || jobInfo.getJobDesc().trim().length() == 0) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_jobdesc")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_jobdesc")));
         }
         if (jobInfo.getAuthor() == null || jobInfo.getAuthor().trim().length() == 0) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_author")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_author")));
         }
 
         // valid trigger
         ScheduleTypeEnum scheduleTypeEnum = ScheduleTypeEnum.match(jobInfo.getScheduleType(), null);
         if (scheduleTypeEnum == null) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
         }
         if (scheduleTypeEnum == ScheduleTypeEnum.CRON) {
             if (jobInfo.getScheduleConf() == null || !CronExpression.isValidExpression(jobInfo.getScheduleConf())) {
                 return new ReturnT<String>(ReturnT.FAIL_CODE, "Cron" + I18nUtil.getString("system_unvalid"));
             }
-        } else if (scheduleTypeEnum == ScheduleTypeEnum.FIX_RATE/* || scheduleTypeEnum == ScheduleTypeEnum.FIX_DELAY*/) {
+        } else if (scheduleTypeEnum == ScheduleTypeEnum.FIX_RATE/* || scheduleTypeEnum == ScheduleTypeEnum.FIX_DELAY */) {
             if (jobInfo.getScheduleConf() == null) {
                 return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")));
             }
             try {
                 int fixSecond = Integer.valueOf(jobInfo.getScheduleConf());
                 if (fixSecond < 1) {
-                    return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
+                    return new ReturnT<String>(ReturnT.FAIL_CODE,
+                            (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
                 }
             } catch (Exception e) {
-                return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
+                return new ReturnT<String>(ReturnT.FAIL_CODE,
+                        (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
             }
         }
 
         // valid job
         if (GlueTypeEnum.match(jobInfo.getGlueType()) == null) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_gluetype") + I18nUtil.getString("system_unvalid")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("jobinfo_field_gluetype") + I18nUtil.getString("system_unvalid")));
         }
-        if (GlueTypeEnum.BEAN == GlueTypeEnum.match(jobInfo.getGlueType()) && (jobInfo.getExecutorHandler() == null || jobInfo.getExecutorHandler().trim().length() == 0)) {
+        if (GlueTypeEnum.BEAN == GlueTypeEnum.match(jobInfo.getGlueType())
+                && (jobInfo.getExecutorHandler() == null || jobInfo.getExecutorHandler().trim().length() == 0)) {
             return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + "JobHandler"));
         }
         // 》fix "\r" in shell
@@ -112,13 +123,16 @@ public class XxlJobServiceImpl implements XxlJobService {
 
         // valid advanced
         if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy") + I18nUtil.getString("system_unvalid")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("jobinfo_field_executorRouteStrategy") + I18nUtil.getString("system_unvalid")));
         }
         if (MisfireStrategyEnum.match(jobInfo.getMisfireStrategy(), null) == null) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("misfire_strategy") + I18nUtil.getString("system_unvalid")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("misfire_strategy") + I18nUtil.getString("system_unvalid")));
         }
         if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy") + I18nUtil.getString("system_unvalid")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("jobinfo_field_executorBlockStrategy") + I18nUtil.getString("system_unvalid")));
         }
 
         // 》ChildJobId valid
@@ -129,11 +143,13 @@ public class XxlJobServiceImpl implements XxlJobService {
                     XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.parseInt(childJobIdItem));
                     if (childJobInfo == null) {
                         return new ReturnT<String>(ReturnT.FAIL_CODE,
-                                MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId") + "({0})" + I18nUtil.getString("system_not_found")), childJobIdItem));
+                                MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId") + "({0})"
+                                        + I18nUtil.getString("system_not_found")), childJobIdItem));
                     }
                 } else {
                     return new ReturnT<String>(ReturnT.FAIL_CODE,
-                            MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId") + "({0})" + I18nUtil.getString("system_unvalid")), childJobIdItem));
+                            MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId") + "({0})"
+                                    + I18nUtil.getString("system_unvalid")), childJobIdItem));
                 }
             }
 
@@ -153,7 +169,8 @@ public class XxlJobServiceImpl implements XxlJobService {
         jobInfo.setGlueUpdatetime(new Date());
         xxlJobInfoDao.save(jobInfo);
         if (jobInfo.getId() < 1) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_add") + I18nUtil.getString("system_fail")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("jobinfo_field_add") + I18nUtil.getString("system_fail")));
         }
 
         return new ReturnT<String>(String.valueOf(jobInfo.getId()));
@@ -161,6 +178,7 @@ public class XxlJobServiceImpl implements XxlJobService {
 
     private boolean isNumeric(String str) {
         try {
+            @SuppressWarnings("unused")
             int result = Integer.valueOf(str);
             return true;
         } catch (NumberFormatException e) {
@@ -173,44 +191,53 @@ public class XxlJobServiceImpl implements XxlJobService {
 
         // valid base
         if (jobInfo.getJobDesc() == null || jobInfo.getJobDesc().trim().length() == 0) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_jobdesc")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_jobdesc")));
         }
         if (jobInfo.getAuthor() == null || jobInfo.getAuthor().trim().length() == 0) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_author")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("system_please_input") + I18nUtil.getString("jobinfo_field_author")));
         }
 
         // valid trigger
         ScheduleTypeEnum scheduleTypeEnum = ScheduleTypeEnum.match(jobInfo.getScheduleType(), null);
         if (scheduleTypeEnum == null) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
         }
         if (scheduleTypeEnum == ScheduleTypeEnum.CRON) {
             if (jobInfo.getScheduleConf() == null || !CronExpression.isValidExpression(jobInfo.getScheduleConf())) {
                 return new ReturnT<String>(ReturnT.FAIL_CODE, "Cron" + I18nUtil.getString("system_unvalid"));
             }
-        } else if (scheduleTypeEnum == ScheduleTypeEnum.FIX_RATE /*|| scheduleTypeEnum == ScheduleTypeEnum.FIX_DELAY*/) {
+        } else if (scheduleTypeEnum == ScheduleTypeEnum.FIX_RATE /* || scheduleTypeEnum == ScheduleTypeEnum.FIX_DELAY */) {
             if (jobInfo.getScheduleConf() == null) {
-                return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
+                return new ReturnT<String>(ReturnT.FAIL_CODE,
+                        (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
             }
             try {
                 int fixSecond = Integer.valueOf(jobInfo.getScheduleConf());
                 if (fixSecond < 1) {
-                    return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
+                    return new ReturnT<String>(ReturnT.FAIL_CODE,
+                            (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
                 }
             } catch (Exception e) {
-                return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
+                return new ReturnT<String>(ReturnT.FAIL_CODE,
+                        (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
             }
         }
 
         // valid advanced
         if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy") + I18nUtil.getString("system_unvalid")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("jobinfo_field_executorRouteStrategy") + I18nUtil.getString("system_unvalid")));
         }
         if (MisfireStrategyEnum.match(jobInfo.getMisfireStrategy(), null) == null) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("misfire_strategy") + I18nUtil.getString("system_unvalid")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("misfire_strategy") + I18nUtil.getString("system_unvalid")));
         }
         if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy") + I18nUtil.getString("system_unvalid")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("jobinfo_field_executorBlockStrategy") + I18nUtil.getString("system_unvalid")));
         }
 
         // 》ChildJobId valid
@@ -221,11 +248,13 @@ public class XxlJobServiceImpl implements XxlJobService {
                     XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.parseInt(childJobIdItem));
                     if (childJobInfo == null) {
                         return new ReturnT<String>(ReturnT.FAIL_CODE,
-                                MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId") + "({0})" + I18nUtil.getString("system_not_found")), childJobIdItem));
+                                MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId") + "({0})"
+                                        + I18nUtil.getString("system_not_found")), childJobIdItem));
                     }
                 } else {
                     return new ReturnT<String>(ReturnT.FAIL_CODE,
-                            MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId") + "({0})" + I18nUtil.getString("system_unvalid")), childJobIdItem));
+                            MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId") + "({0})"
+                                    + I18nUtil.getString("system_unvalid")), childJobIdItem));
                 }
             }
 
@@ -242,28 +271,34 @@ public class XxlJobServiceImpl implements XxlJobService {
         // group valid
         XxlJobGroup jobGroup = xxlJobGroupDao.load(jobInfo.getJobGroup());
         if (jobGroup == null) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_jobgroup") + I18nUtil.getString("system_unvalid")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("jobinfo_field_jobgroup") + I18nUtil.getString("system_unvalid")));
         }
 
         // stage job info
         XxlJobInfo exists_jobInfo = xxlJobInfoDao.loadById(jobInfo.getId());
         if (exists_jobInfo == null) {
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_id") + I18nUtil.getString("system_not_found")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("jobinfo_field_id") + I18nUtil.getString("system_not_found")));
         }
 
         // next trigger time (5s后生效,避开预读周期)
         long nextTriggerTime = exists_jobInfo.getTriggerNextTime();
-        boolean scheduleDataNotChanged = jobInfo.getScheduleType().equals(exists_jobInfo.getScheduleType()) && jobInfo.getScheduleConf().equals(exists_jobInfo.getScheduleConf());
+        boolean scheduleDataNotChanged = jobInfo.getScheduleType().equals(exists_jobInfo.getScheduleType())
+                && jobInfo.getScheduleConf().equals(exists_jobInfo.getScheduleConf());
         if (exists_jobInfo.getTriggerStatus() == 1 && !scheduleDataNotChanged) {
             try {
-                Date nextValidTime = JobScheduleHelper.generateNextValidTime(jobInfo, new Date(System.currentTimeMillis() + JobScheduleHelper.PRE_READ_MS));
+                Date nextValidTime = JobScheduleHelper.generateNextValidTime(jobInfo,
+                        new Date(System.currentTimeMillis() + JobScheduleHelper.PRE_READ_MS));
                 if (nextValidTime == null) {
-                    return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
+                    return new ReturnT<String>(ReturnT.FAIL_CODE,
+                            (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
                 }
                 nextTriggerTime = nextValidTime.getTime();
             } catch (Exception e) {
                 logger.error(e.getMessage(), e);
-                return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
+                return new ReturnT<String>(ReturnT.FAIL_CODE,
+                        (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
             }
         }
 
@@ -286,7 +321,6 @@ public class XxlJobServiceImpl implements XxlJobService {
         exists_jobInfo.setUpdateTime(new Date());
         xxlJobInfoDao.update(exists_jobInfo);
 
-
         return ReturnT.SUCCESS;
     }
 
@@ -316,14 +350,17 @@ public class XxlJobServiceImpl implements XxlJobService {
         // next trigger time (5s后生效,避开预读周期)
         long nextTriggerTime = 0;
         try {
-            Date nextValidTime = JobScheduleHelper.generateNextValidTime(xxlJobInfo, new Date(System.currentTimeMillis() + JobScheduleHelper.PRE_READ_MS));
+            Date nextValidTime = JobScheduleHelper.generateNextValidTime(xxlJobInfo,
+                    new Date(System.currentTimeMillis() + JobScheduleHelper.PRE_READ_MS));
             if (nextValidTime == null) {
-                return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
+                return new ReturnT<String>(ReturnT.FAIL_CODE,
+                        (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
             }
             nextTriggerTime = nextValidTime.getTime();
         } catch (Exception e) {
             logger.error(e.getMessage(), e);
-            return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
+            return new ReturnT<String>(ReturnT.FAIL_CODE,
+                    (I18nUtil.getString("schedule_type") + I18nUtil.getString("system_unvalid")));
         }
 
         xxlJobInfo.setTriggerStatus(1);
@@ -348,7 +385,6 @@ public class XxlJobServiceImpl implements XxlJobService {
         return ReturnT.SUCCESS;
     }
 
-
     @Override
     public ReturnT<String> trigger(XxlJobUser loginUser, int jobId, String executorParam, String addressList) {
         // permission
@@ -391,7 +427,8 @@ public class XxlJobServiceImpl implements XxlJobService {
         int jobLogSuccessCount = 0;
         XxlJobLogReport xxlJobLogReport = xxlJobLogReportDao.queryLogReportTotal();
         if (xxlJobLogReport != null) {
-            jobLogCount = xxlJobLogReport.getRunningCount() + xxlJobLogReport.getSucCount() + xxlJobLogReport.getFailCount();
+            jobLogCount = xxlJobLogReport.getRunningCount() + xxlJobLogReport.getSucCount()
+                    + xxlJobLogReport.getFailCount();
             jobLogSuccessCount = xxlJobLogReport.getSucCount();
         }
 

+ 1 - 1
SERVER/VberAdminPlusV3/vber-extend/vber-job-admin/src/main/resources/application-dev.yml

@@ -16,7 +16,7 @@ spring:
   datasource:
     type: com.zaxxer.hikari.HikariDataSource
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://192.168.0.104:3316/VberAdminPlusV3?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://192.168.0.104:3316/VberAdminPlusV3?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
     username: root
     password: 123456
     hikari:

+ 25 - 17
SERVER/VberAdminPlusV3/vber-modules/vber-generator/src/main/java/com/vber/generator/service/GenTableServiceImpl.java

@@ -19,7 +19,6 @@ import com.vber.common.core.utils.file.FileUtils;
 import com.vber.common.json.utils.JsonUtils;
 import com.vber.common.mybatis.core.page.PageQuery;
 import com.vber.common.mybatis.core.page.TableDataInfo;
-import com.vber.common.satoken.utils.LoginHelper;
 import com.vber.generator.config.GenConfig;
 import com.vber.generator.constant.GenConstants;
 import com.vber.generator.domain.GenMenu;
@@ -100,7 +99,6 @@ public class GenTableServiceImpl implements IGenTableService {
                 path += "/";
             }
         }
-        System.out.println("===>path: " + path);
         path += filePath;
         return path;
     }
@@ -142,9 +140,13 @@ public class GenTableServiceImpl implements IGenTableService {
         QueryWrapper<GenTable> wrapper = Wrappers.query();
         wrapper
                 .eq(StringUtils.isNotEmpty(genTable.getDataName()), "data_name", genTable.getDataName())
-                .like(StringUtils.isNotBlank(genTable.getTableName()), "lower(table_name)", StringUtils.lowerCase(genTable.getTableName()))
-                .like(StringUtils.isNotBlank(genTable.getTableComment()), "lower(table_comment)", StringUtils.lowerCase(genTable.getTableComment()))
-                .between(StringUtils.isNotEmpty(params.get("beginTime")) && StringUtils.isNotEmpty(params.get("endTime")),
+                .like(StringUtils.isNotBlank(genTable.getTableName()), "lower(table_name)",
+                        StringUtils.lowerCase(genTable.getTableName()))
+                .like(StringUtils.isNotBlank(genTable.getTableComment()), "lower(table_comment)",
+                        StringUtils.lowerCase(genTable.getTableComment()))
+                .between(
+                        StringUtils.isNotEmpty(params.get("beginTime"))
+                                && StringUtils.isNotEmpty(params.get("endTime")),
                         "create_time", params.get("beginTime"), params.get("endTime"))
                 .orderByDesc("update_time");
         return wrapper;
@@ -296,7 +298,7 @@ public class GenTableServiceImpl implements IGenTableService {
     @DSTransactional
     @Override
     public void importGenTable(List<GenTable> tableList, String dataName) {
-        Long operId = LoginHelper.getUserId();
+        // Long operId = LoginHelper.getUserId();
         try {
             for (GenTable table : tableList) {
                 String tableName = table.getTableName();
@@ -372,7 +374,7 @@ public class GenTableServiceImpl implements IGenTableService {
             Template tpl = Velocity.getTemplate(template, Constants.UTF8);
             tpl.merge(context, sw);
             dataMap.put(template, sw.toString());
-            String path = getGenPath(table, template);
+            getGenPath(table, template);
         }
         return dataMap;
     }
@@ -495,27 +497,33 @@ public class GenTableServiceImpl implements IGenTableService {
 
     private void createMenuBtn(Long mId, GenTable table) {
         String btnName = table.getFunctionName();
-        GenMenu query = buildMenuBtn(mId, "查询" + btnName, table.getModuleName() + ":" + table.getBusinessName() + ":query", "eye", "", "");
+        GenMenu query = buildMenuBtn(mId, "查询" + btnName,
+                table.getModuleName() + ":" + table.getBusinessName() + ":query", "eye", "", "");
         if (genMenuMapper.insert(query) <= 0) {
             throw new ServiceException("创建查询按钮失败");
         }
-        GenMenu add = buildMenuBtn(mId, "新增" + btnName, table.getModuleName() + ":" + table.getBusinessName() + ":add", "plus-square", "btn btn-light-primary", "handleCreate");
+        GenMenu add = buildMenuBtn(mId, "新增" + btnName, table.getModuleName() + ":" + table.getBusinessName() + ":add",
+                "plus-square", "btn btn-light-primary", "handleCreate");
         if (genMenuMapper.insert(add) <= 0) {
             throw new ServiceException("创建新增按钮失败。");
         }
-        GenMenu update = buildMenuBtn(mId, "修改" + btnName, table.getModuleName() + ":" + table.getBusinessName() + ":edit", "pencil-square", "btn btn-light-success", "handleUpdate@1");
+        GenMenu update = buildMenuBtn(mId, "修改" + btnName,
+                table.getModuleName() + ":" + table.getBusinessName() + ":edit", "pencil-square",
+                "btn btn-light-success", "handleUpdate@1");
         if (genMenuMapper.insert(update) <= 0) {
             throw new ServiceException("创建新增按钮失败。");
         }
-        GenMenu remove = buildMenuBtn(mId, "删除" + btnName, table.getModuleName() + ":" + table.getBusinessName() + ":remove", "dash-square", "btn btn-light-danger", "handleDelete@0");
+        GenMenu remove = buildMenuBtn(mId, "删除" + btnName,
+                table.getModuleName() + ":" + table.getBusinessName() + ":remove", "dash-square",
+                "btn btn-light-danger", "handleDelete@0");
         if (genMenuMapper.insert(remove) <= 0) {
             throw new ServiceException("创建新增按钮失败。");
         }
 
-
     }
 
-    private GenMenu buildMenuBtn(Long mId, String btnName, String perms, String icon, String btnClass, String btnScript) {
+    private GenMenu buildMenuBtn(Long mId, String btnName, String perms, String icon, String btnClass,
+                                 String btnScript) {
         GenMenu menu = new GenMenu();
         menu.setParentId(mId);
         menu.setMenuName(btnName);
@@ -535,7 +543,6 @@ public class GenTableServiceImpl implements IGenTableService {
         return menu;
     }
 
-
     /**
      * 同步数据库
      *
@@ -546,7 +553,8 @@ public class GenTableServiceImpl implements IGenTableService {
     public void syncDb(Long tableId) {
         GenTable table = baseMapper.selectGenTableById(tableId);
         List<GenTableColumn> tableColumns = table.getColumns();
-        Map<String, GenTableColumn> tableColumnMap = StreamUtils.toIdentityMap(tableColumns, GenTableColumn::getColumnName);
+        Map<String, GenTableColumn> tableColumnMap = StreamUtils.toIdentityMap(tableColumns,
+                GenTableColumn::getColumnName);
 
         List<GenTableColumn> dbTableColumns = selectDbTableColumnsByName(table.getTableName(), table.getDataName());
         if (CollUtil.isEmpty(dbTableColumns)) {
@@ -578,7 +586,8 @@ public class GenTableServiceImpl implements IGenTableService {
         if (CollUtil.isNotEmpty(saveColumns)) {
             genTableColumnMapper.insertOrUpdateBatch(saveColumns);
         }
-        List<GenTableColumn> delColumns = StreamUtils.filter(tableColumns, column -> !dbTableColumnNames.contains(column.getColumnName()));
+        List<GenTableColumn> delColumns = StreamUtils.filter(tableColumns,
+                column -> !dbTableColumnNames.contains(column.getColumnName()));
         if (CollUtil.isNotEmpty(delColumns)) {
             List<Long> ids = StreamUtils.toList(delColumns, GenTableColumn::getColumnId);
             if (CollUtil.isNotEmpty(ids)) {
@@ -703,4 +712,3 @@ public class GenTableServiceImpl implements IGenTableService {
         }
     }
 }
-

+ 0 - 5
SERVER/VberAdminPlusV3/vber-modules/vber-generator/src/main/resources/vm/java/bo.java.vm

@@ -1,11 +1,6 @@
 package ${packageName}.domain.bo;
 
 import ${packageName}.domain.${ClassName};
-#if(($javaField.indexOf("Time")>0&&$javaField.indexOf(
-    "Time")==${javaField.length()} - 4)||($javaField.indexOf("Date")>0&&$javaField.indexOf(
-    "Date")==${javaField.length()} - 4))
-import com.fasterxml.jackson.annotation.JsonFormat;
-#end
 import com.vber.common.mybatis.core.domain.BaseEntity;
 import com.vber.common.core.validate.AddGroup;
 import com.vber.common.core.validate.EditGroup;

+ 2 - 5
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysClientController.java

@@ -27,7 +27,6 @@ import java.util.List;
  * 客户端管理
  *
  * @author Iwb
- * @date 2023-06-18
  */
 @Validated
 @RequiredArgsConstructor
@@ -64,8 +63,7 @@ public class SysClientController extends BaseController {
      */
     @SaCheckPermission("system:client:query")
     @GetMapping("/{id}")
-    public R<SysClientVo> getInfo(@NotNull(message = "主键不能为空")
-                                  @PathVariable Long id) {
+    public R<SysClientVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) {
         return R.ok(sysClientService.queryById(id));
     }
 
@@ -109,8 +107,7 @@ public class SysClientController extends BaseController {
     @SaCheckPermission("system:client:remove")
     @Log(title = "客户端管理", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
-    public R<Void> remove(@NotEmpty(message = "主键不能为空")
-                          @PathVariable Long[] ids) {
+    public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) {
         return toAjax(sysClientService.deleteWithValidByIds(List.of(ids), true));
     }
 }

+ 0 - 2
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysMenuController.java

@@ -41,7 +41,6 @@ public class SysMenuController extends BaseController {
     private final ISysMenuService menuService;
     private final TenantProperties tenantProperties;
 
-
     /**
      * 获取路由信息
      *
@@ -221,5 +220,4 @@ public class SysMenuController extends BaseController {
     public record MenuTreeSelectVo(List<Long> checkedKeys, List<Tree<Long>> menus) {
     }
 
-
 }

+ 1 - 4
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysNoticeController.java

@@ -2,7 +2,6 @@ package com.vber.system.controller.system;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.vber.common.core.domain.R;
-import com.vber.common.core.service.DictService;
 import com.vber.common.idempotent.annotation.RepeatSubmit;
 import com.vber.common.log.annotation.Log;
 import com.vber.common.log.enums.BusinessType;
@@ -34,7 +33,6 @@ import java.util.Optional;
 public class SysNoticeController extends BaseController {
 
     private final ISysNoticeService noticeService;
-    private final DictService dictService;
 
     /**
      * 获取通知公告列表
@@ -71,7 +69,6 @@ public class SysNoticeController extends BaseController {
         return R.ok();
     }
 
-
     /**
      * 修改通知公告
      */
@@ -138,7 +135,7 @@ public class SysNoticeController extends BaseController {
         if (list.size() > count) {
             return R.ok(list.subList(0, count));
         }
-        //添加其他类型的消息
+        // 添加其他类型的消息
 
         return R.ok(list);
     }

+ 2 - 4
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysOssConfigController.java

@@ -53,8 +53,7 @@ public class SysOssConfigController extends BaseController {
      */
     @SaCheckPermission("system:ossConfig")
     @GetMapping("/{ossConfigId}")
-    public R<SysOssConfigVo> getInfo(@NotNull(message = "主键不能为空")
-                                     @PathVariable Long ossConfigId) {
+    public R<SysOssConfigVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long ossConfigId) {
         return R.ok(ossConfigService.queryById(ossConfigId));
     }
 
@@ -88,8 +87,7 @@ public class SysOssConfigController extends BaseController {
     @SaCheckPermission("system:ossConfig:remove")
     @Log(title = "对象存储配置", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ossConfigIds}")
-    public R<Void> remove(@NotEmpty(message = "主键不能为空")
-                          @PathVariable Long[] ossConfigIds) {
+    public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ossConfigIds) {
         return toAjax(ossConfigService.deleteWithValidByIds(List.of(ossConfigIds), true));
     }
 

+ 0 - 1
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysOssController.java

@@ -1,6 +1,5 @@
 package com.vber.system.controller.system;
 
-
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.util.ObjectUtil;
 import com.vber.common.core.domain.R;

+ 2 - 2
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysPostController.java

@@ -123,7 +123,8 @@ public class SysPostController extends BaseController {
      */
     @SaCheckPermission("system:post:query")
     @GetMapping("/optionSelect")
-    public R<List<SysPostVo>> optionSelect(@RequestParam(required = false) Long[] postIds, @RequestParam(required = false) Long orgId) {
+    public R<List<SysPostVo>> optionSelect(@RequestParam(required = false) Long[] postIds,
+                                           @RequestParam(required = false) Long orgId) {
         List<SysPostVo> list = new ArrayList<>();
         if (ObjectUtil.isNotNull(orgId)) {
             SysPostBo post = new SysPostBo();
@@ -135,7 +136,6 @@ public class SysPostController extends BaseController {
         return R.ok(list);
     }
 
-
     /**
      * 获取组织机构树列表
      */

+ 5 - 3
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysProfileController.java

@@ -1,8 +1,8 @@
 package com.vber.system.controller.system;
 
-import cn.dev33.satoken.secure.BCrypt;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.crypto.digest.BCrypt;
 import com.vber.common.core.domain.R;
 import com.vber.common.core.utils.StringUtils;
 import com.vber.common.core.utils.file.MimeTypeUtils;
@@ -99,7 +99,8 @@ public class SysProfileController extends BaseController {
             return R.fail("新密码不能与旧密码相同");
         }
 
-        int rows = DataPermissionHelper.ignore(() -> userService.resetUserPwd(user.getUserId(), BCrypt.hashpw(bo.getNewPassword())));
+        int rows = DataPermissionHelper
+                .ignore(() -> userService.resetUserPwd(user.getUserId(), BCrypt.hashpw(bo.getNewPassword())));
         if (rows > 0) {
             return R.ok();
         }
@@ -122,7 +123,8 @@ public class SysProfileController extends BaseController {
             }
             SysOssVo oss = ossService.upload(avatarfile, "avatar");
             String avatar = oss.getUrl();
-            boolean updateSuccess = DataPermissionHelper.ignore(() -> userService.updateUserAvatar(LoginHelper.getUserId(), oss.getOssId()));
+            boolean updateSuccess = DataPermissionHelper
+                    .ignore(() -> userService.updateUserAvatar(LoginHelper.getUserId(), oss.getOssId()));
             if (updateSuccess) {
                 return R.ok(new AvatarVo(avatar));
             }

+ 12 - 6
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/system/SysUserController.java

@@ -1,10 +1,10 @@
 package com.vber.system.controller.system;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import cn.dev33.satoken.secure.BCrypt;
 import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.crypto.digest.BCrypt;
 import com.vber.common.core.constant.ConfigKeyConstants;
 import com.vber.common.core.constant.SystemConstants;
 import com.vber.common.core.domain.R;
@@ -98,7 +98,8 @@ public class SysUserController extends BaseController {
     @SaCheckPermission("system:user:import")
     @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
     public R<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
-        ExcelResult<SysUserImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, new SysUserImportListener(updateSupport));
+        ExcelResult<SysUserImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class,
+                new SysUserImportListener(updateSupport));
         return R.ok(result.getAnalysis());
     }
 
@@ -158,7 +159,8 @@ public class SysUserController extends BaseController {
         SysRoleBo roleBo = new SysRoleBo();
         roleBo.setStatus(SystemConstants.ROLE_NORMAL);
         List<SysRoleVo> roles = roleService.selectRoleList(roleBo);
-        userInfoVo.setRoles(LoginHelper.isSuperAdmin(userId) || LoginHelper.isSuperSystem(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));
+        userInfoVo.setRoles(LoginHelper.isSuperAdmin(userId) || LoginHelper.isSuperSystem(userId) ? roles
+                : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));
         return R.ok(userInfoVo);
     }
 
@@ -183,7 +185,9 @@ public class SysUserController extends BaseController {
                 return R.fail("当前租户下用户名额不足,请联系管理员");
             }
         }
-        String password = StringUtils.isBlank(user.getPassword()) ? SpringUtils.getBean(ConfigService.class).getConfigValue(ConfigKeyConstants.SYS_USER_INIT_PASSWORD) : user.getPassword();
+        String password = StringUtils.isBlank(user.getPassword())
+                ? SpringUtils.getBean(ConfigService.class).getConfigValue(ConfigKeyConstants.SYS_USER_INIT_PASSWORD)
+                : user.getPassword();
         user.setPassword(BCrypt.hashpw(password));
         return toAjax(userService.insertUser(user));
     }
@@ -232,7 +236,8 @@ public class SysUserController extends BaseController {
      */
     @SaCheckPermission("system:user:query")
     @GetMapping("/optionSelect")
-    public R<List<SysUserVo>> optionSelect(@RequestParam(required = false) Long[] userIds, @RequestParam(required = false) Long orgId) {
+    public R<List<SysUserVo>> optionSelect(@RequestParam(required = false) Long[] userIds,
+                                           @RequestParam(required = false) Long orgId) {
         return R.ok(userService.selectUserByIds(ArrayUtil.isEmpty(userIds) ? null : List.of(userIds), orgId));
     }
 
@@ -276,7 +281,8 @@ public class SysUserController extends BaseController {
         List<SysRoleVo> roles = roleService.selectRolesByUserId(userId);
         SysUserInfoVo userInfoVo = new SysUserInfoVo();
         userInfoVo.setUser(user);
-        userInfoVo.setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));
+        userInfoVo
+                .setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));
         return R.ok(userInfoVo);
     }
 

+ 2 - 1
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/controller/test/ShardingTestController.java

@@ -65,7 +65,8 @@ public class ShardingTestController {
     @SaIgnore
     @GetMapping("user/{userId}/{birthday}")
     public R<Void> auUser(@PathVariable Long userId, @PathVariable Long birthday) {
-        TestUser testuser = testUserMapper.selectOne(new LambdaQueryWrapper<TestUser>().eq(TestUser::getId, userId).eq(TestUser::getBirthday, birthday));
+        TestUser testuser = testUserMapper.selectOne(
+                new LambdaQueryWrapper<TestUser>().eq(TestUser::getId, userId).eq(TestUser::getBirthday, birthday));
         if (testuser == null) {
             testuser = new TestUser();
             testuser.setBirthday(birthday);

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

@@ -76,5 +76,4 @@ public class SysClientBo extends BaseEntity {
      */
     private String status;
 
-
 }

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

@@ -55,5 +55,4 @@ public class SysConfigBo extends BaseEntity {
      */
     private String remark;
 
-
 }

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

@@ -46,5 +46,4 @@ public class SysDictTypeBo extends BaseEntity {
      */
     private String remark;
 
-
 }

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

@@ -83,5 +83,4 @@ public class SysLogininforBo {
      */
     private Map<String, Object> params = new HashMap<>();
 
-
 }

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

@@ -107,5 +107,4 @@ public class SysMenuBo extends BaseEntity {
      */
     private String remark;
 
-
 }

+ 0 - 2
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/bo/SysOssBo.java

@@ -41,13 +41,11 @@ public class SysOssBo extends BaseEntity {
      */
     private String url;
 
-
     /**
      * 扩展字段
      */
     private String ext1;
 
-
     /**
      * 服务商
      */

+ 0 - 3
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/domain/bo/SysPostBo.java

@@ -25,7 +25,6 @@ public class SysPostBo extends BaseEntity {
      */
     private Long postId;
 
-
     /**
      * 组织机构id(单组织机构)
      */
@@ -37,7 +36,6 @@ public class SysPostBo extends BaseEntity {
      */
     private Long belongOrgId;
 
-
     /**
      * 岗位编码
      */
@@ -74,5 +72,4 @@ public class SysPostBo extends BaseEntity {
      */
     private String remark;
 
-
 }

+ 21 - 9
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/impl/SysLogininforServiceImpl.java

@@ -1,6 +1,5 @@
 package com.vber.system.service.impl;
 
-import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.http.useragent.UserAgent;
 import cn.hutool.http.useragent.UserAgentUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -81,9 +80,15 @@ public class SysLogininforServiceImpl implements ISysLogininforService {
         SysLogininforBo logininfor = new SysLogininforBo();
         logininfor.setTenantId(logininforEvent.getTenantId());
         logininfor.setUserName(logininforEvent.getUsername());
-        if (ObjectUtil.isNotNull(client)) {
-            logininfor.setClientKey(client.getClientKey());
-            logininfor.setDeviceType(client.getDeviceType());
+        if (client != null) {
+            String clientKey = client.getClientKey();
+            String deviceType = client.getDeviceType();
+            if (clientKey != null) {
+                logininfor.setClientKey(clientKey);
+            }
+            if (deviceType != null) {
+                logininfor.setDeviceType(deviceType);
+            }
         }
         logininfor.setIpaddr(ip);
         logininfor.setLoginLocation(address);
@@ -91,7 +96,8 @@ public class SysLogininforServiceImpl implements ISysLogininforService {
         logininfor.setOs(os);
         logininfor.setMsg(logininforEvent.getMessage());
         // 日志状态
-        if (StringUtils.equalsAny(logininforEvent.getStatus(), Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) {
+        if (StringUtils.equalsAny(logininforEvent.getStatus(), Constants.LOGIN_SUCCESS, Constants.LOGOUT,
+                Constants.REGISTER)) {
             logininfor.setStatus(Constants.SUCCESS);
         } else if (Constants.LOGIN_FAIL.equals(logininforEvent.getStatus())) {
             logininfor.setStatus(Constants.FAIL);
@@ -120,8 +126,11 @@ public class SysLogininforServiceImpl implements ISysLogininforService {
         LambdaQueryWrapper<SysLogininfor> lqw = new LambdaQueryWrapper<SysLogininfor>()
                 .like(StringUtils.isNotBlank(logininfor.getIpaddr()), SysLogininfor::getIpaddr, logininfor.getIpaddr())
                 .eq(StringUtils.isNotBlank(logininfor.getStatus()), SysLogininfor::getStatus, logininfor.getStatus())
-                .like(StringUtils.isNotBlank(logininfor.getUserName()), SysLogininfor::getUserName, logininfor.getUserName())
-                .between(StringUtils.isNotEmpty(params.get("beginTime")) && StringUtils.isNotEmpty(params.get("endTime")),
+                .like(StringUtils.isNotBlank(logininfor.getUserName()), SysLogininfor::getUserName,
+                        logininfor.getUserName())
+                .between(
+                        StringUtils.isNotEmpty(params.get("beginTime"))
+                                && StringUtils.isNotEmpty(params.get("endTime")),
                         SysLogininfor::getLoginTime, params.get("beginTime"), params.get("endTime"));
         if (StringUtils.isBlank(pageQuery.getOrderByColumn())) {
             lqw.orderByDesc(SysLogininfor::getInfoId);
@@ -154,8 +163,11 @@ public class SysLogininforServiceImpl implements ISysLogininforService {
         return baseMapper.selectVoList(new LambdaQueryWrapper<SysLogininfor>()
                 .like(StringUtils.isNotBlank(logininfor.getIpaddr()), SysLogininfor::getIpaddr, logininfor.getIpaddr())
                 .eq(StringUtils.isNotBlank(logininfor.getStatus()), SysLogininfor::getStatus, logininfor.getStatus())
-                .like(StringUtils.isNotBlank(logininfor.getUserName()), SysLogininfor::getUserName, logininfor.getUserName())
-                .between(StringUtils.isNotEmpty(params.get("beginTime")) && StringUtils.isNotEmpty(params.get("endTime")),
+                .like(StringUtils.isNotBlank(logininfor.getUserName()), SysLogininfor::getUserName,
+                        logininfor.getUserName())
+                .between(
+                        StringUtils.isNotEmpty(params.get("beginTime"))
+                                && StringUtils.isNotEmpty(params.get("endTime")),
                         SysLogininfor::getLoginTime, params.get("beginTime"), params.get("endTime"))
                 .orderByDesc(SysLogininfor::getInfoId));
     }

+ 13 - 14
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/impl/SysNoticeServiceImpl.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.vber.common.core.config.SysMessageConfig;
 import com.vber.common.core.service.NoticeService;
 import com.vber.common.core.utils.MapstructUtils;
 import com.vber.common.core.utils.ObjectUtils;
@@ -50,7 +49,6 @@ public class SysNoticeServiceImpl implements ISysNoticeService, NoticeService {
     private final SysNoticeMapper baseMapper;
     private final SysNoticeStatusMapper noticeStatusMapper;
     private final SysUserMapper userMapper;
-    private final SysMessageConfig sysMessageConfig;
 
     /**
      * 分页查询通知公告列表
@@ -94,7 +92,8 @@ public class SysNoticeServiceImpl implements ISysNoticeService, NoticeService {
         lqw.like(StringUtils.isNotBlank(bo.getNoticeTitle()), SysNotice::getNoticeTitle, bo.getNoticeTitle());
         lqw.eq(StringUtils.isNotBlank(bo.getNoticeType()), SysNotice::getNoticeType, bo.getNoticeType());
         if (StringUtils.isNotBlank(bo.getCreateByName())) {
-            SysUserVo sysUser = userMapper.selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, bo.getCreateByName()));
+            SysUserVo sysUser = userMapper
+                    .selectVoOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, bo.getCreateByName()));
             lqw.eq(SysNotice::getCreateBy, ObjectUtils.notNullGetter(sysUser, SysUserVo::getUserId));
         }
         lqw.orderByAsc(SysNotice::getNoticeId);
@@ -119,7 +118,6 @@ public class SysNoticeServiceImpl implements ISysNoticeService, NoticeService {
         }
         return rows;
 
-
     }
 
     /**
@@ -193,12 +191,10 @@ public class SysNoticeServiceImpl implements ISysNoticeService, NoticeService {
             sysNoticeStatus.setStatus("1");
             return noticeStatusMapper.insert(sysNoticeStatus);
         } else {
-            return noticeStatusMapper.
-                    update(new LambdaUpdateWrapper<SysNoticeStatus>()
-                            .eq(SysNoticeStatus::getUserId, userId)
-                            .eq(SysNoticeStatus::getMessageId, messageId).
-                            eq(SysNoticeStatus::getMessageType, messageType)
-                            .set(SysNoticeStatus::getStatus, "1"));
+            return noticeStatusMapper.update(new LambdaUpdateWrapper<SysNoticeStatus>()
+                    .eq(SysNoticeStatus::getUserId, userId)
+                    .eq(SysNoticeStatus::getMessageId, messageId).eq(SysNoticeStatus::getMessageType, messageType)
+                    .set(SysNoticeStatus::getStatus, "1"));
         }
     }
 
@@ -214,9 +210,11 @@ public class SysNoticeServiceImpl implements ISysNoticeService, NoticeService {
         List<SysNotice> list = baseMapper.selectList(new LambdaQueryWrapper<SysNotice>()
                 .eq(SysNotice::getStatus, "0")
                 .apply("status = '0' AND (" +
-                        "notice_type='1' AND notice_id  IN (SELECT message_id FROM sys_notice_status WHERE user_id=" + userId + " AND status='0') " +
+                        "notice_type='1' AND notice_id  IN (SELECT message_id FROM sys_notice_status WHERE user_id="
+                        + userId + " AND status='0') " +
                         "or " +
-                        "notice_type='2' AND notice_id NOt IN (SELECT message_id FROM sys_notice_status WHERE user_id=" + userId + " AND status!='0')" +
+                        "notice_type='2' AND notice_id NOt IN (SELECT message_id FROM sys_notice_status WHERE user_id="
+                        + userId + " AND status!='0')" +
                         ")")
                 .orderByDesc(SysNotice::getCreateTime));
         List<SysMessageVo> msgList = new ArrayList<>();
@@ -278,7 +276,8 @@ public class SysNoticeServiceImpl implements ISysNoticeService, NoticeService {
         msg.setMessageTime(notice.getCreateTime());
         if (notice.getNoticeType().equals("1")) {
             try {
-                NoticeMessageDetailDto detail = JsonUtils.parseObject(notice.getNoticeContent(), NoticeMessageDetailDto.class);
+                NoticeMessageDetailDto detail = JsonUtils.parseObject(notice.getNoticeContent(),
+                        NoticeMessageDetailDto.class);
                 if (detail != null) {
                     msg.setBusinessType(detail.getBusinessType());
                     msg.setData(detail.getData());
@@ -330,7 +329,7 @@ public class SysNoticeServiceImpl implements ISysNoticeService, NoticeService {
                 newStatus.setStatus("1"); // 设置为已读
                 noticeStatusMapper.insert(newStatus);
                 count++;
-            } else if (!"1" .equals(status.getStatus())) {
+            } else if (!"1".equals(status.getStatus())) {
                 // 如果有记录但未读,则更新为已读
                 count += noticeStatusMapper.update(new LambdaUpdateWrapper<SysNoticeStatus>()
                         .eq(SysNoticeStatus::getUserId, userId)

+ 16 - 8
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/impl/SysOssServiceImpl.java

@@ -159,7 +159,9 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
         lqw.like(StringUtils.isNotBlank(bo.getOriginalName()), SysOss::getOriginalName, bo.getOriginalName());
         lqw.eq(StringUtils.isNotBlank(bo.getFileSuffix()), SysOss::getFileSuffix, bo.getFileSuffix());
         lqw.eq(StringUtils.isNotBlank(bo.getUrl()), SysOss::getUrl, bo.getUrl());
-        lqw.between(StringUtils.isNotEmpty(params.get("beginCreateTime")) && StringUtils.isNotEmpty(params.get("endCreateTime")),
+        lqw.between(
+                StringUtils.isNotEmpty(params.get("beginCreateTime"))
+                        && StringUtils.isNotEmpty(params.get("endCreateTime")),
                 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());
@@ -255,7 +257,8 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
         if (StringUtils.isBlank(originalFileName)) {
             throw new ServiceException("文件名不能为空");
         }
-        String suffix = StringUtils.substring(originalFileName, originalFileName.lastIndexOf(".") + 1, originalFileName.length());
+        String suffix = StringUtils.substring(originalFileName, originalFileName.lastIndexOf(".") + 1,
+                originalFileName.length());
         OssClient storage = OssFactory.instance();
         UploadResult uploadResult;
         try {
@@ -287,7 +290,8 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
         }
         OssClient storage = OssFactory.instance();
         if (!storage.isLocal()) {
-            suffix = StringUtils.substring(originalFileName, originalFileName.lastIndexOf(".") + 1, originalFileName.length());
+            suffix = StringUtils.substring(originalFileName, originalFileName.lastIndexOf(".") + 1,
+                    originalFileName.length());
         }
         try {
             uploadResult = storage.uploadSuffix(file.getBytes(), suffix, FileUtils.getMimeType(originalFileName));
@@ -311,7 +315,8 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
     @Override
     public SysOssVo upload(File file) {
         String originalFileName = file.getName();
-        String suffix = StringUtils.substring(originalFileName, originalFileName.lastIndexOf(".") + 1, originalFileName.length());
+        String suffix = StringUtils.substring(originalFileName, originalFileName.lastIndexOf(".") + 1,
+                originalFileName.length());
         OssClient storage = OssFactory.instance();
         UploadResult uploadResult = storage.uploadSuffix(file, suffix);
         SysOssExt ext1 = new SysOssExt();
@@ -332,7 +337,8 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
         String originalFileName = file.getName();
         OssClient storage = OssFactory.instance();
         if (!storage.isLocal()) {
-            suffix = StringUtils.substring(originalFileName, originalFileName.lastIndexOf(".") + 1, originalFileName.length());
+            suffix = StringUtils.substring(originalFileName, originalFileName.lastIndexOf(".") + 1,
+                    originalFileName.length());
         }
         UploadResult uploadResult = storage.uploadSuffix(file, suffix);
         SysOssExt ext1 = new SysOssExt();
@@ -342,7 +348,8 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
     }
 
     @NotNull
-    private SysOssVo buildResultEntity(String originalFileName, String suffix, String configKey, UploadResult uploadResult, SysOssExt ext1) {
+    private SysOssVo buildResultEntity(String originalFileName, String suffix, String configKey,
+                                       UploadResult uploadResult, SysOssExt ext1) {
         SysOss oss = new SysOss();
         oss.setUrl(uploadResult.getUrl());
         oss.setFileSuffix(suffix);
@@ -368,11 +375,12 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
         if (isValid) {
             // 做一些业务上的校验,判断是否需要校验
         }
-        List<SysOss> list = baseMapper.selectBatchIds(ids);
+        List<SysOss> list = baseMapper.selectByIds(ids);
         for (SysOss sysOss : list) {
             String service = sysOss.getService();
             OssClient storage = OssFactory.instance(service);
-            String path = storage.isLocal() ? sysOss.getUrl() + OssClient.LOCAL_URL_SPLIT + sysOss.getFileName() : sysOss.getUrl();
+            String path = storage.isLocal() ? sysOss.getUrl() + OssClient.LOCAL_URL_SPLIT + sysOss.getFileName()
+                    : sysOss.getUrl();
             storage.delete(path);
         }
         return baseMapper.deleteByIds(ids) > 0;

+ 5 - 4
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/impl/SysRoleServiceImpl.java

@@ -56,7 +56,6 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
     private final SysUserRoleMapper userRoleMapper;
     private final SysRoleOrgMapper roleOrgMapper;
 
-
     /**
      * 分页查询角色列表
      *
@@ -313,7 +312,10 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
     @Transactional(rollbackFor = Exception.class)
     public int updateRole(SysRoleBo bo) {
         SysRole role = MapstructUtils.convert(bo, SysRole.class);
-        if (SystemConstants.ROLE_DISABLE.equals(role != null ? role.getStatus() : null) && this.countUserRoleByRoleId(role.getRoleId()) > 0) {
+        if (role == null) {
+            throw new ServiceException("角色信息转换失败!");
+        }
+        if (SystemConstants.ROLE_DISABLE.equals(role.getStatus()) && this.countUserRoleByRoleId(role.getRoleId()) > 0) {
             throw new ServiceException("角色已分配,不能禁用!");
         }
         // 修改角色信息
@@ -607,8 +609,7 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService {
         List<SysRole> list = baseMapper.selectList(
                 new LambdaQueryWrapper<SysRole>()
                         .select(SysRole::getRoleId, SysRole::getRoleName)
-                        .in(SysRole::getRoleId, roleIds)
-        );
+                        .in(SysRole::getRoleId, roleIds));
         return StreamUtils.toMap(list, SysRole::getRoleId, SysRole::getRoleName);
     }
 }

+ 0 - 5
SERVER/VberAdminPlusV3/vber-modules/vber-system/src/main/java/com/vber/system/service/impl/SysSocialServiceImpl.java

@@ -26,7 +26,6 @@ public class SysSocialServiceImpl implements ISysSocialService {
 
     private final SysSocialMapper baseMapper;
 
-
     /**
      * 查询社会化关系
      */
@@ -52,7 +51,6 @@ public class SysSocialServiceImpl implements ISysSocialService {
         return baseMapper.selectVoList(new LambdaQueryWrapper<SysSocial>().eq(SysSocial::getUserId, userId));
     }
 
-
     /**
      * 新增社会化关系
      */
@@ -85,10 +83,8 @@ public class SysSocialServiceImpl implements ISysSocialService {
      * 保存前的数据校验
      */
     private void validEntityBeforeSave(SysSocial entity) {
-        //TODO 做一些数据校验,如唯一约束
     }
 
-
     /**
      * 删除社会化关系
      */
@@ -97,7 +93,6 @@ public class SysSocialServiceImpl implements ISysSocialService {
         return baseMapper.deleteById(id) > 0;
     }
 
-
     /**
      * 根据 authId 查询用户信息
      *

Some files were not shown because too many files changed in this diff