From 65a2450f3e921a32f4a01a8786b1fe7c8b6afafa Mon Sep 17 00:00:00 2001 From: "Ray.Hao" <1490493387@qq.com> Date: Tue, 14 Oct 2025 16:21:15 +0800 Subject: [PATCH] =?UTF-8?q?refactor(core):=E9=87=8D=E6=9E=84=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=8C=85=E7=BB=93=E6=9E=84=E5=B9=B6=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E5=BC=82=E5=B8=B8=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 BusinessException 移至 core.exception 包下 - 更新所有业务异常引用路径 - 调整项目模块目录结构说明 - 升级项目版本至3.3.0 --- README.md | 47 ++++++++++--------- pom.xml | 2 +- .../model/dto/WxMiniAppPhoneLoginDTO.java | 2 +- .../boot/core/aspect/RepeatSubmitAspect.java | 2 +- .../core/exception/BusinessException.java | 2 +- .../exception/GlobalExceptionHandler.java | 1 + .../service/impl/CodegenServiceImpl.java | 2 +- .../service/impl/GenConfigServiceImpl.java | 2 +- .../file/service/impl/MinioFileService.java | 2 +- .../boot/security/token/JwtTokenManager.java | 2 +- .../security/token/RedisTokenManager.java | 2 +- .../DictEvent.java => dto/DictEventDTO.java} | 11 +++-- .../system/service/impl/DictServiceImpl.java | 2 +- .../service/impl/NoticeServiceImpl.java | 2 +- .../system/service/impl/RoleServiceImpl.java | 2 +- .../system/service/impl/UserServiceImpl.java | 2 +- .../service/impl/WebSocketServiceImpl.java | 6 +-- 17 files changed, 49 insertions(+), 42 deletions(-) rename src/main/java/com/youlai/boot/system/model/{event/DictEvent.java => dto/DictEventDTO.java} (67%) diff --git a/README.md b/README.md index f806c527..2e491ee3 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ logo

youlai-boot

