diff --git a/README.md b/README.md
index 45db9948..37f3992a 100644
--- a/README.md
+++ b/README.md
@@ -97,7 +97,7 @@ spring:
---
-## 📁 项目结构
+## 📁 目录结构
```
youlai-boot
@@ -105,15 +105,13 @@ youlai-boot
├── sql/ # 数据库脚本
├── src/main/java/com/youlai/boot/
│ ├── auth/ # 认证模块
-│ ├── common/ # 公共模块
-│ ├── config/ # 配置模块
-│ ├── core/ # 核心模块(AOP、异常、过滤器)
-│ ├── file/ # 文件服务
-│ ├── plugin/ # 插件扩展(Knife4j、MyBatis)
-│ ├── security/ # 安全模块(JWT、Token)
-│ ├── support/ # 支撑服务(邮件、短信、WebSocket)
│ ├── system/ # 系统模块(用户、角色、菜单、部门)
-│ ├── tool/ # 工具模块(代码生成)
+│ ├── module/ # 业务模块(文件、代码生成)
+│ ├── framework/ # 技术中台(安全、缓存、持久化、集成)
+│ ├── interfaces/ # 对外接口(SSE)
+│ ├── shared/ # 跨模块共享(DTO、枚举、常量)
+│ ├── common/ # 基础能力(结果、异常、切面、工具)
+│ ├── config/ # 全局配置
│ └── YouLaiBootApplication.java # 启动类
└── pom.xml # Maven 配置
```
diff --git a/pom.xml b/pom.xml
index 1116596a..7a6fd2fc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
* 用于在过滤器、Security处理器等无法使用 @RestControllerAdvice 的场景中统一写入HTTP响应。 * 支持写入成功响应和错误响应。 @@ -20,12 +20,12 @@ import java.nio.charset.StandardCharsets; * @since 2.0.0 */ @Slf4j -public final class WebResponseWriter { +public final class ResponseWriter { /** * 私有构造函数,防止实例化 */ - private WebResponseWriter() { + private ResponseWriter() { throw new UnsupportedOperationException("工具类不允许实例化"); } @@ -115,8 +115,4 @@ public final class WebResponseWriter { default -> HttpStatus.BAD_REQUEST.value(); }; } -} - - - - +} \ No newline at end of file diff --git a/src/main/java/com/youlai/boot/core/web/Result.java b/src/main/java/com/youlai/boot/common/result/Result.java similarity index 98% rename from src/main/java/com/youlai/boot/core/web/Result.java rename to src/main/java/com/youlai/boot/common/result/Result.java index 528c57bc..94153792 100644 --- a/src/main/java/com/youlai/boot/core/web/Result.java +++ b/src/main/java/com/youlai/boot/common/result/Result.java @@ -1,4 +1,4 @@ -package com.youlai.boot.core.web; +package com.youlai.boot.common.result; import cn.hutool.core.util.StrUtil; import lombok.Data; diff --git a/src/main/java/com/youlai/boot/core/web/ResultCode.java b/src/main/java/com/youlai/boot/common/result/ResultCode.java similarity index 99% rename from src/main/java/com/youlai/boot/core/web/ResultCode.java rename to src/main/java/com/youlai/boot/common/result/ResultCode.java index 52784d93..a0833d1d 100644 --- a/src/main/java/com/youlai/boot/core/web/ResultCode.java +++ b/src/main/java/com/youlai/boot/common/result/ResultCode.java @@ -1,4 +1,4 @@ -package com.youlai.boot.core.web; +package com.youlai.boot.common.result; import java.io.Serializable; diff --git a/src/main/java/com/youlai/boot/common/util/DateUtils.java b/src/main/java/com/youlai/boot/common/util/DateUtils.java deleted file mode 100644 index 0a3c30a9..00000000 --- a/src/main/java/com/youlai/boot/common/util/DateUtils.java +++ /dev/null @@ -1,61 +0,0 @@ - -package com.youlai.boot.common.util; - -import cn.hutool.core.date.DateTime; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ReflectUtil; -import cn.hutool.core.util.StrUtil; -import org.springframework.format.annotation.DateTimeFormat; - -import java.lang.reflect.Field; - -/** - * 日期工具类 - * - * @author haoxr - * @since 2.4.2 - */ -public class DateUtils { - - /** - * 区间日期格式化为数据库日期格式 - *
- * eg:2021-01-01 → 2021-01-01 00:00:00
- *
- * @param obj 要处理的对象
- * @param startTimeFieldName 起始时间字段名
- * @param endTimeFieldName 结束时间字段名
- */
- public static void toDatabaseFormat(Object obj, String startTimeFieldName, String endTimeFieldName) {
- Field startTimeField = ReflectUtil.getField(obj.getClass(), startTimeFieldName);
- Field endTimeField = ReflectUtil.getField(obj.getClass(), endTimeFieldName);
-
- if (startTimeField != null) {
- processDateTimeField(obj, startTimeField, startTimeFieldName, "yyyy-MM-dd 00:00:00");
- }
-
- if (endTimeField != null) {
- processDateTimeField(obj, endTimeField, endTimeFieldName, "yyyy-MM-dd 23:59:59");
- }
- }
-
- /**
- * 处理日期字段
- *
- * @param obj 要处理的对象
- * @param field 字段
- * @param fieldName 字段名
- * @param targetPattern 目标数据库日期格式
- */
- private static void processDateTimeField(Object obj, Field field, String fieldName, String targetPattern) {
- Object fieldValue = ReflectUtil.getFieldValue(obj, fieldName);
- if (fieldValue != null) {
- // 得到原始的日期格式
- String pattern = field.isAnnotationPresent(DateTimeFormat.class) ? field.getAnnotation(DateTimeFormat.class).pattern() : "yyyy-MM-dd";
- // 转换为日期对象
- DateTime dateTime = DateUtil.parse(StrUtil.toString(fieldValue), pattern);
- // 转换为目标数据库日期格式
- ReflectUtil.setFieldValue(obj, fieldName, dateTime.toString(targetPattern));
- }
- }
-}
diff --git a/src/main/java/com/youlai/boot/core/validator/FieldValidator.java b/src/main/java/com/youlai/boot/common/validator/FieldValidator.java
similarity index 78%
rename from src/main/java/com/youlai/boot/core/validator/FieldValidator.java
rename to src/main/java/com/youlai/boot/common/validator/FieldValidator.java
index d65d4f3c..200e67c8 100644
--- a/src/main/java/com/youlai/boot/core/validator/FieldValidator.java
+++ b/src/main/java/com/youlai/boot/common/validator/FieldValidator.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.core.validator;
+package com.youlai.boot.common.validator;
import com.youlai.boot.common.annotation.ValidField;
import jakarta.validation.ConstraintValidator;
@@ -18,16 +18,14 @@ public class FieldValidator implements ConstraintValidator
+ * 面向第三方系统的开放接口,使用 API Key 认证
+ * > getTablePreviewData(@PathVariable String tableName,
@RequestParam(value = "pageType", required = false, defaultValue = "classic") String pageType,
@RequestParam(value = "type", required = false, defaultValue = "ts") String type) {
@@ -91,7 +90,7 @@ public class CodegenController {
@Operation(summary = "下载代码")
@GetMapping("/{tableName}/download")
- @Log(value = "下载代码", module = LogModuleEnum.OTHER)
+ @Log(module = LogModuleEnum.CODEGEN, value = ActionTypeEnum.DOWNLOAD)
public void downloadZip(HttpServletResponse response, @PathVariable String tableName,
@RequestParam(value = "pageType", required = false, defaultValue = "classic") String pageType,
@RequestParam(value = "type", required = false, defaultValue = "ts") String type) {
diff --git a/src/main/java/com/youlai/boot/module/codegen/service/impl/CodegenServiceImpl.java b/src/main/java/com/youlai/boot/module/codegen/service/impl/CodegenServiceImpl.java
index c3485bbf..5e2125c4 100644
--- a/src/main/java/com/youlai/boot/module/codegen/service/impl/CodegenServiceImpl.java
+++ b/src/main/java/com/youlai/boot/module/codegen/service/impl/CodegenServiceImpl.java
@@ -16,7 +16,7 @@ import com.youlai.boot.config.property.CodegenProperties;
import com.youlai.boot.module.codegen.service.GenTableService;
import com.youlai.boot.module.codegen.service.GenTableColumnService;
import com.youlai.boot.module.codegen.service.CodegenService;
-import com.youlai.boot.core.exception.BusinessException;
+import com.youlai.boot.common.exception.BusinessException;
import com.youlai.boot.module.codegen.mapper.DatabaseMapper;
import com.youlai.boot.module.codegen.model.entity.GenTable;
import com.youlai.boot.module.codegen.model.entity.GenTableColumn;
diff --git a/src/main/java/com/youlai/boot/module/codegen/service/impl/GenTableServiceImpl.java b/src/main/java/com/youlai/boot/module/codegen/service/impl/GenTableServiceImpl.java
index 8bc3cbea..2ab5a592 100644
--- a/src/main/java/com/youlai/boot/module/codegen/service/impl/GenTableServiceImpl.java
+++ b/src/main/java/com/youlai/boot/module/codegen/service/impl/GenTableServiceImpl.java
@@ -10,7 +10,7 @@ import com.youlai.boot.common.enums.EnvEnum;
import com.youlai.boot.module.codegen.enums.FormTypeEnum;
import com.youlai.boot.module.codegen.enums.JavaTypeEnum;
import com.youlai.boot.module.codegen.enums.QueryTypeEnum;
-import com.youlai.boot.core.exception.BusinessException;
+import com.youlai.boot.common.exception.BusinessException;
import com.youlai.boot.config.property.CodegenProperties;
import com.youlai.boot.module.codegen.converter.CodegenConverter;
import com.youlai.boot.module.codegen.mapper.DatabaseMapper;
diff --git a/src/main/java/com/youlai/boot/module/file/controller/FileController.java b/src/main/java/com/youlai/boot/module/file/controller/FileController.java
index 8a0aaa42..47d57246 100644
--- a/src/main/java/com/youlai/boot/module/file/controller/FileController.java
+++ b/src/main/java/com/youlai/boot/module/file/controller/FileController.java
@@ -1,6 +1,6 @@
package com.youlai.boot.module.file.controller;
-import com.youlai.boot.core.web.Result;
+import com.youlai.boot.common.result.Result;
import com.youlai.boot.module.file.service.FileService;
import com.youlai.boot.module.file.model.FileInfo;
import io.swagger.v3.oas.annotations.Parameter;
diff --git a/src/main/java/com/youlai/boot/module/file/service/impl/MinioFileService.java b/src/main/java/com/youlai/boot/module/file/service/impl/MinioFileService.java
index 0c66f9d0..41125235 100644
--- a/src/main/java/com/youlai/boot/module/file/service/impl/MinioFileService.java
+++ b/src/main/java/com/youlai/boot/module/file/service/impl/MinioFileService.java
@@ -5,8 +5,8 @@ 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.core.exception.BusinessException;
-import com.youlai.boot.core.web.ResultCode;
+import com.youlai.boot.common.exception.BusinessException;
+import com.youlai.boot.common.result.ResultCode;
import com.youlai.boot.module.file.model.FileInfo;
import com.youlai.boot.module.file.service.FileService;
import io.minio.*;
diff --git a/src/main/java/com/youlai/boot/common/constant/SystemConstants.java b/src/main/java/com/youlai/boot/shared/constant/SystemConstants.java
similarity index 91%
rename from src/main/java/com/youlai/boot/common/constant/SystemConstants.java
rename to src/main/java/com/youlai/boot/shared/constant/SystemConstants.java
index 43489745..60b8197f 100644
--- a/src/main/java/com/youlai/boot/common/constant/SystemConstants.java
+++ b/src/main/java/com/youlai/boot/shared/constant/SystemConstants.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.common.constant;
+package com.youlai.boot.shared.constant;
/**
* 系统常量
diff --git a/src/main/java/com/youlai/boot/common/model/KeyValue.java b/src/main/java/com/youlai/boot/shared/dto/KeyValue.java
similarity index 92%
rename from src/main/java/com/youlai/boot/common/model/KeyValue.java
rename to src/main/java/com/youlai/boot/shared/dto/KeyValue.java
index 2e33be82..1f368540 100644
--- a/src/main/java/com/youlai/boot/common/model/KeyValue.java
+++ b/src/main/java/com/youlai/boot/shared/dto/KeyValue.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.common.model;
+package com.youlai.boot.shared.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -27,4 +27,4 @@ public class KeyValue {
@Schema(description = "选项的标签")
private String value;
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/youlai/boot/common/model/Option.java b/src/main/java/com/youlai/boot/shared/dto/Option.java
similarity index 96%
rename from src/main/java/com/youlai/boot/common/model/Option.java
rename to src/main/java/com/youlai/boot/shared/dto/Option.java
index ba0fe9b8..1e0e5c7d 100644
--- a/src/main/java/com/youlai/boot/common/model/Option.java
+++ b/src/main/java/com/youlai/boot/shared/dto/Option.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.common.model;
+package com.youlai.boot.shared.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.v3.oas.annotations.media.Schema;
@@ -50,4 +50,4 @@ public class Option