Răsfoiți Sursa

bump: 发布1.10.0(单模块版)

details see: https://helio.uncarbon.cc/#/i18n/zh-CN/appendix/change-log
Uncarbon 2 ani în urmă
părinte
comite
8ceb6bdbf9
100 a modificat fișierele cu 593 adăugiri și 421 ștergeri
  1. 47 49
      README.md
  2. 2 2
      attachments/db/PostgreSQL/helio_boot.sql
  3. 4 0
      attachments/db/PostgreSQL/upgrade/1.9.0_to_1.10.0.sql
  4. 8 8
      pom.xml
  5. 14 7
      src/main/java/cc/uncarbon/aspect/SysLogAspect.java
  6. 2 3
      src/main/java/cc/uncarbon/config/AsyncConfiguration.java
  7. 1 1
      src/main/java/cc/uncarbon/config/CustomInterceptorConfiguration.java
  8. 3 3
      src/main/java/cc/uncarbon/helper/CaptchaHelper.java
  9. 1 1
      src/main/java/cc/uncarbon/interceptor/AdminSaTokenParseInterceptor.java
  10. 4 2
      src/main/java/cc/uncarbon/module/adminapi/constant/AdminApiConstant.java
  11. 172 0
      src/main/java/cc/uncarbon/module/adminapi/model/response/SelectOptionItemVO.java
  12. 1 1
      src/main/java/cc/uncarbon/module/adminapi/util/AdminStpUtil.java
  13. 5 5
      src/main/java/cc/uncarbon/module/adminapi/web/auth/AdminAuthController.java
  14. 75 0
      src/main/java/cc/uncarbon/module/adminapi/web/common/AdminSelectOptionsController.java
  15. 4 4
      src/main/java/cc/uncarbon/module/adminapi/web/oss/AdminOssFileInfoController.java
  16. 5 5
      src/main/java/cc/uncarbon/module/adminapi/web/oss/AdminOssUploadDownloadController.java
  17. 31 11
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysDataDictController.java
  18. 6 6
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysDeptController.java
  19. 3 3
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysLogController.java
  20. 6 6
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysMenuController.java
  21. 6 6
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysParamController.java
  22. 7 7
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysRoleController.java
  23. 6 6
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysTenantController.java
  24. 25 13
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysUserController.java
  25. 4 2
      src/main/java/cc/uncarbon/module/appapi/constant/AppApiConstant.java
  26. 1 1
      src/main/java/cc/uncarbon/module/appapi/web/AppAuthController.java
  27. 1 1
      src/main/java/cc/uncarbon/module/oss/config/FileStorageConfiguration.java
  28. 4 2
      src/main/java/cc/uncarbon/module/oss/constant/OssConstant.java
  29. 0 2
      src/main/java/cc/uncarbon/module/oss/entity/OssFileInfoEntity.java
  30. 0 2
      src/main/java/cc/uncarbon/module/oss/facade/OssUploadDownloadFacade.java
  31. 5 7
      src/main/java/cc/uncarbon/module/oss/facade/impl/OssUploadDownloadFacadeImpl.java
  32. 2 4
      src/main/java/cc/uncarbon/module/oss/mapper/OssFileInfoMapper.java
  33. 0 2
      src/main/java/cc/uncarbon/module/oss/model/request/AdminInsertOrUpdateOssFileInfoDTO.java
  34. 0 2
      src/main/java/cc/uncarbon/module/oss/model/request/AdminListOssFileInfoDTO.java
  35. 0 2
      src/main/java/cc/uncarbon/module/oss/model/request/UploadFileAttributeDTO.java
  36. 0 2
      src/main/java/cc/uncarbon/module/oss/model/response/OssFileDownloadReplyBO.java
  37. 0 2
      src/main/java/cc/uncarbon/module/oss/model/response/OssFileInfoBO.java
  38. 0 2
      src/main/java/cc/uncarbon/module/oss/model/response/OssFileUploadResultVO.java
  39. 15 17
      src/main/java/cc/uncarbon/module/oss/service/OssFileInfoService.java
  40. 7 12
      src/main/java/cc/uncarbon/module/sys/constant/SysConstant.java
  41. 0 2
      src/main/java/cc/uncarbon/module/sys/entity/SysDataDictEntity.java
  42. 0 1
      src/main/java/cc/uncarbon/module/sys/entity/SysDeptEntity.java
  43. 0 1
      src/main/java/cc/uncarbon/module/sys/entity/SysMenuEntity.java
  44. 0 1
      src/main/java/cc/uncarbon/module/sys/entity/SysParamEntity.java
  45. 0 1
      src/main/java/cc/uncarbon/module/sys/entity/SysRoleEntity.java
  46. 0 1
      src/main/java/cc/uncarbon/module/sys/entity/SysRoleMenuRelationEntity.java
  47. 0 1
      src/main/java/cc/uncarbon/module/sys/entity/SysTenantEntity.java
  48. 0 1
      src/main/java/cc/uncarbon/module/sys/entity/SysUserDeptRelationEntity.java
  49. 0 1
      src/main/java/cc/uncarbon/module/sys/entity/SysUserEntity.java
  50. 0 1
      src/main/java/cc/uncarbon/module/sys/entity/SysUserRoleRelationEntity.java
  51. 3 3
      src/main/java/cc/uncarbon/module/sys/extension/impl/DefaultSysLogAspectExtension.java
  52. 0 2
      src/main/java/cc/uncarbon/module/sys/facade/SysTenantFacade.java
  53. 6 35
      src/main/java/cc/uncarbon/module/sys/facade/impl/SysTenantFacadeImpl.java
  54. 0 2
      src/main/java/cc/uncarbon/module/sys/mapper/SysDataDictMapper.java
  55. 0 1
      src/main/java/cc/uncarbon/module/sys/mapper/SysDeptMapper.java
  56. 0 1
      src/main/java/cc/uncarbon/module/sys/mapper/SysMenuMapper.java
  57. 0 1
      src/main/java/cc/uncarbon/module/sys/mapper/SysParamMapper.java
  58. 0 1
      src/main/java/cc/uncarbon/module/sys/mapper/SysRoleMapper.java
  59. 0 1
      src/main/java/cc/uncarbon/module/sys/mapper/SysRoleMenuRelationMapper.java
  60. 0 1
      src/main/java/cc/uncarbon/module/sys/mapper/SysTenantMapper.java
  61. 0 1
      src/main/java/cc/uncarbon/module/sys/mapper/SysUserDeptRelationMapper.java
  62. 0 2
      src/main/java/cc/uncarbon/module/sys/mapper/SysUserMapper.java
  63. 0 1
      src/main/java/cc/uncarbon/module/sys/mapper/SysUserRoleRelationMapper.java
  64. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminBindRoleMenuRelationDTO.java
  65. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminBindUserRoleRelationDTO.java
  66. 0 2
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysDataDictDTO.java
  67. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysDeptDTO.java
  68. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysMenuDTO.java
  69. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysParamDTO.java
  70. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysRoleDTO.java
  71. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysUserDTO.java
  72. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertSysTenantDTO.java
  73. 0 2
      src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysDataDictDTO.java
  74. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysParamDTO.java
  75. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysRoleDTO.java
  76. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysTenantDTO.java
  77. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysUserDTO.java
  78. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminResetSysUserPasswordDTO.java
  79. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminUpdateCurrentSysUserPasswordDTO.java
  80. 0 1
      src/main/java/cc/uncarbon/module/sys/model/request/AdminUpdateSysTenantDTO.java
  81. 0 2
      src/main/java/cc/uncarbon/module/sys/model/request/SysUserLoginDTO.java
  82. 0 2
      src/main/java/cc/uncarbon/module/sys/model/response/SysDataDictBO.java
  83. 0 1
      src/main/java/cc/uncarbon/module/sys/model/response/SysDeptBO.java
  84. 0 1
      src/main/java/cc/uncarbon/module/sys/model/response/SysMenuBO.java
  85. 0 1
      src/main/java/cc/uncarbon/module/sys/model/response/SysParamBO.java
  86. 0 1
      src/main/java/cc/uncarbon/module/sys/model/response/SysRoleBO.java
  87. 0 1
      src/main/java/cc/uncarbon/module/sys/model/response/SysTenantBO.java
  88. 0 1
      src/main/java/cc/uncarbon/module/sys/model/response/SysUserBO.java
  89. 0 1
      src/main/java/cc/uncarbon/module/sys/model/response/SysUserBaseInfoBO.java
  90. 0 1
      src/main/java/cc/uncarbon/module/sys/model/response/SysUserLoginBO.java
  91. 0 2
      src/main/java/cc/uncarbon/module/sys/model/response/SysUserLoginVO.java
  92. 0 2
      src/main/java/cc/uncarbon/module/sys/model/response/VbenAdminMenuMetaVO.java
  93. 0 1
      src/main/java/cc/uncarbon/module/sys/model/response/VbenAdminUserInfoVO.java
  94. 14 14
      src/main/java/cc/uncarbon/module/sys/service/SysDataDictService.java
  95. 12 22
      src/main/java/cc/uncarbon/module/sys/service/SysDeptService.java
  96. 19 13
      src/main/java/cc/uncarbon/module/sys/service/SysLogService.java
  97. 20 21
      src/main/java/cc/uncarbon/module/sys/service/SysMenuService.java
  98. 16 14
      src/main/java/cc/uncarbon/module/sys/service/SysParamService.java
  99. 12 11
      src/main/java/cc/uncarbon/module/sys/service/SysRoleMenuRelationService.java
  100. 14 16
      src/main/java/cc/uncarbon/module/sys/service/SysRoleService.java

+ 47 - 49
README.md

@@ -29,64 +29,62 @@ JDK compatibility: 1.8 - 17
 
 ## 目录结构
 ```
-├─attachments   附件
-│  └─db 数据库变更脚本
+├─attachments                  附件
+│  └─db                         数据库变更脚本
 │      ├─MySQL
-│      │  └─upgrade Helio升级时数据库变更脚本
+│      │  └─upgrade             Helio升级时MySQL变更脚本
 │      └─PostgreSQL
-│          └─upgrade Helio升级时数据库变更脚本
+│         └─upgrade             Helio升级时PostgreSQL变更脚本
 └─src
-    ├─main  主要代码
+    ├─main                      主要代码
     │  ├─java
     │  │  └─cc
     │  │      └─uncarbon
-    │  │          ├─aspect  自定义切面
-    │  │          ├─config  配置类
-    │  │          ├─helper  助手类
-    │  │          ├─interceptor Web拦截器
-    │  │          └─module  业务代码模块
-    │  │              ├─adminapi    admin-api,用于后台管理的HTTP-API
-    │  │              │  ├─constant 常量
-    │  │              │  └─web  即:Controller
-    │  │              │      ├─auth 登录登出接口
-    │  │              │      ├─oss  对象存储接口
-    │  │              │      └─sys  预置系统管理接口(如:后台用户、后台角色、后台菜单等)
-    │  │              ├─appapi  app-api,用于C端的HTTP-API【只是一个骨架,并没有业务实现】
-    │  │              │  ├─constant 常量
-    │  │              │  └─web  即:Controller
-    │  │              ├─oss 对象存储服务
-    │  │              │  ├─config   配置类
-    │  │              │  ├─constant 常量
-    │  │              │  ├─entity   实体
-    │  │              │  ├─enums    枚举
-    │  │              │  ├─facade   门面
-    │  │              │  │  └─impl  门面实现类
-    │  │              │  ├─mapper   Mybatis Mapper
-    │  │              │  ├─model    抽象模型
+    │  │          ├─aspect       自定义切面
+    │  │          ├─config       配置类
+    │  │          ├─helper       助手类
+    │  │          ├─interceptor  Web拦截器
+    │  │          └─module       业务代码模块
+    │  │              ├─adminapi     admin-api,用于后台管理的HTTP-API
+    │  │              │  ├─constant  常量
+    │  │              │  ├─model     抽象模型
+    │  │              │  ├─util      静态工具类
+    │  │              │  └─web       即:Controller
+    │  │              │      ├─auth    登录登出接口
+    │  │              │      ├─common  常用通用接口
+    │  │              │      ├─oss     对象存储接口
+    │  │              │      └─sys     预置系统管理接口(如:后台用户、后台角色、后台菜单等)
+    │  │              ├─appapi       app-api,用于C端的HTTP-API【只是一个骨架,并没有业务实现】
+    │  │              │  ├─constant  常量
+    │  │              │  └─web       即:Controller
+    │  │              ├─oss          对象存储服务
+    │  │              │  ├─config    配置类
+    │  │              │  ├─constant  常量
+    │  │              │  ├─entity    实体
+    │  │              │  ├─enums     枚举
+    │  │              │  ├─facade    门面
+    │  │              │  │  └─impl   门面实现类
+    │  │              │  ├─mapper    Mybatis Mapper
+    │  │              │  ├─model     抽象模型
     │  │              │  │  ├─request   用于请求的
     │  │              │  │  └─response  用于响应的
     │  │              │  └─service  服务类
-    │  │              └─sys 预置系统管理服务
-    │  │                  ├─annotation  自定义注解
-    │  │                  ├─constant    常量
-    │  │                  ├─entity  实体
-    │  │                  ├─enums   枚举
-    │  │                  ├─extension   自定义扩展
-    │  │                  │  └─impl 自定义扩展实现类
-    │  │                  ├─facade  门面
-    │  │                  │  └─impl 门面实现类
-    │  │                  ├─mapper  Mybatis Mapper
-    │  │                  │  └─xml  Mybatis Mapper XML
-    │  │                  ├─model   抽象模型
+    │  │              └─sys          预置系统管理服务
+    │  │                  ├─annotation 自定义注解
+    │  │                  ├─constant   常量
+    │  │                  ├─entity     实体
+    │  │                  ├─enums      枚举
+    │  │                  ├─extension  自定义扩展
+    │  │                  │  └─impl    自定义扩展实现类
+    │  │                  ├─facade     门面
+    │  │                  │  └─impl    门面实现类
+    │  │                  ├─mapper     Mybatis Mapper
+    │  │                  │  └─xml     Mybatis Mapper XML
+    │  │                  ├─model      抽象模型
     │  │                  │  ├─request  用于请求的
     │  │                  │  └─response 用于响应的
-    │  │                  ├─service 服务类
-    │  │                  └─util    静态工具类
-    │  └─resources  资源,包含符合Spring Boot标准的YAML配置文件、Logback配置文件等
-    │      └─i18n 国际化文案定义
-    └─test  单元测试代码
-        └─java
-            └─cc
-                └─uncarbon
-                    └─test
+    │  │                  ├─service    服务类
+    │  │                  └─util       静态工具类
+    │  └─resources                资源,包含符合Spring Boot标准的YAML配置文件、Logback配置文件等
+    │      └─i18n                 国际化文案定义
 ```

+ 2 - 2
attachments/db/PostgreSQL/helio_boot.sql