有来技术 - 有来技术 + 有来技术 有来技术 @@ -73,50 +73,55 @@ youlai-boot ├── sql # SQL脚本 │ ├── mysql # MySQL 脚本 ├── src # 源码目录 -│ ├── auth # 登录认证 +│ ├── auth # 认证模块(登录入口) │ ├── common # 公共模块 │ │ ├── annotation # 注解定义 │ │ ├── base # 基础类 │ │ ├── constant # 常量 │ │ ├── enums # 枚举类型 -│ │ ├── exception # 异常处理 │ │ ├── model # 数据模型 -│ │ ├── result # 结果封装 │ │ └── util # 工具类 │ ├── config # 自动装配配置 │ │ └── property # 配置属性目录 -│ ├── core # 核心功能 +│ ├── core # 核心框架 │ │ ├── aspect # 切面(日志、防重提交) +│ │ ├── exception # 异常处理 │ │ ├── filter # 过滤器(请求日志、限流) -│ │ ├── handler # 处理器(数据权限、数据填充) -│ │ └── security # Spring Security 安全模块 -│ ├── module # 业务模块 -│ │ ├── member # 会员模块【业务模块演示】 -│ │ ├── order # 订单模块【业务模块演示】 -│ │ ├── product # 商品模块【业务模块演示】 -│ ├── module # 插件扩展 -│ │ ├── knife4j # Knife4j 扩展 -│ │ ├── mybatis # Mybatis 扩展 -│ ├── shared # 共享模块 -│ │ ├── file # 文件模块 +│ │ ├── validator # 验证器 +│ │ └── web # Web响应封装(Result、PageResult等) +│ ├── platform # 平台服务(通用服务) │ │ ├── codegen # 代码生成模块 -│ │ ├── mail # 邮件模块 -│ │ ├── sms # 短信模块 -│ │ └── websocket # WebSocket 模块 +│ │ ├── file # 文件服务 +│ │ ├── mail # 邮件服务 +│ │ ├── sms # 短信服务 +│ │ └── websocket # WebSocket服务 +│ ├── plugin # 插件扩展 +│ │ ├── knife4j # Knife4j 扩展 +│ │ └── mybatis # Mybatis 扩展 +│ ├── security # 安全框架(Spring Security) +│ │ ├── exception # 安全异常 +│ │ ├── filter # 安全过滤器 +│ │ ├── handler # 安全处理器 +│ │ ├── model # 安全模型 +│ │ ├── provider # 认证提供者 +│ │ ├── service # 安全服务 +│ │ ├── token # Token管理 +│ │ └── util # 安全工具类 │ ├── system # 系统模块 │ │ ├── controller # 控制层 │ │ ├── converter # MapStruct 转换器 -│ │ ├── event # 事件处理 +│ │ ├── enums # 枚举 │ │ ├── handler # 处理器 │ │ ├── listener # 监听器 +│ │ ├── mapper # 数据库访问层 │ │ ├── model # 模型层 │ │ │ ├── bo # 业务对象 │ │ │ ├── dto # 数据传输对象 │ │ │ ├── entity # 实体对象 +│ │ │ ├── event # 事件对象 │ │ │ ├── form # 表单对象 │ │ │ ├── query # 查询参数对象 │ │ │ └── vo # 视图对象 -│ │ ├── mapper # 数据库访问层 │ │ └── service # 业务逻辑层 │ └── YouLaiBootApplication # 启动类 └── end diff --git a/pom.xml b/pom.xml index ccb0ab4d..4d1eb2f6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.youlai youlai-boot - 3.2.0 + 3.3.0 基于 Java 17 + SpringBoot 3 + Spring Security 构建的权限管理系统。 diff --git a/src/main/java/com/youlai/boot/auth/model/dto/WxMiniAppPhoneLoginDTO.java b/src/main/java/com/youlai/boot/auth/model/dto/WxMiniAppPhoneLoginDTO.java index 5a3e4c69..a881f271 100644 --- a/src/main/java/com/youlai/boot/auth/model/dto/WxMiniAppPhoneLoginDTO.java +++ b/src/main/java/com/youlai/boot/auth/model/dto/WxMiniAppPhoneLoginDTO.java @@ -8,7 +8,7 @@ import jakarta.validation.constraints.NotBlank; /** * 微信小程序手机号登录请求参数 * - * @author 有来技术团队 + * @author Ray.Hao * @since 2.0.0 */ @Schema(description = "微信小程序手机号登录请求参数") diff --git a/src/main/java/com/youlai/boot/core/aspect/RepeatSubmitAspect.java b/src/main/java/com/youlai/boot/core/aspect/RepeatSubmitAspect.java index c45766a4..6c0a0f4e 100644 --- a/src/main/java/com/youlai/boot/core/aspect/RepeatSubmitAspect.java +++ b/src/main/java/com/youlai/boot/core/aspect/RepeatSubmitAspect.java @@ -5,7 +5,7 @@ import cn.hutool.crypto.digest.DigestUtil; import com.youlai.boot.common.constant.RedisConstants; import com.youlai.boot.common.constant.SecurityConstants; import com.youlai.boot.core.web.ResultCode; -import com.youlai.boot.common.exception.BusinessException; +import com.youlai.boot.core.exception.BusinessException; import com.youlai.boot.common.annotation.RepeatSubmit; import com.youlai.boot.common.util.IPUtils; import jakarta.servlet.http.HttpServletRequest; diff --git a/src/main/java/com/youlai/boot/core/exception/BusinessException.java b/src/main/java/com/youlai/boot/core/exception/BusinessException.java index d9b2b4cf..033981c5 100644 --- a/src/main/java/com/youlai/boot/core/exception/BusinessException.java +++ b/src/main/java/com/youlai/boot/core/exception/BusinessException.java @@ -1,4 +1,4 @@ -package com.youlai.boot.common.exception; +package com.youlai.boot.core.exception; import com.youlai.boot.core.web.IResultCode; import lombok.Getter; diff --git a/src/main/java/com/youlai/boot/core/exception/GlobalExceptionHandler.java b/src/main/java/com/youlai/boot/core/exception/GlobalExceptionHandler.java index 9c97f5ad..e0599a9e 100644 --- a/src/main/java/com/youlai/boot/core/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/youlai/boot/core/exception/GlobalExceptionHandler.java @@ -2,6 +2,7 @@ package com.youlai.boot.common.exception; import cn.hutool.core.util.StrUtil; import com.fasterxml.jackson.core.JsonProcessingException; +import com.youlai.boot.core.exception.BusinessException; import com.youlai.boot.core.web.Result; import com.youlai.boot.core.web.ResultCode; import jakarta.servlet.ServletException; diff --git a/src/main/java/com/youlai/boot/platform/codegen/service/impl/CodegenServiceImpl.java b/src/main/java/com/youlai/boot/platform/codegen/service/impl/CodegenServiceImpl.java index 6d8c91ec..aa4e507b 100644 --- a/src/main/java/com/youlai/boot/platform/codegen/service/impl/CodegenServiceImpl.java +++ b/src/main/java/com/youlai/boot/platform/codegen/service/impl/CodegenServiceImpl.java @@ -16,7 +16,7 @@ import com.youlai.boot.config.property.CodegenProperties; import com.youlai.boot.platform.codegen.service.GenConfigService; import com.youlai.boot.platform.codegen.service.GenFieldConfigService; import com.youlai.boot.platform.codegen.service.CodegenService; -import com.youlai.boot.common.exception.BusinessException; +import com.youlai.boot.core.exception.BusinessException; import com.youlai.boot.platform.codegen.mapper.DatabaseMapper; import com.youlai.boot.platform.codegen.model.entity.GenConfig; import com.youlai.boot.platform.codegen.model.entity.GenFieldConfig; diff --git a/src/main/java/com/youlai/boot/platform/codegen/service/impl/GenConfigServiceImpl.java b/src/main/java/com/youlai/boot/platform/codegen/service/impl/GenConfigServiceImpl.java index fe4cb49d..eaf59a40 100644 --- a/src/main/java/com/youlai/boot/platform/codegen/service/impl/GenConfigServiceImpl.java +++ b/src/main/java/com/youlai/boot/platform/codegen/service/impl/GenConfigServiceImpl.java @@ -10,7 +10,7 @@ import com.youlai.boot.common.enums.EnvEnum; import com.youlai.boot.platform.codegen.enums.FormTypeEnum; import com.youlai.boot.platform.codegen.enums.JavaTypeEnum; import com.youlai.boot.platform.codegen.enums.QueryTypeEnum; -import com.youlai.boot.common.exception.BusinessException; +import com.youlai.boot.core.exception.BusinessException; import com.youlai.boot.config.property.CodegenProperties; import com.youlai.boot.platform.codegen.converter.CodegenConverter; import com.youlai.boot.platform.codegen.mapper.DatabaseMapper; diff --git a/src/main/java/com/youlai/boot/platform/file/service/impl/MinioFileService.java b/src/main/java/com/youlai/boot/platform/file/service/impl/MinioFileService.java index 367a6c8f..be2ecafd 100644 --- a/src/main/java/com/youlai/boot/platform/file/service/impl/MinioFileService.java +++ b/src/main/java/com/youlai/boot/platform/file/service/impl/MinioFileService.java @@ -5,7 +5,7 @@ import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; -import com.youlai.boot.common.exception.BusinessException; +import com.youlai.boot.core.exception.BusinessException; import com.youlai.boot.core.web.ResultCode; import com.youlai.boot.platform.file.model.FileInfo; import com.youlai.boot.platform.file.service.FileService; diff --git a/src/main/java/com/youlai/boot/security/token/JwtTokenManager.java b/src/main/java/com/youlai/boot/security/token/JwtTokenManager.java index 1ee154e4..627a533d 100644 --- a/src/main/java/com/youlai/boot/security/token/JwtTokenManager.java +++ b/src/main/java/com/youlai/boot/security/token/JwtTokenManager.java @@ -11,7 +11,7 @@ import cn.hutool.jwt.JWTUtil; import com.youlai.boot.common.constant.JwtClaimConstants; import com.youlai.boot.common.constant.RedisConstants; import com.youlai.boot.common.constant.SecurityConstants; -import com.youlai.boot.common.exception.BusinessException; +import com.youlai.boot.core.exception.BusinessException; import com.youlai.boot.core.web.ResultCode; import com.youlai.boot.config.property.SecurityProperties; import com.youlai.boot.security.model.AuthenticationToken; diff --git a/src/main/java/com/youlai/boot/security/token/RedisTokenManager.java b/src/main/java/com/youlai/boot/security/token/RedisTokenManager.java index 51113ede..a2dff3a5 100644 --- a/src/main/java/com/youlai/boot/security/token/RedisTokenManager.java +++ b/src/main/java/com/youlai/boot/security/token/RedisTokenManager.java @@ -4,7 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import com.youlai.boot.common.constant.RedisConstants; -import com.youlai.boot.common.exception.BusinessException; +import com.youlai.boot.core.exception.BusinessException; import com.youlai.boot.core.web.ResultCode; import com.youlai.boot.config.property.SecurityProperties; import com.youlai.boot.security.model.AuthenticationToken; diff --git a/src/main/java/com/youlai/boot/system/model/event/DictEvent.java b/src/main/java/com/youlai/boot/system/model/dto/DictEventDTO.java similarity index 67% rename from src/main/java/com/youlai/boot/system/model/event/DictEvent.java rename to src/main/java/com/youlai/boot/system/model/dto/DictEventDTO.java index 7f30ee10..b3cae343 100644 --- a/src/main/java/com/youlai/boot/system/model/event/DictEvent.java +++ b/src/main/java/com/youlai/boot/system/model/dto/DictEventDTO.java @@ -1,15 +1,15 @@ -package com.youlai.boot.system.model.event; +package com.youlai.boot.system.model.dto; import lombok.Data; /** - * 字典更新事件 + * 字典更新事件消息 * * @author Ray.Hao * @since 3.0.0 */ @Data -public class DictEvent { +public class DictEventDTO { /** * 字典编码 */ @@ -20,8 +20,9 @@ public class DictEvent { */ private long timestamp; - public DictEvent(String dictCode) { + public DictEventDTO(String dictCode) { this.dictCode = dictCode; this.timestamp = System.currentTimeMillis(); } -} +} + diff --git a/src/main/java/com/youlai/boot/system/service/impl/DictServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/DictServiceImpl.java index 8d1f9896..2573b4d3 100644 --- a/src/main/java/com/youlai/boot/system/service/impl/DictServiceImpl.java +++ b/src/main/java/com/youlai/boot/system/service/impl/DictServiceImpl.java @@ -4,7 +4,7 @@ import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.youlai.boot.common.exception.BusinessException; +import com.youlai.boot.core.exception.BusinessException; import com.youlai.boot.common.model.Option; import com.youlai.boot.system.converter.DictConverter; import com.youlai.boot.system.mapper.DictMapper; diff --git a/src/main/java/com/youlai/boot/system/service/impl/NoticeServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/NoticeServiceImpl.java index 407ef6de..b4d70ea5 100644 --- a/src/main/java/com/youlai/boot/system/service/impl/NoticeServiceImpl.java +++ b/src/main/java/com/youlai/boot/system/service/impl/NoticeServiceImpl.java @@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.youlai.boot.common.exception.BusinessException; +import com.youlai.boot.core.exception.BusinessException; import com.youlai.boot.security.util.SecurityUtils; import com.youlai.boot.system.converter.NoticeConverter; import com.youlai.boot.system.enums.NoticePublishStatusEnum; diff --git a/src/main/java/com/youlai/boot/system/service/impl/RoleServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/RoleServiceImpl.java index b08955df..0efab740 100644 --- a/src/main/java/com/youlai/boot/system/service/impl/RoleServiceImpl.java +++ b/src/main/java/com/youlai/boot/system/service/impl/RoleServiceImpl.java @@ -7,7 +7,7 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.youlai.boot.common.exception.BusinessException; +import com.youlai.boot.core.exception.BusinessException; import com.youlai.boot.system.converter.RoleConverter; import com.youlai.boot.system.mapper.RoleMapper; import com.youlai.boot.system.model.entity.Role; diff --git a/src/main/java/com/youlai/boot/system/service/impl/UserServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/UserServiceImpl.java index 745c1d67..827779c4 100644 --- a/src/main/java/com/youlai/boot/system/service/impl/UserServiceImpl.java +++ b/src/main/java/com/youlai/boot/system/service/impl/UserServiceImpl.java @@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.youlai.boot.common.constant.RedisConstants; import com.youlai.boot.common.constant.SystemConstants; -import com.youlai.boot.common.exception.BusinessException; +import com.youlai.boot.core.exception.BusinessException; import com.youlai.boot.common.model.Option; import com.youlai.boot.platform.sms.enums.SmsTypeEnum; import com.youlai.boot.platform.sms.service.SmsService; diff --git a/src/main/java/com/youlai/boot/system/service/impl/WebSocketServiceImpl.java b/src/main/java/com/youlai/boot/system/service/impl/WebSocketServiceImpl.java index addbccf5..12d443c5 100644 --- a/src/main/java/com/youlai/boot/system/service/impl/WebSocketServiceImpl.java +++ b/src/main/java/com/youlai/boot/system/service/impl/WebSocketServiceImpl.java @@ -2,7 +2,7 @@ package com.youlai.boot.system.service.impl; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.youlai.boot.system.model.event.DictEvent; +import com.youlai.boot.system.model.dto.DictEventDTO; import com.youlai.boot.system.service.WebSocketService; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -192,7 +192,7 @@ public class WebSocketServiceImpl implements WebSocketService { */ @Override public void broadcastDictChange(String dictCode) { - DictEvent event = new DictEvent(dictCode); + DictEventDTO event = new DictEventDTO(dictCode); sendDictEvent(event); } @@ -201,7 +201,7 @@ public class WebSocketServiceImpl implements WebSocketService { * * @param event 字典事件 */ - private void sendDictEvent(DictEvent event) { + private void sendDictEvent(DictEventDTO event) { if (messagingTemplate == null) { log.warn("消息模板尚未初始化,无法发送字典更新通知"); return;