From af8b5c847d66c9ad1a665b7dfeef8db39c5c5fab Mon Sep 17 00:00:00 2001
From: "Ray.Hao" <1490493387@qq.com>
Date: Wed, 11 Jun 2025 20:47:02 +0800
Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=8D=87=E7=BA=A7=20SpringBoot=203?=
=?UTF-8?q?.5.0=20=E7=89=88=E6=9C=AC=E5=92=8C=E4=BB=A3=E7=A0=81=E7=BB=93?=
=?UTF-8?q?=E6=9E=84=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 9 +-
pom.xml | 13 +-
.../auth/controller/AuthController.java | 90 ++++++-----
.../auth/enums/CaptchaTypeEnum.java | 2 +-
.../{shared => }/auth/model/CaptchaInfo.java | 2 +-
.../auth/model/dto/WxMiniAppCodeLoginDTO.java | 2 +-
.../model/dto/WxMiniAppPhoneLoginDTO.java | 2 +-
.../auth/service/AuthService.java | 8 +-
.../auth/service/impl/AuthServiceImpl.java | 12 +-
.../com/youlai/boot/config/MybatisConfig.java | 4 +-
.../member/controller/MemberController.java | 2 +-
.../member/mapper/MemberMapper.java | 2 +-
.../member/model/Member.java | 2 +-
.../member/service/MemberService.java | 2 +-
.../order/controller/OrderController.java | 2 +-
.../order/mapper/OrderMapper.java | 2 +-
.../order/model/Order.java | 2 +-
.../order/service/OrderService.java | 2 +-
.../product/controller/ProductController.java | 2 +-
.../product/mapper/ProductMapper.java | 2 +-
.../product/model/Product.java | 2 +-
.../product/service/ProductService.java | 2 +-
.../knife4j/Knife4jOpenApiCustomizer.java | 150 ++++++++++++++++++
.../mybatis}/MyDataPermissionHandler.java | 2 +-
.../mybatis}/MyMetaObjectHandler.java | 2 +-
src/main/resources/application-dev.yml | 2 +-
src/main/resources/application-prod.yml | 2 +-
27 files changed, 246 insertions(+), 80 deletions(-)
rename src/main/java/com/youlai/boot/{shared => }/auth/controller/AuthController.java (84%)
rename src/main/java/com/youlai/boot/{shared => }/auth/enums/CaptchaTypeEnum.java (88%)
rename src/main/java/com/youlai/boot/{shared => }/auth/model/CaptchaInfo.java (90%)
rename src/main/java/com/youlai/boot/{shared => }/auth/model/dto/WxMiniAppCodeLoginDTO.java (91%)
rename src/main/java/com/youlai/boot/{shared => }/auth/model/dto/WxMiniAppPhoneLoginDTO.java (93%)
rename src/main/java/com/youlai/boot/{shared => }/auth/service/AuthService.java (87%)
rename src/main/java/com/youlai/boot/{shared => }/auth/service/impl/AuthServiceImpl.java (96%)
rename src/main/java/com/youlai/boot/{modules => module}/member/controller/MemberController.java (70%)
rename src/main/java/com/youlai/boot/{modules => module}/member/mapper/MemberMapper.java (72%)
rename src/main/java/com/youlai/boot/{modules => module}/member/model/Member.java (70%)
rename src/main/java/com/youlai/boot/{modules => module}/member/service/MemberService.java (72%)
rename src/main/java/com/youlai/boot/{modules => module}/order/controller/OrderController.java (70%)
rename src/main/java/com/youlai/boot/{modules => module}/order/mapper/OrderMapper.java (72%)
rename src/main/java/com/youlai/boot/{modules => module}/order/model/Order.java (70%)
rename src/main/java/com/youlai/boot/{modules => module}/order/service/OrderService.java (72%)
rename src/main/java/com/youlai/boot/{modules => module}/product/controller/ProductController.java (70%)
rename src/main/java/com/youlai/boot/{modules => module}/product/mapper/ProductMapper.java (72%)
rename src/main/java/com/youlai/boot/{modules => module}/product/model/Product.java (70%)
rename src/main/java/com/youlai/boot/{modules => module}/product/service/ProductService.java (72%)
create mode 100644 src/main/java/com/youlai/boot/pulgin/knife4j/Knife4jOpenApiCustomizer.java
rename src/main/java/com/youlai/boot/{core/handler => pulgin/mybatis}/MyDataPermissionHandler.java (99%)
rename src/main/java/com/youlai/boot/{core/handler => pulgin/mybatis}/MyMetaObjectHandler.java (96%)
diff --git a/README.md b/README.md
index c649f243..6ee30e03 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
youlai-boot
-
+
@@ -70,6 +70,7 @@ youlai-boot
├── sql # SQL脚本
│ ├── mysql # MySQL 脚本
├── src # 源码目录
+│ ├── auth # 登录认证
│ ├── common # 公共模块
│ │ ├── annotation # 注解定义
│ │ ├── base # 基础类
@@ -86,12 +87,14 @@ youlai-boot
│ │ ├── filter # 过滤器(请求日志、限流)
│ │ ├── handler # 处理器(数据权限、数据填充)
│ │ └── security # Spring Security 安全模块
-│ ├── modules # 业务模块
+│ ├── module # 业务模块
│ │ ├── member # 会员模块【业务模块演示】
│ │ ├── order # 订单模块【业务模块演示】
│ │ ├── product # 商品模块【业务模块演示】
+│ ├── module # 插件扩展
+│ │ ├── knife4j # Knife4j 扩展
+│ │ ├── mybatis # Mybatis 扩展
│ ├── shared # 共享模块
-│ │ ├── auth # 认证模块
│ │ ├── file # 文件模块
│ │ ├── codegen # 代码生成模块
│ │ ├── mail # 邮件模块
diff --git a/pom.xml b/pom.xml
index cdae3095..18be05a8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
org.springframework.boot
spring-boot-starter-parent
- 3.3.6
+ 3.5.0
@@ -152,6 +152,17 @@
com.github.xiaoymin
knife4j-openapi3-jakarta-spring-boot-starter
${knife4j.version}
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+
+
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ 2.8.9
diff --git a/src/main/java/com/youlai/boot/shared/auth/controller/AuthController.java b/src/main/java/com/youlai/boot/auth/controller/AuthController.java
similarity index 84%
rename from src/main/java/com/youlai/boot/shared/auth/controller/AuthController.java
rename to src/main/java/com/youlai/boot/auth/controller/AuthController.java
index 327cb8b9..c1f22dad 100644
--- a/src/main/java/com/youlai/boot/shared/auth/controller/AuthController.java
+++ b/src/main/java/com/youlai/boot/auth/controller/AuthController.java
@@ -1,11 +1,11 @@
-package com.youlai.boot.shared.auth.controller;
+package com.youlai.boot.auth.controller;
+import com.youlai.boot.auth.model.CaptchaInfo;
+import com.youlai.boot.auth.model.dto.WxMiniAppPhoneLoginDTO;
import com.youlai.boot.common.enums.LogModuleEnum;
import com.youlai.boot.common.result.Result;
-import com.youlai.boot.shared.auth.service.AuthService;
-import com.youlai.boot.shared.auth.model.CaptchaInfo;
-import com.youlai.boot.shared.auth.model.dto.WxMiniAppCodeLoginDTO;
-import com.youlai.boot.shared.auth.model.dto.WxMiniAppPhoneLoginDTO;
+import com.youlai.boot.auth.service.AuthService;
+import com.youlai.boot.auth.model.dto.WxMiniAppCodeLoginDTO;
import com.youlai.boot.core.security.model.AuthenticationToken;
import com.youlai.boot.common.annotation.Log;
import io.swagger.v3.oas.annotations.Operation;
@@ -32,7 +32,7 @@ public class AuthController {
private final AuthService authService;
- @Operation(summary = "获取登录验证码")
+ @Operation(summary = "获取验证码")
@GetMapping("/captcha")
public Result getCaptcha() {
CaptchaInfo captcha = authService.getCaptcha();
@@ -50,42 +50,6 @@ public class AuthController {
return Result.success(authenticationToken);
}
- @Operation(summary = "注销登录")
- @DeleteMapping("/logout")
- @Log(value = "注销", module = LogModuleEnum.LOGIN)
- public Result> logout() {
- authService.logout();
- return Result.success();
- }
-
- @Operation(summary = "刷新访问令牌")
- @PostMapping("/refresh-token")
- public Result> refreshToken(
- @Parameter(description = "刷新令牌", example = "xxx.xxx.xxx") @RequestParam String refreshToken
- ) {
- AuthenticationToken authenticationToken = authService.refreshToken(refreshToken);
- return Result.success(authenticationToken);
- }
-
- @Operation(summary = "微信授权登录")
- @PostMapping("/login/wechat")
- @Log(value = "微信登录", module = LogModuleEnum.LOGIN)
- public Result loginByWechat(
- @Parameter(description = "微信授权码", example = "code") @RequestParam String code
- ) {
- AuthenticationToken loginResult = authService.loginByWechat(code);
- return Result.success(loginResult);
- }
-
- @Operation(summary = "发送登录短信验证码")
- @PostMapping("/login/sms/code")
- public Result sendLoginVerifyCode(
- @Parameter(description = "手机号", example = "18812345678") @RequestParam String mobile
- ) {
- authService.sendSmsLoginCode(mobile);
- return Result.success();
- }
-
@Operation(summary = "短信验证码登录")
@PostMapping("/login/sms")
@Log(value = "短信验证码登录", module = LogModuleEnum.LOGIN)
@@ -97,17 +61,55 @@ public class AuthController {
return Result.success(loginResult);
}
- @Operation(summary = "微信小程序Code登录")
+ @Operation(summary = "发送登录短信验证码")
+ @PostMapping("/sms/code")
+ public Result sendLoginVerifyCode(
+ @Parameter(description = "手机号", example = "18812345678") @RequestParam String mobile
+ ) {
+ authService.sendSmsLoginCode(mobile);
+ return Result.success();
+ }
+
+ @Operation(summary = "微信授权登录(Web)")
+ @PostMapping("/login/wechat")
+ @Log(value = "微信登录", module = LogModuleEnum.LOGIN)
+ public Result loginByWechat(
+ @Parameter(description = "微信授权码", example = "code") @RequestParam String code
+ ) {
+ AuthenticationToken loginResult = authService.loginByWechat(code);
+ return Result.success(loginResult);
+ }
+
+ @Operation(summary = "微信小程序登录(Code)")
@PostMapping("/wx/miniapp/code-login")
public Result loginByWxMiniAppCode(@RequestBody @Valid WxMiniAppCodeLoginDTO loginDTO) {
AuthenticationToken token = authService.loginByWxMiniAppCode(loginDTO);
return Result.success(token);
}
- @Operation(summary = "微信小程序手机号登录")
+ @Operation(summary = "微信小程序登录(手机号)")
@PostMapping("/wx/miniapp/phone-login")
public Result loginByWxMiniAppPhone(@RequestBody @Valid WxMiniAppPhoneLoginDTO loginDTO) {
AuthenticationToken token = authService.loginByWxMiniAppPhone(loginDTO);
return Result.success(token);
}
+
+
+ @Operation(summary = "退出登录")
+ @DeleteMapping("/logout")
+ @Log(value = "退出登录", module = LogModuleEnum.LOGIN)
+ public Result> logout() {
+ authService.logout();
+ return Result.success();
+ }
+
+ @Operation(summary = "刷新令牌")
+ @PostMapping("/refresh-token")
+ public Result> refreshToken(
+ @Parameter(description = "刷新令牌", example = "xxx.xxx.xxx") @RequestParam String refreshToken
+ ) {
+ AuthenticationToken authenticationToken = authService.refreshToken(refreshToken);
+ return Result.success(authenticationToken);
+ }
+
}
diff --git a/src/main/java/com/youlai/boot/shared/auth/enums/CaptchaTypeEnum.java b/src/main/java/com/youlai/boot/auth/enums/CaptchaTypeEnum.java
similarity index 88%
rename from src/main/java/com/youlai/boot/shared/auth/enums/CaptchaTypeEnum.java
rename to src/main/java/com/youlai/boot/auth/enums/CaptchaTypeEnum.java
index b2f1dd4e..c0ac69b4 100644
--- a/src/main/java/com/youlai/boot/shared/auth/enums/CaptchaTypeEnum.java
+++ b/src/main/java/com/youlai/boot/auth/enums/CaptchaTypeEnum.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.shared.auth.enums;
+package com.youlai.boot.auth.enums;
/**
* EasyCaptcha 验证码类型枚举
diff --git a/src/main/java/com/youlai/boot/shared/auth/model/CaptchaInfo.java b/src/main/java/com/youlai/boot/auth/model/CaptchaInfo.java
similarity index 90%
rename from src/main/java/com/youlai/boot/shared/auth/model/CaptchaInfo.java
rename to src/main/java/com/youlai/boot/auth/model/CaptchaInfo.java
index b290cc50..e4095850 100644
--- a/src/main/java/com/youlai/boot/shared/auth/model/CaptchaInfo.java
+++ b/src/main/java/com/youlai/boot/auth/model/CaptchaInfo.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.shared.auth.model;
+package com.youlai.boot.auth.model;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
diff --git a/src/main/java/com/youlai/boot/shared/auth/model/dto/WxMiniAppCodeLoginDTO.java b/src/main/java/com/youlai/boot/auth/model/dto/WxMiniAppCodeLoginDTO.java
similarity index 91%
rename from src/main/java/com/youlai/boot/shared/auth/model/dto/WxMiniAppCodeLoginDTO.java
rename to src/main/java/com/youlai/boot/auth/model/dto/WxMiniAppCodeLoginDTO.java
index dcb516e4..69c653fb 100644
--- a/src/main/java/com/youlai/boot/shared/auth/model/dto/WxMiniAppCodeLoginDTO.java
+++ b/src/main/java/com/youlai/boot/auth/model/dto/WxMiniAppCodeLoginDTO.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.shared.auth.model.dto;
+package com.youlai.boot.auth.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
diff --git a/src/main/java/com/youlai/boot/shared/auth/model/dto/WxMiniAppPhoneLoginDTO.java b/src/main/java/com/youlai/boot/auth/model/dto/WxMiniAppPhoneLoginDTO.java
similarity index 93%
rename from src/main/java/com/youlai/boot/shared/auth/model/dto/WxMiniAppPhoneLoginDTO.java
rename to src/main/java/com/youlai/boot/auth/model/dto/WxMiniAppPhoneLoginDTO.java
index 8b8d052e..5a3e4c69 100644
--- a/src/main/java/com/youlai/boot/shared/auth/model/dto/WxMiniAppPhoneLoginDTO.java
+++ b/src/main/java/com/youlai/boot/auth/model/dto/WxMiniAppPhoneLoginDTO.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.shared.auth.model.dto;
+package com.youlai.boot.auth.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
diff --git a/src/main/java/com/youlai/boot/shared/auth/service/AuthService.java b/src/main/java/com/youlai/boot/auth/service/AuthService.java
similarity index 87%
rename from src/main/java/com/youlai/boot/shared/auth/service/AuthService.java
rename to src/main/java/com/youlai/boot/auth/service/AuthService.java
index 2d183079..4bcb411c 100644
--- a/src/main/java/com/youlai/boot/shared/auth/service/AuthService.java
+++ b/src/main/java/com/youlai/boot/auth/service/AuthService.java
@@ -1,9 +1,9 @@
-package com.youlai.boot.shared.auth.service;
+package com.youlai.boot.auth.service;
-import com.youlai.boot.shared.auth.model.CaptchaInfo;
+import com.youlai.boot.auth.model.CaptchaInfo;
+import com.youlai.boot.auth.model.dto.WxMiniAppPhoneLoginDTO;
import com.youlai.boot.core.security.model.AuthenticationToken;
-import com.youlai.boot.shared.auth.model.dto.WxMiniAppCodeLoginDTO;
-import com.youlai.boot.shared.auth.model.dto.WxMiniAppPhoneLoginDTO;
+import com.youlai.boot.auth.model.dto.WxMiniAppCodeLoginDTO;
/**
* 认证服务接口
diff --git a/src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java b/src/main/java/com/youlai/boot/auth/service/impl/AuthServiceImpl.java
similarity index 96%
rename from src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java
rename to src/main/java/com/youlai/boot/auth/service/impl/AuthServiceImpl.java
index 3db473d9..a1bd7740 100644
--- a/src/main/java/com/youlai/boot/shared/auth/service/impl/AuthServiceImpl.java
+++ b/src/main/java/com/youlai/boot/auth/service/impl/AuthServiceImpl.java
@@ -1,10 +1,13 @@
-package com.youlai.boot.shared.auth.service.impl;
+package com.youlai.boot.auth.service.impl;
import cn.hutool.captcha.AbstractCaptcha;
import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.generator.CodeGenerator;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
+import com.youlai.boot.auth.enums.CaptchaTypeEnum;
+import com.youlai.boot.auth.model.CaptchaInfo;
+import com.youlai.boot.auth.model.dto.WxMiniAppPhoneLoginDTO;
import com.youlai.boot.common.constant.RedisConstants;
import com.youlai.boot.common.constant.SecurityConstants;
import com.youlai.boot.common.exception.BusinessException;
@@ -12,12 +15,9 @@ import com.youlai.boot.common.result.ResultCode;
import com.youlai.boot.config.property.CaptchaProperties;
import com.youlai.boot.core.security.extension.sms.SmsAuthenticationToken;
import com.youlai.boot.core.security.util.SecurityUtils;
-import com.youlai.boot.shared.auth.enums.CaptchaTypeEnum;
import com.youlai.boot.core.security.model.AuthenticationToken;
-import com.youlai.boot.shared.auth.model.CaptchaInfo;
-import com.youlai.boot.shared.auth.model.dto.WxMiniAppCodeLoginDTO;
-import com.youlai.boot.shared.auth.model.dto.WxMiniAppPhoneLoginDTO;
-import com.youlai.boot.shared.auth.service.AuthService;
+import com.youlai.boot.auth.model.dto.WxMiniAppCodeLoginDTO;
+import com.youlai.boot.auth.service.AuthService;
import com.youlai.boot.core.security.token.TokenManager;
import com.youlai.boot.shared.sms.enums.SmsTypeEnum;
import com.youlai.boot.shared.sms.service.SmsService;
diff --git a/src/main/java/com/youlai/boot/config/MybatisConfig.java b/src/main/java/com/youlai/boot/config/MybatisConfig.java
index 233792be..b21ae27d 100644
--- a/src/main/java/com/youlai/boot/config/MybatisConfig.java
+++ b/src/main/java/com/youlai/boot/config/MybatisConfig.java
@@ -5,8 +5,8 @@ import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.DataPermissionInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
-import com.youlai.boot.core.handler.MyDataPermissionHandler;
-import com.youlai.boot.core.handler.MyMetaObjectHandler;
+import com.youlai.boot.pulgin.mybatis.MyDataPermissionHandler;
+import com.youlai.boot.pulgin.mybatis.MyMetaObjectHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
diff --git a/src/main/java/com/youlai/boot/modules/member/controller/MemberController.java b/src/main/java/com/youlai/boot/module/member/controller/MemberController.java
similarity index 70%
rename from src/main/java/com/youlai/boot/modules/member/controller/MemberController.java
rename to src/main/java/com/youlai/boot/module/member/controller/MemberController.java
index 1512905e..63644a5c 100644
--- a/src/main/java/com/youlai/boot/modules/member/controller/MemberController.java
+++ b/src/main/java/com/youlai/boot/module/member/controller/MemberController.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.modules.member.controller;
+package com.youlai.boot.module.member.controller;
/**
* 会员控制层-业务模块演示
diff --git a/src/main/java/com/youlai/boot/modules/member/mapper/MemberMapper.java b/src/main/java/com/youlai/boot/module/member/mapper/MemberMapper.java
similarity index 72%
rename from src/main/java/com/youlai/boot/modules/member/mapper/MemberMapper.java
rename to src/main/java/com/youlai/boot/module/member/mapper/MemberMapper.java
index 59be608e..f1b4f548 100644
--- a/src/main/java/com/youlai/boot/modules/member/mapper/MemberMapper.java
+++ b/src/main/java/com/youlai/boot/module/member/mapper/MemberMapper.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.modules.member.mapper;
+package com.youlai.boot.module.member.mapper;
/**
* 会员数据访问层-业务模块演示
diff --git a/src/main/java/com/youlai/boot/modules/member/model/Member.java b/src/main/java/com/youlai/boot/module/member/model/Member.java
similarity index 70%
rename from src/main/java/com/youlai/boot/modules/member/model/Member.java
rename to src/main/java/com/youlai/boot/module/member/model/Member.java
index c75fda6f..da5ac12c 100644
--- a/src/main/java/com/youlai/boot/modules/member/model/Member.java
+++ b/src/main/java/com/youlai/boot/module/member/model/Member.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.modules.member.model;
+package com.youlai.boot.module.member.model;
/**
* 会员实体-业务模块演示
diff --git a/src/main/java/com/youlai/boot/modules/member/service/MemberService.java b/src/main/java/com/youlai/boot/module/member/service/MemberService.java
similarity index 72%
rename from src/main/java/com/youlai/boot/modules/member/service/MemberService.java
rename to src/main/java/com/youlai/boot/module/member/service/MemberService.java
index 49a8a733..304602cb 100644
--- a/src/main/java/com/youlai/boot/modules/member/service/MemberService.java
+++ b/src/main/java/com/youlai/boot/module/member/service/MemberService.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.modules.member.service;
+package com.youlai.boot.module.member.service;
/**
* 会员管理服务类-业务模块演示
diff --git a/src/main/java/com/youlai/boot/modules/order/controller/OrderController.java b/src/main/java/com/youlai/boot/module/order/controller/OrderController.java
similarity index 70%
rename from src/main/java/com/youlai/boot/modules/order/controller/OrderController.java
rename to src/main/java/com/youlai/boot/module/order/controller/OrderController.java
index 4c009b67..fee9c91c 100644
--- a/src/main/java/com/youlai/boot/modules/order/controller/OrderController.java
+++ b/src/main/java/com/youlai/boot/module/order/controller/OrderController.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.modules.order.controller;
+package com.youlai.boot.module.order.controller;
/**
* 订单控制层-业务模块演示
diff --git a/src/main/java/com/youlai/boot/modules/order/mapper/OrderMapper.java b/src/main/java/com/youlai/boot/module/order/mapper/OrderMapper.java
similarity index 72%
rename from src/main/java/com/youlai/boot/modules/order/mapper/OrderMapper.java
rename to src/main/java/com/youlai/boot/module/order/mapper/OrderMapper.java
index c6f0c108..c23001f4 100644
--- a/src/main/java/com/youlai/boot/modules/order/mapper/OrderMapper.java
+++ b/src/main/java/com/youlai/boot/module/order/mapper/OrderMapper.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.modules.order.mapper;
+package com.youlai.boot.module.order.mapper;
/**
* 订单数据访问层-业务模块演示
diff --git a/src/main/java/com/youlai/boot/modules/order/model/Order.java b/src/main/java/com/youlai/boot/module/order/model/Order.java
similarity index 70%
rename from src/main/java/com/youlai/boot/modules/order/model/Order.java
rename to src/main/java/com/youlai/boot/module/order/model/Order.java
index cd1b00ac..603d2cf8 100644
--- a/src/main/java/com/youlai/boot/modules/order/model/Order.java
+++ b/src/main/java/com/youlai/boot/module/order/model/Order.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.modules.order.model;
+package com.youlai.boot.module.order.model;
/**
* 订单实体-业务模块演示
diff --git a/src/main/java/com/youlai/boot/modules/order/service/OrderService.java b/src/main/java/com/youlai/boot/module/order/service/OrderService.java
similarity index 72%
rename from src/main/java/com/youlai/boot/modules/order/service/OrderService.java
rename to src/main/java/com/youlai/boot/module/order/service/OrderService.java
index 0341bce7..18bc2987 100644
--- a/src/main/java/com/youlai/boot/modules/order/service/OrderService.java
+++ b/src/main/java/com/youlai/boot/module/order/service/OrderService.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.modules.order.service;
+package com.youlai.boot.module.order.service;
/**
* 订单管理服务类-业务模块演示
diff --git a/src/main/java/com/youlai/boot/modules/product/controller/ProductController.java b/src/main/java/com/youlai/boot/module/product/controller/ProductController.java
similarity index 70%
rename from src/main/java/com/youlai/boot/modules/product/controller/ProductController.java
rename to src/main/java/com/youlai/boot/module/product/controller/ProductController.java
index 480b993c..b94b35dc 100644
--- a/src/main/java/com/youlai/boot/modules/product/controller/ProductController.java
+++ b/src/main/java/com/youlai/boot/module/product/controller/ProductController.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.modules.product.controller;
+package com.youlai.boot.module.product.controller;
/**
* 商品控制层-业务模块演示
diff --git a/src/main/java/com/youlai/boot/modules/product/mapper/ProductMapper.java b/src/main/java/com/youlai/boot/module/product/mapper/ProductMapper.java
similarity index 72%
rename from src/main/java/com/youlai/boot/modules/product/mapper/ProductMapper.java
rename to src/main/java/com/youlai/boot/module/product/mapper/ProductMapper.java
index 52068175..db214a5b 100644
--- a/src/main/java/com/youlai/boot/modules/product/mapper/ProductMapper.java
+++ b/src/main/java/com/youlai/boot/module/product/mapper/ProductMapper.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.modules.product.mapper;
+package com.youlai.boot.module.product.mapper;
/**
* 商品数据访问层-业务模块演示
diff --git a/src/main/java/com/youlai/boot/modules/product/model/Product.java b/src/main/java/com/youlai/boot/module/product/model/Product.java
similarity index 70%
rename from src/main/java/com/youlai/boot/modules/product/model/Product.java
rename to src/main/java/com/youlai/boot/module/product/model/Product.java
index 6b746889..a40cb566 100644
--- a/src/main/java/com/youlai/boot/modules/product/model/Product.java
+++ b/src/main/java/com/youlai/boot/module/product/model/Product.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.modules.product.model;
+package com.youlai.boot.module.product.model;
/**
* 商品实体-业务模块演示
diff --git a/src/main/java/com/youlai/boot/modules/product/service/ProductService.java b/src/main/java/com/youlai/boot/module/product/service/ProductService.java
similarity index 72%
rename from src/main/java/com/youlai/boot/modules/product/service/ProductService.java
rename to src/main/java/com/youlai/boot/module/product/service/ProductService.java
index 27929770..032225c2 100644
--- a/src/main/java/com/youlai/boot/modules/product/service/ProductService.java
+++ b/src/main/java/com/youlai/boot/module/product/service/ProductService.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.modules.product.service;
+package com.youlai.boot.module.product.service;
/**
* 会员管理服务类-业务模块演示
diff --git a/src/main/java/com/youlai/boot/pulgin/knife4j/Knife4jOpenApiCustomizer.java b/src/main/java/com/youlai/boot/pulgin/knife4j/Knife4jOpenApiCustomizer.java
new file mode 100644
index 00000000..abfe74be
--- /dev/null
+++ b/src/main/java/com/youlai/boot/pulgin/knife4j/Knife4jOpenApiCustomizer.java
@@ -0,0 +1,150 @@
+package com.youlai.boot.pulgin.knife4j;
+
+
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import com.github.xiaoymin.knife4j.core.conf.ExtensionsConstants;
+import com.github.xiaoymin.knife4j.core.conf.GlobalConstants;
+import com.github.xiaoymin.knife4j.spring.configuration.Knife4jProperties;
+import com.github.xiaoymin.knife4j.spring.configuration.Knife4jSetting;
+import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.models.OpenAPI;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ArrayUtils;
+import org.springdoc.core.customizers.GlobalOpenApiCustomizer;
+import org.springdoc.core.properties.SpringDocConfigProperties;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.type.filter.AnnotationTypeFilter;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.lang.annotation.Annotation;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 增强扩展属性支持
+ * @since 4.1.0
+ * @author xiaoymin@foxmail.com
+ * 2022/12/11 22:40
+ */
+@Primary
+@Configuration
+@Slf4j
+public class Knife4jOpenApiCustomizer extends com.github.xiaoymin.knife4j.spring.extension.Knife4jOpenApiCustomizer implements GlobalOpenApiCustomizer {
+ final Knife4jProperties knife4jProperties;
+ final SpringDocConfigProperties properties;
+ public Knife4jOpenApiCustomizer(Knife4jProperties knife4jProperties, SpringDocConfigProperties properties) {
+ super(knife4jProperties,properties);
+ this.knife4jProperties = knife4jProperties;
+ this.properties = properties;
+ }
+
+ @Override
+ public void customise(OpenAPI openApi) {
+ log.debug("Knife4j OpenApiCustomizer");
+ if (knife4jProperties.isEnable()) {
+ Knife4jSetting setting = knife4jProperties.getSetting();
+ OpenApiExtensionResolver openApiExtensionResolver = new OpenApiExtensionResolver(setting, knife4jProperties.getDocuments());
+ // 解析初始化
+ openApiExtensionResolver.start();
+ Map objectMap = new HashMap<>();
+ objectMap.put(GlobalConstants.EXTENSION_OPEN_SETTING_NAME, setting);
+ objectMap.put(GlobalConstants.EXTENSION_OPEN_MARKDOWN_NAME, openApiExtensionResolver.getMarkdownFiles());
+ openApi.addExtension(GlobalConstants.EXTENSION_OPEN_API_NAME, objectMap);
+ addOrderExtension(openApi);
+ }
+ }
+
+ /**
+ * 往OpenAPI内tags字段添加x-order属性
+ *
+ * @param openApi openApi
+ */
+
+ private void addOrderExtension(OpenAPI openApi) {
+ if (CollectionUtils.isEmpty(properties.getGroupConfigs())) {
+ return;
+ }
+ // 获取包扫描路径
+ Set packagesToScan =
+ properties.getGroupConfigs().stream()
+ .map(SpringDocConfigProperties.GroupConfig::getPackagesToScan)
+ .filter(toScan -> !CollectionUtils.isEmpty(toScan))
+ .flatMap(List::stream)
+ .collect(Collectors.toSet());
+ if (CollectionUtils.isEmpty(packagesToScan)) {
+ return;
+ }
+ // 扫描包下被ApiSupport注解的RestController Class
+ Set> classes =
+ packagesToScan.stream()
+ .map(packageToScan -> scanPackageByAnnotation(packageToScan, RestController.class))
+ .flatMap(Set::stream)
+ .filter(clazz -> clazz.isAnnotationPresent(ApiSupport.class))
+ .collect(Collectors.toSet());
+ if (!CollectionUtils.isEmpty(classes)) {
+ // ApiSupport oder值存入tagSortMap
+ Map tagOrderMap = new HashMap<>();
+ classes.forEach(
+ clazz -> {
+ Tag tag = getTag(clazz);
+ if (Objects.nonNull(tag)) {
+ ApiSupport apiSupport = clazz.getAnnotation(ApiSupport.class);
+ tagOrderMap.putIfAbsent(tag.name(), apiSupport.order());
+ }
+ });
+ // 往openApi tags字段添加x-order增强属性
+ if (openApi.getTags() != null) {
+ openApi
+ .getTags()
+ .forEach(
+ tag -> {
+ if (tagOrderMap.containsKey(tag.getName())) {
+ tag.addExtension(
+ ExtensionsConstants.EXTENSION_ORDER, tagOrderMap.get(tag.getName()));
+ }
+ });
+ }
+ }
+ }
+
+ private Tag getTag(Class> clazz) {
+ // 从类上获取
+ Tag tag = clazz.getAnnotation(Tag.class);
+ if (Objects.isNull(tag)) {
+ // 从接口上获取
+ Class>[] interfaces = clazz.getInterfaces();
+ if (ArrayUtils.isNotEmpty(interfaces)) {
+ for (Class> interfaceClazz : interfaces) {
+ Tag anno = interfaceClazz.getAnnotation(Tag.class);
+ if (Objects.nonNull(anno)) {
+ tag = anno;
+ break;
+ }
+ }
+ }
+ }
+ return tag;
+ }
+
+ private Set> scanPackageByAnnotation(
+ String packageName, final Class extends Annotation> annotationClass) {
+ ClassPathScanningCandidateComponentProvider scanner =
+ new ClassPathScanningCandidateComponentProvider(false);
+ scanner.addIncludeFilter(new AnnotationTypeFilter(annotationClass));
+ Set> classes = new HashSet<>();
+ for (BeanDefinition beanDefinition : scanner.findCandidateComponents(packageName)) {
+ try {
+ Class> clazz = Class.forName(beanDefinition.getBeanClassName());
+ classes.add(clazz);
+ } catch (ClassNotFoundException ignore) {
+
+ }
+ }
+ return classes;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/youlai/boot/core/handler/MyDataPermissionHandler.java b/src/main/java/com/youlai/boot/pulgin/mybatis/MyDataPermissionHandler.java
similarity index 99%
rename from src/main/java/com/youlai/boot/core/handler/MyDataPermissionHandler.java
rename to src/main/java/com/youlai/boot/pulgin/mybatis/MyDataPermissionHandler.java
index b9703448..aa98f34e 100644
--- a/src/main/java/com/youlai/boot/core/handler/MyDataPermissionHandler.java
+++ b/src/main/java/com/youlai/boot/pulgin/mybatis/MyDataPermissionHandler.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.core.handler;
+package com.youlai.boot.pulgin.mybatis;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
diff --git a/src/main/java/com/youlai/boot/core/handler/MyMetaObjectHandler.java b/src/main/java/com/youlai/boot/pulgin/mybatis/MyMetaObjectHandler.java
similarity index 96%
rename from src/main/java/com/youlai/boot/core/handler/MyMetaObjectHandler.java
rename to src/main/java/com/youlai/boot/pulgin/mybatis/MyMetaObjectHandler.java
index 22973a52..f4116517 100644
--- a/src/main/java/com/youlai/boot/core/handler/MyMetaObjectHandler.java
+++ b/src/main/java/com/youlai/boot/pulgin/mybatis/MyMetaObjectHandler.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.core.handler;
+package com.youlai.boot.pulgin.mybatis;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 125adea9..034a4159 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -155,8 +155,8 @@ springdoc:
- group: '系统管理'
paths-to-match: "/**"
packages-to-scan:
+ - com.youlai.boot.auth.controller
- com.youlai.boot.system.controller
- - com.youlai.boot.shared.auth.controller
- com.youlai.boot.shared.file.controller
- com.youlai.boot.shared.codegen.controller
default-flat-param-object: true
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
index c43b5e7f..7a439faa 100644
--- a/src/main/resources/application-prod.yml
+++ b/src/main/resources/application-prod.yml
@@ -152,8 +152,8 @@ springdoc:
- group: '系统管理'
paths-to-match: "/**"
packages-to-scan:
+ - com.youlai.boot.auth.controller
- com.youlai.boot.system.controller
- - com.youlai.boot.shared.auth.controller
- com.youlai.boot.shared.file.controller
- com.youlai.boot.shared.codegen.controller
default-flat-param-object: true