Преглед на файлове

bump: 发布2.0.0

details see: https://helio.uncarbon.cc/#/i18n/zh-CN/appendix/change-log
Uncarbon преди 2 години
родител
ревизия
24a089111c
променени са 87 файла, в които са добавени 644 реда и са изтрити 767 реда
  1. 3 2
      README.md
  2. 3 6
      pom.xml
  3. 1 1
      src/main/java/cc/uncarbon/aspect/SysLogAspect.java
  4. 2 3
      src/main/java/cc/uncarbon/aspect/extension/SysLogAspectExtensionForSysUserLogin.java
  5. 1 6
      src/main/java/cc/uncarbon/config/CustomInterceptorConfiguration.java
  6. 5 5
      src/main/java/cc/uncarbon/config/NotFoundConfiguration.java
  7. 2 2
      src/main/java/cc/uncarbon/interceptor/AdminSaTokenParseInterceptor.java
  8. 2 2
      src/main/java/cc/uncarbon/interceptor/DefaultSaTokenParseInterceptor.java
  9. 5 1
      src/main/java/cc/uncarbon/module/adminapi/enums/AdminApiErrorEnum.java
  10. 4 4
      src/main/java/cc/uncarbon/module/adminapi/model/response/AdminCaptchaVO.java
  11. 8 9
      src/main/java/cc/uncarbon/module/adminapi/model/response/SelectOptionItemVO.java
  12. 8 15
      src/main/java/cc/uncarbon/module/adminapi/web/auth/AdminAuthController.java
  13. 5 5
      src/main/java/cc/uncarbon/module/adminapi/web/common/AdminSelectOptionsController.java
  14. 8 13
      src/main/java/cc/uncarbon/module/adminapi/web/oss/AdminOssFileInfoController.java
  15. 17 20
      src/main/java/cc/uncarbon/module/adminapi/web/oss/AdminOssUploadDownloadController.java
  16. 15 40
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysDataDictController.java
  17. 10 15
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysDeptController.java
  18. 7 12
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysLogController.java
  19. 12 17
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysMenuController.java
  20. 10 15
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysParamController.java
  21. 11 16
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysRoleController.java
  22. 10 15
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysTenantController.java
  23. 19 36
      src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysUserController.java
  24. 5 8
      src/main/java/cc/uncarbon/module/appapi/web/AppAuthController.java
  25. 11 11
      src/main/java/cc/uncarbon/module/oss/entity/OssFileInfoEntity.java
  26. 6 6
      src/main/java/cc/uncarbon/module/oss/model/request/AdminListOssFileInfoDTO.java
  27. 5 5
      src/main/java/cc/uncarbon/module/oss/model/request/UploadFileAttributeDTO.java
  28. 5 5
      src/main/java/cc/uncarbon/module/oss/model/response/OssFileDownloadReplyBO.java
  29. 14 14
      src/main/java/cc/uncarbon/module/oss/model/response/OssFileInfoBO.java
  30. 4 4
      src/main/java/cc/uncarbon/module/oss/model/response/OssFileUploadResultVO.java
  31. 0 7
      src/main/java/cc/uncarbon/module/sys/constant/SysConstant.java
  32. 9 9
      src/main/java/cc/uncarbon/module/sys/entity/SysDataDictEntity.java
  33. 6 6
      src/main/java/cc/uncarbon/module/sys/entity/SysDeptEntity.java
  34. 14 14
      src/main/java/cc/uncarbon/module/sys/entity/SysLogEntity.java
  35. 10 10
      src/main/java/cc/uncarbon/module/sys/entity/SysMenuEntity.java
  36. 4 4
      src/main/java/cc/uncarbon/module/sys/entity/SysParamEntity.java
  37. 3 3
      src/main/java/cc/uncarbon/module/sys/entity/SysRoleEntity.java
  38. 3 3
      src/main/java/cc/uncarbon/module/sys/entity/SysRoleMenuRelationEntity.java
  39. 5 5
      src/main/java/cc/uncarbon/module/sys/entity/SysTenantEntity.java
  40. 3 3
      src/main/java/cc/uncarbon/module/sys/entity/SysUserDeptRelationEntity.java
  41. 10 10
      src/main/java/cc/uncarbon/module/sys/entity/SysUserEntity.java
  42. 3 3
      src/main/java/cc/uncarbon/module/sys/entity/SysUserRoleRelationEntity.java
  43. 3 3
      src/main/java/cc/uncarbon/module/sys/model/request/AdminBindRoleMenuRelationDTO.java
  44. 3 3
      src/main/java/cc/uncarbon/module/sys/model/request/AdminBindUserRoleRelationDTO.java
  45. 12 12
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysDataDictDTO.java
  46. 8 8
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysDeptDTO.java
  47. 14 14
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysMenuDTO.java
  48. 7 7
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysParamDTO.java
  49. 7 7
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysRoleDTO.java
  50. 15 15
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertOrUpdateSysUserDTO.java
  51. 14 14
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertSysLogDTO.java
  52. 7 7
      src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertSysTenantDTO.java
  53. 2 2
      src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysDataDictDTO.java
  54. 6 6
      src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysLogDTO.java
  55. 3 3
      src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysParamDTO.java
  56. 3 3
      src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysRoleDTO.java
  57. 4 4
      src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysTenantDTO.java
  58. 3 3
      src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysUserDTO.java
  59. 5 5
      src/main/java/cc/uncarbon/module/sys/model/request/AdminResetSysUserPasswordDTO.java
  60. 6 6
      src/main/java/cc/uncarbon/module/sys/model/request/AdminUpdateCurrentSysUserPasswordDTO.java
  61. 8 8
      src/main/java/cc/uncarbon/module/sys/model/request/AdminUpdateSysTenantDTO.java
  62. 10 10
      src/main/java/cc/uncarbon/module/sys/model/request/SysUserLoginDTO.java
  63. 5 5
      src/main/java/cc/uncarbon/module/sys/model/response/IPLocationBO.java
  64. 12 12
      src/main/java/cc/uncarbon/module/sys/model/response/SysDataDictBO.java
  65. 8 8
      src/main/java/cc/uncarbon/module/sys/model/response/SysDeptBO.java
  66. 11 11
      src/main/java/cc/uncarbon/module/sys/model/response/SysLogBO.java
  67. 16 16
      src/main/java/cc/uncarbon/module/sys/model/response/SysMenuBO.java
  68. 7 7
      src/main/java/cc/uncarbon/module/sys/model/response/SysParamBO.java
  69. 7 7
      src/main/java/cc/uncarbon/module/sys/model/response/SysRoleBO.java
  70. 9 9
      src/main/java/cc/uncarbon/module/sys/model/response/SysTenantBO.java
  71. 2 2
      src/main/java/cc/uncarbon/module/sys/model/response/SysTenantKickOutUsersBO.java
  72. 13 13
      src/main/java/cc/uncarbon/module/sys/model/response/SysUserBO.java
  73. 7 7
      src/main/java/cc/uncarbon/module/sys/model/response/SysUserBaseInfoBO.java
  74. 10 10
      src/main/java/cc/uncarbon/module/sys/model/response/SysUserLoginBO.java
  75. 5 5
      src/main/java/cc/uncarbon/module/sys/model/response/SysUserLoginVO.java
  76. 4 4
      src/main/java/cc/uncarbon/module/sys/model/response/VbenAdminMenuMetaVO.java
  77. 4 4
      src/main/java/cc/uncarbon/module/sys/model/response/VbenAdminUserInfoVO.java
  78. 4 9
      src/main/java/cc/uncarbon/module/sys/service/SysMenuService.java
  79. 2 2
      src/main/java/cc/uncarbon/module/sys/service/SysUserService.java
  80. 10 9
      src/main/resources/application-dev.yml
  81. 10 9
      src/main/resources/application-prod.yml
  82. 10 9
      src/main/resources/application-test.yml
  83. 3 6
      src/main/resources/application.yml
  84. 1 0
      src/main/resources/logback-spring.xml
  85. 0 37
      src/test/java/cc/uncarbon/test/BasicUnitTest.java
  86. 56 0
      src/test/java/cc/uncarbon/test/ExampleUnitTest.java
  87. 0 36
      src/test/java/cc/uncarbon/test/SysLogServiceUnitTest.java

+ 3 - 2
README.md

@@ -1,11 +1,12 @@
 # helio-boot
 
 ## 项目介绍
-基于 Spring Boot 2.7.x,是一款预置SaaS、RBAC能力的单体项目脚手架,适合初学者学习 JavaWeb 开发的良好实践  
+
+基于 Spring Boot 3.x,是一款预置SaaS、RBAC能力的单体项目脚手架,适合初学者学习 JavaWeb 开发的良好实践  
 单Maven模块,定位为快速开发脚手架  
 多模块版请移步至[helio-boot-modular](https://github.com/uncarbon97/helio-boot-modular)项目
 
-JDK compatibility: 1.8 - 21
+JDK compatibility: 17 - 21
 
 【[前端演示站](https://helio-demo.uncarbon.cc/)】
 【[官方文档](https://helio.uncarbon.cc/)】 

+ 3 - 6
pom.xml

@@ -8,19 +8,19 @@
     <parent>
         <groupId>cc.uncarbon.framework</groupId>
         <artifactId>helio-starters</artifactId>
-        <version>1.11.0</version>
+        <version>2.0.0</version>
     </parent>
 
     <artifactId>helio-boot</artifactId>
     <description>Helio 单模块版单体脚手架</description>
     <!-- 制品版本号,建议每次打包发布时都调整以作区分 -->
-    <version>1.11.0</version>
+    <version>2.0.0</version>
 
     <properties>
         <!-- 这里写其他第三方依赖 -->
         <!-- 文件上传 -->
         <x-file-storage.version>2.1.0</x-file-storage.version>
-        <minio.version>8.4.3</minio.version>
+        <minio.version>8.5.8</minio.version>
     </properties>
 
     <dependencies>
@@ -116,9 +116,6 @@
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
                 <version>${spring-boot.version}</version>
-                <configuration>
-                    <fork>true</fork>
-                </configuration>
                 <executions>
                     <execution>
                         <goals>

+ 1 - 1
src/main/java/cc/uncarbon/aspect/SysLogAspect.java

@@ -34,7 +34,7 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Component;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 import java.util.Arrays;
 import java.util.LinkedHashMap;
 import java.util.Map;

+ 2 - 3
src/main/java/cc/uncarbon/aspect/extension/SysLogAspectExtensionForSysUserLogin.java

@@ -16,9 +16,8 @@ public class SysLogAspectExtensionForSysUserLogin extends DefaultSysLogAspectExt
     @Override
     public void beforeSaving(AdminInsertSysLogDTO insertSysLogDTO, JoinPoint joinPoint, SysLog annotation, Throwable e, Object ret) {
         for (Object arg : joinPoint.getArgs()) {
-            if (arg instanceof SysUserLoginDTO) {
-                SysUserLoginDTO argDTO = (SysUserLoginDTO) arg;
-                insertSysLogDTO.setUsername(argDTO.getUsername());
+            if (arg instanceof SysUserLoginDTO dto) {
+                insertSysLogDTO.setUsername(dto.getUsername());
             }
         }
     }

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

@@ -5,7 +5,6 @@ import cc.uncarbon.interceptor.AdminSaTokenParseInterceptor;
 import cc.uncarbon.interceptor.DefaultSaTokenParseInterceptor;
 import cc.uncarbon.module.adminapi.constant.AdminApiConstant;
 import cc.uncarbon.module.appapi.constant.AppApiConstant;
-import cc.uncarbon.module.sys.constant.SysConstant;
 import cn.dev33.satoken.interceptor.SaInterceptor;
 import cn.dev33.satoken.stp.StpUtil;
 import lombok.RequiredArgsConstructor;
@@ -38,11 +37,7 @@ public class CustomInterceptorConfiguration implements WebMvcConfigurer {
 
         registry
                 .addInterceptor(new AdminSaTokenParseInterceptor())
-                .addPathPatterns(
-                        // 兼容旧的API路由前缀
-                        SysConstant.SYS_MODULE_CONTEXT_PATH + "/**",
-                        AdminApiConstant.HTTP_API_URL_PREFIX + "/**"
-                );
+                .addPathPatterns(AdminApiConstant.HTTP_API_URL_PREFIX + "/**");
 
         /*
         2. 注解拦截器,启用注解功能

+ 5 - 5
src/main/java/cc/uncarbon/config/NotFoundConfiguration.java

@@ -1,13 +1,13 @@
 package cc.uncarbon.config;
 
+import io.swagger.v3.oas.annotations.Operation;
 import org.springframework.boot.web.servlet.error.ErrorController;
 import org.springframework.http.HttpHeaders;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.servlet.NoHandlerFoundException;
-import springfox.documentation.annotations.ApiIgnore;
 
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 /**
  * 由于除 404 以外的异常都会被全局异常处理掉,所以走到这里的请求都是 404 了
@@ -18,12 +18,12 @@ import javax.servlet.http.HttpServletRequest;
 public class NotFoundConfiguration implements ErrorController {
 
     /**
-     * 屏蔽 swagger 文档生成;主动抛出异常,由全局异常处理接管
+     * 不生成接口文档
+     * 主动抛出异常,由全局异常处理接管
      */
-    @ApiIgnore
+    @Operation(hidden = true)
     @RequestMapping(value = "/error")
     public void error(HttpServletRequest request) throws NoHandlerFoundException {
         throw new NoHandlerFoundException(request.getMethod(), request.getRequestURI(), new HttpHeaders());
     }
-
 }

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

@@ -12,8 +12,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.servlet.AsyncHandlerInterceptor;
 import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 
 /**

+ 2 - 2
src/main/java/cc/uncarbon/interceptor/DefaultSaTokenParseInterceptor.java

@@ -12,8 +12,8 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.servlet.AsyncHandlerInterceptor;
 import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 /**
  * 从请求头解析并赋值到用户上下文,默认用于C端用户的鉴权

+ 5 - 1
src/main/java/cc/uncarbon/module/adminapi/enums/AdminApiErrorEnum.java

@@ -16,7 +16,11 @@ public enum AdminApiErrorEnum implements HelioBaseEnum<Integer> {
 
     CAPTCHA_VALIDATE_FAILED(400, "验证码不正确,请重新输入"),
 
-    ;
+    /**
+     * 很少遇到;但是如果出现了只会提示默认的「请稍后再试」,不方便排查,还是整个文案比较好
+     */
+    UPLOAD_FILE_NOT_EXIST(400, "欲上传的文件可能已被删除,请重新选择");
+
     private final Integer value;
     private final String label;
 

+ 4 - 4
src/main/java/cc/uncarbon/module/adminapi/model/response/AdminCaptchaVO.java

@@ -1,7 +1,7 @@
 package cc.uncarbon.module.adminapi.model.response;
 
 import cc.uncarbon.module.adminapi.model.interior.AdminCaptchaContainer;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 
 import java.time.LocalDateTime;
@@ -12,13 +12,13 @@ import java.time.LocalDateTime;
 @Getter
 public class AdminCaptchaVO {
 
-    @ApiModelProperty(value = "验证码图片Base64")
+    @Schema(description = "验证码图片Base64")
     private final String captchaImage;
 
-    @ApiModelProperty(value = "验证码唯一标识")
+    @Schema(description = "验证码唯一标识")
     private final String captchaId;
 
-    @ApiModelProperty(value = "验证码失效时刻")
+    @Schema(description = "验证码失效时刻")
     private final LocalDateTime expiredAt;
 
 

+ 8 - 9
src/main/java/cc/uncarbon/module/adminapi/model/response/SelectOptionItemVO.java

@@ -3,7 +3,7 @@ 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 io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.NonNull;
 import lombok.Setter;
@@ -16,7 +16,6 @@ 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;
 
 /**
@@ -30,9 +29,9 @@ public class SelectOptionItemVO implements Serializable {
     private static final long serialVersionUID = 1L;
 
     // ID👉名称 一对(用于关联各种实体)
-    @ApiModelProperty(value = "ID")
+    @Schema(description = "ID")
     private Number id;
-    @ApiModelProperty(value = "名称")
+    @Schema(description = "名称")
     private String name;
     public SelectOptionItemVO(Number id, String name) {
         this.id = id;
@@ -40,7 +39,7 @@ public class SelectOptionItemVO implements Serializable {
     }
 
     // 有时候额外需要上级ID
-    @ApiModelProperty(value = "上级ID")
+    @Schema(description = "上级ID")
     @Setter
     private Number parentId;
     public SelectOptionItemVO(Number id, String name, Number parentId) {
@@ -51,9 +50,9 @@ public class SelectOptionItemVO implements Serializable {
 
 
     // 值👉标签 一对(仅用于枚举)
-    @ApiModelProperty(value = "值")
+    @Schema(description = "值")
     private Number value;
-    @ApiModelProperty(value = "标签")
+    @Schema(description = "标签")
     private String label;
     public SelectOptionItemVO(HelioBaseEnum<? extends Number> helioBaseEnum) {
         this.value = helioBaseEnum.getValue();
@@ -136,7 +135,7 @@ public class SelectOptionItemVO implements Serializable {
         return stream.map(item ->
                         new SelectOptionItemVO(idGetter.apply(item), nameGetter.apply(item),
                                 parentIdGetter == null ? null : parentIdGetter.apply(item)))
-                .collect(Collectors.toList());
+                .toList();
     }
 
     /**
@@ -165,6 +164,6 @@ public class SelectOptionItemVO implements Serializable {
         if (enumConstantFilter != null) {
             stream = stream.filter(enumConstantFilter);
         }
-        return stream.map(SelectOptionItemVO::new).collect(Collectors.toList());
+        return stream.map(SelectOptionItemVO::new).toList();
     }
 }

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

@@ -2,7 +2,6 @@ package cc.uncarbon.module.adminapi.web.auth;
 
 
 import cc.uncarbon.aspect.extension.SysLogAspectExtensionForSysUserLogin;
-import cc.uncarbon.framework.core.constant.HelioConstant;
 import cc.uncarbon.framework.core.context.TenantContext;
 import cc.uncarbon.framework.core.context.TenantContextHolder;
 import cc.uncarbon.framework.core.context.UserContext;
@@ -15,27 +14,21 @@ import cc.uncarbon.module.adminapi.model.interior.AdminCaptchaContainer;
 import cc.uncarbon.module.adminapi.model.response.AdminCaptchaVO;
 import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cc.uncarbon.module.sys.annotation.SysLog;
-import cc.uncarbon.module.sys.constant.SysConstant;
 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 cn.dev33.satoken.annotation.SaCheckLogin;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
 
-
-@Api(value = "后台管理-鉴权接口", tags = {"后台管理-鉴权接口"})
-@RequestMapping(value = {
-        // 兼容旧的API路由前缀
-        SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
-        AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
-})
+@Tag(name = "后台管理-鉴权接口")
+@RequestMapping(value = AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
 @RequiredArgsConstructor
 @RestController
 @Slf4j
@@ -49,7 +42,7 @@ public class AdminAuthController {
 
 
     @SysLog(value = "登录后台用户", syncSave = true, extension = SysLogAspectExtensionForSysUserLogin.class, queryIPLocation = true)
-    @ApiOperation(value = "登录")
+    @Operation(summary = "登录")
     @PostMapping(value = "/auth/login")
     public ApiResult<SysUserLoginVO> login(@RequestBody @Valid SysUserLoginDTO dto) {
         // 登录验证码核验;前端项目搜索关键词「 Helio: 登录验证码」
@@ -89,7 +82,7 @@ public class AdminAuthController {
     }
 
     @SaCheckLogin(type = AdminStpUtil.TYPE)
-    @ApiOperation(value = "登出")
+    @Operation(summary = "登出")
     @PostMapping(value = "/auth/logout")
     public ApiResult<Void> logout() {
         AdminStpUtil.logout();
@@ -99,7 +92,7 @@ public class AdminAuthController {
         return ApiResult.success();
     }
 
-    @ApiOperation(value = "获取验证码")
+    @Operation(summary = "获取验证码")
     @GetMapping(value = "/auth/captcha")
     public ApiResult<AdminCaptchaVO> captcha() {
         // 核验方法:captchaHelper.validate

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

@@ -10,8 +10,8 @@ import cc.uncarbon.module.sys.model.response.SysRoleBO;
 import cc.uncarbon.module.sys.service.SysDeptService;
 import cc.uncarbon.module.sys.service.SysRoleService;
 import cn.dev33.satoken.annotation.SaCheckLogin;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -22,7 +22,7 @@ import java.util.List;
 
 // 约束:登录后才能使用   👇 后台管理对应的鉴权工具类
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Api(value = "后台管理-下拉框数据源接口", tags = {"后台管理-下拉框数据源接口"})
+@Tag(name = "后台管理-下拉框数据源接口")
 @RequestMapping(AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
 @RequiredArgsConstructor
 @RestController
@@ -38,7 +38,7 @@ public class AdminSelectOptionsController {
     避免多人协作时,不知道原来是否已经有了,或者写在某个边边角角里,造成重复开发
     */
 
-    @ApiOperation(value = "后台角色下拉框")
+    @Operation(summary = "后台角色下拉框")
     @GetMapping(value = "/select-options/roles")
     public ApiResult<List<SelectOptionItemVO>> roles() {
         return ApiResult.data(
@@ -46,7 +46,7 @@ public class AdminSelectOptionsController {
         );
     }
 
-    @ApiOperation(value = "部门下拉框(前端负责转为树状数据)")
+    @Operation(summary = "部门下拉框(前端负责转为树状数据)")
     @GetMapping(value = "/select-options/depts")
     public ApiResult<List<SelectOptionItemVO>> depts() {
         return ApiResult.data(

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

@@ -9,26 +9,21 @@ import cc.uncarbon.module.adminapi.constant.AdminApiConstant;
 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.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
+import jakarta.validation.Valid;
 
 
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Api(value = "后台管理-上传文件信息管理接口", tags = {"后台管理-上传文件信息管理接口"})
-@RequestMapping(value = {
-        // 兼容旧的API路由前缀
-        SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
-        AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
-})
+@Tag(name = "后台管理-上传文件信息管理接口")
+@RequestMapping(value = AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
 @RequiredArgsConstructor
 @RestController
 @Slf4j
@@ -41,21 +36,21 @@ public class AdminOssFileInfoController {
 
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "分页列表")
+    @Operation(summary = "分页列表")
     @GetMapping(value = "/oss/file/infos")
     public ApiResult<PageResult<OssFileInfoBO>> list(PageParam pageParam, AdminListOssFileInfoDTO dto) {
         return ApiResult.data(ossFileInfoService.adminList(pageParam, dto));
     }
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "详情")
+    @Operation(summary = "详情")
     @GetMapping(value = "/oss/file/infos/{id}")
     public ApiResult<OssFileInfoBO> getById(@PathVariable Long id) {
         return ApiResult.data(ossFileInfoService.getOneById(id, true));
     }
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
-    @ApiOperation(value = "删除")
+    @Operation(summary = "删除")
     @DeleteMapping(value = "/oss/file/infos")
     public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         ossFileInfoService.adminDelete(dto.getIds());

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

@@ -1,43 +1,38 @@
 package cc.uncarbon.module.adminapi.web.oss;
 
-import cc.uncarbon.framework.core.constant.HelioConstant;
 import cc.uncarbon.framework.web.model.response.ApiResult;
 import cc.uncarbon.module.adminapi.constant.AdminApiConstant;
+import cc.uncarbon.module.adminapi.enums.AdminApiErrorEnum;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cc.uncarbon.module.oss.facade.OssUploadDownloadFacade;
 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.model.response.OssFileUploadResultVO;
-import cc.uncarbon.module.sys.constant.SysConstant;
-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.crypto.digest.DigestUtil;
 import cn.hutool.http.Header;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.validation.Valid;
 import java.io.IOException;
 import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 
 
-@Api(value = "后台管理-上传、下载文件接口", tags = {"后台管理-上传、下载文件接口"})
-@RequestMapping(value = {
-        // 兼容旧的API路由前缀
-        SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
-        AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
-})
+@Tag(name = "后台管理-上传、下载文件接口")
+@RequestMapping(value = AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
 @RequiredArgsConstructor
 @RestController
 @Slf4j
@@ -46,7 +41,7 @@ public class AdminOssUploadDownloadController {
     private final OssUploadDownloadFacade ossUploadDownloadFacade;
 
 
-    @ApiOperation(value = "上传文件", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    @Operation(summary = "上传文件")
     @PostMapping(value = "/oss/files")
     // 约束:登录后才能上传   👇 后台管理对应的鉴权工具类
     @SaCheckLogin(type = AdminStpUtil.TYPE)
@@ -54,8 +49,10 @@ public class AdminOssUploadDownloadController {
             @RequestPart MultipartFile file, @RequestPart(required = false) @Valid UploadFileAttributeDTO attr,
             HttpServletRequest request
     ) throws IOException {
-         /*
-         1. 已存在相同 MD5 文件,直接返回 URL
+        AdminApiErrorEnum.UPLOAD_FILE_NOT_EXIST.assertNotNull(file);
+
+        /*
+        1. 已存在相同 MD5 文件,直接返回 URL
          */
         String md5 = DigestUtil.md5Hex(file.getBytes());
         OssFileInfoBO bo = ossUploadDownloadFacade.findByHash(md5);
@@ -75,7 +72,7 @@ public class AdminOssUploadDownloadController {
         return ApiResult.data(this.toUploadResult(bo, request.getRequestURL().toString()));
     }
 
-    @ApiOperation(value = "下载文件(根据文件ID)", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    @Operation(summary = "下载文件(根据文件ID)")
     @GetMapping(value = "/oss/files/{id}")
     // 如果需要登录后才能下载,请解禁下方注解;注意是👇 后台管理对应的鉴权工具类
     // @SaCheckLogin(type = AdminStpUtil.TYPE)
@@ -91,7 +88,7 @@ public class AdminOssUploadDownloadController {
         // 普通下载
         response.setHeader(Header.CONTENT_TYPE.getValue(), MediaType.APPLICATION_OCTET_STREAM_VALUE);
         response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
-        String downFileName = URLEncoder.encode(reply.getStorageFilename(), CharsetUtil.UTF_8);
+        String downFileName = URLEncoder.encode(reply.getStorageFilename(), StandardCharsets.UTF_8);
         response.setHeader(Header.CONTENT_DISPOSITION.getValue(), "attachment;filename=" + downFileName);
 
         IoUtil.write(response.getOutputStream(), false, reply.getFileBytes());

+ 15 - 40
src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysDataDictController.java

@@ -7,7 +7,6 @@ import cc.uncarbon.framework.web.model.request.IdsDTO;
 import cc.uncarbon.framework.web.model.response.ApiResult;
 import cc.uncarbon.module.adminapi.constant.AdminApiConstant;
 import cc.uncarbon.module.sys.annotation.SysLog;
-import cc.uncarbon.module.sys.constant.SysConstant;
 import cc.uncarbon.module.sys.model.request.AdminInsertOrUpdateSysDataDictDTO;
 import cc.uncarbon.module.sys.model.request.AdminListSysDataDictDTO;
 import cc.uncarbon.module.sys.model.response.SysDataDictBO;
@@ -15,22 +14,18 @@ import cc.uncarbon.module.sys.service.SysDataDictService;
 import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
+import jakarta.validation.Valid;
 
 
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Api(value = "数据字典管理接口", tags = {"数据字典管理接口"})
-@RequestMapping(value = {
-        // 兼容旧的API路由前缀
-        SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
-        AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
-})
+@Tag(name = "数据字典管理接口")
+@RequestMapping(value = AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
 @RequiredArgsConstructor
 @RestController
 @Slf4j
@@ -42,35 +37,23 @@ public class AdminSysDataDictController {
 
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "分页列表")
-    @GetMapping(value = {
-            "/sys/data-dicts",
-            // 兼容旧的API路由
-            "/sys/dataDicts"
-    })
+    @Operation(summary = "分页列表")
+    @GetMapping(value = "/sys/data-dicts")
     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/data-dicts/{id}",
-            // 兼容旧的API路由
-            "/sys/dataDicts/{id}"
-    })
+    @Operation(summary = "详情")
+    @GetMapping(value = "/sys/data-dicts/{id}")
     public ApiResult<SysDataDictBO> getById(@PathVariable Long id) {
         return ApiResult.data(sysDataDictService.getOneById(id, true));
     }
 
     @SysLog(value = "新增数据字典")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
-    @ApiOperation(value = "新增")
-    @PostMapping(value = {
-            "/sys/data-dicts",
-            // 兼容旧的API路由
-            "/sys/dataDicts"
-    })
+    @Operation(summary = "新增")
+    @PostMapping(value = "/sys/data-dicts")
     public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysDataDictDTO dto) {
         sysDataDictService.adminInsert(dto);
 
@@ -79,12 +62,8 @@ public class AdminSysDataDictController {
 
     @SysLog(value = "编辑数据字典")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
-    @ApiOperation(value = "编辑")
-    @PutMapping(value = {
-            "/sys/data-dicts/{id}",
-            // 兼容旧的API路由
-            "/sys/dataDicts/{id}"
-    })
+    @Operation(summary = "编辑")
+    @PutMapping(value = "/sys/data-dicts/{id}")
     public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysDataDictDTO dto) {
         dto.setId(id);
         sysDataDictService.adminUpdate(dto);
@@ -94,12 +73,8 @@ public class AdminSysDataDictController {
 
     @SysLog(value = "删除数据字典")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
-    @ApiOperation(value = "删除")
-    @DeleteMapping(value = {
-            "/sys/data-dicts",
-            // 兼容旧的API路由
-            "/sys/dataDicts"
-    })
+    @Operation(summary = "删除")
+    @DeleteMapping(value = "/sys/data-dicts")
     public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         sysDataDictService.adminDelete(dto.getIds());
 

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

@@ -6,30 +6,25 @@ import cc.uncarbon.framework.web.model.request.IdsDTO;
 import cc.uncarbon.framework.web.model.response.ApiResult;
 import cc.uncarbon.module.adminapi.constant.AdminApiConstant;
 import cc.uncarbon.module.sys.annotation.SysLog;
-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.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
+import jakarta.validation.Valid;
 import java.util.List;
 
 
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Api(value = "部门管理接口", tags = {"部门管理接口"})
-@RequestMapping(value = {
-        // 兼容旧的API路由前缀
-        SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
-        AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
-})
+@Tag(name = "部门管理接口")
+@RequestMapping(value = AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
 @RequiredArgsConstructor
 @RestController
 @Slf4j
@@ -41,14 +36,14 @@ public class AdminSysDeptController {
 
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "列表")
+    @Operation(summary = "列表")
     @GetMapping(value = "/sys/depts")
     public ApiResult<List<SysDeptBO>> list() {
         return ApiResult.data(sysDeptService.adminList());
     }
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "详情")
+    @Operation(summary = "详情")
     @GetMapping(value = "/sys/depts/{id}")
     public ApiResult<SysDeptBO> getById(@PathVariable Long id) {
         return ApiResult.data(sysDeptService.getOneById(id, true));
@@ -56,7 +51,7 @@ public class AdminSysDeptController {
 
     @SysLog(value = "新增部门")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
-    @ApiOperation(value = "新增")
+    @Operation(summary = "新增")
     @PostMapping(value = "/sys/depts")
     public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysDeptDTO dto) {
         sysDeptService.adminInsert(dto);
@@ -66,7 +61,7 @@ public class AdminSysDeptController {
 
     @SysLog(value = "编辑部门")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
-    @ApiOperation(value = "编辑")
+    @Operation(summary = "编辑")
     @PutMapping(value = "/sys/depts/{id}")
     public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysDeptDTO dto) {
         dto.setId(id);
@@ -77,7 +72,7 @@ public class AdminSysDeptController {
 
     @SysLog(value = "删除部门")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
-    @ApiOperation(value = "删除")
+    @Operation(summary = "删除")
     @DeleteMapping(value = "/sys/depts")
     public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         sysDeptService.adminDelete(dto.getIds());

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

@@ -5,15 +5,14 @@ import cc.uncarbon.framework.core.page.PageParam;
 import cc.uncarbon.framework.core.page.PageResult;
 import cc.uncarbon.framework.web.model.response.ApiResult;
 import cc.uncarbon.module.adminapi.constant.AdminApiConstant;
-import cc.uncarbon.module.sys.constant.SysConstant;
+import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 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.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -23,12 +22,8 @@ import org.springframework.web.bind.annotation.RestController;
 
 
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Api(value = "系统日志管理接口", tags = {"系统日志管理接口"})
-@RequestMapping(value = {
-        // 兼容旧的API路由前缀
-        SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
-        AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
-})
+@Tag(name = "系统日志管理接口")
+@RequestMapping(value = AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
 @RequiredArgsConstructor
 @RestController
 @Slf4j
@@ -40,14 +35,14 @@ public class AdminSysLogController {
 
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "分页列表")
+    @Operation(summary = "分页列表")
     @GetMapping(value = "/sys/logs")
     public ApiResult<PageResult<SysLogBO>> list(PageParam pageParam, AdminListSysLogDTO dto) {
         return ApiResult.data(sysLogService.adminList(pageParam, dto));
     }
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "详情")
+    @Operation(summary = "详情")
     @GetMapping(value = "/sys/logs/{id}")
     public ApiResult<SysLogBO> getById(@PathVariable Long id) {
         return ApiResult.data(sysLogService.getOneById(id, true));

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

@@ -5,30 +5,25 @@ import cc.uncarbon.framework.web.model.request.IdsDTO;
 import cc.uncarbon.framework.web.model.response.ApiResult;
 import cc.uncarbon.module.adminapi.constant.AdminApiConstant;
 import cc.uncarbon.module.sys.annotation.SysLog;
-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.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
+import jakarta.validation.Valid;
 import java.util.List;
 
 
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Api(value = "后台菜单管理接口", tags = {"后台菜单管理接口"})
-@RequestMapping(value = {
-        // 兼容旧的API路由前缀
-        SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
-        AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
-})
+@Tag(name = "后台菜单管理接口")
+@RequestMapping(value = AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
 @RequiredArgsConstructor
 @RestController
 @Slf4j
@@ -40,14 +35,14 @@ public class AdminSysMenuController {
 
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "列表")
+    @Operation(summary = "列表")
     @GetMapping(value = "/sys/menus")
     public ApiResult<List<SysMenuBO>> list() {
         return ApiResult.data(sysMenuService.adminList());
     }
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "详情")
+    @Operation(summary = "详情")
     @GetMapping(value = "/sys/menus/{id}")
     public ApiResult<SysMenuBO> getById(@PathVariable Long id) {
         return ApiResult.data(sysMenuService.getOneById(id, true));
@@ -55,7 +50,7 @@ public class AdminSysMenuController {
 
     @SysLog(value = "新增后台菜单")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
-    @ApiOperation(value = "新增")
+    @Operation(summary = "新增")
     @PostMapping(value = "/sys/menus")
     public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysMenuDTO dto) {
         sysMenuService.adminInsert(dto);
@@ -65,7 +60,7 @@ public class AdminSysMenuController {
 
     @SysLog(value = "编辑后台菜单")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
-    @ApiOperation(value = "编辑")
+    @Operation(summary = "编辑")
     @PutMapping(value = "/sys/menus/{id}")
     public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysMenuDTO dto) {
         dto.setId(id);
@@ -76,7 +71,7 @@ public class AdminSysMenuController {
 
     @SysLog(value = "删除后台菜单")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
-    @ApiOperation(value = "删除")
+    @Operation(summary = "删除")
     @DeleteMapping(value = "/sys/menus")
     public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         sysMenuService.adminDelete(dto.getIds());
@@ -84,13 +79,13 @@ public class AdminSysMenuController {
         return ApiResult.success();
     }
 
-    @ApiOperation(value = "取侧边菜单")
+    @Operation(summary = "取侧边菜单")
     @GetMapping("/sys/menus/side")
     public ApiResult<List<SysMenuBO>> adminListSideMenu() {
         return ApiResult.data(sysMenuService.adminListSideMenu());
     }
 
-    @ApiOperation(value = "取所有可见菜单")
+    @Operation(summary = "取所有可见菜单")
     @GetMapping("/sys/menus/all")
     public ApiResult<List<SysMenuBO>> adminListVisibleMenu() {
         return ApiResult.data(sysMenuService.adminListVisibleMenu());

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

@@ -7,7 +7,6 @@ import cc.uncarbon.framework.web.model.request.IdsDTO;
 import cc.uncarbon.framework.web.model.response.ApiResult;
 import cc.uncarbon.module.adminapi.constant.AdminApiConstant;
 import cc.uncarbon.module.sys.annotation.SysLog;
-import cc.uncarbon.module.sys.constant.SysConstant;
 import cc.uncarbon.module.sys.model.request.AdminInsertOrUpdateSysParamDTO;
 import cc.uncarbon.module.sys.model.request.AdminListSysParamDTO;
 import cc.uncarbon.module.sys.model.response.SysParamBO;
@@ -15,22 +14,18 @@ import cc.uncarbon.module.sys.service.SysParamService;
 import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
+import jakarta.validation.Valid;
 
 
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Api(value = "系统参数管理接口", tags = {"系统参数管理接口"})
-@RequestMapping(value = {
-        // 兼容旧的API路由前缀
-        SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
-        AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
-})
+@Tag(name = "系统参数管理接口")
+@RequestMapping(value = AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
 @RequiredArgsConstructor
 @RestController
 @Slf4j
@@ -42,14 +37,14 @@ public class AdminSysParamController {
 
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "分页列表")
+    @Operation(summary = "分页列表")
     @GetMapping(value = "/sys/params")
     public ApiResult<PageResult<SysParamBO>> list(PageParam pageParam, AdminListSysParamDTO dto) {
         return ApiResult.data(sysParamService.adminList(pageParam, dto));
     }
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "详情")
+    @Operation(summary = "详情")
     @GetMapping(value = "/sys/params/{id}")
     public ApiResult<SysParamBO> getById(@PathVariable Long id) {
         return ApiResult.data(sysParamService.getOneById(id, true));
@@ -57,7 +52,7 @@ public class AdminSysParamController {
 
     @SysLog(value = "新增系统参数")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
-    @ApiOperation(value = "新增")
+    @Operation(summary = "新增")
     @PostMapping(value = "/sys/params")
     public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysParamDTO dto) {
         sysParamService.adminInsert(dto);
@@ -67,7 +62,7 @@ public class AdminSysParamController {
 
     @SysLog(value = "编辑系统参数")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
-    @ApiOperation(value = "编辑")
+    @Operation(summary = "编辑")
     @PutMapping(value = "/sys/params/{id}")
     public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysParamDTO dto) {
         dto.setId(id);
@@ -78,7 +73,7 @@ public class AdminSysParamController {
 
     @SysLog(value = "删除系统参数")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
-    @ApiOperation(value = "删除")
+    @Operation(summary = "删除")
     @DeleteMapping(value = "/sys/params")
     public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         sysParamService.adminDelete(dto.getIds());

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

@@ -8,7 +8,6 @@ import cc.uncarbon.framework.web.model.response.ApiResult;
 import cc.uncarbon.helper.RolePermissionCacheHelper;
 import cc.uncarbon.module.adminapi.constant.AdminApiConstant;
 import cc.uncarbon.module.sys.annotation.SysLog;
-import cc.uncarbon.module.sys.constant.SysConstant;
 import cc.uncarbon.module.sys.model.request.AdminBindRoleMenuRelationDTO;
 import cc.uncarbon.module.sys.model.request.AdminInsertOrUpdateSysRoleDTO;
 import cc.uncarbon.module.sys.model.request.AdminListSysRoleDTO;
@@ -17,23 +16,19 @@ import cc.uncarbon.module.sys.service.SysRoleService;
 import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
+import jakarta.validation.Valid;
 import java.util.Set;
 
 
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Api(value = "后台角色管理接口", tags = {"后台角色管理接口"})
-@RequestMapping(value = {
-        // 兼容旧的API路由前缀
-        SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
-        AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
-})
+@Tag(name = "后台角色管理接口")
+@RequestMapping(value = AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
 @RequiredArgsConstructor
 @RestController
 @Slf4j
@@ -47,14 +42,14 @@ public class AdminSysRoleController {
 
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "分页列表")
+    @Operation(summary = "分页列表")
     @GetMapping(value = "/sys/roles")
     public ApiResult<PageResult<SysRoleBO>> list(PageParam pageParam, AdminListSysRoleDTO dto) {
         return ApiResult.data(sysRoleService.adminList(pageParam, dto));
     }
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "详情")
+    @Operation(summary = "详情")
     @GetMapping(value = "/sys/roles/{id}")
     public ApiResult<SysRoleBO> getById(@PathVariable Long id) {
         return ApiResult.data(sysRoleService.getOneById(id, true));
@@ -62,7 +57,7 @@ public class AdminSysRoleController {
 
     @SysLog(value = "新增后台角色")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
-    @ApiOperation(value = "新增")
+    @Operation(summary = "新增")
     @PostMapping(value = "/sys/roles")
     public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysRoleDTO dto) {
         dto.setTenantId(null);
@@ -73,7 +68,7 @@ public class AdminSysRoleController {
 
     @SysLog(value = "编辑后台角色")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
-    @ApiOperation(value = "编辑")
+    @Operation(summary = "编辑")
     @PutMapping(value = "/sys/roles/{id}")
     public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysRoleDTO dto) {
         dto
@@ -86,7 +81,7 @@ public class AdminSysRoleController {
 
     @SysLog(value = "删除后台角色")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
-    @ApiOperation(value = "删除")
+    @Operation(summary = "删除")
     @DeleteMapping(value = "/sys/roles")
     public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         sysRoleService.adminDelete(dto.getIds());
@@ -99,7 +94,7 @@ public class AdminSysRoleController {
 
     @SysLog(value = "绑定角色与菜单关联关系")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + "bindMenus")
-    @ApiOperation(value = "绑定角色与菜单关联关系")
+    @Operation(summary = "绑定角色与菜单关联关系")
     @PutMapping(value = "/sys/roles/{id}/menus")
     public ApiResult<Void> bindMenus(@PathVariable Long id, @RequestBody @Valid AdminBindRoleMenuRelationDTO dto) {
         dto.setRoleId(id);

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

@@ -9,7 +9,6 @@ import cc.uncarbon.module.adminapi.constant.AdminApiConstant;
 import cc.uncarbon.module.adminapi.event.KickOutSysUsersEvent;
 import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cc.uncarbon.module.sys.annotation.SysLog;
-import cc.uncarbon.module.sys.constant.SysConstant;
 import cc.uncarbon.module.sys.facade.SysTenantFacade;
 import cc.uncarbon.module.sys.model.request.AdminInsertSysTenantDTO;
 import cc.uncarbon.module.sys.model.request.AdminListSysTenantDTO;
@@ -20,22 +19,18 @@ import cc.uncarbon.module.sys.service.SysTenantService;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.extra.spring.SpringUtil;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
+import jakarta.validation.Valid;
 
 
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Api(value = "系统租户管理接口", tags = {"系统租户管理接口"})
-@RequestMapping(value = {
-        // 兼容旧的API路由前缀
-        SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
-        AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
-})
+@Tag(name = "系统租户管理接口")
+@RequestMapping(value = AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
 @RequiredArgsConstructor
 @RestController
 @Slf4j
@@ -49,14 +44,14 @@ public class AdminSysTenantController {
 
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "分页列表")
+    @Operation(summary = "分页列表")
     @GetMapping(value = "/sys/tenants")
     public ApiResult<PageResult<SysTenantBO>> list(PageParam pageParam, AdminListSysTenantDTO dto) {
         return ApiResult.data(sysTenantService.adminList(pageParam, dto));
     }
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "详情")
+    @Operation(summary = "详情")
     @GetMapping(value = "/sys/tenants/{id}")
     public ApiResult<SysTenantBO> getById(@PathVariable Long id) {
         return ApiResult.data(sysTenantService.getOneById(id, true));
@@ -64,7 +59,7 @@ public class AdminSysTenantController {
 
     @SysLog(value = "新增系统租户")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
-    @ApiOperation(value = "新增")
+    @Operation(summary = "新增")
     @PostMapping(value = "/sys/tenants")
     public ApiResult<Void> insert(@RequestBody @Valid AdminInsertSysTenantDTO dto) {
         sysTenantFacade.adminInsert(dto);
@@ -74,7 +69,7 @@ public class AdminSysTenantController {
 
     @SysLog(value = "编辑系统租户")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
-    @ApiOperation(value = "编辑")
+    @Operation(summary = "编辑")
     @PutMapping(value = "/sys/tenants/{id}")
     public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminUpdateSysTenantDTO dto) {
         dto.setId(id);
@@ -90,7 +85,7 @@ public class AdminSysTenantController {
 
     @SysLog(value = "删除系统租户")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
-    @ApiOperation(value = "删除")
+    @Operation(summary = "删除")
     @DeleteMapping(value = "/sys/tenants")
     public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         SysTenantKickOutUsersBO needKickOutUsers = sysTenantFacade.adminDelete(dto.getIds());

+ 19 - 36
src/main/java/cc/uncarbon/module/adminapi/web/sys/AdminSysUserController.java

@@ -8,7 +8,6 @@ import cc.uncarbon.framework.web.model.request.IdsDTO;
 import cc.uncarbon.framework.web.model.response.ApiResult;
 import cc.uncarbon.module.adminapi.constant.AdminApiConstant;
 import cc.uncarbon.module.sys.annotation.SysLog;
-import cc.uncarbon.module.sys.constant.SysConstant;
 import cc.uncarbon.module.sys.enums.SysUserStatusEnum;
 import cc.uncarbon.module.sys.model.request.*;
 import cc.uncarbon.module.sys.model.response.SysUserBO;
@@ -17,23 +16,19 @@ import cc.uncarbon.module.sys.service.SysUserService;
 import cc.uncarbon.module.adminapi.util.AdminStpUtil;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.*;
 
-import javax.validation.Valid;
+import jakarta.validation.Valid;
 import java.util.Set;
 
 
 @SaCheckLogin(type = AdminStpUtil.TYPE)
-@Api(value = "后台用户管理接口", tags = {"后台用户管理接口"})
-@RequestMapping(value = {
-        // 兼容旧的API路由前缀
-        SysConstant.SYS_MODULE_CONTEXT_PATH + HelioConstant.Version.HTTP_API_VERSION_V1,
-        AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1"
-})
+@Tag(name = "后台用户管理接口")
+@RequestMapping(value = AdminApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
 @RequiredArgsConstructor
 @RestController
 @Slf4j
@@ -45,14 +40,14 @@ public class AdminSysUserController {
 
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "分页列表")
+    @Operation(summary = "分页列表")
     @GetMapping(value = "/sys/users")
     public ApiResult<PageResult<SysUserBO>> list(PageParam pageParam, AdminListSysUserDTO dto) {
         return ApiResult.data(sysUserService.adminList(pageParam, dto));
     }
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "详情")
+    @Operation(summary = "详情")
     @GetMapping(value = "/sys/users/{id}")
     public ApiResult<SysUserBO> getById(@PathVariable Long id) {
         return ApiResult.data(sysUserService.getOneById(id, true));
@@ -60,7 +55,7 @@ public class AdminSysUserController {
 
     @SysLog(value = "新增后台用户")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.CREATE)
-    @ApiOperation(value = "新增")
+    @Operation(summary = "新增")
     @PostMapping(value = "/sys/users")
     public ApiResult<Void> insert(@RequestBody @Valid AdminInsertOrUpdateSysUserDTO dto) {
         sysUserService.adminInsert(dto);
@@ -70,7 +65,7 @@ public class AdminSysUserController {
 
     @SysLog(value = "编辑后台用户")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.UPDATE)
-    @ApiOperation(value = "编辑")
+    @Operation(summary = "编辑")
     @PutMapping(value = "/sys/users/{id}")
     public ApiResult<Void> update(@PathVariable Long id, @RequestBody @Valid AdminInsertOrUpdateSysUserDTO dto) {
         dto.setId(id);
@@ -86,7 +81,7 @@ public class AdminSysUserController {
 
     @SysLog(value = "删除后台用户")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.DELETE)
-    @ApiOperation(value = "删除")
+    @Operation(summary = "删除")
     @DeleteMapping(value = "/sys/users")
     public ApiResult<Void> delete(@RequestBody @Valid IdsDTO<Long> dto) {
         sysUserService.adminDelete(dto.getIds());
@@ -97,7 +92,7 @@ public class AdminSysUserController {
         return ApiResult.success();
     }
 
-    @ApiOperation(value = "取当前用户信息")
+    @Operation(summary = "取当前用户信息")
     @GetMapping(value = "/sys/users/info")
     public ApiResult<VbenAdminUserInfoVO> getCurrentUserInfo() {
         return ApiResult.data(sysUserService.adminGetCurrentUserInfo());
@@ -105,7 +100,7 @@ public class AdminSysUserController {
 
     @SysLog(value = "重置某用户密码")
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + "resetPassword")
-    @ApiOperation(value = "重置某用户密码")
+    @Operation(summary = "重置某用户密码")
     @PutMapping(value = "/sys/users/{userId}/password")
     public ApiResult<Void> resetPassword(@PathVariable Long userId, @RequestBody @Valid AdminResetSysUserPasswordDTO dto) {
         dto.setUserId(userId);
@@ -118,12 +113,8 @@ public class AdminSysUserController {
     }
 
     @SysLog(value = "修改当前用户密码")
-    @ApiOperation(value = "修改当前用户密码")
-    @PostMapping(value = {
-            "/sys/users/me/password:update",
-            // 兼容旧的API路由
-            "/sys/users/updatePassword"
-    })
+    @Operation(summary = "修改当前用户密码")
+    @PostMapping(value = "/sys/users/me/password:update")
     public ApiResult<Void> updatePassword(@RequestBody @Valid AdminUpdateCurrentSysUserPasswordDTO dto) {
         if (!dto.getConfirmNewPassword().equals(dto.getNewPassword())) {
             throw new BusinessException(400, "密码与确认密码不同,请检查");
@@ -137,7 +128,7 @@ public class AdminSysUserController {
     }
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + "bindRoles")
-    @ApiOperation(value = "绑定用户与角色关联关系")
+    @Operation(summary = "绑定用户与角色关联关系")
     @PutMapping(value = "/sys/users/{userId}/roles")
     public ApiResult<Void> bindRoles(@PathVariable Long userId, @RequestBody AdminBindUserRoleRelationDTO dto) {
         dto.setUserId(userId);
@@ -150,12 +141,8 @@ public class AdminSysUserController {
     }
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + "kickOut")
-    @ApiOperation(value = "踢某用户下线")
-    @PostMapping(value = {
-            "/sys/users/{userId}:kick-out",
-            // 兼容旧的API路由
-            "/sys/users/{userId}/kickOut"
-    })
+    @Operation(summary = "踢某用户下线")
+    @PostMapping(value = "/sys/users/{userId}:kick-out")
     public ApiResult<Void> kickOut(@PathVariable Long userId) {
         AdminStpUtil.kickout(userId);
 
@@ -163,12 +150,8 @@ public class AdminSysUserController {
     }
 
     @SaCheckPermission(type = AdminStpUtil.TYPE, value = PERMISSION_PREFIX + HelioConstant.Permission.RETRIEVE)
-    @ApiOperation(value = "取指定用户关联角色ID")
-    @GetMapping(value = {
-            "/sys/users/{userId}/roles",
-            // 兼容旧的API路由
-            "/sys/users/{userId}/relatedRoleIds"
-    })
+    @Operation(summary = "取指定用户关联角色ID")
+    @GetMapping(value = "/sys/users/{userId}/roles")
     public ApiResult<Set<Long>> listRelatedRoleIds(@PathVariable Long userId) {
         return ApiResult.data(sysUserService.listRelatedRoleIds(userId));
     }

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

@@ -3,8 +3,8 @@ package cc.uncarbon.module.appapi.web;
 
 import cc.uncarbon.framework.web.model.response.ApiResult;
 import cc.uncarbon.module.appapi.constant.AppApiConstant;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 @RequiredArgsConstructor
 @Slf4j
-@Api(value = "APP鉴权接口", tags = {"APP鉴权接口"})
+@Tag(name = "APP鉴权接口")
 @RequestMapping(AppApiConstant.HTTP_API_URL_PREFIX + "/api/v1")
 @RestController
 public class AppAuthController {
@@ -24,13 +24,10 @@ public class AppAuthController {
     相关拦截器代码请见 CustomInterceptorConfiguration.java
      */
 
-    @ApiOperation(value = "登录")
+    @Operation(summary = "登录")
     @PostMapping("/auth/login")
     public ApiResult<Void> login() {
-        /*
-        编码时请参考AdminAuthController#login
-         */
-
+        // 可参考 admin-api 的 AdminAuthController#login
         return ApiResult.success();
     }
 

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

@@ -3,7 +3,7 @@ package cc.uncarbon.module.oss.entity;
 import cc.uncarbon.framework.crud.entity.HelioBaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -27,43 +27,43 @@ public class OssFileInfoEntity extends HelioBaseEntity<Long> {
     private static final long serialVersionUID = 1L;
 
 
-    @ApiModelProperty(value = "存储平台")
+    @Schema(description = "存储平台")
     @TableField(value = "storage_platform")
     private String storagePlatform;
 
-    @ApiModelProperty(value = "基础存储路径")
+    @Schema(description = "基础存储路径")
     @TableField(value = "storage_base_path")
     private String storageBasePath;
 
-    @ApiModelProperty(value = "存储路径")
+    @Schema(description = "存储路径")
     @TableField(value = "storage_path")
     private String storagePath;
 
-    @ApiModelProperty(value = "存储文件名")
+    @Schema(description = "存储文件名")
     @TableField(value = "storage_filename")
     private String storageFilename;
 
-    @ApiModelProperty(value = "原始文件名")
+    @Schema(description = "原始文件名")
     @TableField(value = "original_filename")
     private String originalFilename;
 
-    @ApiModelProperty(value = "扩展名")
+    @Schema(description = "扩展名")
     @TableField(value = "extend_name")
     private String extendName;
 
-    @ApiModelProperty(value = "文件大小")
+    @Schema(description = "文件大小")
     @TableField(value = "file_size")
     private Long fileSize;
 
-    @ApiModelProperty(value = "MD5")
+    @Schema(description = "MD5")
     @TableField(value = "md5")
     private String md5;
 
-    @ApiModelProperty(value = "类别名")
+    @Schema(description = "类别名")
     @TableField(value = "classified")
     private String classified;
 
-    @ApiModelProperty(value = "对象存储直链")
+    @Schema(description = "对象存储直链")
     @TableField(value = "direct_url")
     private String directUrl;
 

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

@@ -2,7 +2,7 @@ package cc.uncarbon.module.oss.model.request;
 
 import cc.uncarbon.framework.core.constant.HelioConstant;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -27,21 +27,21 @@ public class AdminListOssFileInfoDTO implements Serializable {
     private static final long serialVersionUID = 1L;
 
 
-    @ApiModelProperty(value = "原始文件名(关键词)")
+    @Schema(description = "原始文件名(关键词)")
     private String originalFilename;
 
-    @ApiModelProperty(value = "扩展名")
+    @Schema(description = "扩展名")
     private String extendName;
 
-    @ApiModelProperty(value = "文件类别")
+    @Schema(description = "文件类别")
     private String classified;
 
-    @ApiModelProperty(value = "时间区间起")
+    @Schema(description = "时间区间起")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime beginAt;
 
-    @ApiModelProperty(value = "时间区间止")
+    @Schema(description = "时间区间止")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime endAt;

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

@@ -1,6 +1,6 @@
 package cc.uncarbon.module.oss.model.request;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -20,19 +20,19 @@ public class UploadFileAttributeDTO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @ApiModelProperty(value = "文件类别", example = "id_card=身份证 driver_license=驾驶证")
+    @Schema(description = "文件类别", example = "id_card=身份证 driver_license=驾驶证")
     private String classified;
 
     /*
     以下字段为内部使用
      */
-    @ApiModelProperty(value = "原始文件名", hidden = true)
+    @Schema(description = "原始文件名", hidden = true)
     private String originalFilename;
 
-    @ApiModelProperty(value = "MIME类型", hidden = true)
+    @Schema(description = "MIME类型", hidden = true)
     private String contentType;
 
-    @ApiModelProperty(value = "MD5", hidden = true)
+    @Schema(description = "MD5", hidden = true)
     private String md5;
 
 }

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

@@ -1,6 +1,6 @@
 package cc.uncarbon.module.oss.model.response;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -22,16 +22,16 @@ public class OssFileDownloadReplyBO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @ApiModelProperty(value = "是否直接重定向到对象存储直链", notes = "如果允许客户端直接从“对象存储直链”下载,则本字段可以置 true")
+    @Schema(description = "是否直接重定向到对象存储直链", title = "如果允许客户端直接从“对象存储直链”下载,则本字段可以置 true")
     private boolean redirect2DirectUrl;
 
-    @ApiModelProperty(value = "文件数据", notes = "如果允许客户端直接从“对象存储直链”下载,则本字段可以置空")
+    @Schema(description = "文件数据", title = "如果允许客户端直接从“对象存储直链”下载,则本字段可以置空")
     private byte[] fileBytes;
 
-    @ApiModelProperty(value = "对象存储直链")
+    @Schema(description = "对象存储直链")
     private String directUrl;
 
-    @ApiModelProperty(value = "存储文件名")
+    @Schema(description = "存储文件名")
     private String storageFilename;
 
 }

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

@@ -2,7 +2,7 @@ package cc.uncarbon.module.oss.model.response;
 
 import cc.uncarbon.framework.core.constant.HelioConstant;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -26,47 +26,47 @@ public class OssFileInfoBO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @ApiModelProperty(value = "主键ID")
+    @Schema(description = "主键ID")
     private Long id;
 
-    @ApiModelProperty(value = "创建时刻")
+    @Schema(description = "创建时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime createdAt;
 
-    @ApiModelProperty(value = "更新时刻")
+    @Schema(description = "更新时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime updatedAt;
 
-    @ApiModelProperty(value = "存储平台")
+    @Schema(description = "存储平台")
     private String storagePlatform;
 
-    @ApiModelProperty(value = "基础存储路径")
+    @Schema(description = "基础存储路径")
     private String storageBasePath;
 
-    @ApiModelProperty(value = "存储路径")
+    @Schema(description = "存储路径")
     private String storagePath;
 
-    @ApiModelProperty(value = "存储文件名")
+    @Schema(description = "存储文件名")
     private String storageFilename;
 
-    @ApiModelProperty(value = "原始文件名")
+    @Schema(description = "原始文件名")
     private String originalFilename;
 
-    @ApiModelProperty(value = "扩展名")
+    @Schema(description = "扩展名")
     private String extendName;
 
-    @ApiModelProperty(value = "文件大小")
+    @Schema(description = "文件大小")
     private Long fileSize;
 
-    @ApiModelProperty(value = "MD5")
+    @Schema(description = "MD5")
     private String md5;
 
-    @ApiModelProperty(value = "类别编号")
+    @Schema(description = "类别编号")
     private String classified;
 
-    @ApiModelProperty(value = "对象存储直链")
+    @Schema(description = "对象存储直链")
     private String directUrl;
 
     /**

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

@@ -1,6 +1,6 @@
 package cc.uncarbon.module.oss.model.response;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -20,13 +20,13 @@ public class OssFileUploadResultVO implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @ApiModelProperty(value = "文件ID")
+    @Schema(description = "文件ID")
     private Long fileId;
 
-    @ApiModelProperty(value = "存储文件名")
+    @Schema(description = "存储文件名")
     private String filename;
 
-    @ApiModelProperty(value = "完整外链")
+    @Schema(description = "完整外链")
     private String url;
 
 }

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

@@ -8,13 +8,6 @@ public final class SysConstant {
     private SysConstant() {
     }
 
-    /**
-     * 后台管理接口路由前缀
-     * @deprecated since 1.9.0, because its meaning is no longer so fitting; replaced by AdminApiConstant#API_URL_PREFIX
-     */
-    @Deprecated
-    public static final String SYS_MODULE_CONTEXT_PATH = "/sys";
-
     /**
      * 无上级节点的父级ID
      */

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

@@ -3,7 +3,7 @@ package cc.uncarbon.module.sys.entity;
 import cc.uncarbon.framework.crud.entity.HelioBaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -24,35 +24,35 @@ import lombok.experimental.SuperBuilder;
 @TableName(value = "sys_data_dict")
 public class SysDataDictEntity extends HelioBaseEntity<Long> {
 
-	@ApiModelProperty(value = "驼峰式键名")
+	@Schema(description = "驼峰式键名")
 	@TableField(value = "camel_case_key")
 	private String camelCaseKey;
 
-	@ApiModelProperty(value = "下划线式键名")
+	@Schema(description = "下划线式键名")
 	@TableField(value = "under_case_key")
 	private String underCaseKey;
 
-	@ApiModelProperty(value = "帕斯卡式键名")
+	@Schema(description = "帕斯卡式键名")
 	@TableField(value = "pascal_case_key")
 	private String pascalCaseKey;
 
-	@ApiModelProperty(value = "数据值")
+	@Schema(description = "数据值")
 	@TableField(value = "value")
 	private String value;
 
-	@ApiModelProperty(value = "描述")
+	@Schema(description = "描述")
 	@TableField(value = "description")
 	private String description;
 
-	@ApiModelProperty(value = "单位")
+	@Schema(description = "单位")
 	@TableField(value = "unit")
 	private String unit;
 
-	@ApiModelProperty(value = "取值范围")
+	@Schema(description = "取值范围")
 	@TableField(value = "value_range")
 	private String valueRange;
 
-	@ApiModelProperty(value = "别称键名")
+	@Schema(description = "别称键名")
 	@TableField(value = "alias_key")
 	private String aliasKey;
 

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

@@ -4,7 +4,7 @@ import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
 import cc.uncarbon.framework.crud.entity.HelioBaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -29,23 +29,23 @@ public class SysDeptEntity extends HelioBaseEntity<Long> {
 	 * 乐观锁
 	 * 需自行加@Version注解才有效
 	 */
-	@ApiModelProperty(value = "乐观锁", notes = "需再次复制本字段,并自行加 @Version 注解才有效")
+	@Schema(description = "乐观锁", title = "需再次复制本字段,并自行加 @Version 注解才有效")
 	@TableField(value = "revision", exist = false)
 	private Long revision;
 
-	@ApiModelProperty(value = "名称")
+	@Schema(description = "名称")
 	@TableField(value = "title")
 	private String title;
 
-	@ApiModelProperty(value = "上级ID(无上级节点设置为0)")
+	@Schema(description = "上级ID(无上级节点设置为0)")
 	@TableField(value = "parent_id")
 	private Long parentId;
 
-	@ApiModelProperty(value = "排序")
+	@Schema(description = "排序")
 	@TableField(value = "sort")
 	private Integer sort;
 
-	@ApiModelProperty(value = "状态")
+	@Schema(description = "状态")
 	@TableField(value = "status")
 	private EnabledStatusEnum status;
 

+ 14 - 14
src/main/java/cc/uncarbon/module/sys/entity/SysLogEntity.java

@@ -4,7 +4,7 @@ import cc.uncarbon.framework.crud.entity.HelioBaseEntity;
 import cc.uncarbon.module.sys.enums.SysLogStatusEnum;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -25,55 +25,55 @@ import lombok.experimental.SuperBuilder;
 @TableName(value = "sys_log")
 public class SysLogEntity extends HelioBaseEntity<Long> {
 
-	@ApiModelProperty(value = "用户ID")
+	@Schema(description = "用户ID")
 	@TableField(value = "user_id")
 	private Long userId;
 
-	@ApiModelProperty(value = "用户账号")
+	@Schema(description = "用户账号")
 	@TableField(value = "username")
 	private String username;
 
-	@ApiModelProperty(value = "操作内容")
+	@Schema(description = "操作内容")
 	@TableField(value = "operation")
 	private String operation;
 
-	@ApiModelProperty(value = "请求方法")
+	@Schema(description = "请求方法")
 	@TableField(value = "method")
 	private String method;
 
-	@ApiModelProperty(value = "请求参数")
+	@Schema(description = "请求参数")
 	@TableField(value = "params")
 	private String params;
 
-	@ApiModelProperty(value = "IP地址")
+	@Schema(description = "IP地址")
 	@TableField(value = "ip")
 	private String ip;
 
-	@ApiModelProperty(value = "状态")
+	@Schema(description = "状态")
 	@TableField(value = "status")
 	private SysLogStatusEnum status;
 
-	@ApiModelProperty(value = "错误原因堆栈")
+	@Schema(description = "错误原因堆栈")
 	@TableField(value = "error_stacktrace")
 	private String errorStacktrace;
 
-	@ApiModelProperty(value = "用户UA")
+	@Schema(description = "用户UA")
 	@TableField(value = "user_agent")
 	private String userAgent;
 
-	@ApiModelProperty(value = "IP地址属地-国家或地区名")
+	@Schema(description = "IP地址属地-国家或地区名")
 	@TableField(value = "ip_location_region_name")
 	private String ipLocationRegionName;
 
-	@ApiModelProperty(value = "IP地址属地-省级行政区名")
+	@Schema(description = "IP地址属地-省级行政区名")
 	@TableField(value = "ip_location_province_name")
 	private String ipLocationProvinceName;
 
-	@ApiModelProperty(value = "IP地址属地-市级行政区名")
+	@Schema(description = "IP地址属地-市级行政区名")
 	@TableField(value = "ip_location_city_name")
 	private String ipLocationCityName;
 
-	@ApiModelProperty(value = "IP地址属地-县级行政区名")
+	@Schema(description = "IP地址属地-县级行政区名")
 	@TableField(value = "ip_location_district_name")
 	private String ipLocationDistrictName;
 

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

@@ -5,7 +5,7 @@ import cc.uncarbon.framework.crud.entity.HelioBaseEntity;
 import cc.uncarbon.module.sys.enums.SysMenuTypeEnum;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -26,39 +26,39 @@ import lombok.experimental.SuperBuilder;
 @TableName(value = "sys_menu")
 public class SysMenuEntity extends HelioBaseEntity<Long> {
 
-	@ApiModelProperty(value = "名称")
+	@Schema(description = "名称")
 	@TableField(value = "title")
 	private String title;
 
-	@ApiModelProperty(value = "上级菜单ID")
+	@Schema(description = "上级菜单ID")
 	@TableField(value = "parent_id")
 	private Long parentId;
 
-	@ApiModelProperty(value = "菜单类型")
+	@Schema(description = "菜单类型")
 	@TableField(value = "type")
 	private SysMenuTypeEnum type;
 
-	@ApiModelProperty(value = "权限标识")
+	@Schema(description = "权限标识")
 	@TableField(value = "permission")
 	private String permission;
 
-	@ApiModelProperty(value = "图标")
+	@Schema(description = "图标")
 	@TableField(value = "icon")
 	private String icon;
 
-	@ApiModelProperty(value = "排序")
+	@Schema(description = "排序")
 	@TableField(value = "sort")
 	private Integer sort;
 
-	@ApiModelProperty(value = "状态")
+	@Schema(description = "状态")
 	@TableField(value = "status")
 	private EnabledStatusEnum status;
 
-	@ApiModelProperty(value = "组件(Vue项目中`/@/views/`后的路径部分; 填`LAYOUT`为空页面)")
+	@Schema(description = "组件(Vue项目中`/@/views/`后的路径部分; 填`LAYOUT`为空页面)")
 	@TableField(value = "component")
 	private String component;
 
-	@ApiModelProperty(value = "外链地址")
+	@Schema(description = "外链地址")
 	@TableField(value = "external_link")
 	private String externalLink;
 

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

@@ -3,7 +3,7 @@ package cc.uncarbon.module.sys.entity;
 import cc.uncarbon.framework.crud.entity.HelioBaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -24,15 +24,15 @@ import lombok.experimental.SuperBuilder;
 @TableName(value = "sys_param")
 public class SysParamEntity extends HelioBaseEntity<Long> {
 
-    @ApiModelProperty(value = "键名")
+    @Schema(description = "键名")
     @TableField(value = "name")
     private String name;
 
-    @ApiModelProperty(value = "键值")
+    @Schema(description = "键值")
     @TableField(value = "value")
     private String value;
 
-    @ApiModelProperty(value = "描述")
+    @Schema(description = "描述")
     @TableField(value = "description")
     private String description;
 

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

@@ -4,7 +4,7 @@ import cc.uncarbon.framework.crud.entity.HelioBaseEntity;
 import cc.uncarbon.module.sys.constant.SysConstant;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -25,11 +25,11 @@ import lombok.experimental.SuperBuilder;
 @TableName(value = "sys_role")
 public class SysRoleEntity extends HelioBaseEntity<Long> {
 
-	@ApiModelProperty(value = "角色名")
+	@Schema(description = "角色名")
 	@TableField(value = "title")
 	private String title;
 
-	@ApiModelProperty(value = "角色编码")
+	@Schema(description = "角色编码")
 	@TableField(value = "value")
 	private String value;
 

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

@@ -3,7 +3,7 @@ package cc.uncarbon.module.sys.entity;
 import cc.uncarbon.framework.crud.entity.HelioNoTenantBaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -24,11 +24,11 @@ import lombok.experimental.SuperBuilder;
 @TableName(value = "sys_role_menu_relation")
 public class SysRoleMenuRelationEntity extends HelioNoTenantBaseEntity<Long> {
 
-	@ApiModelProperty(value = "角色ID")
+	@Schema(description = "角色ID")
 	@TableField(value = "role_id")
 	private Long roleId;
 
-	@ApiModelProperty(value = "菜单ID")
+	@Schema(description = "菜单ID")
 	@TableField(value = "menu_id")
 	private Long menuId;
 

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

@@ -4,7 +4,7 @@ import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
 import cc.uncarbon.framework.crud.entity.HelioBaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -25,19 +25,19 @@ import lombok.experimental.SuperBuilder;
 @TableName(value = "sys_tenant")
 public class SysTenantEntity extends HelioBaseEntity<Long> {
 
-    @ApiModelProperty(value = "租户名")
+    @Schema(description = "租户名")
     @TableField(value = "tenant_name")
     private String tenantName;
 
-    @ApiModelProperty(value = "状态")
+    @Schema(description = "状态")
     @TableField(value = "status")
     private EnabledStatusEnum status;
 
-    @ApiModelProperty(value = "租户管理员用户ID")
+    @Schema(description = "租户管理员用户ID")
     @TableField(value = "tenant_admin_user_id")
     private Long tenantAdminUserId;
 
-    @ApiModelProperty(value = "备注")
+    @Schema(description = "备注")
     @TableField(value = "remark")
     private String remark;
 

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

@@ -3,7 +3,7 @@ package cc.uncarbon.module.sys.entity;
 import cc.uncarbon.framework.crud.entity.HelioNoTenantBaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -24,11 +24,11 @@ import lombok.experimental.SuperBuilder;
 @TableName(value = "sys_user_dept_relation")
 public class SysUserDeptRelationEntity extends HelioNoTenantBaseEntity<Long> {
 
-	@ApiModelProperty(value = "用户ID")
+	@Schema(description = "用户ID")
 	@TableField(value = "user_id")
 	private Long userId;
 
-	@ApiModelProperty(value = "部门ID")
+	@Schema(description = "部门ID")
 	@TableField(value = "dept_id")
 	private Long deptId;
 

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

@@ -6,7 +6,7 @@ import cc.uncarbon.module.sys.enums.SysUserStatusEnum;
 import cn.hutool.core.annotation.Alias;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -29,40 +29,40 @@ import java.time.LocalDateTime;
 @TableName(value = "sys_user")
 public class SysUserEntity extends HelioBaseEntity<Long> {
 
-	@ApiModelProperty(value = "账号")
+	@Schema(description = "账号")
 	@Alias(value = "username")
 	@TableField(value = "pin")
 	private String pin;
 
-	@ApiModelProperty(value = "密码")
+	@Schema(description = "密码")
 	@TableField(value = "pwd")
 	private String pwd;
 
-	@ApiModelProperty(value = "盐")
+	@Schema(description = "盐")
 	@TableField(value = "salt")
 	private String salt;
 
-	@ApiModelProperty(value = "昵称")
+	@Schema(description = "昵称")
 	@TableField(value = "nickname")
 	private String nickname;
 
-	@ApiModelProperty(value = "状态")
+	@Schema(description = "状态")
 	@TableField(value = "status")
 	private SysUserStatusEnum status;
 
-	@ApiModelProperty(value = "性别")
+	@Schema(description = "性别")
 	@TableField(value = "gender")
 	private GenderEnum gender;
 
-	@ApiModelProperty(value = "邮箱")
+	@Schema(description = "邮箱")
 	@TableField(value = "email")
 	private String email;
 
-	@ApiModelProperty(value = "手机号")
+	@Schema(description = "手机号")
 	@TableField(value = "phone_no")
 	private String phoneNo;
 
-	@ApiModelProperty(value = "最后登录时刻")
+	@Schema(description = "最后登录时刻")
 	@TableField(value = "last_login_at")
 	private LocalDateTime lastLoginAt;
 

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

@@ -3,7 +3,7 @@ package cc.uncarbon.module.sys.entity;
 import cc.uncarbon.framework.crud.entity.HelioNoTenantBaseEntity;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -24,11 +24,11 @@ import lombok.experimental.SuperBuilder;
 @TableName(value = "sys_user_role_relation")
 public class SysUserRoleRelationEntity extends HelioNoTenantBaseEntity<Long> {
 
-	@ApiModelProperty(value = "用户ID")
+	@Schema(description = "用户ID")
 	@TableField(value = "user_id")
 	private Long userId;
 
-	@ApiModelProperty(value = "角色ID")
+	@Schema(description = "角色ID")
 	@TableField(value = "role_id")
 	private Long roleId;
 

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

@@ -1,6 +1,6 @@
 package cc.uncarbon.module.sys.model.request;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -21,10 +21,10 @@ import java.util.Set;
 @Data
 public class AdminBindRoleMenuRelationDTO implements Serializable {
 
-    @ApiModelProperty(value = "菜单Ids(空=清理关联关系后不再绑定任何菜单)")
+    @Schema(description = "菜单Ids(空=清理关联关系后不再绑定任何菜单)")
     private Set<Long> menuIds;
 
-    @ApiModelProperty(value = "角色ID", hidden = true)
+    @Schema(description = "角色ID", hidden = true)
     private Long roleId;
 
 }

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

@@ -1,6 +1,6 @@
 package cc.uncarbon.module.sys.model.request;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -21,10 +21,10 @@ import java.util.Set;
 @Data
 public class AdminBindUserRoleRelationDTO implements Serializable {
 
-    @ApiModelProperty(value = "角色Ids(空=清理关联关系后不再绑定任何角色)")
+    @Schema(description = "角色Ids(空=清理关联关系后不再绑定任何角色)")
     private Set<Long> roleIds;
 
-    @ApiModelProperty(value = "用户ID", hidden = true)
+    @Schema(description = "用户ID", hidden = true)
     private Long userId;
 
 }

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

@@ -1,14 +1,14 @@
 package cc.uncarbon.module.sys.model.request;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
 import java.io.Serializable;
 
 
@@ -22,43 +22,43 @@ import java.io.Serializable;
 @Data
 public class AdminInsertOrUpdateSysDataDictDTO implements Serializable {
 
-    @ApiModelProperty(value = "主键ID", hidden = true, notes = "仅更新时使用")
+    @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
     private Long id;
 
-    @ApiModelProperty(value = "驼峰式键名", required = true)
+    @Schema(description = "驼峰式键名", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 100, message = "【驼峰式键名】最长100位")
     @NotBlank(message = "驼峰式键名不能为空")
     private String camelCaseKey;
 
-    @ApiModelProperty(value = "下划线式键名", required = true)
+    @Schema(description = "下划线式键名", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 100, message = "【下划线式键名】最长100位")
     @NotBlank(message = "下划线式键名不能为空")
     private String underCaseKey;
 
-    @ApiModelProperty(value = "帕斯卡式键名", required = true)
+    @Schema(description = "帕斯卡式键名", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 100, message = "【帕斯卡式键名】最长100位")
     @NotBlank(message = "帕斯卡式键名不能为空")
     private String pascalCaseKey;
 
-    @ApiModelProperty(value = "数据值", required = true)
+    @Schema(description = "数据值", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 255, message = "【数据值】最长255位")
     @NotBlank(message = "数据值不能为空")
     private String value;
 
-    @ApiModelProperty(value = "描述", required = true)
+    @Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 255, message = "【描述】最长255位")
     @NotBlank(message = "描述不能为空")
     private String description;
 
-    @ApiModelProperty(value = "单位")
+    @Schema(description = "单位")
     @Size(max = 30, message = "【单位】最长30位")
     private String unit;
 
-    @ApiModelProperty(value = "取值范围")
+    @Schema(description = "取值范围")
     @Size(max = 255, message = "【取值范围】最长255位")
     private String valueRange;
 
-    @ApiModelProperty(value = "别称键名")
+    @Schema(description = "别称键名")
     @Size(max = 100, message = "【别称键名】最长100位")
     private String aliasKey;
 

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

@@ -1,15 +1,15 @@
 package cc.uncarbon.module.sys.model.request;
 
 import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
 import java.io.Serializable;
 
 
@@ -23,21 +23,21 @@ import java.io.Serializable;
 @Data
 public class AdminInsertOrUpdateSysDeptDTO implements Serializable {
 
-    @ApiModelProperty(value = "主键ID", hidden = true, notes = "仅更新时使用")
+    @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
     private Long id;
 
-    @ApiModelProperty(value = "部门名称", required = true)
+    @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 50, message = "【部门名称】最长50位")
     @NotBlank(message = "部门名称不能为空")
     private String title;
 
-    @ApiModelProperty(value = "上级ID(无上级节点设置为0)")
+    @Schema(description = "上级ID(无上级节点设置为0)")
     private Long parentId;
 
-    @ApiModelProperty(value = "排序")
+    @Schema(description = "排序")
     private Integer sort;
 
-    @ApiModelProperty(value = "状态")
+    @Schema(description = "状态")
     private EnabledStatusEnum status;
 
 }

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

@@ -2,16 +2,16 @@ package cc.uncarbon.module.sys.model.request;
 
 import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
 import cc.uncarbon.module.sys.enums.SysMenuTypeEnum;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
 import java.io.Serializable;
 
 
@@ -25,40 +25,40 @@ import java.io.Serializable;
 @Data
 public class AdminInsertOrUpdateSysMenuDTO implements Serializable {
 
-    @ApiModelProperty(value = "主键ID", hidden = true, notes = "仅更新时使用")
+    @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
     private Long id;
 
-    @ApiModelProperty(value = "菜单名称", required = true)
+    @Schema(description = "菜单名称", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 50, message = "【菜单名称】最长50位")
     @NotBlank(message = "菜单名称不能为空")
     private String title;
 
-    @ApiModelProperty(value = "上级菜单ID(无上级节点设置为0)")
+    @Schema(description = "上级菜单ID(无上级节点设置为0)")
     private Long parentId;
 
-    @ApiModelProperty(value = "菜单类型", required = true)
+    @Schema(description = "菜单类型", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "菜单类型不能为空")
     private SysMenuTypeEnum type;
 
-    @ApiModelProperty(value = "组件")
+    @Schema(description = "组件")
     @Size(max = 50, message = "【组件】最长50位")
     private String component;
 
-    @ApiModelProperty(value = "权限标识")
+    @Schema(description = "权限标识")
     @Size(max = 255, message = "【权限标识】最长255位")
     private String permission;
 
-    @ApiModelProperty(value = "图标")
+    @Schema(description = "图标")
     @Size(max = 255, message = "【图标】最长255位")
     private String icon;
 
-    @ApiModelProperty(value = "排序")
+    @Schema(description = "排序")
     private Integer sort;
 
-    @ApiModelProperty(value = "状态")
+    @Schema(description = "状态")
     private EnabledStatusEnum status;
 
-    @ApiModelProperty(value = "外链地址")
+    @Schema(description = "外链地址")
     @Size(max = 255, message = "【外链地址】最长255位")
     private String externalLink;
 

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

@@ -1,14 +1,14 @@
 package cc.uncarbon.module.sys.model.request;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
 import java.io.Serializable;
 
 
@@ -22,20 +22,20 @@ import java.io.Serializable;
 @Data
 public class AdminInsertOrUpdateSysParamDTO implements Serializable {
 
-    @ApiModelProperty(value = "主键ID", hidden = true, notes = "仅更新时使用")
+    @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
     private Long id;
 
-    @ApiModelProperty(value = "键名", required = true)
+    @Schema(description = "键名", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 50, message = "【键名】最长50位")
     @NotBlank(message = "键名不能为空")
     private String name;
 
-    @ApiModelProperty(value = "键值", required = true)
+    @Schema(description = "键值", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 255, message = "【键值】最长255位")
     @NotBlank(message = "键值不能为空")
     private String value;
 
-    @ApiModelProperty(value = "描述", required = true)
+    @Schema(description = "描述", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 255, message = "【描述】最长255位")
     @NotBlank(message = "描述不能为空")
     private String description;

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

@@ -1,15 +1,15 @@
 package cc.uncarbon.module.sys.model.request;
 
 import cc.uncarbon.module.sys.constant.SysConstant;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
 import java.io.Serializable;
 import java.util.Objects;
 
@@ -24,18 +24,18 @@ import java.util.Objects;
 @Data
 public class AdminInsertOrUpdateSysRoleDTO implements Serializable {
 
-    @ApiModelProperty(value = "主键ID", hidden = true, notes = "仅更新时使用")
+    @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
     private Long id;
 
-    @ApiModelProperty(value = "所属租户ID", hidden = true, notes = "仅新增时使用")
+    @Schema(description = "所属租户ID", hidden = true, title = "仅新增时使用")
     private Long tenantId;
 
-    @ApiModelProperty(value = "角色名", required = true)
+    @Schema(description = "角色名", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 50, message = "【角色名】最长50位")
     @NotBlank(message = "角色名不能为空")
     private String title;
 
-    @ApiModelProperty(value = "角色编码", required = true)
+    @Schema(description = "角色编码", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 100, message = "【角色编码】最长100位")
     @NotBlank(message = "角色编码不能为空")
     private String value;

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

@@ -5,17 +5,17 @@ import cc.uncarbon.framework.core.enums.GenderEnum;
 import cc.uncarbon.framework.core.exception.BusinessException;
 import cc.uncarbon.module.sys.enums.SysUserStatusEnum;
 import cn.hutool.core.text.CharSequenceUtil;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import javax.validation.constraints.Size;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Pattern;
+import jakarta.validation.constraints.Size;
 import java.io.Serializable;
 import java.util.Objects;
 
@@ -30,46 +30,46 @@ import java.util.Objects;
 @Data
 public class AdminInsertOrUpdateSysUserDTO implements Serializable {
 
-    @ApiModelProperty(value = "主键ID", hidden = true, notes = "仅更新时使用")
+    @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
     private Long id;
 
-    @ApiModelProperty(value = "所属租户ID", hidden = true, notes = "仅新增时使用")
+    @Schema(description = "所属租户ID", hidden = true, title = "仅新增时使用")
     private Long tenantId;
 
-    @ApiModelProperty(value = "账号", required = true)
+    @Schema(description = "账号", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(min = 6, max = 16, message = "【账号】最短6位,最长16位")
     @NotBlank(message = "账号不能为空")
     private String username;
 
-    @ApiModelProperty(value = "密码字符串(仅注册时有效)")
+    @Schema(description = "密码字符串(仅注册时有效)")
     private String passwordOfNewUser;
 
-    @ApiModelProperty(value = "昵称", required = true)
+    @Schema(description = "昵称", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 100, message = "【昵称】最长100位")
     @NotBlank(message = "昵称不能为空")
     private String nickname;
 
-    @ApiModelProperty(value = "状态", required = true)
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "状态不能为空")
     private SysUserStatusEnum status;
 
-    @ApiModelProperty(value = "性别", required = true)
+    @Schema(description = "性别", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "性别不能为空")
     private GenderEnum gender;
 
-    @ApiModelProperty(value = "邮箱", required = true)
+    @Schema(description = "邮箱", requiredMode = Schema.RequiredMode.REQUIRED)
     @Pattern(message = "邮箱格式有误", regexp = HelioConstant.Regex.EMAIL)
     @Size(max = 255, message = "【邮箱】最长255位")
     @NotBlank(message = "邮箱不能为空")
     private String email;
 
-    @ApiModelProperty(value = "手机号", required = true)
+    @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED)
     @Pattern(message = "手机号格式有误", regexp = HelioConstant.Regex.CHINA_MAINLAND_PHONE_NO)
     @Size(max = 20, message = "【手机号】最长20位")
     @NotBlank(message = "手机号不能为空")
     private String phoneNo;
 
-    @ApiModelProperty(value = "所属部门ID")
+    @Schema(description = "所属部门ID")
     private Long deptId;
 
 

+ 14 - 14
src/main/java/cc/uncarbon/module/sys/model/request/AdminInsertSysLogDTO.java

@@ -1,7 +1,7 @@
 package cc.uncarbon.module.sys.model.request;
 
 import cc.uncarbon.module.sys.enums.SysLogStatusEnum;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -19,43 +19,43 @@ import java.io.Serializable;
 @Data
 public class AdminInsertSysLogDTO implements Serializable {
 
-    @ApiModelProperty(value = "用户ID")
+    @Schema(description = "用户ID")
     private Long userId;
 
-    @ApiModelProperty(value = "用户账号")
+    @Schema(description = "用户账号")
     private String username;
 
-    @ApiModelProperty(value = "操作内容")
+    @Schema(description = "操作内容")
     private String operation;
 
-    @ApiModelProperty(value = "请求方法")
+    @Schema(description = "请求方法")
     private String method;
 
-    @ApiModelProperty(value = "请求参数")
+    @Schema(description = "请求参数")
     private String params;
 
-    @ApiModelProperty(value = "IP地址")
+    @Schema(description = "IP地址")
     private String ip;
 
-    @ApiModelProperty(value = "状态")
+    @Schema(description = "状态")
     private SysLogStatusEnum status;
 
-    @ApiModelProperty(value = "错误原因堆栈")
+    @Schema(description = "错误原因堆栈")
     private String errorStacktrace;
 
-    @ApiModelProperty(value = "用户UA")
+    @Schema(description = "用户UA")
     private String userAgent;
 
-    @ApiModelProperty(value = "IP地址属地-国家或地区名")
+    @Schema(description = "IP地址属地-国家或地区名")
     private String ipLocationRegionName;
 
-    @ApiModelProperty(value = "IP地址属地-省级行政区名")
+    @Schema(description = "IP地址属地-省级行政区名")
     private String ipLocationProvinceName;
 
-    @ApiModelProperty(value = "IP地址属地-市级行政区名")
+    @Schema(description = "IP地址属地-市级行政区名")
     private String ipLocationCityName;
 
-    @ApiModelProperty(value = "IP地址属地-县级行政区名")
+    @Schema(description = "IP地址属地-县级行政区名")
     private String ipLocationDistrictName;
 
 }

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

@@ -1,14 +1,14 @@
 package cc.uncarbon.module.sys.model.request;
 
 import cc.uncarbon.framework.core.constant.HelioConstant;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
-import javax.validation.constraints.*;
+import jakarta.validation.constraints.*;
 
 
 /**
@@ -21,28 +21,28 @@ import javax.validation.constraints.*;
 @Data
 public class AdminInsertSysTenantDTO extends AdminUpdateSysTenantDTO {
 
-    @ApiModelProperty(value = "租户ID(纯数字)", required = true)
+    @Schema(description = "租户ID(纯数字)", requiredMode = Schema.RequiredMode.REQUIRED)
     @Positive(message = "租户ID须为正整数")
     @NotNull(message = "租户ID不能为空")
     private Long tenantId;
 
-    @ApiModelProperty(value = "管理员账号", required = true)
+    @Schema(description = "管理员账号", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(min = 6, max = 16, message = "【管理员账号】最短6位,最长16位")
     @NotBlank(message = "管理员账号不能为空")
     private String tenantAdminUsername;
 
-    @ApiModelProperty(value = "管理员密码", required = true)
+    @Schema(description = "管理员密码", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(min = 8, max = 20, message = "【管理员密码】最短8位,最长20位")
     @NotBlank(message = "管理员密码不能为空")
     private String tenantAdminPassword;
 
-    @ApiModelProperty(value = "管理员邮箱", required = true)
+    @Schema(description = "管理员邮箱", requiredMode = Schema.RequiredMode.REQUIRED)
     @Pattern(message = "管理员邮箱格式不正确", regexp = HelioConstant.Regex.EMAIL)
     @Size(max = 255, message = "【管理员邮箱】最长255位")
     @NotBlank(message = "管理员邮箱不能为空")
     private String tenantAdminEmail;
 
-    @ApiModelProperty(value = "管理员手机号", required = true)
+    @Schema(description = "管理员手机号", requiredMode = Schema.RequiredMode.REQUIRED)
     @Pattern(message = "管理员手机号格式不正确", regexp = HelioConstant.Regex.CHINA_MAINLAND_PHONE_NO)
     @Size(max = 20, message = "【管理员手机号】最长20位")
     @NotBlank(message = "管理员手机号不能为空")

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

@@ -1,6 +1,6 @@
 package cc.uncarbon.module.sys.model.request;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -20,7 +20,7 @@ import java.io.Serializable;
 @Data
 public class AdminListSysDataDictDTO implements Serializable {
 
-    @ApiModelProperty(value = "描述(关键词)")
+    @Schema(description = "描述(关键词)")
     private String description;
 
 }

+ 6 - 6
src/main/java/cc/uncarbon/module/sys/model/request/AdminListSysLogDTO.java

@@ -3,7 +3,7 @@ package cc.uncarbon.module.sys.model.request;
 import cc.uncarbon.framework.core.constant.HelioConstant;
 import cc.uncarbon.module.sys.enums.SysLogStatusEnum;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -25,21 +25,21 @@ import java.time.LocalDateTime;
 @Data
 public class AdminListSysLogDTO implements Serializable {
 
-    @ApiModelProperty(value = "用户账号")
+    @Schema(description = "用户账号")
     private String username;
 
-    @ApiModelProperty(value = "操作内容")
+    @Schema(description = "操作内容")
     private String operation;
 
-    @ApiModelProperty(value = "状态")
+    @Schema(description = "状态")
     private SysLogStatusEnum status;
 
-    @ApiModelProperty(value = "时间区间起")
+    @Schema(description = "时间区间起")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime beginAt;
 
-    @ApiModelProperty(value = "时间区间止")
+    @Schema(description = "时间区间止")
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime endAt;

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

@@ -1,6 +1,6 @@
 package cc.uncarbon.module.sys.model.request;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -20,10 +20,10 @@ import java.io.Serializable;
 @Data
 public class AdminListSysParamDTO implements Serializable {
 
-    @ApiModelProperty(value = "键名")
+    @Schema(description = "键名")
     private String name;
 
-    @ApiModelProperty(value = "描述")
+    @Schema(description = "描述")
     private String description;
 
 }

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

@@ -1,6 +1,6 @@
 package cc.uncarbon.module.sys.model.request;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -20,10 +20,10 @@ import java.io.Serializable;
 @Data
 public class AdminListSysRoleDTO implements Serializable {
 
-    @ApiModelProperty(value = "角色名(关键词)")
+    @Schema(description = "角色名(关键词)")
     private String title;
 
-    @ApiModelProperty(value = "角色编码(关键词)")
+    @Schema(description = "角色编码(关键词)")
     private String value;
 
 }

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

@@ -1,7 +1,7 @@
 package cc.uncarbon.module.sys.model.request;
 
 import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -21,13 +21,13 @@ import java.io.Serializable;
 @Data
 public class AdminListSysTenantDTO implements Serializable {
 
-    @ApiModelProperty(value = "租户名(关键词)")
+    @Schema(description = "租户名(关键词)")
     private String tenantName;
 
-    @ApiModelProperty(value = "租户ID(纯数字)")
+    @Schema(description = "租户ID(纯数字)")
     private Long tenantId;
 
-    @ApiModelProperty(value = "状态")
+    @Schema(description = "状态")
     private EnabledStatusEnum status;
 
 }

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

@@ -1,7 +1,7 @@
 package cc.uncarbon.module.sys.model.request;
 
 import cc.uncarbon.module.sys.constant.SysConstant;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -22,10 +22,10 @@ import java.util.Objects;
 @Data
 public class AdminListSysUserDTO implements Serializable {
 
-    @ApiModelProperty(value = "手机号(关键词)")
+    @Schema(description = "手机号(关键词)")
     private String phoneNo;
 
-    @ApiModelProperty(value = "手动选择的部门ID")
+    @Schema(description = "手动选择的部门ID")
     private Long selectedDeptId;
 
     /**

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

@@ -1,14 +1,14 @@
 package cc.uncarbon.module.sys.model.request;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
 import java.io.Serializable;
 
 
@@ -22,12 +22,12 @@ import java.io.Serializable;
 @Data
 public class AdminResetSysUserPasswordDTO implements Serializable {
 
-    @ApiModelProperty(value = "随机新密码", required = true)
+    @Schema(description = "随机新密码", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(min = 16, max = 64, message = "【随机新密码】最短16位,最长64位")
     @NotBlank(message = "随机新密码不能为空")
     private String randomPassword;
 
-    @ApiModelProperty(value = "用户ID", hidden = true)
+    @Schema(description = "用户ID", hidden = true)
     private Long userId;
 
 }

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

@@ -1,14 +1,14 @@
 package cc.uncarbon.module.sys.model.request;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.Size;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
 import java.io.Serializable;
 
 
@@ -22,16 +22,16 @@ import java.io.Serializable;
 @Data
 public class AdminUpdateCurrentSysUserPasswordDTO implements Serializable {
 
-    @ApiModelProperty(value = "原密码", required = true)
+    @Schema(description = "原密码", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotBlank(message = "原密码不能为空")
     private String oldPassword;
 
-    @ApiModelProperty(value = "新密码", required = true)
+    @Schema(description = "新密码", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(min = 8, max = 20, message = "【密码】长度须在 8 至 20 位之间")
     @NotBlank(message = "密码不能为空")
     private String newPassword;
 
-    @ApiModelProperty(value = "确认新密码", required = true)
+    @Schema(description = "确认新密码", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(min = 8, max = 20, message = "【确认密码】长度须在 8 至 20 位之间")
     @NotBlank(message = "确认密码不能为空")
     private String confirmNewPassword;

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

@@ -1,16 +1,16 @@
 package cc.uncarbon.module.sys.model.request;
 
 import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
 import java.io.Serializable;
 
 
@@ -24,19 +24,19 @@ import java.io.Serializable;
 @Data
 public class AdminUpdateSysTenantDTO implements Serializable {
 
-    @ApiModelProperty(value = "主键ID", hidden = true, notes = "仅更新时使用")
+    @Schema(description = "主键ID", hidden = true, title = "仅更新时使用")
     private Long id;
 
-    @ApiModelProperty(value = "租户名", required = true)
+    @Schema(description = "租户名", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(max = 50, message = "【租户名】最长50位")
     @NotBlank(message = "租户名不能为空")
     private String tenantName;
 
-    @ApiModelProperty(value = "状态", required = true)
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "状态不能为空")
     private EnabledStatusEnum status;
 
-    @ApiModelProperty(value = "备注")
+    @Schema(description = "备注")
     @Size(max = 255, message = "【备注】最长255位")
     private String remark;
 

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

@@ -1,15 +1,15 @@
 package cc.uncarbon.module.sys.model.request;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
 import java.io.Serializable;
 
 
@@ -23,27 +23,27 @@ import java.io.Serializable;
 @Data
 public class SysUserLoginDTO implements Serializable {
 
-    @ApiModelProperty(value = "账号", required = true)
+    @Schema(description = "账号", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(min = 5, max = 16, message = "【账号】最短5位,最长16位")
     @NotBlank(message = "账号不能为空")
     private String username;
 
-    @ApiModelProperty(value = "密码", required = true)
+    @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED)
     @Size(min = 5, max = 20, message = "【密码】最短5位,最长20位")
     @NotBlank(message = "密码不能为空")
     private String password;
 
-    @ApiModelProperty(value = "记住我", required = true)
+    @Schema(description = "记住我", requiredMode = Schema.RequiredMode.REQUIRED)
     @NotNull(message = "记住我不能为空")
     private Boolean rememberMe;
 
-    @ApiModelProperty(value = "租户ID(可选,启用多租户后有效)")
+    @Schema(description = "租户ID(可选,启用多租户后有效)")
     private Long tenantId;
 
-    @ApiModelProperty(value = "验证码唯一标识(可选)")
+    @Schema(description = "验证码唯一标识(可选)")
     private String captchaId;
 
-    @ApiModelProperty(value = "验证码答案(可选)")
+    @Schema(description = "验证码答案(可选)")
     private String captchaAnswer;
 
 }

+ 5 - 5
src/main/java/cc/uncarbon/module/sys/model/response/IPLocationBO.java

@@ -1,6 +1,6 @@
 package cc.uncarbon.module.sys.model.response;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -18,16 +18,16 @@ import java.io.Serializable;
 @Data
 public class IPLocationBO implements Serializable {
 
-    @ApiModelProperty(value = "国家或地区名")
+    @Schema(description = "国家或地区名")
     private String regionName;
 
-    @ApiModelProperty(value = "省级行政区名")
+    @Schema(description = "省级行政区名")
     private String provinceName;
 
-    @ApiModelProperty(value = "市级行政区名")
+    @Schema(description = "市级行政区名")
     private String cityName;
 
-    @ApiModelProperty(value = "县级行政区名")
+    @Schema(description = "县级行政区名")
     private String districtName;
 
     /**

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

@@ -2,7 +2,7 @@ package cc.uncarbon.module.sys.model.response;
 
 import cc.uncarbon.framework.core.constant.HelioConstant;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -24,41 +24,41 @@ import java.time.LocalDateTime;
 @Data
 public class SysDataDictBO implements Serializable {
 
-    @ApiModelProperty(value = "主键ID")
+    @Schema(description = "主键ID")
     private Long id;
 
-    @ApiModelProperty(value = "创建时刻")
+    @Schema(description = "创建时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime createdAt;
 
-    @ApiModelProperty(value = "更新时刻")
+    @Schema(description = "更新时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime updatedAt;
 
-    @ApiModelProperty(value = "驼峰式键名")
+    @Schema(description = "驼峰式键名")
     private String camelCaseKey;
 
-    @ApiModelProperty(value = "下划线式键名")
+    @Schema(description = "下划线式键名")
     private String underCaseKey;
 
-    @ApiModelProperty(value = "帕斯卡式键名")
+    @Schema(description = "帕斯卡式键名")
     private String pascalCaseKey;
 
-    @ApiModelProperty(value = "数据值")
+    @Schema(description = "数据值")
     private String value;
 
-    @ApiModelProperty(value = "描述")
+    @Schema(description = "描述")
     private String description;
 
-    @ApiModelProperty(value = "单位")
+    @Schema(description = "单位")
     private String unit;
 
-    @ApiModelProperty(value = "取值范围")
+    @Schema(description = "取值范围")
     private String valueRange;
 
-    @ApiModelProperty(value = "别称键名")
+    @Schema(description = "别称键名")
     private String aliasKey;
 
 }

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

@@ -3,7 +3,7 @@ package cc.uncarbon.module.sys.model.response;
 import cc.uncarbon.framework.core.constant.HelioConstant;
 import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -25,29 +25,29 @@ import java.time.LocalDateTime;
 @Data
 public class SysDeptBO implements Serializable {
 
-    @ApiModelProperty(value = "主键ID")
+    @Schema(description = "主键ID")
     private Long id;
 
-    @ApiModelProperty(value = "创建时刻")
+    @Schema(description = "创建时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime createdAt;
 
-    @ApiModelProperty(value = "更新时刻")
+    @Schema(description = "更新时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime updatedAt;
 
-    @ApiModelProperty(value = "名称")
+    @Schema(description = "名称")
     private String title;
 
-    @ApiModelProperty(value = "上级ID(无上级节点设置为0)")
+    @Schema(description = "上级ID(无上级节点设置为0)")
     private Long parentId;
 
-    @ApiModelProperty(value = "排序")
+    @Schema(description = "排序")
     private Integer sort;
 
-    @ApiModelProperty(value = "状态")
+    @Schema(description = "状态")
     private EnabledStatusEnum status;
 
 }

+ 11 - 11
src/main/java/cc/uncarbon/module/sys/model/response/SysLogBO.java

@@ -3,7 +3,7 @@ package cc.uncarbon.module.sys.model.response;
 import cc.uncarbon.framework.core.constant.HelioConstant;
 import cc.uncarbon.module.sys.enums.SysLogStatusEnum;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -25,36 +25,36 @@ import java.time.LocalDateTime;
 @Data
 public class SysLogBO implements Serializable {
 
-    @ApiModelProperty(value = "创建时刻")
+    @Schema(description = "创建时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime createdAt;
 
-    @ApiModelProperty(value = "用户账号")
+    @Schema(description = "用户账号")
     private String username;
 
-    @ApiModelProperty(value = "操作内容")
+    @Schema(description = "操作内容")
     private String operation;
 
-    @ApiModelProperty(value = "IP地址")
+    @Schema(description = "IP地址")
     private String ip;
 
-    @ApiModelProperty(value = "状态")
+    @Schema(description = "状态")
     private SysLogStatusEnum status;
 
-    @ApiModelProperty(value = "用户UA")
+    @Schema(description = "用户UA")
     private String userAgent;
 
-    @ApiModelProperty(value = "IP地址属地-国家或地区名")
+    @Schema(description = "IP地址属地-国家或地区名")
     private String ipLocationRegionName;
 
-    @ApiModelProperty(value = "IP地址属地-省级行政区名")
+    @Schema(description = "IP地址属地-省级行政区名")
     private String ipLocationProvinceName;
 
-    @ApiModelProperty(value = "IP地址属地-市级行政区名")
+    @Schema(description = "IP地址属地-市级行政区名")
     private String ipLocationCityName;
 
-    @ApiModelProperty(value = "IP地址属地-县级行政区名")
+    @Schema(description = "IP地址属地-县级行政区名")
     private String ipLocationDistrictName;
 
 }

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

@@ -4,7 +4,7 @@ import cc.uncarbon.framework.core.constant.HelioConstant;
 import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
 import cc.uncarbon.module.sys.enums.SysMenuTypeEnum;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -26,53 +26,53 @@ import java.time.LocalDateTime;
 @Data
 public class SysMenuBO implements Serializable {
 
-    @ApiModelProperty(value = "主键ID")
+    @Schema(description = "主键ID")
     private Long id;
 
-    @ApiModelProperty(value = "创建时刻")
+    @Schema(description = "创建时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime createdAt;
 
-    @ApiModelProperty(value = "更新时刻")
+    @Schema(description = "更新时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime updatedAt;
 
-    @ApiModelProperty(value = "名称")
+    @Schema(description = "名称")
     private String title;
 
-    @ApiModelProperty(value = "上级菜单ID")
+    @Schema(description = "上级菜单ID")
     private Long parentId;
 
-    @ApiModelProperty(value = "菜单类型")
+    @Schema(description = "菜单类型")
     private SysMenuTypeEnum type;
 
-    @ApiModelProperty(value = "权限标识")
+    @Schema(description = "权限标识")
     private String permission;
 
-    @ApiModelProperty(value = "图标")
+    @Schema(description = "图标")
     private String icon;
 
-    @ApiModelProperty(value = "排序")
+    @Schema(description = "排序")
     private Integer sort;
 
-    @ApiModelProperty(value = "状态")
+    @Schema(description = "状态")
     private EnabledStatusEnum status;
 
-    @ApiModelProperty(value = "组件")
+    @Schema(description = "组件")
     private String component;
 
-    @ApiModelProperty(value = "外链地址")
+    @Schema(description = "外链地址")
     private String externalLink;
 
-    @ApiModelProperty(value = "【用于Vben Admin】路由地址", hidden = true)
+    @Schema(description = "【用于Vben Admin】路由地址", hidden = true)
     private String path;
 
-    @ApiModelProperty(value = "【用于Vben Admin】菜单名(全局唯一, 不能重复)", hidden = true)
+    @Schema(description = "【用于Vben Admin】菜单名(全局唯一, 不能重复)", hidden = true)
     private String name;
 
-    @ApiModelProperty(value = "【用于Vben Admin】菜单详情", hidden = true)
+    @Schema(description = "【用于Vben Admin】菜单详情", hidden = true)
     private VbenAdminMenuMetaVO meta;
 
 }

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

@@ -2,7 +2,7 @@ package cc.uncarbon.module.sys.model.response;
 
 import cc.uncarbon.framework.core.constant.HelioConstant;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -24,26 +24,26 @@ import java.time.LocalDateTime;
 @Data
 public class SysParamBO implements Serializable {
 
-    @ApiModelProperty(value = "主键ID")
+    @Schema(description = "主键ID")
     private Long id;
 
-    @ApiModelProperty(value = "创建时刻")
+    @Schema(description = "创建时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime createdAt;
 
-    @ApiModelProperty(value = "更新时刻")
+    @Schema(description = "更新时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime updatedAt;
 
-    @ApiModelProperty(value = "键名")
+    @Schema(description = "键名")
     private String name;
 
-    @ApiModelProperty(value = "键值")
+    @Schema(description = "键值")
     private String value;
 
-    @ApiModelProperty(value = "描述")
+    @Schema(description = "描述")
     private String description;
 
 }

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

@@ -2,7 +2,7 @@ package cc.uncarbon.module.sys.model.response;
 
 import cc.uncarbon.framework.core.constant.HelioConstant;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -25,26 +25,26 @@ import java.util.Collection;
 @Data
 public class SysRoleBO implements Serializable {
 
-    @ApiModelProperty(value = "主键ID")
+    @Schema(description = "主键ID")
     private Long id;
 
-    @ApiModelProperty(value = "创建时刻")
+    @Schema(description = "创建时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime createdAt;
 
-    @ApiModelProperty(value = "更新时刻")
+    @Schema(description = "更新时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime updatedAt;
 
-    @ApiModelProperty(value = "角色名")
+    @Schema(description = "角色名")
     private String title;
 
-    @ApiModelProperty(value = "角色编码")
+    @Schema(description = "角色编码")
     private String value;
 
-    @ApiModelProperty(value = "可见菜单Ids")
+    @Schema(description = "可见菜单Ids")
     private Collection<Long> menuIds;
 
 }

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

@@ -3,7 +3,7 @@ package cc.uncarbon.module.sys.model.response;
 import cc.uncarbon.framework.core.constant.HelioConstant;
 import cc.uncarbon.framework.core.enums.EnabledStatusEnum;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -25,32 +25,32 @@ import java.time.LocalDateTime;
 @Data
 public class SysTenantBO implements Serializable {
 
-    @ApiModelProperty(value = "主键ID")
+    @Schema(description = "主键ID")
     private Long id;
 
-    @ApiModelProperty(value = "创建时刻")
+    @Schema(description = "创建时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime createdAt;
 
-    @ApiModelProperty(value = "更新时刻")
+    @Schema(description = "更新时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime updatedAt;
 
-    @ApiModelProperty(value = "备注")
+    @Schema(description = "备注")
     private String remark;
 
-    @ApiModelProperty(value = "租户名")
+    @Schema(description = "租户名")
     private String tenantName;
 
-    @ApiModelProperty(value = "租户ID")
+    @Schema(description = "租户ID")
     private Long tenantId;
 
-    @ApiModelProperty(value = "状态")
+    @Schema(description = "状态")
     private EnabledStatusEnum status;
 
-    @ApiModelProperty(value = "租户管理员用户基本信息")
+    @Schema(description = "租户管理员用户基本信息")
     private SysUserBaseInfoBO tenantAdminUser;
 
 }

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

@@ -1,6 +1,6 @@
 package cc.uncarbon.module.sys.model.response;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 
 import java.util.Collections;
@@ -13,7 +13,7 @@ import java.util.List;
 @Getter
 public class SysTenantKickOutUsersBO {
 
-    @ApiModelProperty(value = "后台用户IDs")
+    @Schema(description = "后台用户IDs")
     private final List<Long> sysUserIds;
 
     public SysTenantKickOutUsersBO() {

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

@@ -4,7 +4,7 @@ import cc.uncarbon.framework.core.constant.HelioConstant;
 import cc.uncarbon.framework.core.enums.GenderEnum;
 import cc.uncarbon.module.sys.enums.SysUserStatusEnum;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -26,44 +26,44 @@ import java.time.LocalDateTime;
 @Data
 public class SysUserBO implements Serializable {
 
-    @ApiModelProperty(value = "主键ID")
+    @Schema(description = "主键ID")
     private Long id;
 
-    @ApiModelProperty(value = "创建时刻")
+    @Schema(description = "创建时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime createdAt;
 
-    @ApiModelProperty(value = "更新时刻")
+    @Schema(description = "更新时刻")
     @DateTimeFormat(pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = HelioConstant.Jackson.DATE_TIME_FORMAT)
     private LocalDateTime updatedAt;
 
-    @ApiModelProperty(value = "账号")
+    @Schema(description = "账号")
     private String username;
 
-    @ApiModelProperty(value = "昵称")
+    @Schema(description = "昵称")
     private String nickname;
 
-    @ApiModelProperty(value = "状态")
+    @Schema(description = "状态")
     private SysUserStatusEnum status;
 
-    @ApiModelProperty(value = "性别")
+    @Schema(description = "性别")
     private GenderEnum gender;
 
-    @ApiModelProperty(value = "邮箱")
+    @Schema(description = "邮箱")
     private String email;
 
-    @ApiModelProperty(value = "手机号")
+    @Schema(description = "手机号")
     private String phoneNo;
 
-    @ApiModelProperty(value = "最后登录时刻")
+    @Schema(description = "最后登录时刻")
     private LocalDateTime lastLoginAt;
 
-    @ApiModelProperty(value = "所属部门ID")
+    @Schema(description = "所属部门ID")
     private Long deptId;
 
-    @ApiModelProperty(value = "所属部门名称")
+    @Schema(description = "所属部门名称")
     private String deptTitle;
 
 }

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

@@ -2,7 +2,7 @@ package cc.uncarbon.module.sys.model.response;
 
 import cc.uncarbon.framework.core.enums.GenderEnum;
 import cc.uncarbon.module.sys.enums.SysUserStatusEnum;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -23,22 +23,22 @@ import java.io.Serializable;
 @Data
 public class SysUserBaseInfoBO implements Serializable {
 
-    @ApiModelProperty(value = "账号")
+    @Schema(description = "账号")
     private String username;
 
-    @ApiModelProperty(value = "昵称")
+    @Schema(description = "昵称")
     private String nickname;
 
-    @ApiModelProperty(value = "状态")
+    @Schema(description = "状态")
     private SysUserStatusEnum status;
 
-    @ApiModelProperty(value = "性别")
+    @Schema(description = "性别")
     private GenderEnum gender;
 
-    @ApiModelProperty(value = "邮箱")
+    @Schema(description = "邮箱")
     private String email;
 
-    @ApiModelProperty(value = "手机号")
+    @Schema(description = "手机号")
     private String phoneNo;
 
 }

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

@@ -1,7 +1,7 @@
 package cc.uncarbon.module.sys.model.response;
 
 import cc.uncarbon.framework.core.context.TenantContext;
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -25,31 +25,31 @@ import java.util.Set;
 @Data
 public class SysUserLoginBO implements Serializable {
 
-    @ApiModelProperty(value = "用户ID")
+    @Schema(description = "用户ID")
     private Long id;
 
-    @ApiModelProperty(value = "账号")
+    @Schema(description = "账号")
     private String username;
 
-    @ApiModelProperty(value = "昵称")
+    @Schema(description = "昵称")
     private String nickname;
 
-    @ApiModelProperty(value = "手机号")
+    @Schema(description = "手机号")
     private String phoneNo;
 
-    @ApiModelProperty(value = "对应角色ID")
+    @Schema(description = "对应角色ID")
     private Set<Long> roleIds;
 
-    @ApiModelProperty(value = "对应角色名")
+    @Schema(description = "对应角色名")
     private List<String> roles;
 
-    @ApiModelProperty(value = "所有拥有权限名")
+    @Schema(description = "所有拥有权限名")
     private Set<String> permissions;
 
-    @ApiModelProperty(value = "角色ID-对应权限名 Map")
+    @Schema(description = "角色ID-对应权限名 Map")
     private Map<Long, Set<String>> roleIdPermissionMap;
 
-    @ApiModelProperty(value = "关联租户上下文")
+    @Schema(description = "关联租户上下文")
     private TenantContext tenantContext;
 
 }

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

@@ -1,6 +1,6 @@
 package cc.uncarbon.module.sys.model.response;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -22,16 +22,16 @@ import java.util.Collection;
 @Data
 public class SysUserLoginVO implements Serializable {
 
-    @ApiModelProperty(value = "token名称")
+    @Schema(description = "token名称")
     private String tokenName;
 
-    @ApiModelProperty(value = "token值")
+    @Schema(description = "token值")
     private String tokenValue;
 
-    @ApiModelProperty(value = "对应角色")
+    @Schema(description = "对应角色")
     private Collection<String> roles;
 
-    @ApiModelProperty(value = "拥有权限")
+    @Schema(description = "拥有权限")
     private Collection<String> permissions;
 
 }

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

@@ -1,6 +1,6 @@
 package cc.uncarbon.module.sys.model.response;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 
@@ -14,13 +14,13 @@ import java.io.Serializable;
 @Data
 public class VbenAdminMenuMetaVO implements Serializable {
 
-    @ApiModelProperty(value = "标题")
+    @Schema(description = "标题")
     private String title;
 
-    @ApiModelProperty(value = "是否不可关闭")
+    @Schema(description = "是否不可关闭")
     private Boolean affix;
 
-    @ApiModelProperty(value = "图标")
+    @Schema(description = "图标")
     private String icon;
 
 }

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

@@ -1,6 +1,6 @@
 package cc.uncarbon.module.sys.model.response;
 
-import io.swagger.annotations.ApiModelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
@@ -21,13 +21,13 @@ import java.time.LocalDateTime;
 @Data
 public class VbenAdminUserInfoVO implements Serializable {
 
-    @ApiModelProperty(value = "账号")
+    @Schema(description = "账号")
     private String username;
 
-    @ApiModelProperty(value = "昵称")
+    @Schema(description = "昵称")
     private String nickname;
 
-    @ApiModelProperty(value = "最后登录时刻")
+    @Schema(description = "最后登录时刻")
     private LocalDateTime lastLoginAt;
 
 }

+ 4 - 9
src/main/java/cc/uncarbon/module/sys/service/SysMenuService.java

@@ -250,16 +250,13 @@ public class SysMenuService {
                 .setName(snowflakeIdStr)
                 .setMeta(new VbenAdminMenuMetaVO(bo.getTitle(), false, bo.getIcon()));
 
-        // 这里是兼容 JDK8 的写法,使用较高 JDK 版本可使用语法糖
         switch (bo.getType()) {
-            case DIR:
-            case BUTTON:
+            case DIR, BUTTON ->
                 bo
                         .setComponent(SysConstant.VBEN_ADMIN_BLANK_VIEW)
                         .setExternalLink(null)
                         .setPath(StrPool.SLASH + snowflakeIdStr);
-                break;
-            case MENU:
+            case MENU -> {
                 bo
                         .setExternalLink(null)
                         .setPath(bo.getComponent());
@@ -267,13 +264,11 @@ public class SysMenuService {
                 if (CharSequenceUtil.isNotBlank(bo.getPath()) && !bo.getPath().startsWith(StrPool.SLASH)) {
                     bo.setPath(StrPool.SLASH + bo.getPath());
                 }
-                break;
-            case EXTERNAL_LINK:
+            }
+            case EXTERNAL_LINK ->
                 bo
                         .setComponent(bo.getExternalLink())
                         .setPath(bo.getExternalLink());
-                break;
-            default: break;
         }
         return bo;
     }

+ 2 - 2
src/main/java/cc/uncarbon/module/sys/service/SysUserService.java

@@ -35,7 +35,7 @@ import org.springframework.lang.Nullable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
 import java.math.BigInteger;
 import java.time.LocalDateTime;
 import java.util.*;
@@ -545,7 +545,7 @@ public class SysUserService {
         }
 
         // 目标是超级管理员时,不能删除
-        List<UserRoleContainer> specifiedUsers = ids.stream().map(sysRoleService::getSpecifiedUserRoleContainer).collect(Collectors.toList());
+        List<UserRoleContainer> specifiedUsers = ids.stream().map(sysRoleService::getSpecifiedUserRoleContainer).toList();
         if (specifiedUsers.stream().anyMatch(UserRoleContainer::isSuperAdmin)) {
             throw new BusinessException(SysErrorEnum.CANNOT_OPERATE_THIS_USER);
         }

+ 10 - 9
src/main/resources/application-dev.yml

@@ -20,15 +20,16 @@ helio:
       enabled: false
 
 spring:
-  redis:
-    # Redis连接主机
-    host: 127.0.0.1
-    # Redis连接端口
-    port: 6379
-    # Redis登录密码;如果没有设置密码,请注释掉下面这行,避免向 Redis-server 发送 AUTH 鉴权请求,引发程序启动失败
-    password:
-    # Redis数据库序号
-    database: 1
+  data:
+    redis:
+      # Redis连接主机
+      host: 127.0.0.1
+      # Redis连接端口
+      port: 6379
+      # Redis登录密码;如果没有设置密码,请注释掉下面这行,避免向 Redis-server 发送 AUTH 鉴权请求,引发程序启动失败
+      password:
+      # Redis数据库序号
+      database: 1
 
 knife4j:
   # 生产环境务必设为true

+ 10 - 9
src/main/resources/application-prod.yml

@@ -20,15 +20,16 @@ helio:
       enabled: false
 
 spring:
-  redis:
-    # Redis连接主机
-    host: 127.0.0.1
-    # Redis连接端口
-    port: 6379
-    # Redis登录密码;如果没有设置密码,请注释掉下面这行,避免向 Redis-server 发送 AUTH 鉴权请求,引发程序启动失败
-    password:
-    # Redis数据库序号
-    database: 1
+  data:
+    redis:
+      # Redis连接主机
+      host: 127.0.0.1
+      # Redis连接端口
+      port: 6379
+      # Redis登录密码;如果没有设置密码,请注释掉下面这行,避免向 Redis-server 发送 AUTH 鉴权请求,引发程序启动失败
+      password:
+      # Redis数据库序号
+      database: 1
 
 knife4j:
   # 生产环境务必设为true

+ 10 - 9
src/main/resources/application-test.yml

@@ -20,15 +20,16 @@ helio:
       enabled: true
 
 spring:
-  redis:
-    # Redis连接主机
-    host: 127.0.0.1
-    # Redis连接端口
-    port: 6379
-    # Redis登录密码;如果没有设置密码,请注释掉下面这行,避免向 Redis-server 发送 AUTH 鉴权请求,引发程序启动失败
-    password:
-    # Redis数据库序号
-    database: 1
+  data:
+    redis:
+      # Redis连接主机
+      host: 127.0.0.1
+      # Redis连接端口
+      port: 6379
+      # Redis登录密码;如果没有设置密码,请注释掉下面这行,避免向 Redis-server 发送 AUTH 鉴权请求,引发程序启动失败
+      password:
+      # Redis数据库序号
+      database: 1
 
 knife4j:
   # 生产环境务必设为true

+ 3 - 6
src/main/resources/application.yml

@@ -13,10 +13,6 @@ spring:
     type: redis
     redis:
       cache-null-values: true
-  mvc:
-    pathmatch:
-      # Boot 2.6+ 默认的路由匹配策略,Swagger 暂不兼容,使用老策略
-      matching-strategy: ant_path_matcher
   messages:
     # 国际化资源目录,一般不做修改
     basename: i18n/messages
@@ -47,9 +43,10 @@ helio:
       # 放行路由, 不进行登录校验
       # 图标
       - /favicon.ico
-      # Swagger API文档接口
-      - /v2/api-docs
+      # SpringDoc 接口
       - /v3/api-docs
+      # SpringMVC 404
+      - /error
       # C端登录接口
       - /app/api/v1/auth/login
   tenant:

+ 1 - 0
src/main/resources/logback-spring.xml

@@ -181,6 +181,7 @@
         <queueSize>1024</queueSize>
         <!-- 添加附加的appender,最多只能添加一个 -->
         <appender-ref ref="ERROR_FILE"/>
+        <!-- 用于输出代码位置;实现上是从 Throwable 获取调用堆栈,没有像 Log4j2 一样考虑 Java9 后使用 StackWalker 减少需要提取的栈帧,存在性能开销 -->
         <includeCallerData>true</includeCallerData>
     </appender>
 

+ 0 - 37
src/test/java/cc/uncarbon/test/BasicUnitTest.java

@@ -1,37 +0,0 @@
-package cc.uncarbon.test;
-
-import cc.uncarbon.HelioBootApplication;
-import cc.uncarbon.framework.i18n.util.I18nUtil;
-import cc.uncarbon.module.sys.enums.SysErrorEnum;
-import cn.hutool.core.lang.Assert;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-import java.util.Locale;
-
-/**
- * 基础单元测试
- * @author Uncarbon
- */
-@SuppressWarnings("squid:S2699")
-@SpringBootTest(classes = HelioBootApplication.class)
-class BasicUnitTest {
-
-    @Test
-    void testI18nMessage() {
-        String msg = I18nUtil.messageOf(SysErrorEnum.INVALID_TENANT);
-        Assert.isTrue("所属租户无效".equals(msg));
-
-        msg = I18nUtil.messageOf(Locale.US, SysErrorEnum.INCORRECT_PIN_OR_PWD);
-        Assert.isTrue("Incorrect username or password".equals(msg));
-
-        msg = I18nUtil.messageOf(Locale.CHINA, SysErrorEnum.DISABLED_TENANT);
-        Assert.isTrue("所属租户已禁用".equals(msg));
-
-        msg = I18nUtil.messageOf(Locale.US, "INCORRECT_PIN_OR_PWD");
-        Assert.isTrue(msg == null);
-
-        msg = I18nUtil.messageOf(Locale.US, "SysErrorEnum.UUID_CANNOT_BE_BLANK");
-        Assert.isTrue("UUID cannot be blank".equals(msg));
-    }
-}

+ 56 - 0
src/test/java/cc/uncarbon/test/ExampleUnitTest.java

@@ -0,0 +1,56 @@
+package cc.uncarbon.test;
+
+import cc.uncarbon.HelioBootApplication;
+import cc.uncarbon.framework.core.constant.HelioConstant;
+import cc.uncarbon.framework.core.context.TenantContext;
+import cc.uncarbon.framework.core.context.TenantContextHolder;
+import cc.uncarbon.framework.core.context.UserContext;
+import cc.uncarbon.framework.core.context.UserContextHolder;
+import cc.uncarbon.module.sys.model.response.SysRoleBO;
+import cc.uncarbon.module.sys.service.SysRoleService;
+import cn.hutool.core.collection.CollUtil;
+import jakarta.annotation.Resource;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.util.List;
+
+/**
+ * 一个仅用于示例的单元测试
+ *
+ * @author Uncarbon
+ */
+@SpringBootTest(classes = HelioBootApplication.class)
+class ExampleUnitTest {
+
+    @Resource
+    private SysRoleService sysRoleService;
+
+
+    @BeforeEach
+    public void init() {
+        // 设置用户上下文
+        UserContext userContext = new UserContext();
+        userContext
+                .setUserId(1L)
+                .setUserName("超级管理员")
+                // 用户类型, 根据单元测试需要修改
+                .setUserTypeStr("ADMIN_USER");
+        UserContextHolder.setUserContext(userContext);
+
+        // 设置租户上下文
+        TenantContext tenantContext = new TenantContext();
+        tenantContext
+                .setTenantId(HelioConstant.Tenant.DEFAULT_PRIVILEGED_TENANT_ID)
+                .setTenantName("超级租户");
+        TenantContextHolder.setTenantContext(tenantContext);
+    }
+
+    @Test
+    void exampleTest() {
+        List<SysRoleBO> selectOptions = sysRoleService.adminSelectOptions();
+        Assertions.assertTrue(CollUtil.isNotEmpty(selectOptions));
+    }
+}

+ 0 - 36
src/test/java/cc/uncarbon/test/SysLogServiceUnitTest.java

@@ -1,36 +0,0 @@
-package cc.uncarbon.test;
-
-import cc.uncarbon.HelioBootApplication;
-import cc.uncarbon.framework.core.page.PageParam;
-import cc.uncarbon.module.sys.model.request.AdminListSysLogDTO;
-import cc.uncarbon.module.sys.model.response.SysLogBO;
-import cc.uncarbon.module.sys.service.SysLogService;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-import javax.annotation.Resource;
-import java.util.List;
-
-/**
- * @author Uncarbon
- */
-@SpringBootTest(classes = HelioBootApplication.class)
-class SysLogServiceUnitTest {
-
-    @Resource
-    private SysLogService sysLogService;
-
-
-    @BeforeEach
-    public void init() {
-        // 可以在这里进行初始化操作, 如设置用户上下文等
-        // UserContextHolder.setUserContext();
-    }
-
-    @Test
-    void testAdminList() {
-        List<SysLogBO> ret = sysLogService.adminList(new PageParam(1, 10000), new AdminListSysLogDTO()).getRecords();
-        System.out.println(ret);
-    }
-}