@@ -880,8 +880,8 @@ CREATE TABLE "oss_file_info"
 (
     "id"                int8         NOT NULL,
     "tenant_id"         int8,
-    "revision"          int8         NOT NULL,
-    "del_flag"          int2         NOT NULL,
+    "revision"          int8         NOT NULL DEFAULT 1,
+    "del_flag"          int2         NOT NULL DEFAULT 0,
     "created_at"        timestamp(6) NOT NULL,
     "created_by"        varchar(255),
     "updated_at"        timestamp(6) NOT NULL,

+ 4 - 0
attachments/db/PostgreSQL/upgrade/1.9.0_to_1.10.0.sql

@@ -0,0 +1,4 @@
+-- v1.10.0 - 补充遗漏的数据表默认值
+ALTER TABLE "oss_file_info"
+    ALTER COLUMN "revision" SET DEFAULT 1,
+    ALTER COLUMN "del_flag" SET DEFAULT 0;

+ 8 - 8
pom.xml

@@ -8,17 +8,17 @@
     <parent>
         <groupId>cc.uncarbon.framework</groupId>
         <artifactId>helio-starters</artifactId>
-        <version>1.9.0</version>
+        <version>1.10.0</version>
     </parent>
 
     <artifactId>helio-boot</artifactId>
     <!-- 制品版本号,建议每次打包发布时都调整以作区分 -->
-    <version>1.9.0</version>
+    <version>1.10.0</version>
 
     <properties>
         <!-- 这里写其他第三方依赖 -->
         <!-- 文件上传 -->
-        <spring-file-storage.version>0.6.1</spring-file-storage.version>
+        <x-file-storage.version>2.0.0</x-file-storage.version>
         <minio.version>8.4.3</minio.version>
     </properties>
 
@@ -72,13 +72,13 @@
         </dependency>
 
         <!-- 这里写其他第三方依赖 -->
-        <!-- 对象存储工具类 https://gitee.com/XYW1171736840/spring-file-storage -->
+        <!-- 对象存储工具类 https://gitee.com/dromara/x-file-storage -->
         <dependency>
-            <groupId>cn.xuyanwu</groupId>
-            <artifactId>spring-file-storage</artifactId>
-            <version>${spring-file-storage.version}</version>
+            <groupId>org.dromara.x-file-storage</groupId>
+            <artifactId>x-file-storage-spring</artifactId>
+            <version>${x-file-storage.version}</version>
             <exclusions>
-                <!-- helio-core 就带了 hutool,不需要重复引入 -->
+                <!-- hutool版本冲突,用 helio-core 的版本 -->
                 <exclusion>
                     <groupId>cn.hutool</groupId>
                     <artifactId>hutool-core</artifactId>

+ 14 - 7
src/main/java/cc/uncarbon/aspect/SysLogAspect.java

@@ -4,7 +4,6 @@ import cc.uncarbon.framework.core.context.UserContext;
 import cc.uncarbon.framework.core.context.UserContextHolder;
 import cc.uncarbon.framework.web.util.IPUtil;
 import cc.uncarbon.module.sys.annotation.SysLog;
-import cc.uncarbon.module.sys.constant.SysConstant;
 import cc.uncarbon.module.sys.enums.SysLogStatusEnum;
 import cc.uncarbon.module.sys.extension.SysLogAspectExtension;
 import cc.uncarbon.module.sys.extension.impl.DefaultSysLogAspectExtension;
@@ -16,6 +15,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.copier.CopyOptions;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.exceptions.ExceptionUtil;
+import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.text.StrPool;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ClassUtil;
@@ -52,12 +52,19 @@ import java.util.stream.Collectors;
 @RequiredArgsConstructor
 public class SysLogAspect {
 
+    /**
+     * 敏感字段名
+     */
+    private static final String[] SENSITIVE_FIELDS = {
+            "password", "oldPassword", "newPassword", "confirmNewPassword", "passwordOfNewUser",
+            "randomPassword", "tenantAdminPassword"};
+
     /**
      * 用于数据脱敏的Bean复制选项
      */
     private static final CopyOptions MASKING_COPY_OPTIONS = new CopyOptions()
             .setIgnoreNullValue(false)
-            .setIgnoreProperties(SysConstant.SENSITIVE_FIELDS);
+            .setIgnoreProperties(SENSITIVE_FIELDS);
 
     /**
      * 用于数据脱敏后JSON字符串的序列化配置
@@ -147,7 +154,7 @@ public class SysLogAspect {
                     .setUserId(UserContextHolder.getUserId())
                     .setUsername(UserContextHolder.getUserName())
                     // 记录请求方法
-                    .setMethod(StrUtil.builder(
+                    .setMethod(CharSequenceUtil.builder(
                             joinPoint.getTarget().getClass().getName(),
                             "#",
                             joinPoint.getSignature().getName()
@@ -164,7 +171,7 @@ public class SysLogAspect {
             String params = Arrays.stream(joinPoint.getArgs()).map(
                     item -> {
                         if (ClassUtil.isBasicType(item.getClass())) {
-                            // 基元类型 OR 其包装类型,保存在DB时保持原样
+                            // 基元类型 OR 其包装类型,且拿不到参数名,保存在DB时保持原样
                             return StrUtil.toStringOrNull(item);
                         }
 
@@ -174,8 +181,8 @@ public class SysLogAspect {
                         return JSONUtil.toJsonStr(afterMasked, TO_JSON_STR_JSON_CONFIG);
                     }
             ).collect(Collectors.joining(StrPool.LF));
-            if (StrUtil.length(params) > MAX_STRING_SAVE_LENGTH) {
-                params = StrUtil.subPre(params, MAX_STRING_SAVE_LENGTH);
+            if (CharSequenceUtil.length(params) > MAX_STRING_SAVE_LENGTH) {
+                params = CharSequenceUtil.subPre(params, MAX_STRING_SAVE_LENGTH);
             }
             dto.setParams(params);
 
@@ -254,7 +261,7 @@ public class SysLogAspect {
             https://gitee.com/uncarbon97/helio-boot/issues/I5KN1X
              */
             String ip = UserContextHolder.getClientIP();
-            if (StrUtil.isEmpty(ip)) {
+            if (CharSequenceUtil.isEmpty(ip)) {
                 // 兜底处理,直接从request中拿
                 ip = IPUtil.getClientIPAddress(request, 0);
             }

+ 2 - 3
src/main/java/cc/uncarbon/config/AsyncConfiguration.java

@@ -70,8 +70,7 @@ public class AsyncConfiguration implements AsyncConfigurer {
 
     @Override
     public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
-        return (ex, method, params) -> {
-            log.error("[异步任务线程池] 执行异步任务【{}】时出错 >> 堆栈\t\n", method, ex);
-        };
+        return (ex, method, params) ->
+                log.error("[异步任务线程池] 执行异步任务【{}】时出错 >> 堆栈\t\n", method, ex);
     }
 }

+ 1 - 1
src/main/java/cc/uncarbon/config/CustomInterceptorConfiguration.java

@@ -59,7 +59,7 @@ public class CustomInterceptorConfiguration implements WebMvcConfigurer {
          */
         registry
                 .addInterceptor(new SaInterceptor(
-                        (handler) -> StpUtil.checkLogin()
+                        handler -> StpUtil.checkLogin()
                 ))
                 .addPathPatterns(AppApiConstant.HTTP_API_URL_PREFIX + "/**")
                 .excludePathPatterns(helioProperties.getSecurity().getExcludeRoutes());

+ 3 - 3
src/main/java/cc/uncarbon/helper/CaptchaHelper.java

@@ -2,7 +2,7 @@ package cc.uncarbon.helper;
 
 import cn.hutool.captcha.CaptchaUtil;
 import cn.hutool.captcha.ShearCaptcha;
-import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.text.CharSequenceUtil;
 import lombok.RequiredArgsConstructor;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
@@ -48,13 +48,13 @@ public class CaptchaHelper {
      * @return 是否正确
      */
     public boolean validate(String uuid, String captchaAnswer, boolean removeWhenEquals) {
-        if (StrUtil.hasBlank(uuid, captchaAnswer)) {
+        if (CharSequenceUtil.hasBlank(uuid, captchaAnswer)) {
             return false;
         }
 
         String cacheKey = String.format(CACHE_KEY_CAPTCHA_ANSWER, uuid);
         String answerInRedis = stringRedisTemplate.opsForValue().get(cacheKey);
-        boolean equals = StrUtil.equalsIgnoreCase(answerInRedis, captchaAnswer);
+        boolean equals = CharSequenceUtil.equalsIgnoreCase(answerInRedis, captchaAnswer);
         if (equals && removeWhenEquals) {
             stringRedisTemplate.delete(cacheKey);
         }

+ 1 - 1
src/main/java/cc/uncarbon/interceptor/AdminSaTokenParseInterceptor.java

@@ -5,7 +5,7 @@ import cc.uncarbon.framework.core.context.TenantContextHolder;
 import cc.uncarbon.framework.core.context.UserContext;
 import cc.uncarbon.framework.core.context.UserContextHolder;
 import cc.uncarbon.framework.web.util.IPUtil;
-import cc.uncarbon.module.sys.util.AdminStpUtil;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.session.SaSession;
 import lombok.NonNull;
 import lombok.extern.slf4j.Slf4j;

+ 4 - 2
src/main/java/cc/uncarbon/module/adminapi/constant/AdminApiConstant.java

@@ -4,11 +4,13 @@ package cc.uncarbon.module.adminapi.constant;
 /**
  * 后台管理接口常量
  */
-public interface AdminApiConstant {
+public class AdminApiConstant {
+    private AdminApiConstant() {
+    }
 
     /**
      * HTTP-API路由前缀
      */
-    String HTTP_API_URL_PREFIX = "/admin";
+    public static final String HTTP_API_URL_PREFIX = "/admin";
 
 }

+ 172 - 0
src/main/java/cc/uncarbon/module/adminapi/model/response/SelectOptionItemVO.java

@@ -0,0 +1,172 @@
+package cc.uncarbon.module.adminapi.model.response;
+
+import cc.uncarbon.framework.core.enums.HelioBaseEnum;
+import cn.hutool.core.collection.CollUtil;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * 后台管理-下拉框数据单项 VO
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Accessors(chain = true)
+@Getter
+public class SelectOptionItemVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    // ID👉名称 一对(用于关联各种实体)
+    @ApiModelProperty(value = "ID")
+    private Number id;
+    @ApiModelProperty(value = "名称")
+    private String name;
+    public SelectOptionItemVO(Number id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    // 有时候额外需要上级ID
+    @ApiModelProperty(value = "上级ID")
+    @Setter
+    private Number parentId;
+    public SelectOptionItemVO(Number id, String name, Number parentId) {
+        this.id = id;
+        this.name = name;
+        this.parentId = parentId;
+    }
+
+
+    // 值👉标签 一对(仅用于枚举)
+    @ApiModelProperty(value = "值")
+    private Number value;
+    @ApiModelProperty(value = "标签")
+    private String label;
+    public SelectOptionItemVO(HelioBaseEnum<? extends Number> helioBaseEnum) {
+        this.value = helioBaseEnum.getValue();
+        this.label = helioBaseEnum.getLabel();
+    }
+
+    /*
+    ----------------------------------------------------------------
+                        其他业务字段都写在这里
+                        都要标记释义、用处、新增时版本号
+                        免得每个人各取一个名,不统一
+    ----------------------------------------------------------------
+     */
+
+    @ApiModelProperty(value = "(演示字段;可删除)文本字段1")
+    @Setter
+    private String demoString1;
+
+    /*
+    ----------------------------------------------------------------
+                        构造方法 builders
+    ----------------------------------------------------------------
+     */
+
+    /**
+     * 构造List<SelectOptionItemVO>
+     * 将转换源集合中所有集合项
+     * 无需上级ID
+     * @param source 源集合
+     * @param idGetter id getter
+     * @param nameGetter name getter
+     */
+    public static <T> List<SelectOptionItemVO> listOf(
+            Collection<T> source,
+            @NonNull Function<T, Number> idGetter,
+            @NonNull Function<T, String> nameGetter
+    ) {
+        return listOf(source, idGetter, nameGetter, null, null);
+    }
+
+    /**
+     * 构造List<SelectOptionItemVO>
+     * 将转换源集合中所有集合项
+     * 支持上级ID
+     * @param source 源集合
+     * @param idGetter id getter
+     * @param nameGetter name getter
+     */
+    public static <T> List<SelectOptionItemVO> listOf(
+            Collection<T> source,
+            @NonNull Function<T, Number> idGetter,
+            @NonNull Function<T, String> nameGetter,
+            Function<T, Number> parentIdGetter
+    ) {
+        return listOf(source, idGetter, nameGetter, parentIdGetter, null);
+    }
+
+    /**
+     * 构造List<SelectOptionItemVO>
+     * 支持自定义过滤器,仅转换需要的集合项
+     * 支持上级ID
+     * @param source 源集合
+     * @param idGetter id getter
+     * @param nameGetter name getter
+     * @param parentIdGetter (可选)parentId getter
+     * @param sourceItemFilter (可选)集合项过滤器
+     */
+    public static <T> List<SelectOptionItemVO> listOf(
+            Collection<T> source,
+            @NonNull Function<T, Number> idGetter,
+            @NonNull Function<T, String> nameGetter,
+            Function<T, Number> parentIdGetter,
+            Predicate<T> sourceItemFilter
+    ) {
+        if (CollUtil.isEmpty(source)) {
+            return Collections.emptyList();
+        }
+        Stream<T> stream = source.stream();
+        if (sourceItemFilter != null) {
+            stream = stream.filter(sourceItemFilter);
+        }
+        return stream.map(item ->
+                        new SelectOptionItemVO(idGetter.apply(item), nameGetter.apply(item),
+                                parentIdGetter == null ? null : parentIdGetter.apply(item)))
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 构造List<SelectOptionItemVO>
+     * 将转换枚举类中所有枚举常量
+     * @param helioBaseEnum 实现了HelioBaseEnum的枚举类
+     */
+    public static <E extends Enum<?> & HelioBaseEnum<? extends Number>> List<SelectOptionItemVO> listOf(Class<E> helioBaseEnum) {
+        return listOf(helioBaseEnum, null);
+    }
+
+    /**
+     * 构造List<SelectOptionItemVO>
+     * 支持自定义过滤器,仅转换需要的枚举常量
+     * @param helioBaseEnum 实现了HelioBaseEnum的枚举类
+     * @param enumConstantFilter (可选)枚举类中枚举常量过滤器
+     */
+    public static <E extends Enum<?> & HelioBaseEnum<? extends Number>> List<SelectOptionItemVO> listOf(
+            Class<E> helioBaseEnum,
+            Predicate<E> enumConstantFilter
+    ) {
+        if (helioBaseEnum == null) {
+            return Collections.emptyList();
+        }
+        Stream<E> stream = Arrays.stream(helioBaseEnum.getEnumConstants());
+        if (enumConstantFilter != null) {
+            stream = stream.filter(enumConstantFilter);
+        }
+        return stream.map(SelectOptionItemVO::new).collect(Collectors.toList());
+    }
+}

+ 1 - 1
src/main/java/cc/uncarbon/module/sys/util/AdminStpUtil.java → src/main/java/cc/uncarbon/module/adminapi/util/AdminStpUtil.java

@@ -1,4 +1,4 @@
-package cc.uncarbon.module.sys.util;
+package cc.uncarbon.module.adminapi.util;
 
 import cn.dev33.satoken.SaManager;
 import cn.dev33.satoken.fun.SaFunction;

+ 5 - 5
src/main/java/cc/uncarbon/module/adminapi/web/auth/AdminAuthController.java

@@ -18,7 +18,7 @@ import cc.uncarbon.module.sys.model.request.SysUserLoginDTO;
 import cc.uncarbon.module.sys.model.response.SysUserLoginBO;
 import cc.uncarbon.module.sys.model.response.SysUserLoginVO;
 import cc.uncarbon.module.sys.service.SysUserService;
-import cc.uncarbon.module.sys.util.AdminStpUtil;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.hutool.captcha.AbstractCaptcha;
 import io.swagger.annotations.Api;
@@ -33,15 +33,15 @@ import javax.validation.Valid;
 import java.io.IOException;
 
 
-@RequiredArgsConstructor
-@Slf4j
 @Api(value = "后台管理-鉴权接口", tags = {"后台管理-鉴权接口"})
 @RequestMapping(value = {
         // 兼容旧的API路由前缀
         SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
         AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
 })
+@RequiredArgsConstructor
 @RestController
+@Slf4j
 public class AdminAuthController {
 
     private final SysUserService sysUserService;
@@ -91,7 +91,7 @@ public class AdminAuthController {
     @SaCheckLogin(type = AdminStpUtil.TYPE)
     @ApiOperation(value = "登出")
     @PostMapping(value = "/auth/logout")
-    public ApiResult<?> logout() {
+    public ApiResult<Void> logout() {
         AdminStpUtil.logout();
         UserContextHolder.clear();
         TenantContextHolder.clear();
@@ -110,7 +110,7 @@ public class AdminAuthController {
         // uuid 为空则抛出异常
         SysErrorEnum.UUID_CANNOT_BE_BLANK.assertNotBlank(uuid);
 
-        // 核验方法:captchaHelper.validate;
+        // 核验方法:captchaHelper.validate
         AbstractCaptcha captcha = captchaHelper.generate(uuid);
 
         // 写入响应流

+ 75 - 0
src/main/java/cc/uncarbon/module/adminapi/web/common/AdminSelectOptionsController.java

@@ -0,0 +1,75 @@
+package cc.uncarbon.module.adminapi.web.common;
+
+
+import cc.uncarbon.framework.core.enums.GenderEnum;
+import cc.uncarbon.framework.core.enums.YesOrNoEnum;
+import cc.uncarbon.framework.web.model.response.ApiResult;
+import cc.uncarbon.module.adminapi.model.response.SelectOptionItemVO;
+import cc.uncarbon.module.sys.model.response.SysDeptBO;
+import cc.uncarbon.module.sys.service.SysDeptService;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
+import cn.dev33.satoken.annotation.SaCheckLogin;
+import cn.dev33.satoken.annotation.SaIgnore;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+// 约束:登录后才能使用   👇 后台管理对应的鉴权工具类
+@SaCheckLogin(type = AdminStpUtil.TYPE)
+@Api(value = "后台管理-下拉框数据源接口", tags = {"后台管理-下拉框数据源接口"})
+@RequestMapping("/api/v1")
+@RequiredArgsConstructor
+@RestController
+@Slf4j
+public class AdminSelectOptionsController {
+
+    private final SysDeptService sysDeptService;
+
+
+    /*
+    这里统一存放所有用于后台管理的下拉框数据源接口
+    避免多人协作时,不知道原来是否已经有了,或者写在某个边边角角里
+    造成重复开发
+     */
+
+    // 👇该注解标记的接口不需要登录
+    @SaIgnore
+    @ApiOperation(value = "(演示接口;可删除)性别下拉框")
+    @GetMapping(value = "/select-options/genders")
+    public ApiResult<List<SelectOptionItemVO>> genders(YesOrNoEnum demo) {
+        if (demo == YesOrNoEnum.YES) {
+            // demo=YES时,不输出「未知」、多输出demoString1
+            List<SelectOptionItemVO> ret = SelectOptionItemVO.listOf(GenderEnum.class, item -> item != GenderEnum.UNKNOWN);
+            for (SelectOptionItemVO item : ret) {
+                item.setDemoString1("文本字段1-" + item.getValue());
+            }
+            return ApiResult.data(ret);
+        }
+        // 默认返回
+        return ApiResult.data(SelectOptionItemVO.listOf(GenderEnum.class));
+    }
+
+    // 👇该注解标记的接口不需要登录
+    @SaIgnore
+    @ApiOperation(value = "(演示接口;可删除)部门下拉框")
+    @GetMapping(value = "/select-options/depts")
+    public ApiResult<List<SelectOptionItemVO>> depts(YesOrNoEnum demo) {
+        if (demo == YesOrNoEnum.YES) {
+            // demo=YES时,多输出上级ID、多输出demoString1
+            List<SelectOptionItemVO> ret = SelectOptionItemVO.listOf(sysDeptService.adminList(), SysDeptBO::getId, SysDeptBO::getTitle, SysDeptBO::getParentId);
+            for (SelectOptionItemVO item : ret) {
+                item.setDemoString1("文本字段1-" + item.getId());
+            }
+            return ApiResult.data(ret);
+        }
+        // 默认返回
+        return ApiResult.data(SelectOptionItemVO.listOf(sysDeptService.adminList(), SysDeptBO::getId, SysDeptBO::getTitle));
+    }
+
+}

+ 4 - 4
src/main/java/cc/uncarbon/module/adminapi/web/oss/AdminOssFileInfoController.java

@@ -10,7 +10,7 @@ import cc.uncarbon.module.oss.model.request.AdminListOssFileInfoDTO;
 import cc.uncarbon.module.oss.model.response.OssFileInfoBO;
 import cc.uncarbon.module.oss.service.OssFileInfoService;
 import cc.uncarbon.module.sys.constant.SysConstant;
-import cc.uncarbon.module.sys.util.AdminStpUtil;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
@@ -22,16 +22,16 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 
 
-@RequiredArgsConstructor
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Slf4j
 @Api(value = "后台管理-上传文件信息管理接口", tags = {"后台管理-上传文件信息管理接口"})
 @RequestMapping(value = {
         // 兼容旧的API路由前缀
         SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
         AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
 })
+@RequiredArgsConstructor
 @RestController
+@Slf4j
 public class AdminOssFileInfoController {
 
     // 功能权限串前缀
@@ -57,7 +57,7 @@ public class AdminOssFileInfoController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
     @ApiOperation(value = "删除")
     @DeleteMapping(value = "/oss/file/infos")
-    public ApiResult<?> delete(@RequestBody @Valid IdsDTO<Long> dto) {
+    public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         ossFileInfoService.adminDelete(dto.getIds());
 
         return ApiResult.success();

+ 5 - 5
src/main/java/cc/uncarbon/module/adminapi/web/oss/AdminOssUploadDownloadController.java

@@ -9,12 +9,12 @@ import cc.uncarbon.module.oss.model.response.OssFileDownloadReplyBO;
 import cc.uncarbon.module.oss.model.response.OssFileInfoBO;
 import cc.uncarbon.module.oss.model.response.OssFileUploadResultVO;
 import cc.uncarbon.module.sys.constant.SysConstant;
-import cc.uncarbon.module.sys.util.AdminStpUtil;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.util.CharsetUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.digest.DigestUtil;
 import cn.hutool.http.Header;
 import io.swagger.annotations.Api;
@@ -32,15 +32,15 @@ import java.io.IOException;
 import java.net.URLEncoder;
 
 
-@RequiredArgsConstructor
-@Slf4j
 @Api(value = "后台管理-上传、下载文件接口", tags = {"后台管理-上传、下载文件接口"})
 @RequestMapping(value = {
         // 兼容旧的API路由前缀
         SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
         AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
 })
+@RequiredArgsConstructor
 @RestController
+@Slf4j
 public class AdminOssUploadDownloadController {
 
     private final OssUploadDownloadFacade ossUploadDownloadFacade;
@@ -115,7 +115,7 @@ public class AdminOssUploadDownloadController {
          */
         if (
                 ossUploadDownloadFacade.isLocalPlatform(ossFileInfo.getStoragePlatform())
-                        || StrUtil.isEmpty(ossFileInfo.getDirectUrl())
+                        || CharSequenceUtil.isEmpty(ossFileInfo.getDirectUrl())
         ) {
             ret.setUrl(
                     // 默认接口风格为 RESTful,下载即为最后拼接“/{文件ID}”

+ 31 - 11
src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysDataDictController.java

@@ -12,7 +12,7 @@ import cc.uncarbon.module.sys.model.request.AdminInsertOrUpdateSysDataDictDTO;
 import cc.uncarbon.module.sys.model.request.AdminListSysDataDictDTO;
 import cc.uncarbon.module.sys.model.response.SysDataDictBO;
 import cc.uncarbon.module.sys.service.SysDataDictService;
-import cc.uncarbon.module.sys.util.AdminStpUtil;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
@@ -24,16 +24,16 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 
 
-@RequiredArgsConstructor
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Slf4j
 @Api(value = "数据字典管理接口", tags = {"数据字典管理接口"})
 @RequestMapping(value = {
         // 兼容旧的API路由前缀
         SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
         AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
 })
+@RequiredArgsConstructor
 @RestController
+@Slf4j
 public class AdminSysDataDictController {
 
     private static final String PERMISSION_PREFIX = "SysDataDict:" ;
@@ -43,14 +43,22 @@ public class AdminSysDataDictController {
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
     @ApiOperation(value = "分页列表")
-    @GetMapping(value = "/sys/dataDicts")
+    @GetMapping(value = {
+            "/sys/data-dicts",
+            // 兼容旧的API路由
+            "/sys/dataDicts"
+    })
     public ApiResult<PageResult<SysDataDictBO>> list(PageParam pageParam, AdminListSysDataDictDTO dto) {
         return ApiResult.data(sysDataDictService.adminList(pageParam, dto));
     }
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
     @ApiOperation(value = "详情")
-    @GetMapping(value = "/sys/dataDicts/{id}")
+    @GetMapping(value = {
+            "/sys/data-dicts/{id}",
+            // 兼容旧的API路由
+            "/sys/dataDicts/{id}"
+    })
     public ApiResult<SysDataDictBO> getById(@PathVariable Long id) {
         return ApiResult.data(sysDataDictService.getOneById(id, true));
     }
@@ -58,8 +66,12 @@ public class AdminSysDataDictController {
     @SysLog(value = "新增数据字典")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
     @ApiOperation(value = "新增")
-    @PostMapping(value = "/sys/dataDicts")
-    public ApiResult<?> insert(@RequestBody @Valid AdminInsertOrUpdateSysDataDictDTO dto) {
+    @PostMapping(value = {
+            "/sys/data-dicts",
+            // 兼容旧的API路由
+            "/sys/dataDicts"
+    })
+    public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysDataDictDTO dto) {
         sysDataDictService.adminInsert(dto);
 
         return ApiResult.success();
@@ -68,8 +80,12 @@ public class AdminSysDataDictController {
     @SysLog(value = "编辑数据字典")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
     @ApiOperation(value = "编辑")
-    @PutMapping(value = "/sys/dataDicts/{id}")
-    public ApiResult<?> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysDataDictDTO dto) {
+    @PutMapping(value = {
+            "/sys/data-dicts/{id}",
+            // 兼容旧的API路由
+            "/sys/dataDicts/{id}"
+    })
+    public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysDataDictDTO dto) {
         dto.setId(id);
         sysDataDictService.adminUpdate(dto);
 
@@ -79,8 +95,12 @@ public class AdminSysDataDictController {
     @SysLog(value = "删除数据字典")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
     @ApiOperation(value = "删除")
-    @DeleteMapping(value = "/sys/dataDicts")
-    public ApiResult<?> delete(@RequestBody @Valid IdsDTO<Long> dto) {
+    @DeleteMapping(value = {
+            "/sys/data-dicts",
+            // 兼容旧的API路由
+            "/sys/dataDicts"
+    })
+    public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         sysDataDictService.adminDelete(dto.getIds());
 
         return ApiResult.success();

+ 6 - 6
src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysDeptController.java

@@ -10,7 +10,7 @@ import cc.uncarbon.module.sys.constant.SysConstant;
 import cc.uncarbon.module.sys.model.request.AdminInsertOrUpdateSysDeptDTO;
 import cc.uncarbon.module.sys.model.response.SysDeptBO;
 import cc.uncarbon.module.sys.service.SysDeptService;
-import cc.uncarbon.module.sys.util.AdminStpUtil;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
@@ -23,16 +23,16 @@ import javax.validation.Valid;
 import java.util.List;
 
 
-@RequiredArgsConstructor
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Slf4j
 @Api(value = "部门管理接口", tags = {"部门管理接口"})
 @RequestMapping(value = {
         // 兼容旧的API路由前缀
         SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
         AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
 })
+@RequiredArgsConstructor
 @RestController
+@Slf4j
 public class AdminSysDeptController {
 
     private static final String PERMISSION_PREFIX = "SysDept:";
@@ -58,7 +58,7 @@ public class AdminSysDeptController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
     @ApiOperation(value = "新增")
     @PostMapping(value = "/sys/depts")
-    public ApiResult<?> insert(@RequestBody @Valid AdminInsertOrUpdateSysDeptDTO dto) {
+    public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysDeptDTO dto) {
         sysDeptService.adminInsert(dto);
 
         return ApiResult.success();
@@ -68,7 +68,7 @@ public class AdminSysDeptController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
     @ApiOperation(value = "编辑")
     @PutMapping(value = "/sys/depts/{id}")
-    public ApiResult<?> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysDeptDTO dto) {
+    public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysDeptDTO dto) {
         dto.setId(id);
         sysDeptService.adminUpdate(dto);
 
@@ -79,7 +79,7 @@ public class AdminSysDeptController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
     @ApiOperation(value = "删除")
     @DeleteMapping(value = "/sys/depts")
-    public ApiResult<?> delete(@RequestBody @Valid IdsDTO<Long> dto) {
+    public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         sysDeptService.adminDelete(dto.getIds());
 
         return ApiResult.success();

+ 3 - 3
src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysLogController.java

@@ -9,7 +9,7 @@ import cc.uncarbon.module.sys.constant.SysConstant;
 import cc.uncarbon.module.sys.model.request.AdminListSysLogDTO;
 import cc.uncarbon.module.sys.model.response.SysLogBO;
 import cc.uncarbon.module.sys.service.SysLogService;
-import cc.uncarbon.module.sys.util.AdminStpUtil;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
@@ -22,16 +22,16 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 
-@RequiredArgsConstructor
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Slf4j
 @Api(value = "系统日志管理接口", tags = {"系统日志管理接口"})
 @RequestMapping(value = {
         // 兼容旧的API路由前缀
         SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
         AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
 })
+@RequiredArgsConstructor
 @RestController
+@Slf4j
 public class AdminSysLogController {
 
     private static final String PERMISSION_PREFIX = "SysLog:";

+ 6 - 6
src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysMenuController.java

@@ -9,7 +9,7 @@ import cc.uncarbon.module.sys.constant.SysConstant;
 import cc.uncarbon.module.sys.model.request.AdminInsertOrUpdateSysMenuDTO;
 import cc.uncarbon.module.sys.model.response.SysMenuBO;
 import cc.uncarbon.module.sys.service.SysMenuService;
-import cc.uncarbon.module.sys.util.AdminStpUtil;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
@@ -22,16 +22,16 @@ import javax.validation.Valid;
 import java.util.List;
 
 
-@RequiredArgsConstructor
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Slf4j
 @Api(value = "后台菜单管理接口", tags = {"后台菜单管理接口"})
 @RequestMapping(value = {
         // 兼容旧的API路由前缀
         SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
         AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
 })
+@RequiredArgsConstructor
 @RestController
+@Slf4j
 public class AdminSysMenuController {
 
     private static final String PERMISSION_PREFIX = "SysMenu:";
@@ -57,7 +57,7 @@ public class AdminSysMenuController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
     @ApiOperation(value = "新增")
     @PostMapping(value = "/sys/menus")
-    public ApiResult<?> insert(@RequestBody @Valid AdminInsertOrUpdateSysMenuDTO dto) {
+    public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysMenuDTO dto) {
         sysMenuService.adminInsert(dto);
 
         return ApiResult.success();
@@ -67,7 +67,7 @@ public class AdminSysMenuController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
     @ApiOperation(value = "编辑")
     @PutMapping(value = "/sys/menus/{id}")
-    public ApiResult<?> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysMenuDTO dto) {
+    public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysMenuDTO dto) {
         dto.setId(id);
         sysMenuService.adminUpdate(dto);
 
@@ -78,7 +78,7 @@ public class AdminSysMenuController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
     @ApiOperation(value = "删除")
     @DeleteMapping(value = "/sys/menus")
-    public ApiResult<?> delete(@RequestBody @Valid IdsDTO<Long> dto) {
+    public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         sysMenuService.adminDelete(dto.getIds());
 
         return ApiResult.success();

+ 6 - 6
src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysParamController.java

@@ -12,7 +12,7 @@ import cc.uncarbon.module.sys.model.request.AdminInsertOrUpdateSysParamDTO;
 import cc.uncarbon.module.sys.model.request.AdminListSysParamDTO;
 import cc.uncarbon.module.sys.model.response.SysParamBO;
 import cc.uncarbon.module.sys.service.SysParamService;
-import cc.uncarbon.module.sys.util.AdminStpUtil;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
@@ -24,16 +24,16 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 
 
-@RequiredArgsConstructor
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Slf4j
 @Api(value = "系统参数管理接口", tags = {"系统参数管理接口"})
 @RequestMapping(value = {
         // 兼容旧的API路由前缀
         SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
         AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
 })
+@RequiredArgsConstructor
 @RestController
+@Slf4j
 public class AdminSysParamController {
 
     private static final String PERMISSION_PREFIX = "SysParam:";
@@ -59,7 +59,7 @@ public class AdminSysParamController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
     @ApiOperation(value = "新增")
     @PostMapping(value = "/sys/params")
-    public ApiResult<?> insert(@RequestBody @Valid AdminInsertOrUpdateSysParamDTO dto) {
+    public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysParamDTO dto) {
         sysParamService.adminInsert(dto);
 
         return ApiResult.success();
@@ -69,7 +69,7 @@ public class AdminSysParamController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
     @ApiOperation(value = "编辑")
     @PutMapping(value = "/sys/params/{id}")
-    public ApiResult<?> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysParamDTO dto) {
+    public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysParamDTO dto) {
         dto.setId(id);
         sysParamService.adminUpdate(dto);
 
@@ -80,7 +80,7 @@ public class AdminSysParamController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
     @ApiOperation(value = "删除")
     @DeleteMapping(value = "/sys/params")
-    public ApiResult<?> delete(@RequestBody @Valid IdsDTO<Long> dto) {
+    public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         sysParamService.adminDelete(dto.getIds());
 
         return ApiResult.success();

+ 7 - 7
src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysRoleController.java

@@ -14,7 +14,7 @@ import cc.uncarbon.module.sys.model.request.AdminInsertOrUpdateSysRoleDTO;
 import cc.uncarbon.module.sys.model.request.AdminListSysRoleDTO;
 import cc.uncarbon.module.sys.model.response.SysRoleBO;
 import cc.uncarbon.module.sys.service.SysRoleService;
-import cc.uncarbon.module.sys.util.AdminStpUtil;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
@@ -27,16 +27,16 @@ import javax.validation.Valid;
 import java.util.Set;
 
 
-@RequiredArgsConstructor
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Slf4j
 @Api(value = "后台角色管理接口", tags = {"后台角色管理接口"})
 @RequestMapping(value = {
         // 兼容旧的API路由前缀
         SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
         AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
 })
+@RequiredArgsConstructor
 @RestController
+@Slf4j
 public class AdminSysRoleController {
 
     private static final String PERMISSION_PREFIX = "SysRole:";
@@ -64,7 +64,7 @@ public class AdminSysRoleController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
     @ApiOperation(value = "新增")
     @PostMapping(value = "/sys/roles")
-    public ApiResult<?> insert(@RequestBody @Valid AdminInsertOrUpdateSysRoleDTO dto) {
+    public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysRoleDTO dto) {
         sysRoleService.adminInsert(dto);
 
         return ApiResult.success();
@@ -74,7 +74,7 @@ public class AdminSysRoleController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
     @ApiOperation(value = "编辑")
     @PutMapping(value = "/sys/roles/{id}")
-    public ApiResult<?> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysRoleDTO dto) {
+    public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysRoleDTO dto) {
         dto.setId(id);
         sysRoleService.adminUpdate(dto);
 
@@ -85,7 +85,7 @@ public class AdminSysRoleController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
     @ApiOperation(value = "删除")
     @DeleteMapping(value = "/sys/roles")
-    public ApiResult<?> delete(@RequestBody @Valid IdsDTO<Long> dto) {
+    public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         sysRoleService.adminDelete(dto.getIds());
 
         // 角色删除时,删除对应缓存键
@@ -98,7 +98,7 @@ public class AdminSysRoleController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + "bindMenus")
     @ApiOperation(value = "绑定角色与菜单关联关系")
     @PutMapping(value = "/sys/roles/{id}/menus")
-    public ApiResult<?> bindMenus(@PathVariable Long id, @RequestBody @Valid AdminBindRoleMenuRelationDTO dto) {
+    public ApiResult<Void> bindMenus(@PathVariable Long id, @RequestBody @Valid AdminBindRoleMenuRelationDTO dto) {
         dto.setRoleId(id);
         Set<String> newPermissions = sysRoleService.adminBindMenus(dto);
 

+ 6 - 6
src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysTenantController.java

@@ -14,7 +14,7 @@ import cc.uncarbon.module.sys.model.request.AdminListSysTenantDTO;
 import cc.uncarbon.module.sys.model.request.AdminUpdateSysTenantDTO;
 import cc.uncarbon.module.sys.model.response.SysTenantBO;
 import cc.uncarbon.module.sys.service.SysTenantService;
-import cc.uncarbon.module.sys.util.AdminStpUtil;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
@@ -26,16 +26,16 @@ import org.springframework.web.bind.annotation.*;
 import javax.validation.Valid;
 
 
-@RequiredArgsConstructor
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Slf4j
 @Api(value = "系统租户管理接口", tags = {"系统租户管理接口"})
 @RequestMapping(value = {
         // 兼容旧的API路由前缀
         SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
         AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
 })
+@RequiredArgsConstructor
 @RestController
+@Slf4j
 public class AdminSysTenantController {
 
     private static final String PERMISSION_PREFIX = "SysTenant:";
@@ -63,7 +63,7 @@ public class AdminSysTenantController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
     @ApiOperation(value = "新增")
     @PostMapping(value = "/sys/tenants")
-    public ApiResult<?> insert(@RequestBody @Valid AdminInsertSysTenantDTO dto) {
+    public ApiResult<Void> insert(@RequestBody @Valid AdminInsertSysTenantDTO dto) {
         sysTenantFacade.adminInsert(dto);
 
         return ApiResult.success();
@@ -73,7 +73,7 @@ public class AdminSysTenantController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
     @ApiOperation(value = "编辑")
     @PutMapping(value = "/sys/tenants/{id}")
-    public ApiResult<?> update(@PathVariable Long id, @RequestBody @Valid AdminUpdateSysTenantDTO dto) {
+    public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminUpdateSysTenantDTO dto) {
         dto.setId(id);
         sysTenantService.adminUpdate(dto);
 
@@ -84,7 +84,7 @@ public class AdminSysTenantController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
     @ApiOperation(value = "删除")
     @DeleteMapping(value = "/sys/tenants")
-    public ApiResult<?> delete(@RequestBody @Valid IdsDTO<Long> dto) {
+    public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         sysTenantService.adminDelete(dto.getIds());
 
         return ApiResult.success();

+ 25 - 13
src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysUserController.java

@@ -13,7 +13,7 @@ import cc.uncarbon.module.sys.model.request.*;
 import cc.uncarbon.module.sys.model.response.SysUserBO;
 import cc.uncarbon.module.sys.model.response.VbenAdminUserInfoVO;
 import cc.uncarbon.module.sys.service.SysUserService;
-import cc.uncarbon.module.sys.util.AdminStpUtil;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import io.swagger.annotations.Api;
@@ -26,16 +26,16 @@ import javax.validation.Valid;
 import java.util.Set;
 
 
-@RequiredArgsConstructor
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Slf4j
 @Api(value = "后台用户管理接口", tags = {"后台用户管理接口"})
 @RequestMapping(value = {
         // 兼容旧的API路由前缀
         SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
         AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
 })
+@RequiredArgsConstructor
 @RestController
+@Slf4j
 public class AdminSysUserController {
 
     private static final String PERMISSION_PREFIX = "SysUser:";
@@ -61,7 +61,7 @@ public class AdminSysUserController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
     @ApiOperation(value = "新增")
     @PostMapping(value = "/sys/users")
-    public ApiResult<?> insert(@RequestBody @Valid AdminInsertOrUpdateSysUserDTO dto) {
+    public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysUserDTO dto) {
         sysUserService.adminInsert(dto);
 
         return ApiResult.success();
@@ -71,7 +71,7 @@ public class AdminSysUserController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
     @ApiOperation(value = "编辑")
     @PutMapping(value = "/sys/users/{id}")
-    public ApiResult<?> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysUserDTO dto) {
+    public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysUserDTO dto) {
         dto.setId(id);
         sysUserService.adminUpdate(dto);
 
@@ -82,7 +82,7 @@ public class AdminSysUserController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
     @ApiOperation(value = "删除")
     @DeleteMapping(value = "/sys/users")
-    public ApiResult<?> delete(@RequestBody @Valid IdsDTO<Long> dto) {
+    public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         sysUserService.adminDelete(dto.getIds());
 
         return ApiResult.success();
@@ -98,7 +98,7 @@ public class AdminSysUserController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + "resetPassword")
     @ApiOperation(value = "重置某用户密码")
     @PutMapping(value = "/sys/users/{userId}/password")
-    public ApiResult<?> resetPassword(@PathVariable Long userId, @RequestBody @Valid AdminResetSysUserPasswordDTO dto) {
+    public ApiResult<Void> resetPassword(@PathVariable Long userId, @RequestBody @Valid AdminResetSysUserPasswordDTO dto) {
         dto.setUserId(userId);
         sysUserService.adminResetUserPassword(dto);
 
@@ -110,8 +110,12 @@ public class AdminSysUserController {
 
     @SysLog(value = "修改当前用户密码")
     @ApiOperation(value = "修改当前用户密码")
-    @PostMapping(value = "/sys/users/updatePassword")
-    public ApiResult<?> updatePassword(@RequestBody @Valid AdminUpdateCurrentSysUserPasswordDTO dto) {
+    @PostMapping(value = {
+            "/sys/users/me/password:update",
+            // 兼容旧的API路由
+            "/sys/users/updatePassword"
+    })
+    public ApiResult<Void> updatePassword(@RequestBody @Valid AdminUpdateCurrentSysUserPasswordDTO dto) {
         if (!dto.getConfirmNewPassword().equals(dto.getNewPassword())) {
             throw new BusinessException(400, "密码与确认密码不同,请检查");
         }
@@ -126,7 +130,7 @@ public class AdminSysUserController {
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + "bindRoles")
     @ApiOperation(value = "绑定用户与角色关联关系")
     @PutMapping(value = "/sys/users/{userId}/roles")
-    public ApiResult<?> bindRoles(@PathVariable Long userId, @RequestBody AdminBindUserRoleRelationDTO dto) {
+    public ApiResult<Void> bindRoles(@PathVariable Long userId, @RequestBody AdminBindUserRoleRelationDTO dto) {
         dto.setUserId(userId);
         sysUserService.adminBindRoles(dto);
 
@@ -138,8 +142,12 @@ public class AdminSysUserController {
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + "kickOut")
     @ApiOperation(value = "踢某用户下线")
-    @PostMapping(value = "/sys/users/{userId}/kickOut")
-    public ApiResult<?> kickOut(@PathVariable Long userId) {
+    @PostMapping(value = {
+            "/sys/users/{userId}:kick-out",
+            // 兼容旧的API路由
+            "/sys/users/{userId}/kickOut"
+    })
+    public ApiResult<Void> kickOut(@PathVariable Long userId) {
         AdminStpUtil.kickout(userId);
 
         return ApiResult.success();
@@ -147,7 +155,11 @@ public class AdminSysUserController {
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
     @ApiOperation(value = "取指定用户关联角色ID")
-    @GetMapping(value = "/sys/users/{userId}/relatedRoleIds")
+    @GetMapping(value = {
+            "/sys/users/{userId}/roles",
+            // 兼容旧的API路由
+            "/sys/users/{userId}/relatedRoleIds"
+    })
     public ApiResult<Set<Long>> listRelatedRoleIds(@PathVariable Long userId) {
         return ApiResult.data(sysUserService.listRelatedRoleIds(userId));
     }

+ 4 - 2
src/main/java/cc/uncarbon/module/appapi/constant/AppApiConstant.java

@@ -4,11 +4,13 @@ package cc.uncarbon.module.appapi.constant;
 /**
  * C端接口常量
  */
-public interface AppApiConstant {
+public class AppApiConstant {
+    private AppApiConstant() {
+    }
 
     /**
      * HTTP-API路由前缀
      */
-    String HTTP_API_URL_PREFIX = "/app";
+    public static final String HTTP_API_URL_PREFIX = "/app";
 
 }

+ 1 - 1
src/main/java/cc/uncarbon/module/appapi/web/AppAuthController.java

@@ -26,7 +26,7 @@ public class AppAuthController {
 
     @ApiOperation(value = "登录")
     @PostMapping("/auth/login")
-    public ApiResult<?> login() {
+    public ApiResult<Void> login() {
         /*
         编码时请参考AdminAuthController#login
          */

+ 1 - 1
src/main/java/cc/uncarbon/module/oss/config/FileStorageConfiguration.java

@@ -1,6 +1,6 @@
 package cc.uncarbon.module.oss.config;
 
-import cn.xuyanwu.spring.file.storage.EnableFileStorage;
+import org.dromara.x.file.storage.spring.EnableFileStorage;
 import org.springframework.context.annotation.Configuration;
 
 

+ 4 - 2
src/main/java/cc/uncarbon/module/oss/constant/OssConstant.java

@@ -1,10 +1,12 @@
 package cc.uncarbon.module.oss.constant;
 
-public interface OssConstant {
+public class OssConstant {
+    private OssConstant() {
+    }
 
     /**
      * 存储平台-本地存储-前缀
      */
-    String PLATFORM_PREFIX_LOCAL = "local";
+    public static final String PLATFORM_PREFIX_LOCAL = "local";
 
 }

+ 0 - 2
src/main/java/cc/uncarbon/module/oss/entity/OssFileInfoEntity.java

@@ -14,8 +14,6 @@ import lombok.experimental.SuperBuilder;
 
 /**
  * 上传文件信息
- *
- * @author Uncarbon
  */
 @EqualsAndHashCode(callSuper = true)
 @Accessors(chain = true)

+ 0 - 2
src/main/java/cc/uncarbon/module/oss/facade/OssUploadDownloadFacade.java

@@ -8,8 +8,6 @@ import lombok.NonNull;
 
 /**
  * 文件上传下载门面
- *
- * @author Uncarbon
  */
 public interface OssUploadDownloadFacade {
 

+ 5 - 7
src/main/java/cc/uncarbon/module/oss/facade/impl/OssUploadDownloadFacadeImpl.java

@@ -7,20 +7,18 @@ import cc.uncarbon.module.oss.model.request.UploadFileAttributeDTO;
 import cc.uncarbon.module.oss.model.response.OssFileDownloadReplyBO;
 import cc.uncarbon.module.oss.model.response.OssFileInfoBO;
 import cc.uncarbon.module.oss.service.OssFileInfoService;
-import cn.hutool.core.util.StrUtil;
-import cn.xuyanwu.spring.file.storage.FileInfo;
-import cn.xuyanwu.spring.file.storage.FileStorageService;
-import cn.xuyanwu.spring.file.storage.exception.FileStorageRuntimeException;
+import cn.hutool.core.text.CharSequenceUtil;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.x.file.storage.core.FileInfo;
+import org.dromara.x.file.storage.core.FileStorageService;
+import org.dromara.x.file.storage.core.exception.FileStorageRuntimeException;
 import org.springframework.stereotype.Service;
 
 
 /**
  * 文件上传下载门面
- *
- * @author Uncarbon
  */
 @Slf4j
 @Service
@@ -77,7 +75,7 @@ public class OssUploadDownloadFacadeImpl implements OssUploadDownloadFacade {
         byte[] fileBytes = null;
         if (
                 OssFileInfoService.isLocalPlatform(ossFileInfo.getStoragePlatform())
-                || StrUtil.isEmpty(ossFileInfo.getDirectUrl())
+                || CharSequenceUtil.isEmpty(ossFileInfo.getDirectUrl())
         ) {
             FileInfo fileInfo = OssFileInfoService.toFileInfo(ossFileInfo);
             try {

+ 2 - 4
src/main/java/cc/uncarbon/module/oss/mapper/OssFileInfoMapper.java

@@ -1,16 +1,14 @@
 package cc.uncarbon.module.oss.mapper;
 
+import cc.uncarbon.framework.crud.mapper.HelioBaseMapper;
 import cc.uncarbon.module.oss.entity.OssFileInfoEntity;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 
 
 /**
  * 上传文件信息
- *
- * @author Uncarbon
  */
 @Mapper
-public interface OssFileInfoMapper extends BaseMapper<OssFileInfoEntity> {
+public interface OssFileInfoMapper extends HelioBaseMapper<OssFileInfoEntity, Long> {
 
 }

+ 0 - 2
src/main/java/cc/uncarbon/module/oss/model/request/AdminInsertOrUpdateOssFileInfoDTO.java

@@ -15,8 +15,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-新增/编辑上传文件信息 DTO
- *
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @SuperBuilder

+ 0 - 2
src/main/java/cc/uncarbon/module/oss/model/request/AdminListOssFileInfoDTO.java

@@ -16,8 +16,6 @@ import java.time.LocalDateTime;
 
 /**
  * 后台管理-分页列表上传文件信息 DTO
- *
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @SuperBuilder

+ 0 - 2
src/main/java/cc/uncarbon/module/oss/model/request/UploadFileAttributeDTO.java

@@ -11,8 +11,6 @@ import java.io.Serializable;
 
 /**
  * 上传文件属性 DTO
- *
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @AllArgsConstructor

+ 0 - 2
src/main/java/cc/uncarbon/module/oss/model/response/OssFileDownloadReplyBO.java

@@ -12,8 +12,6 @@ import java.io.Serializable;
 
 /**
  * 下载文件结果 BO
- *
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @SuperBuilder

+ 0 - 2
src/main/java/cc/uncarbon/module/oss/model/response/OssFileInfoBO.java

@@ -16,8 +16,6 @@ import java.time.LocalDateTime;
 
 /**
  * 上传文件信息 BO
- *
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @SuperBuilder

+ 0 - 2
src/main/java/cc/uncarbon/module/oss/model/response/OssFileUploadResultVO.java

@@ -11,8 +11,6 @@ import java.io.Serializable;
 
 /**
  * 上传文件结果 VO
- *
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @AllArgsConstructor

+ 15 - 17
src/main/java/cc/uncarbon/module/oss/service/OssFileInfoService.java

@@ -4,7 +4,6 @@ import cc.uncarbon.framework.core.constant.HelioConstant;
 import cc.uncarbon.framework.core.exception.BusinessException;
 import cc.uncarbon.framework.core.page.PageParam;
 import cc.uncarbon.framework.core.page.PageResult;
-import cc.uncarbon.framework.crud.service.impl.HelioBaseServiceImpl;
 import cc.uncarbon.module.oss.constant.OssConstant;
 import cc.uncarbon.module.oss.entity.OssFileInfoEntity;
 import cc.uncarbon.module.oss.enums.OssErrorEnum;
@@ -15,15 +14,15 @@ import cc.uncarbon.module.oss.model.response.OssFileInfoBO;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
-import cn.xuyanwu.spring.file.storage.FileInfo;
-import cn.xuyanwu.spring.file.storage.FileStorageService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.x.file.storage.core.FileInfo;
+import org.dromara.x.file.storage.core.FileStorageService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -35,14 +34,13 @@ import java.util.List;
 
 /**
  * 上传文件信息
- *
- * @author Uncarbon
  */
 @Slf4j
 @Service
 @RequiredArgsConstructor
-public class OssFileInfoService extends HelioBaseServiceImpl<OssFileInfoMapper, OssFileInfoEntity> {
+public class OssFileInfoService {
 
+    private final OssFileInfoMapper ossFileInfoMapper;
     private final FileStorageService fileStorageService;
 
 
@@ -50,16 +48,16 @@ public class OssFileInfoService extends HelioBaseServiceImpl<OssFileInfoMapper,
      * 后台管理-分页列表
      */
     public PageResult<OssFileInfoBO> adminList(PageParam pageParam, AdminListOssFileInfoDTO dto) {
-        Page<OssFileInfoEntity> entityPage = this.page(
+        Page<OssFileInfoEntity> entityPage = ossFileInfoMapper.selectPage(
                 new Page<>(pageParam.getPageNum(), pageParam.getPageSize()),
                 new QueryWrapper<OssFileInfoEntity>()
                         .lambda()
                         // 原始文件名
-                        .like(StrUtil.isNotBlank(dto.getOriginalFilename()), OssFileInfoEntity::getOriginalFilename, StrUtil.cleanBlank(dto.getOriginalFilename()))
+                        .like(CharSequenceUtil.isNotBlank(dto.getOriginalFilename()), OssFileInfoEntity::getOriginalFilename, CharSequenceUtil.cleanBlank(dto.getOriginalFilename()))
                         // 扩展名
-                        .eq(StrUtil.isNotBlank(dto.getExtendName()), OssFileInfoEntity::getExtendName, StrUtil.cleanBlank(dto.getExtendName()))
+                        .eq(CharSequenceUtil.isNotBlank(dto.getExtendName()), OssFileInfoEntity::getExtendName, CharSequenceUtil.cleanBlank(dto.getExtendName()))
                         // 文件类别
-                        .eq(StrUtil.isNotBlank(dto.getClassified()), OssFileInfoEntity::getClassified, StrUtil.cleanBlank(dto.getClassified()))
+                        .eq(CharSequenceUtil.isNotBlank(dto.getClassified()), OssFileInfoEntity::getClassified, CharSequenceUtil.cleanBlank(dto.getClassified()))
                         // 时间区间
                         .between(ObjectUtil.isNotNull(dto.getBeginAt()) && ObjectUtil.isNotNull(dto.getEndAt()), OssFileInfoEntity::getCreatedAt, dto.getBeginAt(), dto.getEndAt())
                         // 排序
@@ -87,7 +85,7 @@ public class OssFileInfoService extends HelioBaseServiceImpl<OssFileInfoMapper,
      * @return null or BO
      */
     public OssFileInfoBO getOneById(Long id, boolean throwIfInvalidId) throws BusinessException {
-        OssFileInfoEntity entity = this.getById(id);
+        OssFileInfoEntity entity = ossFileInfoMapper.selectById(id);
         if (throwIfInvalidId) {
             OssErrorEnum.INVALID_ID.assertNotNull(entity);
         }
@@ -103,20 +101,20 @@ public class OssFileInfoService extends HelioBaseServiceImpl<OssFileInfoMapper,
         log.info("[后台管理-删除上传文件信息] >> ids={}", ids);
 
         // 1. 删除原始文件
-        List<OssFileInfoEntity> entityList = this.listByIds(ids);
+        List<OssFileInfoEntity> entityList = ossFileInfoMapper.selectByIds(ids);
         for (OssFileInfoEntity entity : entityList) {
             fileStorageService.delete(toFileInfo(entity));
         }
 
         // 2. 删除文件记录
-        this.removeByIds(ids);
+        ossFileInfoMapper.deleteBatchIds(ids);
     }
 
     /**
      * 根据 MD5 取文件信息
      */
     public OssFileInfoBO getOneByMd5(String md5) {
-        OssFileInfoEntity entity = this.getOne(
+        OssFileInfoEntity entity = ossFileInfoMapper.selectOne(
                 new QueryWrapper<OssFileInfoEntity>()
                         .lambda()
                         .eq(OssFileInfoEntity::getMd5, md5)
@@ -149,7 +147,7 @@ public class OssFileInfoService extends HelioBaseServiceImpl<OssFileInfoMapper,
             // 非本地存储,保存对象存储直链
             entity.setDirectUrl(fileInfo.getUrl());
         }
-        this.save(entity);
+        ossFileInfoMapper.insert(entity);
 
         return this.entity2BO(entity);
     }
@@ -187,7 +185,7 @@ public class OssFileInfoService extends HelioBaseServiceImpl<OssFileInfoMapper,
      * @param storagePlatform 存储平台名
      */
     public static boolean isLocalPlatform(String storagePlatform) {
-        return StrUtil.startWith(storagePlatform, OssConstant.PLATFORM_PREFIX_LOCAL);
+        return CharSequenceUtil.startWith(storagePlatform, OssConstant.PLATFORM_PREFIX_LOCAL);
     }
 
     /*

+ 7 - 12
src/main/java/cc/uncarbon/module/sys/constant/SysConstant.java

@@ -3,36 +3,31 @@ package cc.uncarbon.module.sys.constant;
 
 /**
  * 系统管理常量
- *
- * @author Uncarbon
  */
-public interface SysConstant {
+public class SysConstant {
+    private SysConstant() {
+    }
 
     /**
      * 后台管理接口路由前缀
      * @deprecated since 1.9.0, because its meaning is no longer so fitting; replaced by AdminApiConstant#API_URL_PREFIX
      */
     @Deprecated
-    String SYS_MODULE_CONTEXT_PATH = "/sys";
+    public static final String SYS_MODULE_CONTEXT_PATH = "/sys";
 
     /**
      * 无上级节点的父级ID
      */
-    Long ROOT_PARENT_ID = 0L;
+    public static final Long ROOT_PARENT_ID = 0L;
 
     /**
      * Vben Admin后台管理-空页面
      */
-    String VBEN_ADMIN_BLANK_VIEW = "LAYOUT";
+    public static final String VBEN_ADMIN_BLANK_VIEW = "LAYOUT";
 
     /**
      * 超级管理员角色ID
      */
-    Long SUPER_ADMIN_ROLE_ID = 1L;
-
-    /**
-     * 敏感字段,`SysLogAspect` 切面记录系统操作日志时,会先去除敏感字段后再入库
-     */
-    String[] SENSITIVE_FIELDS = {"password", "oldPassword", "newPassword", "confirmNewPassword", "passwordOfNewUser", "randomPassword", "tenantAdminPassword"};
+    public static final Long SUPER_ADMIN_ROLE_ID = 1L;
 
 }

+ 0 - 2
src/main/java/cc/uncarbon/module/sys/entity/SysDataDictEntity.java

@@ -14,8 +14,6 @@ import lombok.experimental.SuperBuilder;
 
 /**
  * 数据字典
- *
- * @author Uncarbon
  */
 @EqualsAndHashCode(callSuper = true)
 @Accessors(chain = true)

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/entity/SysDeptEntity.java

@@ -15,7 +15,6 @@ import lombok.experimental.SuperBuilder;
 
 /**
  * 部门
- * @author Uncarbon
  */
 @EqualsAndHashCode(callSuper = true)
 @Accessors(chain = true)

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/entity/SysMenuEntity.java

@@ -16,7 +16,6 @@ import lombok.experimental.SuperBuilder;
 
 /**
  * 后台菜单
- * @author Uncarbon
  */
 @EqualsAndHashCode(callSuper = true)
 @Accessors(chain = true)

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/entity/SysParamEntity.java

@@ -14,7 +14,6 @@ import lombok.experimental.SuperBuilder;
 
 /**
  * 系统参数
- * @author Uncarbon
  */
 @EqualsAndHashCode(callSuper = true)
 @Accessors(chain = true)

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/entity/SysRoleEntity.java

@@ -14,7 +14,6 @@ import lombok.experimental.SuperBuilder;
 
 /**
  * 后台角色
- * @author Uncarbon
  */
 @EqualsAndHashCode(callSuper = true)
 @Accessors(chain = true)

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/entity/SysRoleMenuRelationEntity.java

@@ -14,7 +14,6 @@ import lombok.experimental.SuperBuilder;
 
 /**
  * 后台角色-可见菜单关联
- * @author Uncarbon
  */
 @EqualsAndHashCode(callSuper = true)
 @Accessors(chain = true)

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/entity/SysTenantEntity.java

@@ -15,7 +15,6 @@ import lombok.experimental.SuperBuilder;
 
 /**
  * 系统租户
- * @author Uncarbon
  */
 @EqualsAndHashCode(callSuper = true)
 @Accessors(chain = true)

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/entity/SysUserDeptRelationEntity.java

@@ -14,7 +14,6 @@ import lombok.experimental.SuperBuilder;
 
 /**
  * 后台用户-部门关联
- * @author Uncarbon
  */
 @EqualsAndHashCode(callSuper = true)
 @Accessors(chain = true)

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/entity/SysUserEntity.java

@@ -19,7 +19,6 @@ import java.time.LocalDateTime;
 
 /**
  * 后台用户
- * @author Uncarbon
  */
 @EqualsAndHashCode(callSuper = true)
 @Accessors(chain = true)

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/entity/SysUserRoleRelationEntity.java

@@ -14,7 +14,6 @@ import lombok.experimental.SuperBuilder;
 
 /**
  * 后台用户-角色关联
- * @author Uncarbon
  */
 @EqualsAndHashCode(callSuper = true)
 @Accessors(chain = true)

+ 3 - 3
src/main/java/cc/uncarbon/module/sys/extension/impl/DefaultSysLogAspectExtension.java

@@ -3,9 +3,9 @@ package cc.uncarbon.module.sys.extension.impl;
 import cc.uncarbon.module.sys.extension.SysLogAspectExtension;
 import cc.uncarbon.module.sys.model.response.IPLocationBO;
 import cn.hutool.core.net.NetUtil;
+import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.text.StrPool;
 import cn.hutool.core.util.CharsetUtil;
-import cn.hutool.core.util.StrUtil;
 import cn.hutool.http.HttpRequest;
 import cn.hutool.http.HttpResponse;
 import cn.hutool.json.JSONObject;
@@ -17,7 +17,7 @@ public class DefaultSysLogAspectExtension implements SysLogAspectExtension {
 
     @Override
     public IPLocationBO queryIPLocation(String ip) {
-        if (StrUtil.contains(ip, StrPool.COLON)) {
+        if (CharSequenceUtil.contains(ip, StrPool.COLON)) {
             // 仅根据冒号简易判断;暂不支持IPv6地址
             return IPLocationBO.unknown();
         }
@@ -49,7 +49,7 @@ public class DefaultSysLogAspectExtension implements SysLogAspectExtension {
                 JSONObject repJson = JSONUtil.parseObj(repStr);
                 String pro = repJson.getStr("pro");
                 String err = repJson.getStr("err");
-                if (StrUtil.isEmpty(pro) || "noprovince".equals(err)) {
+                if (CharSequenceUtil.isEmpty(pro) || "noprovince".equals(err)) {
                     // 可能是非中国内地IP
                     String regionName = repJson.getStr("addr");
                     return IPLocationBO.unknown().setRegionName(regionName);

+ 0 - 2
src/main/java/cc/uncarbon/module/sys/facade/SysTenantFacade.java

@@ -4,8 +4,6 @@ import cc.uncarbon.module.sys.model.request.AdminInsertSysTenantDTO;
 
 /**
  * 系统租户防腐层,用于解决循环依赖
- *
- * @author Uncarbon
  */
 public interface SysTenantFacade {
 

+ 6 - 35
src/main/java/cc/uncarbon/module/sys/facade/impl/SysTenantFacadeImpl.java

@@ -1,8 +1,6 @@
 package cc.uncarbon.module.sys.facade.impl;
 
-import cc.uncarbon.framework.core.context.UserContextHolder;
 import cc.uncarbon.module.sys.entity.SysTenantEntity;
-import cc.uncarbon.module.sys.entity.SysUserRoleRelationEntity;
 import cc.uncarbon.module.sys.facade.SysTenantFacade;
 import cc.uncarbon.module.sys.model.request.AdminInsertOrUpdateSysRoleDTO;
 import cc.uncarbon.module.sys.model.request.AdminInsertOrUpdateSysUserDTO;
@@ -11,30 +9,22 @@ import cc.uncarbon.module.sys.service.SysRoleService;
 import cc.uncarbon.module.sys.service.SysTenantService;
 import cc.uncarbon.module.sys.service.SysUserRoleRelationService;
 import cc.uncarbon.module.sys.service.SysUserService;
-import cn.hutool.core.bean.BeanUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.time.LocalDateTime;
-
 /**
  * 系统租户防腐层,用于解决循环依赖
- *
- * @author Uncarbon
  */
-@Service
 @RequiredArgsConstructor
+@Service
 @Slf4j
 public class SysTenantFacadeImpl implements SysTenantFacade {
 
     private final SysTenantService sysTenantService;
-
     private final SysRoleService sysRoleService;
-
     private final SysUserRoleRelationService sysUserRoleRelationService;
-
     private final SysUserService sysUserService;
 
 
@@ -48,12 +38,7 @@ public class SysTenantFacadeImpl implements SysTenantFacade {
         1. 加入一个新租户(tenant)
         这里是直接顺带创建管理员账号了, 你可以根据业务需要决定是否创建
          */
-
-        dto.setId(null);
-        SysTenantEntity entity = new SysTenantEntity();
-        BeanUtil.copyProperties(dto, entity);
-
-        sysTenantService.save(entity);
+        SysTenantEntity entity = sysTenantService.adminInsert(dto);
 
         Long newTenantEntityId = entity.getId();
         Long newTenantId = entity.getTenantId();
@@ -87,28 +72,14 @@ public class SysTenantFacadeImpl implements SysTenantFacade {
         /*
         4. 将新用户绑定至新角色上
          */
-        sysUserRoleRelationService.save(
-                SysUserRoleRelationEntity.builder()
-                        .tenantId(newTenantId)
-                        .userId(newUserId)
-                        .roleId(newRoleId)
-                        // 可能不会自动填充字段,手动补上
-                        .createdAt(LocalDateTime.now())
-                        .createdBy(UserContextHolder.getUserContext().getUserName())
-                        .updatedAt(LocalDateTime.now())
-                        .updatedBy(UserContextHolder.getUserContext().getUserName())
-                        .build()
-        );
-
-        entity = new SysTenantEntity();
-        entity
-                .setTenantAdminUserId(newUserId)
-                .setId(newTenantEntityId);
+        sysUserRoleRelationService.adminInsert(newTenantId, newUserId, newRoleId);
 
         /*
         5. 把管理员账号更新进库
          */
-        sysTenantService.updateById(entity);
+        SysTenantEntity update = new SysTenantEntity().setTenantAdminUserId(newUserId);
+        update.setId(newTenantEntityId);
+        sysTenantService.adminUpdate(update);
 
         return newTenantId;
     }

+ 0 - 2
src/main/java/cc/uncarbon/module/sys/mapper/SysDataDictMapper.java

@@ -7,8 +7,6 @@ import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 数据字典
- *
- * @author Uncarbon
  */
 @Mapper
 public interface SysDataDictMapper extends BaseMapper<SysDataDictEntity> {

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/mapper/SysDeptMapper.java

@@ -6,7 +6,6 @@ import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 部门
- * @author Uncarbon
  */
 @Mapper
 public interface SysDeptMapper extends BaseMapper<SysDeptEntity> {

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/mapper/SysMenuMapper.java

@@ -6,7 +6,6 @@ import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 后台菜单
- * @author Uncarbon
  */
 @Mapper
 public interface SysMenuMapper extends BaseMapper<SysMenuEntity> {

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/mapper/SysParamMapper.java

@@ -6,7 +6,6 @@ import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 系统参数
- * @author Uncarbon
  */
 @Mapper
 public interface SysParamMapper extends BaseMapper<SysParamEntity> {

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/mapper/SysRoleMapper.java

@@ -6,7 +6,6 @@ import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 后台角色
- * @author Uncarbon
  */
 @Mapper
 public interface SysRoleMapper extends BaseMapper<SysRoleEntity> {

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/mapper/SysRoleMenuRelationMapper.java

@@ -6,7 +6,6 @@ import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 后台角色-可见菜单关联
- * @author Uncarbon
  */
 @Mapper
 public interface SysRoleMenuRelationMapper extends BaseMapper<SysRoleMenuRelationEntity> {

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/mapper/SysTenantMapper.java

@@ -6,7 +6,6 @@ import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 系统租户
- * @author Uncarbon
  */
 @Mapper
 public interface SysTenantMapper extends BaseMapper<SysTenantEntity> {

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/mapper/SysUserDeptRelationMapper.java

@@ -6,7 +6,6 @@ import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 后台用户-部门关联
- * @author Uncarbon
  */
 @Mapper
 public interface SysUserDeptRelationMapper extends BaseMapper<SysUserDeptRelationEntity> {

+ 0 - 2
src/main/java/cc/uncarbon/module/sys/mapper/SysUserMapper.java

@@ -9,8 +9,6 @@ import org.apache.ibatis.annotations.Param;
 
 /**
  * 后台用户
- *
- * @author Uncarbon
  */
 @Mapper
 public interface SysUserMapper extends BaseMapper<SysUserEntity> {

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/mapper/SysUserRoleRelationMapper.java

@@ -6,7 +6,6 @@ import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 后台用户-角色关联
- * @author Uncarbon
  */
 @Mapper
 public interface SysUserRoleRelationMapper extends BaseMapper<SysUserRoleRelationEntity> {

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminBindRoleMenuRelationDTO.java

@@ -13,7 +13,6 @@ import java.util.Set;
 
 /**
  * 后台管理-绑定角色与菜单关联关系
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminBindUserRoleRelationDTO.java

@@ -13,7 +13,6 @@ import java.util.Set;
 
 /**
  * 后台管理-绑定用户与角色关联关系
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 2
src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysDataDictDTO.java

@@ -13,8 +13,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-新增/编辑数据字典
- *
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysDeptDTO.java

@@ -14,7 +14,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-新增/编辑部门
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysMenuDTO.java

@@ -16,7 +16,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-新增/编辑后台菜单
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysParamDTO.java

@@ -13,7 +13,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-新增/编辑系统参数
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysRoleDTO.java

@@ -12,7 +12,6 @@ import lombok.experimental.Accessors;
 
 /**
  * 后台管理-新增/编辑后台角色
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysUserDTO.java

@@ -18,7 +18,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-新增/编辑后台用户
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertSysTenantDTO.java

@@ -14,7 +14,6 @@ import javax.validation.constraints.Pattern;
 
 /**
  * 后台管理-新增系统租户
- * @author Uncarbon
  */
 @EqualsAndHashCode(callSuper = true)
 @Accessors(chain = true)

+ 0 - 2
src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysDataDictDTO.java

@@ -12,8 +12,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-分页列表数据字典
- *
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysParamDTO.java

@@ -12,7 +12,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-分页列表系统参数
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysRoleDTO.java

@@ -12,7 +12,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-分页列表后台角色
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysTenantDTO.java

@@ -13,7 +13,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-分页列表系统租户
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysUserDTO.java

@@ -12,7 +12,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-分页列表后台用户
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminResetSysUserPasswordDTO.java

@@ -14,7 +14,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-重置某用户密码
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminUpdateCurrentSysUserPasswordDTO.java

@@ -14,7 +14,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-修改当前用户密码
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/request/AdminUpdateSysTenantDTO.java

@@ -15,7 +15,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-编辑系统租户
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 2
src/main/java/cc/uncarbon/module/sys/model/request/SysUserLoginDTO.java

@@ -15,8 +15,6 @@ import java.io.Serializable;
 
 /**
  * 后台管理-后台用户登录
- *
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 2
src/main/java/cc/uncarbon/module/sys/model/response/SysDataDictBO.java

@@ -16,8 +16,6 @@ import java.time.LocalDateTime;
 
 /**
  * 数据字典BO
- *
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/response/SysDeptBO.java

@@ -17,7 +17,6 @@ import java.time.LocalDateTime;
 
 /**
  * 部门BO
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/response/SysMenuBO.java

@@ -18,7 +18,6 @@ import java.time.LocalDateTime;
 
 /**
  * 后台菜单BO
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/response/SysParamBO.java

@@ -16,7 +16,6 @@ import java.time.LocalDateTime;
 
 /**
  * 系统参数BO
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/response/SysRoleBO.java

@@ -17,7 +17,6 @@ import java.util.Collection;
 
 /**
  * 后台角色BO
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/response/SysTenantBO.java

@@ -17,7 +17,6 @@ import java.time.LocalDateTime;
 
 /**
  * 系统租户BO
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/response/SysUserBO.java

@@ -18,7 +18,6 @@ import java.time.LocalDateTime;
 
 /**
  * 后台用户BO
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/response/SysUserBaseInfoBO.java

@@ -15,7 +15,6 @@ import java.io.Serializable;
 /**
  * 后台用户BO
  * 仅保留基本信息
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/response/SysUserLoginBO.java

@@ -16,7 +16,6 @@ import lombok.experimental.SuperBuilder;
 /**
  * 登录后返回的字段
  * 用于内部 RPC 调用
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @SuperBuilder

+ 0 - 2
src/main/java/cc/uncarbon/module/sys/model/response/SysUserLoginVO.java

@@ -13,8 +13,6 @@ import lombok.experimental.SuperBuilder;
 /**
  * 登录后返回的字段
  * 用于返回给前端
- *
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @SuperBuilder

+ 0 - 2
src/main/java/cc/uncarbon/module/sys/model/response/VbenAdminMenuMetaVO.java

@@ -3,14 +3,12 @@ package cc.uncarbon.module.sys.model.response;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
-import lombok.Getter;
 
 import java.io.Serializable;
 
 
 /**
  * 后台菜单子项详情 for VbenAdmin
- * @author Uncarbon
  */
 @AllArgsConstructor
 @Data

+ 0 - 1
src/main/java/cc/uncarbon/module/sys/model/response/VbenAdminUserInfoVO.java

@@ -13,7 +13,6 @@ import java.time.LocalDateTime;
 
 /**
  * 后台用户 for VbenAdmin
- * @author Uncarbon
  */
 @Accessors(chain = true)
 @Builder

+ 14 - 14
src/main/java/cc/uncarbon/module/sys/service/SysDataDictService.java

@@ -4,7 +4,6 @@ import cc.uncarbon.framework.core.constant.HelioConstant;
 import cc.uncarbon.framework.core.exception.BusinessException;
 import cc.uncarbon.framework.core.page.PageParam;
 import cc.uncarbon.framework.core.page.PageResult;
-import cc.uncarbon.framework.crud.service.impl.HelioBaseServiceImpl;
 import cc.uncarbon.module.sys.entity.SysDataDictEntity;
 import cc.uncarbon.module.sys.enums.SysErrorEnum;
 import cc.uncarbon.module.sys.mapper.SysDataDictMapper;
@@ -13,7 +12,7 @@ import cc.uncarbon.module.sys.model.request.AdminListSysDataDictDTO;
 import cc.uncarbon.module.sys.model.response.SysDataDictBO;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.text.CharSequenceUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
@@ -29,24 +28,25 @@ import java.util.List;
 
 /**
  * 数据字典
- *
- * @author Uncarbon
  */
-@Slf4j
-@Service
 @RequiredArgsConstructor
-public class SysDataDictService extends HelioBaseServiceImpl<SysDataDictMapper, SysDataDictEntity> {
+@Service
+@Slf4j
+public class SysDataDictService {
+
+    private final SysDataDictMapper sysDataDictMapper;
+
 
     /**
      * 后台管理-分页列表
      */
     public PageResult<SysDataDictBO> adminList(PageParam pageParam, AdminListSysDataDictDTO dto) {
-        Page<SysDataDictEntity> entityPage = this.page(
+        Page<SysDataDictEntity> entityPage = sysDataDictMapper.selectPage(
                 new Page<>(pageParam.getPageNum(), pageParam.getPageSize()),
                 new QueryWrapper<SysDataDictEntity>()
                         .lambda()
                         // 参数描述
-                        .like(StrUtil.isNotBlank(dto.getDescription()), SysDataDictEntity::getDescription, StrUtil.cleanBlank(dto.getDescription()))
+                        .like(CharSequenceUtil.isNotBlank(dto.getDescription()), SysDataDictEntity::getDescription, CharSequenceUtil.cleanBlank(dto.getDescription()))
                         // 排序
                         .orderByDesc(SysDataDictEntity::getCreatedAt)
         );
@@ -72,7 +72,7 @@ public class SysDataDictService extends HelioBaseServiceImpl<SysDataDictMapper,
      * @return null or BO
      */
     public SysDataDictBO getOneById(Long id, boolean throwIfInvalidId) throws BusinessException {
-        SysDataDictEntity entity = this.getById(id);
+        SysDataDictEntity entity = sysDataDictMapper.selectById(id);
         if (throwIfInvalidId) {
             SysErrorEnum.INVALID_ID.assertNotNull(entity);
         }
@@ -92,7 +92,7 @@ public class SysDataDictService extends HelioBaseServiceImpl<SysDataDictMapper,
         SysDataDictEntity entity = new SysDataDictEntity();
         BeanUtil.copyProperties(dto, entity);
 
-        this.save(entity);
+        sysDataDictMapper.insert(entity);
 
         return entity.getId();
     }
@@ -108,7 +108,7 @@ public class SysDataDictService extends HelioBaseServiceImpl<SysDataDictMapper,
         SysDataDictEntity entity = new SysDataDictEntity();
         BeanUtil.copyProperties(dto, entity);
 
-        this.updateById(entity);
+        sysDataDictMapper.updateById(entity);
     }
 
     /**
@@ -117,7 +117,7 @@ public class SysDataDictService extends HelioBaseServiceImpl<SysDataDictMapper,
     @Transactional(rollbackFor = Exception.class)
     public void adminDelete(Collection<Long> ids) {
         log.info("[后台管理-删除数据字典] >> 入参={}", ids);
-        this.removeByIds(ids);
+        sysDataDictMapper.deleteBatchIds(ids);
     }
 
     /*
@@ -186,7 +186,7 @@ public class SysDataDictService extends HelioBaseServiceImpl<SysDataDictMapper,
      * @param dto DTO
      */
     private void checkExistence(AdminInsertOrUpdateSysDataDictDTO dto) {
-        SysDataDictEntity existingEntity = this.getOne(
+        SysDataDictEntity existingEntity = sysDataDictMapper.selectOne(
                 new QueryWrapper<SysDataDictEntity>()
                         .lambda()
                         // 仅取主键ID

+ 12 - 22
src/main/java/cc/uncarbon/module/sys/service/SysDeptService.java

@@ -2,10 +2,8 @@ package cc.uncarbon.module.sys.service;
 
 import cc.uncarbon.framework.core.constant.HelioConstant;
 import cc.uncarbon.framework.core.exception.BusinessException;
-import cc.uncarbon.framework.crud.service.impl.HelioBaseServiceImpl;
 import cc.uncarbon.module.sys.constant.SysConstant;
 import cc.uncarbon.module.sys.entity.SysDeptEntity;
-import cc.uncarbon.module.sys.entity.SysUserDeptRelationEntity;
 import cc.uncarbon.module.sys.enums.SysErrorEnum;
 import cc.uncarbon.module.sys.mapper.SysDeptMapper;
 import cc.uncarbon.module.sys.model.request.AdminInsertOrUpdateSysDeptDTO;
@@ -27,14 +25,13 @@ import java.util.List;
 
 /**
  * 部门
- *
- * @author Uncarbon
  */
 @RequiredArgsConstructor
-@Slf4j
 @Service
-public class SysDeptService extends HelioBaseServiceImpl<SysDeptMapper, SysDeptEntity> {
+@Slf4j
+public class SysDeptService {
 
+    private final SysDeptMapper sysDeptMapper;
     private final SysUserDeptRelationService sysUserDeptRelationService;
 
 
@@ -42,7 +39,7 @@ public class SysDeptService extends HelioBaseServiceImpl<SysDeptMapper, SysDeptE
      * 后台管理-列表
      */
     public List<SysDeptBO> adminList() {
-        List<SysDeptEntity> entityList = this.list(
+        List<SysDeptEntity> entityList = sysDeptMapper.selectList(
                 new QueryWrapper<SysDeptEntity>()
                         .lambda()
                         // 排序
@@ -70,7 +67,7 @@ public class SysDeptService extends HelioBaseServiceImpl<SysDeptMapper, SysDeptE
      * @return null or BO
      */
     public SysDeptBO getOneById(Long id, boolean throwIfInvalidId) throws BusinessException {
-        SysDeptEntity entity = this.getById(id);
+        SysDeptEntity entity = sysDeptMapper.selectById(id);
         if (throwIfInvalidId) {
             SysErrorEnum.INVALID_ID.assertNotNull(entity);
         }
@@ -94,7 +91,7 @@ public class SysDeptService extends HelioBaseServiceImpl<SysDeptMapper, SysDeptE
         SysDeptEntity entity = new SysDeptEntity();
         BeanUtil.copyProperties(dto, entity);
 
-        this.save(entity);
+        sysDeptMapper.insert(entity);
 
         return entity.getId();
     }
@@ -114,7 +111,7 @@ public class SysDeptService extends HelioBaseServiceImpl<SysDeptMapper, SysDeptE
         SysDeptEntity entity = new SysDeptEntity();
         BeanUtil.copyProperties(dto, entity);
 
-        this.updateById(entity);
+        sysDeptMapper.updateById(entity);
     }
 
     /**
@@ -123,7 +120,7 @@ public class SysDeptService extends HelioBaseServiceImpl<SysDeptMapper, SysDeptE
     @Transactional(rollbackFor = Exception.class)
     public void adminDelete(Collection<Long> ids) {
         log.info("[后台管理-删除部门] >> 入参={}", ids);
-        this.removeByIds(ids);
+        sysDeptMapper.deleteBatchIds(ids);
     }
 
     /**
@@ -132,18 +129,11 @@ public class SysDeptService extends HelioBaseServiceImpl<SysDeptMapper, SysDeptE
      * @param userId 用户ID
      */
     public SysDeptBO getPlainDeptByUserId(Long userId) {
-        SysUserDeptRelationEntity relationEntity = sysUserDeptRelationService.getOne(
-                new QueryWrapper<SysUserDeptRelationEntity>()
-                        .lambda()
-                        .eq(SysUserDeptRelationEntity::getUserId, userId)
-                        .last(HelioConstant.CRUD.SQL_LIMIT_1)
-        );
-
-        if (relationEntity == null) {
+        List<Long> deptIds = sysUserDeptRelationService.getUserDeptIds(userId);
+        if (CollUtil.isEmpty(deptIds)) {
             return null;
         }
-
-        SysDeptEntity entity = this.getById(relationEntity.getDeptId());
+        SysDeptEntity entity = sysDeptMapper.selectById(CollUtil.getFirst(deptIds));
         return this.entity2BO(entity);
     }
 
@@ -203,7 +193,7 @@ public class SysDeptService extends HelioBaseServiceImpl<SysDeptMapper, SysDeptE
      * @param dto DTO
      */
     private void checkExistence(AdminInsertOrUpdateSysDeptDTO dto) {
-        SysDeptEntity existingEntity = this.getOne(
+        SysDeptEntity existingEntity = sysDeptMapper.selectOne(
                 new QueryWrapper<SysDeptEntity>()
                         .lambda()
                         // 仅取主键ID

+ 19 - 13
src/main/java/cc/uncarbon/module/sys/service/SysLogService.java

@@ -3,7 +3,6 @@ package cc.uncarbon.module.sys.service;
 import cc.uncarbon.framework.core.exception.BusinessException;
 import cc.uncarbon.framework.core.page.PageParam;
 import cc.uncarbon.framework.core.page.PageResult;
-import cc.uncarbon.framework.crud.service.impl.HelioBaseServiceImpl;
 import cc.uncarbon.module.sys.entity.SysLogEntity;
 import cc.uncarbon.module.sys.enums.SysErrorEnum;
 import cc.uncarbon.module.sys.mapper.SysLogMapper;
@@ -12,8 +11,8 @@ import cc.uncarbon.module.sys.model.request.AdminListSysLogDTO;
 import cc.uncarbon.module.sys.model.response.SysLogBO;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
@@ -29,16 +28,24 @@ import java.util.List;
 /**
  * 系统日志
  */
-@Slf4j
-@Service
 @RequiredArgsConstructor
-public class SysLogService extends HelioBaseServiceImpl<SysLogMapper, SysLogEntity> {
+@Service
+@Slf4j
+public class SysLogService {
+
+    /**
+     * UA可以接受的最大长度
+     */
+    public static final int USER_AGENT_MAX_LENGTH = 255;
+
+    private final SysLogMapper sysLogMapper;
+
 
     /**
      * 后台管理-分页列表
      */
     public PageResult<SysLogBO> adminList(PageParam pageParam, AdminListSysLogDTO dto) {
-        Page<SysLogEntity> entityPage = this.page(
+        Page<SysLogEntity> entityPage = sysLogMapper.selectPage(
                 new Page<>(pageParam.getPageNum(), pageParam.getPageSize()),
                 new QueryWrapper<SysLogEntity>()
                         .lambda()
@@ -48,9 +55,9 @@ public class SysLogService extends HelioBaseServiceImpl<SysLogMapper, SysLogEnti
                                 SysLogEntity::getIpLocationRegionName, SysLogEntity::getIpLocationProvinceName,
                                 SysLogEntity::getIpLocationCityName, SysLogEntity::getIpLocationDistrictName)
                         // 用户账号
-                        .like(StrUtil.isNotBlank(dto.getUsername()), SysLogEntity::getUsername, StrUtil.cleanBlank(dto.getUsername()))
+                        .like(CharSequenceUtil.isNotBlank(dto.getUsername()), SysLogEntity::getUsername, CharSequenceUtil.cleanBlank(dto.getUsername()))
                         // 操作内容
-                        .like(StrUtil.isNotBlank(dto.getOperation()), SysLogEntity::getOperation, StrUtil.cleanBlank(dto.getOperation()))
+                        .like(CharSequenceUtil.isNotBlank(dto.getOperation()), SysLogEntity::getOperation, CharSequenceUtil.cleanBlank(dto.getOperation()))
                         // 状态
                         .eq(ObjectUtil.isNotNull(dto.getStatus()), SysLogEntity::getStatus, dto.getStatus())
                         // 时间区间
@@ -80,7 +87,7 @@ public class SysLogService extends HelioBaseServiceImpl<SysLogMapper, SysLogEnti
      * @return null or BO
      */
     public SysLogBO getOneById(Long id, boolean throwIfInvalidId) throws BusinessException {
-        SysLogEntity entity = this.getById(id);
+        SysLogEntity entity = sysLogMapper.selectById(id);
         if (throwIfInvalidId) {
             SysErrorEnum.INVALID_ID.assertNotNull(entity);
         }
@@ -98,15 +105,14 @@ public class SysLogService extends HelioBaseServiceImpl<SysLogMapper, SysLogEnti
         SysLogEntity entity = new SysLogEntity();
         BeanUtil.copyProperties(dto, entity);
 
-        int USER_AGENT_MAX_LENGTH = 255;
-        if (StrUtil.length(entity.getUserAgent()) > USER_AGENT_MAX_LENGTH) {
+        if (CharSequenceUtil.length(entity.getUserAgent()) > USER_AGENT_MAX_LENGTH) {
             // 超长度截断
             entity.setUserAgent(
-                    StrUtil.subPre(entity.getUserAgent(), USER_AGENT_MAX_LENGTH)
+                    CharSequenceUtil.subPre(entity.getUserAgent(), USER_AGENT_MAX_LENGTH)
             );
         }
 
-        this.save(entity);
+        sysLogMapper.insert(entity);
 
         return entity.getId();
     }

+ 20 - 21
src/main/java/cc/uncarbon/module/sys/service/SysMenuService.java

@@ -5,7 +5,6 @@ import cc.uncarbon.framework.core.context.UserContextHolder;
 import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
 import cc.uncarbon.framework.core.exception.BusinessException;
 import cc.uncarbon.framework.core.function.StreamFunction;
-import cc.uncarbon.framework.crud.service.impl.HelioBaseServiceImpl;
 import cc.uncarbon.module.sys.constant.SysConstant;
 import cc.uncarbon.module.sys.entity.SysMenuEntity;
 import cc.uncarbon.module.sys.enums.SysErrorEnum;
@@ -18,6 +17,7 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.lang.Snowflake;
+import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.text.StrPool;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -34,24 +34,23 @@ import java.util.stream.Collectors;
 
 /**
  * 后台菜单
- *
- * @author Uncarbon
  */
 @RequiredArgsConstructor
-@Slf4j
 @Service
-public class SysMenuService extends HelioBaseServiceImpl<SysMenuMapper, SysMenuEntity> {
-
-    private static final Snowflake SNOWFLAKE = IdUtil.getSnowflake(0L, 0L);
+@Slf4j
+public class SysMenuService {
 
+    private final SysMenuMapper sysMenuMapper;
     private final SysRoleMenuRelationService sysRoleMenuRelationService;
 
+    private static final Snowflake SNOWFLAKE = IdUtil.getSnowflake(0L, 0L);
+
 
     /**
      * 后台管理-列表
      */
     public List<SysMenuBO> adminList() {
-        List<SysMenuEntity> entityList = this.list(
+        List<SysMenuEntity> entityList = sysMenuMapper.selectList(
                 new QueryWrapper<SysMenuEntity>()
                         .lambda()
                         // 排序
@@ -79,7 +78,7 @@ public class SysMenuService extends HelioBaseServiceImpl<SysMenuMapper, SysMenuE
      * @return null or BO
      */
     public SysMenuBO getOneById(Long id, boolean throwIfInvalidId) throws BusinessException {
-        SysMenuEntity entity = this.getById(id);
+        SysMenuEntity entity = sysMenuMapper.selectById(id);
         if (throwIfInvalidId) {
             SysErrorEnum.INVALID_ID.assertNotNull(entity);
         }
@@ -106,7 +105,7 @@ public class SysMenuService extends HelioBaseServiceImpl<SysMenuMapper, SysMenuE
         SysMenuEntity entity = new SysMenuEntity();
         BeanUtil.copyProperties(dto, entity);
 
-        this.save(entity);
+        sysMenuMapper.insert(entity);
 
         return entity.getId();
     }
@@ -126,7 +125,7 @@ public class SysMenuService extends HelioBaseServiceImpl<SysMenuMapper, SysMenuE
         SysMenuEntity entity = new SysMenuEntity();
         BeanUtil.copyProperties(dto, entity);
 
-        this.updateById(entity);
+        sysMenuMapper.updateById(entity);
     }
 
     /**
@@ -135,7 +134,7 @@ public class SysMenuService extends HelioBaseServiceImpl<SysMenuMapper, SysMenuE
     @Transactional(rollbackFor = Exception.class)
     public void adminDelete(Collection<Long> ids) {
         log.info("[后台管理-删除后台菜单] >> 入参={}", ids);
-        this.removeByIds(ids);
+        sysMenuMapper.deleteBatchIds(ids);
     }
 
     /**
@@ -172,7 +171,7 @@ public class SysMenuService extends HelioBaseServiceImpl<SysMenuMapper, SysMenuE
 
                     if (SysConstant.SUPER_ADMIN_ROLE_ID.equals(roleId)) {
                         // 超级管理员读取所有权限,不管有没有被禁用
-                        permissions = this.list().stream()
+                        permissions = sysMenuMapper.selectList(null).stream()
                                 .map(SysMenuEntity::getPermission)
                                 .filter(StrUtil::isNotEmpty)
                                 .collect(Collectors.toSet())
@@ -184,7 +183,7 @@ public class SysMenuService extends HelioBaseServiceImpl<SysMenuMapper, SysMenuE
                         if (CollUtil.isEmpty(menuIds)) {
                             permissions = Collections.emptySet();
                         } else {
-                            permissions = this.list(
+                            permissions = sysMenuMapper.selectList(
                                             new QueryWrapper<SysMenuEntity>()
                                                     .lambda()
                                                     .select(SysMenuEntity::getPermission)
@@ -213,7 +212,7 @@ public class SysMenuService extends HelioBaseServiceImpl<SysMenuMapper, SysMenuE
             return Collections.emptySet();
         }
 
-        return this.list(
+        return sysMenuMapper.selectList(
                 new QueryWrapper<SysMenuEntity>()
                         .lambda()
                         .select(SysMenuEntity::getPermission)
@@ -269,7 +268,7 @@ public class SysMenuService extends HelioBaseServiceImpl<SysMenuMapper, SysMenuE
                         .setPath(bo.getComponent())
                 ;
                 // 防止用户忘记加了, 主动补充/
-                if (StrUtil.isNotBlank(bo.getPath()) && !bo.getPath().startsWith(StrPool.SLASH)) {
+                if (CharSequenceUtil.isNotBlank(bo.getPath()) && !bo.getPath().startsWith(StrPool.SLASH)) {
                     bo.setPath(StrPool.SLASH + bo.getPath());
                 }
                 break;
@@ -307,7 +306,7 @@ public class SysMenuService extends HelioBaseServiceImpl<SysMenuMapper, SysMenuE
         SysErrorEnum.NO_ROLE_AVAILABLE_FOR_CURRENT_USER.assertNotEmpty(roleIds);
 
         // 2. 得到所有可用的 菜单ID-上级菜单ID map,备用
-        Map<Long, Long> allMenuMap = this.list(
+        Map<Long, Long> allMenuMap = sysMenuMapper.selectList(
                 new QueryWrapper<SysMenuEntity>()
                         .lambda()
                         .select(SysMenuEntity::getId, SysMenuEntity::getParentId)
@@ -332,7 +331,7 @@ public class SysMenuService extends HelioBaseServiceImpl<SysMenuMapper, SysMenuE
         Assert.notEmpty(ids);
         Assert.notEmpty(types);
 
-        List<SysMenuEntity> entityList = this.list(
+        List<SysMenuEntity> entityList = sysMenuMapper.selectList(
                 new QueryWrapper<SysMenuEntity>()
                         .lambda()
                         .in(SysMenuEntity::getId, ids)
@@ -353,10 +352,10 @@ public class SysMenuService extends HelioBaseServiceImpl<SysMenuMapper, SysMenuE
      * @param dto DTO
      */
     private void checkExistence(AdminInsertOrUpdateSysMenuDTO dto) {
-        if (StrUtil.isNotBlank(dto.getPermission())) {
-            dto.setPermission(StrUtil.cleanBlank(dto.getPermission()));
+        if (CharSequenceUtil.isNotBlank(dto.getPermission())) {
+            dto.setPermission(CharSequenceUtil.cleanBlank(dto.getPermission()));
 
-            SysMenuEntity existingEntity = this.getOne(
+            SysMenuEntity existingEntity = sysMenuMapper.selectOne(
                     new QueryWrapper<SysMenuEntity>()
                             .lambda()
                             // 仅取主键ID

+ 16 - 14
src/main/java/cc/uncarbon/module/sys/service/SysParamService.java

@@ -4,7 +4,6 @@ import cc.uncarbon.framework.core.constant.HelioConstant;
 import cc.uncarbon.framework.core.exception.BusinessException;
 import cc.uncarbon.framework.core.page.PageParam;
 import cc.uncarbon.framework.core.page.PageResult;
-import cc.uncarbon.framework.crud.service.impl.HelioBaseServiceImpl;
 import cc.uncarbon.module.sys.entity.SysParamEntity;
 import cc.uncarbon.module.sys.enums.SysErrorEnum;
 import cc.uncarbon.module.sys.mapper.SysParamMapper;
@@ -13,9 +12,10 @@ import cc.uncarbon.module.sys.model.request.AdminListSysParamDTO;
 import cc.uncarbon.module.sys.model.response.SysParamBO;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.text.CharSequenceUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -28,25 +28,27 @@ import java.util.List;
 
 /**
  * 系统参数
- *
- * @author Uncarbon
  */
+@RequiredArgsConstructor
 @Slf4j
 @Service
-public class SysParamService extends HelioBaseServiceImpl<SysParamMapper, SysParamEntity> {
+public class SysParamService {
+
+    private final SysParamMapper sysParamMapper;
+
 
     /**
      * 后台管理-分页列表
      */
     public PageResult<SysParamBO> adminList(PageParam pageParam, AdminListSysParamDTO dto) {
-        Page<SysParamEntity> entityPage = this.page(
+        Page<SysParamEntity> entityPage = sysParamMapper.selectPage(
                 new Page<>(pageParam.getPageNum(), pageParam.getPageSize()),
                 new QueryWrapper<SysParamEntity>()
                         .lambda()
                         // 键名
-                        .like(StrUtil.isNotBlank(dto.getName()), SysParamEntity::getName, StrUtil.cleanBlank(dto.getName()))
+                        .like(CharSequenceUtil.isNotBlank(dto.getName()), SysParamEntity::getName, CharSequenceUtil.cleanBlank(dto.getName()))
                         // 描述
-                        .like(StrUtil.isNotBlank(dto.getDescription()), SysParamEntity::getDescription, StrUtil.cleanBlank(dto.getDescription()))
+                        .like(CharSequenceUtil.isNotBlank(dto.getDescription()), SysParamEntity::getDescription, CharSequenceUtil.cleanBlank(dto.getDescription()))
                         // 排序
                         .orderByDesc(SysParamEntity::getCreatedAt)
         );
@@ -72,7 +74,7 @@ public class SysParamService extends HelioBaseServiceImpl<SysParamMapper, SysPar
      * @return null or BO
      */
     public SysParamBO getOneById(Long id, boolean throwIfInvalidId) throws BusinessException {
-        SysParamEntity entity = this.getById(id);
+        SysParamEntity entity = sysParamMapper.selectById(id);
         if (throwIfInvalidId) {
             SysErrorEnum.INVALID_ID.assertNotNull(entity);
         }
@@ -92,7 +94,7 @@ public class SysParamService extends HelioBaseServiceImpl<SysParamMapper, SysPar
         SysParamEntity entity = new SysParamEntity();
         BeanUtil.copyProperties(dto, entity);
 
-        this.save(entity);
+        sysParamMapper.insert(entity);
 
         return entity.getId();
     }
@@ -108,7 +110,7 @@ public class SysParamService extends HelioBaseServiceImpl<SysParamMapper, SysPar
         SysParamEntity entity = new SysParamEntity();
         BeanUtil.copyProperties(dto, entity);
 
-        this.updateById(entity);
+        sysParamMapper.updateById(entity);
     }
 
     /**
@@ -117,7 +119,7 @@ public class SysParamService extends HelioBaseServiceImpl<SysParamMapper, SysPar
     @Transactional(rollbackFor = Exception.class)
     public void adminDelete(Collection<Long> ids) {
         log.info("[后台管理-删除系统参数] >> 入参={}", ids);
-        this.removeByIds(ids);
+        sysParamMapper.deleteBatchIds(ids);
     }
 
     /**
@@ -127,7 +129,7 @@ public class SysParamService extends HelioBaseServiceImpl<SysParamMapper, SysPar
      * @return 成功返回键值,失败返回 null
      */
     public String getParamValueByName(String name) {
-        SysParamEntity sysParamEntity = this.getOne(
+        SysParamEntity sysParamEntity = sysParamMapper.selectOne(
                 new QueryWrapper<SysParamEntity>()
                         .lambda()
                         .select(SysParamEntity::getValue)
@@ -224,7 +226,7 @@ public class SysParamService extends HelioBaseServiceImpl<SysParamMapper, SysPar
      * @param dto DTO
      */
     private void checkExistence(AdminInsertOrUpdateSysParamDTO dto) {
-        SysParamEntity existingEntity = this.getOne(
+        SysParamEntity existingEntity = sysParamMapper.selectOne(
                 new QueryWrapper<SysParamEntity>()
                         .lambda()
                         // 仅取主键ID

+ 12 - 11
src/main/java/cc/uncarbon/module/sys/service/SysRoleMenuRelationService.java

@@ -1,6 +1,5 @@
 package cc.uncarbon.module.sys.service;
 
-import cc.uncarbon.framework.crud.service.impl.HelioBaseServiceImpl;
 import cc.uncarbon.module.sys.entity.SysRoleMenuRelationEntity;
 import cc.uncarbon.module.sys.mapper.SysRoleMenuRelationMapper;
 import cn.hutool.core.collection.CollUtil;
@@ -18,13 +17,14 @@ import java.util.stream.Collectors;
 
 /**
  * 后台角色-可见菜单关联
- *
- * @author Uncarbon
  */
-@Slf4j
-@Service
 @RequiredArgsConstructor
-public class SysRoleMenuRelationService extends HelioBaseServiceImpl<SysRoleMenuRelationMapper, SysRoleMenuRelationEntity> {
+@Service
+@Slf4j
+public class SysRoleMenuRelationService {
+
+    private final SysRoleMenuRelationMapper sysRoleMenuRelationMapper;
+
 
     /**
      * 根据角色Ids取菜单Ids
@@ -40,7 +40,7 @@ public class SysRoleMenuRelationService extends HelioBaseServiceImpl<SysRoleMenu
         Set<Long> ret = new HashSet<>(roleIds.size() << 4);
         for (Long roleId : roleIds) {
             ret.addAll(
-                    this.list(
+                    sysRoleMenuRelationMapper.selectList(
                             new QueryWrapper<SysRoleMenuRelationEntity>()
                                     .lambda()
                                     .select(SysRoleMenuRelationEntity::getMenuId)
@@ -67,14 +67,14 @@ public class SysRoleMenuRelationService extends HelioBaseServiceImpl<SysRoleMenu
 
         if (CollUtil.isEmpty(menuIds)) {
             // 清除绑定,直接删除所有关联关系就行
-            this.remove(menuIdsQuery);
+            sysRoleMenuRelationMapper.delete(menuIdsQuery);
             return;
         }
 
         /*
         先删除不再需要的关联关系
          */
-        this.remove(
+        sysRoleMenuRelationMapper.delete(
                 new QueryWrapper<SysRoleMenuRelationEntity>()
                         .lambda()
                         .eq(SysRoleMenuRelationEntity::getRoleId, roleId)
@@ -84,7 +84,8 @@ public class SysRoleMenuRelationService extends HelioBaseServiceImpl<SysRoleMenu
         /*
         取出需要增量更新的部分
          */
-        Set<Long> existingMenuIds = this.list(menuIdsQuery).stream().map(SysRoleMenuRelationEntity::getMenuId)
+        Set<Long> existingMenuIds = sysRoleMenuRelationMapper.selectList(menuIdsQuery)
+                .stream().map(SysRoleMenuRelationEntity::getMenuId)
                 .collect(Collectors.toSet());
         menuIds.removeAll(existingMenuIds);
 
@@ -105,6 +106,6 @@ public class SysRoleMenuRelationService extends HelioBaseServiceImpl<SysRoleMenu
                             .build()
             );
         }
-        this.saveBatch(entityList);
+        entityList.forEach(sysRoleMenuRelationMapper::insert);
     }
 }

+ 14 - 16
src/main/java/cc/uncarbon/module/sys/service/SysRoleService.java

@@ -5,7 +5,6 @@ import cc.uncarbon.framework.core.exception.BusinessException;
 import cc.uncarbon.framework.core.function.StreamFunction;
 import cc.uncarbon.framework.core.page.PageParam;
 import cc.uncarbon.framework.core.page.PageResult;
-import cc.uncarbon.framework.crud.service.impl.HelioBaseServiceImpl;
 import cc.uncarbon.module.sys.entity.SysRoleEntity;
 import cc.uncarbon.module.sys.enums.SysErrorEnum;
 import cc.uncarbon.module.sys.mapper.SysRoleMapper;
@@ -15,7 +14,7 @@ import cc.uncarbon.module.sys.model.request.AdminListSysRoleDTO;
 import cc.uncarbon.module.sys.model.response.SysRoleBO;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.text.CharSequenceUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
@@ -30,15 +29,14 @@ import java.util.stream.Collectors;
 /**
  * 后台角色
  */
-@Slf4j
-@Service
 @RequiredArgsConstructor
-public class SysRoleService extends HelioBaseServiceImpl<SysRoleMapper, SysRoleEntity> {
+@Service
+@Slf4j
+public class SysRoleService {
 
+    private final SysRoleMapper sysRoleMapper;
     private final SysUserRoleRelationService sysUserRoleRelationService;
-
     private final SysRoleMenuRelationService sysRoleMenuRelationService;
-
     private final SysMenuService sysMenuService;
 
 
@@ -46,14 +44,14 @@ public class SysRoleService extends HelioBaseServiceImpl<SysRoleMapper, SysRoleE
      * 后台管理-分页列表
      */
     public PageResult<SysRoleBO> adminList(PageParam pageParam, AdminListSysRoleDTO dto) {
-        Page<SysRoleEntity> entityPage = this.page(
+        Page<SysRoleEntity> entityPage = sysRoleMapper.selectPage(
                 new Page<>(pageParam.getPageNum(), pageParam.getPageSize()),
                 new QueryWrapper<SysRoleEntity>()
                         .lambda()
                         // 名称
-                        .like(StrUtil.isNotBlank(dto.getTitle()), SysRoleEntity::getTitle, StrUtil.cleanBlank(dto.getTitle()))
+                        .like(CharSequenceUtil.isNotBlank(dto.getTitle()), SysRoleEntity::getTitle, CharSequenceUtil.cleanBlank(dto.getTitle()))
                         // 值
-                        .like(StrUtil.isNotBlank(dto.getValue()), SysRoleEntity::getValue, StrUtil.cleanBlank(dto.getValue()))
+                        .like(CharSequenceUtil.isNotBlank(dto.getValue()), SysRoleEntity::getValue, CharSequenceUtil.cleanBlank(dto.getValue()))
                         // 排序
                         .orderByDesc(SysRoleEntity::getCreatedAt)
         );
@@ -79,7 +77,7 @@ public class SysRoleService extends HelioBaseServiceImpl<SysRoleMapper, SysRoleE
      * @return null or BO
      */
     public SysRoleBO getOneById(Long id, boolean throwIfInvalidId) throws BusinessException {
-        SysRoleEntity entity = this.getById(id);
+        SysRoleEntity entity = sysRoleMapper.selectById(id);
         if (throwIfInvalidId) {
             SysErrorEnum.INVALID_ID.assertNotNull(entity);
         }
@@ -101,7 +99,7 @@ public class SysRoleService extends HelioBaseServiceImpl<SysRoleMapper, SysRoleE
         SysRoleEntity entity = new SysRoleEntity();
         BeanUtil.copyProperties(dto, entity);
 
-        this.save(entity);
+        sysRoleMapper.insert(entity);
 
         return entity.getId();
     }
@@ -117,7 +115,7 @@ public class SysRoleService extends HelioBaseServiceImpl<SysRoleMapper, SysRoleE
         SysRoleEntity entity = new SysRoleEntity();
         BeanUtil.copyProperties(dto, entity);
 
-        this.updateById(entity);
+        sysRoleMapper.updateById(entity);
     }
 
     /**
@@ -126,7 +124,7 @@ public class SysRoleService extends HelioBaseServiceImpl<SysRoleMapper, SysRoleE
     @Transactional(rollbackFor = Exception.class)
     public void adminDelete(Collection<Long> ids) {
         log.info("[后台管理-删除后台角色] >> 入参={}", ids);
-        this.removeByIds(ids);
+        sysRoleMapper.deleteBatchIds(ids);
     }
 
     /**
@@ -205,7 +203,7 @@ public class SysRoleService extends HelioBaseServiceImpl<SysRoleMapper, SysRoleE
      * @param dto DTO
      */
     private void checkExistence(AdminInsertOrUpdateSysRoleDTO dto) {
-        SysRoleEntity existingEntity = this.getOne(
+        SysRoleEntity existingEntity = sysRoleMapper.selectOne(
                 new QueryWrapper<SysRoleEntity>()
                         .lambda()
                         // 仅取主键ID
@@ -234,7 +232,7 @@ public class SysRoleService extends HelioBaseServiceImpl<SysRoleMapper, SysRoleE
         }
 
         // 根据角色Ids取 map
-        return this.list(
+        return sysRoleMapper.selectList(
                 new QueryWrapper<SysRoleEntity>()
                         .lambda()
                         .select(SysRoleEntity::getId, SysRoleEntity::getValue)

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff