diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index fd230fd6..00000000
--- a/.editorconfig
+++ /dev/null
@@ -1,35 +0,0 @@
-# EditorConfig is awesome: https://EditorConfig.org
-
-# top-most EditorConfig file
-root = true
-
-# Unix-style newlines with a newline ending every file
-[*]
-charset = utf-8
-end_of_line = lf
-insert_final_newline = true
-trim_trailing_whitespace = true
-
-# Java files
-[*.java]
-indent_style = space
-indent_size = 4
-
-# XML files
-[*.xml]
-indent_style = space
-indent_size = 4
-
-# YAML files
-[*.{yml,yaml}]
-indent_style = space
-indent_size = 2
-
-# Properties files
-[*.properties]
-indent_style = space
-indent_size = 4
-
-# Markdown files
-[*.md]
-trim_trailing_whitespace = false
diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index a3fd9cca..00000000
--- a/.gitattributes
+++ /dev/null
@@ -1,14 +0,0 @@
-# Auto detect text files and perform LF normalization
-* text=auto eol=lf
-
-# Java files
-*.java text eol=lf
-*.xml text eol=lf
-
-# Config files
-*.yml text eol=lf
-*.yaml text eol=lf
-*.properties text eol=lf
-
-# Shell scripts
-*.sh text eol=lf
diff --git a/Dockerfile b/Dockerfile
index 3ebb3846..2a54fa23 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -11,7 +11,7 @@ ENV TZ=Asia/Shanghai
VOLUME /tmp
# 添加应用
-ADD target/youlai-boot.jar app.jar
+ADD youlai-app/target/youlai-app.jar app.jar
# 启动命令
CMD java \
diff --git a/README.md b/README.md
index 6c07bafd..44d79b3c 100644
--- a/README.md
+++ b/README.md
@@ -1,172 +1,154 @@
-
-
-
+
-
youlai-boot
+

-
- Spring Boot 4 企业级权限管理系统后端
-
+# youlai-boot-multi
-
-
-
-
-
+**Spring Boot 4 多模块企业级权限管理系统后端**
-
-
-
-
+[](https://spring.io/projects/spring-boot)
+[](https://openjdk.org/)
+[](LICENSE)
----
+[](https://www.youlai.tech/docs/admin/backend/java/)
+[](https://vue.youlai.tech)
+[](https://gitee.com/youlaiorg/youlai-boot/stargazers)
-> [English](#) | 简体中文
+
----
+## 简介
-## 🎯 项目定位
+**youlai-boot-multi** 是 [youlai-boot](https://gitee.com/youlaiorg/youlai-boot) 的多模块版本,基于 Spring Boot 4,将原单体项目拆分为独立模块,实现业务解耦与按需引用。配套前端 [vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin),共享同一套 API 规范与数据库结构。
-一套 **Spring Boot 4 后端权限管理系统**,配套前端 [vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin),并提供 **6 种语言实现**(Java / Node.js / Go / Python / PHP / C#),共享同一套 API 规范与数据库结构。
+> 📌 本项目为 [youlai-boot](https://gitee.com/youlaiorg/youlai-boot) 的 `multi-module` 分支,克隆时请切换分支。
-**适合场景**:企业中后台管理系统的后端学习参考、二次开发基础脚手架。
+## 核心特性
----
+- 🔐 **安全体系** — Spring Security + JWT/Redis Token 双会话模式、令牌续期、多端互斥
+- 🛡️ **细粒度权限** — RBAC 五级:数据 → 菜单 → 按钮 → 接口 → 字段
+- ⚡ **代码生成器** — 一键生成前后端 CRUD 代码
+- 📦 **模块齐全** — 用户、角色、菜单、部门、字典、文件、定时任务、消息中心、操作日志
+- 🔌 **实时通信** — SSE 推送:在线用户数、字典同步、通知广播
+- 🧩 **模块解耦** — 事件驱动通信,模块间零循环依赖
-## ✨ 核心能力
+## 快速开始
-| 能力 | 说明 |
-|------|------|
-| 🔐 **安全体系** | Spring Security + JWT + Redis 多端互斥、令牌续期、验证码防刷 |
-| 🛡️ **细粒度权限** | RBAC 五级:数据权限 → 菜单 → 按钮 → 接口 → 字段级 |
-| ⚡ **代码生成器** | 可视化配置表单,一键生成 Entity/VO/Controller/Service/CRUD 前后端代码 |
-| 📦 **模块齐全** | 用户、角色、菜单、部门、字典、文件、定时任务、消息中心、操作日志 |
-| 🌐 **多租户 SaaS** | 数据隔离 + 租户配置,独立 [youlai-boot-tenant](https://gitee.com/youlaiorg/youlai-boot-tenant) 版本 |
-| 🔌 **实时通信** | 内置 SSE 推送服务(在线用户数、字典同步、通知广播) |
-| 📱 **生态完整** | 配套移动端 [youlai-app](https://gitee.com/youlaiorg/youlai-app)(UniApp)+ 完整[技术文档](https://www.youlai.tech/docs/admin/) |
+**环境要求**:JDK 17+ · MySQL 8.0+ · Redis 6.0+
-## 📸 系统预览
-
-
-
-
-  |
-  |
-
-
-
-
-## 🚀 快速开始
-
-### 环境要求
-
-| 组件 | 版本 |
-|------|------|
-| JDK | 17+ |
-| MySQL | 8.0+ / 5.7+ |
-| Redis | 6.0+ |
-
-### 本地启动
-
-```bash
-# 1. 克隆项目
-git clone https://gitee.com/youlaiorg/youlai-boot.git
-
-# 2. 导入数据库脚本 sql/mysql/youlai_admin.sql
-
-# 3. 修改 application-dev.yml 配置 MySQL 和 Redis 连接信息
-# 💡 默认已配置线上只读数据源,可直接启动体验
-
-# 4. 运行 YouLaiBootApplication.java,访问 http://localhost:8000/doc.html
-```
+1. 克隆项目:`git clone -b multi-module https://gitee.com/youlaiorg/youlai-boot.git`
+2. 导入数据库:`sql/youlai_admin.sql`
+3. 修改配置(可选,默认已配置线上只读数据源):`youlai-application/src/main/resources/application-dev.yml`
+4. 启动服务(运行 `youlai-application` 模块的 `YouLaiBootApplication`),访问 http://localhost:8000/doc.html
默认账号:`admin` / `123456`
-### Docker 部署
-
-```bash
-cd docker && docker-compose up -d
-```
+**Docker 部署**:`cd docker && docker-compose up -d`
详细指南:[部署文档](https://www.youlai.tech/docs/admin/backends/java/deploy) · [开发规范](https://www.youlai.tech/docs/admin/backends/java/dev-standards)
-## 📁 目录结构
+## 技术栈
+
+| 技术 | 版本 | 说明 |
+|:-----|:-----|:-----|
+| Spring Boot | 4.0.5 | 核心框架 |
+| Spring Security | 6.x | 认证授权 |
+| MyBatis-Plus | 3.5.15 | ORM 框架 |
+| Druid | 1.2.24 | 数据库连接池 |
+| Redis + Redisson | 6.0+ / 4.1.0 | 缓存 · 会话 · 分布式锁 |
+| Caffeine | 2.9.3 | 本地缓存 |
+| XXL-Job | 3.2.0 | 分布式定时任务 |
+| Knife4j | 4.5.0 | API 文档 |
+| MapStruct | 1.6.3 | 对象映射 |
+| MinIO | 8.5.10 | 对象存储 |
+
+## 目录结构
```
-youlai-boot/
-├── docker/ # Docker 部署编排
-├── sql/ # 数据库初始化脚本
-├── src/main/java/com/youlai/boot/
-│ ├── YouLaiBootApplication # 启动类
-│ ├── auth/ # 认证授权(登录/登出/令牌)
-│ ├── codegen/ # 代码生成器
-│ ├── common/ # 公共模块(常量/枚举/统一响应)
-│ ├── file/ # 文件服务(MinIO/本地存储)
-│ ├── framework/ # 技术基座
-│ │ ├── apidoc/ # OpenAPI/Swagger
-│ │ ├── cache/ # Redis/Caffeine 缓存
-│ │ ├── captcha/ # 图形验证码
-│ │ ├── integration/ # 短信/邮件/微信
-│ │ ├── job/ # XXL-Job 定时任务
-│ │ ├── mybatis/ # MyBatis Plus 配置
-│ │ ├── security/ # 安全过滤器/Token机制
-│ │ └── web/ # 全局异常/跨域/限流
-│ ├── message/ # SSE 消息推送
-│ └── system/ # 业务模块(用户/角色/菜单/部门)
-└── pom.xml # Maven 依赖
+youlai-boot-multi/
+├── youlai-application/ # 启动模块(入口)
+├── youlai-common/ # 公共模块(常量/枚举/事件/统一响应)
+├── youlai-framework/ # 技术框架层
+│ ├── apidoc/ # OpenAPI / Knife4j
+│ ├── cache/ # Redis / Caffeine 缓存
+│ ├── captcha/ # 图形验证码
+│ ├── integration/ # 短信 / 邮件 / 微信
+│ ├── job/ # XXL-Job 定时任务
+│ ├── mybatis/ # MyBatis-Plus 配置
+│ ├── security/ # Security / JWT / Token
+│ └── web/ # 全局异常 / 跨域 / 限流
+├── youlai-system/ # 系统业务(用户/角色/菜单/部门)
+├── youlai-auth/ # 认证授权(登录/登出/令牌)
+├── youlai-file/ # 文件服务(MinIO/本地/OSS)
+├── youlai-message/ # SSE 消息推送
+├── youlai-codegen/ # 代码生成器
+├── docker/ # Docker 部署编排
+├── sql/ # 数据库初始化脚本
+└── pom.xml # Maven 依赖管理
```
-## 🌐 相关生态
+## 模块依赖关系
-| 项目 | 技术栈 | 定位 |
-|------|--------|------|
-| [**vue3-element-admin**](https://gitee.com/youlaiorg/vue3-element-admin) | Vue 3 + Element Plus | **PC 管理前端**(主推) |
-| [**youlai-app**](https://gitee.com/youlaiorg/youlai-app) | Vue 3 + UniApp | **移动端 App** |
-| [**youlai-boot-tenant**](https://gitee.com/youlaiorg/youlai-boot-tenant) | Spring Boot 4 | **SaaS 多租户版本** |
-| [**youlai-boot-flex**](https://gitee.com/youlaiorg/youlai-boot-flex) | Spring Boot 3 + MyBatis-Flex | MyBatis-Flex 版 |
-| [**youlai-nest**](https://gitee.com/youlaiorg/youlai-nest) | NestJS + TypeORM | **Node.js 后端** |
-| [**youlai-gin**](https://gitee.com/youlaiorg/youlai-gin) | Go + Gorm | **Go 后端** |
-| [**youlai-django**](https://gitee.com/youlaiorg/youlai-django) | Django + DRF | **Python 后端** |
-| [**youlai-thinkphp**](https://gitee.com/youlaiorg/youlai-thinkphp) | ThinkPHP 8 | **PHP 后端** |
-| [**youlai-aspnet**](https://gitee.com/youlaiorg/youlai-aspnet) | ASP.NET Core | **C# 后端** |
+```
+youlai-application ──→ youlai-system ──→ youlai-framework ──→ youlai-common
+ ──→ youlai-auth ──→ youlai-framework
+ ──→ youlai-file ──→ youlai-framework
+ ──→ youlai-message──→ youlai-framework
+ ──→ youlai-codegen──→ youlai-framework
+```
+## 生态矩阵
+
+**前端**
+
+| 项目 | 技术栈 | 说明 |
+|:-----|:-------|:-----|
+| [vue3-element-admin](https://gitee.com/youlaiorg/vue3-element-admin) | Vue 3 + Element Plus | PC 管理前端(主推) |
+| [youlai-app](https://gitee.com/youlaiorg/youlai-app) | Vue 3 + UniApp | 移动端 App |
+
+**后端**
+
+| 项目 | 技术栈 | 说明 |
+|:-----|:-------|:-----|
+| [youlai-nest](https://gitee.com/youlaiorg/youlai-nest) | NestJS + TypeORM | Node.js |
+| [youlai-gin](https://gitee.com/youlaiorg/youlai-gin) | Go + Gorm | Go |
+| [youlai-django](https://gitee.com/youlaiorg/youlai-django) | Django + DRF | Python |
+| [youlai-thinkphp](https://gitee.com/youlaiorg/youlai-thinkphp) | ThinkPHP 8 | PHP |
+| [youlai-aspnet](https://gitee.com/youlaiorg/youlai-aspnet) | ASP.NET Core | C# |
+
+> **youlai-boot** 还提供以下变种和分支版本:[多租户](https://gitee.com/youlaiorg/youlai-boot-tenant)(Spring Boot 4)· [MyBatis-Flex](https://gitee.com/youlaiorg/youlai-boot-flex)(Spring Boot 4)· [Spring Boot 3](https://gitee.com/youlaiorg/youlai-boot/tree/spring-boot-3) · [PostgreSQL](https://gitee.com/youlaiorg/youlai-boot/tree/db-pg) · [多模块](https://gitee.com/youlaiorg/youlai-boot/tree/multi-module)
+>
> 六种后端共享同一套 **RESTful API 规范** 和 **数据库结构**,前端可无缝切换。
-## 📘 文档资源
+## 文档资源
| 资源 | 地址 |
-|------|------|
-| **📖 完整文档站** | [docs.youlai.tech](https://www.youlai.tech/docs/admin/) |
-| **🖥️ 在线预览(前端)** | [vue.youlai.tech](https://vue.youlai.tech) |
-| **📱 在线预览(移动端)** | [app.youlai.tech](https://app.youlai.tech) |
-| **🔗 接口文档** | 启动后访问 [http://localhost:8000/doc.html](http://localhost:8000/doc.html) |
+|:-----|:-----|
+| 📖 完整文档站 | [www.youlai.tech/docs/admin](https://www.youlai.tech/docs/admin/) |
+| 🖥️ PC 端在线预览 | [vue.youlai.tech](https://vue.youlai.tech) |
+| 📱 移动端在线预览 | [app.youlai.tech](https://app.youlai.tech) |
+| 🔗 Apifox 接口文档 | [apifox.com](https://www.apifox.cn/apidoc/shared-195e783f-4d85-4235-a038-eec696de4ea5) |
+| 🔗 本地接口文档 | [localhost:8000/doc.html](http://localhost:8000/doc.html) |
-## 📊 项目统计
+## 参与贡献
-
-
-## 🤝 参与贡献
-
-欢迎 Issue、PR 和 Star!详见 [贡献指南](https://www.youlai.tech/docs/admin/faq/help)。
+欢迎提交 Issue 和 Pull Request!详见 [贡献指南](https://www.youlai.tech/docs/admin/faq/help)。
[](https://github.com/haoxianrui/youlai-boot/graphs/contributors)
-## 📄 开源协议
+## 开源协议
本项目基于 [Apache License 2.0](LICENSE) 开源,可免费用于商业项目。
---
-
-
-**关注「有来技术」,获取最新动态与技术分享**
-
-
-
-

-
-
-
-*微信搜索「有来技术」或扫码关注*
-
-
+
+
+
+
+
+
+ 公众号「有来技术」
+
+ 添加作者微信
+
+技术交流 · 问题反馈 · 商务合作
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 00000000..e69de29b
diff --git a/docs/images/architecture/architecture.png b/docs/images/architecture/architecture.png
new file mode 100644
index 00000000..fbd6a09f
Binary files /dev/null and b/docs/images/architecture/architecture.png differ
diff --git a/docs/images/logo/logo.png b/docs/images/logo/logo.png
new file mode 100644
index 00000000..fc8b31ef
Binary files /dev/null and b/docs/images/logo/logo.png differ
diff --git a/docs/images/preview/app-01.png b/docs/images/preview/app-01.png
new file mode 100644
index 00000000..bfb8b98a
Binary files /dev/null and b/docs/images/preview/app-01.png differ
diff --git a/docs/images/preview/app-02.png b/docs/images/preview/app-02.png
new file mode 100644
index 00000000..f781ee5e
Binary files /dev/null and b/docs/images/preview/app-02.png differ
diff --git a/docs/images/preview/app-03.png b/docs/images/preview/app-03.png
new file mode 100644
index 00000000..ba0a9f3d
Binary files /dev/null and b/docs/images/preview/app-03.png differ
diff --git a/docs/images/preview/app-04.png b/docs/images/preview/app-04.png
new file mode 100644
index 00000000..49dfebc1
Binary files /dev/null and b/docs/images/preview/app-04.png differ
diff --git a/docs/images/preview/pc-01.png b/docs/images/preview/pc-01.png
new file mode 100644
index 00000000..9a55511b
Binary files /dev/null and b/docs/images/preview/pc-01.png differ
diff --git a/docs/images/preview/pc-02.png b/docs/images/preview/pc-02.png
new file mode 100644
index 00000000..396b6b99
Binary files /dev/null and b/docs/images/preview/pc-02.png differ
diff --git a/docs/images/preview/pc-03.png b/docs/images/preview/pc-03.png
new file mode 100644
index 00000000..8e36c3ec
Binary files /dev/null and b/docs/images/preview/pc-03.png differ
diff --git a/docs/images/preview/pc-04.png b/docs/images/preview/pc-04.png
new file mode 100644
index 00000000..99e65803
Binary files /dev/null and b/docs/images/preview/pc-04.png differ
diff --git a/docs/images/preview/pc-05.png b/docs/images/preview/pc-05.png
new file mode 100644
index 00000000..acade2d2
Binary files /dev/null and b/docs/images/preview/pc-05.png differ
diff --git a/docs/images/preview/pc-06.png b/docs/images/preview/pc-06.png
new file mode 100644
index 00000000..9a479f36
Binary files /dev/null and b/docs/images/preview/pc-06.png differ
diff --git a/docs/images/qr/wechat-offical.png b/docs/images/qr/wechat-offical.png
new file mode 100644
index 00000000..406447c8
Binary files /dev/null and b/docs/images/qr/wechat-offical.png differ
diff --git a/docs/images/qr/wechat-personal.png b/docs/images/qr/wechat-personal.png
new file mode 100644
index 00000000..4539e721
Binary files /dev/null and b/docs/images/qr/wechat-personal.png differ
diff --git a/pom.xml b/pom.xml
index 7a6fd2fc..c844789d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,292 +7,125 @@
com.youlai
youlai-boot
4.3.0
- 基于 Java 17 + SpringBoot 4 + Spring Security 构建的权限管理系统。
+ pom
+ 有来 Boot - 基于 Spring Boot 4 的多模块权限管理系统
org.springframework.boot
spring-boot-starter-parent
- 4.0.1
+ 4.0.5
+
+ youlai-common
+ youlai-framework
+ youlai-system
+ youlai-auth
+ youlai-file
+ youlai-message
+ youlai-codegen
+ youlai-application
+
+
+ 17
17
17
+ UTF-8
5.8.41
-
9.1.0
1.2.24
-
3.5.15
- 4.3.1
-
- 4.5.0
-
- 1.6.3
- 0.2.0
-
- 3.2.0
-
- 1.3.0
-
-
- 8.5.10
- 4.8.1
-
- 3.16.3
-
-
- 4.1.0
-
-
3.5.6
2.3
-
-
+ 4.5.0
+ 1.6.3
+ 0.2.0
+ 3.2.0
+ 1.3.0
+ 8.5.10
+ 3.16.3
+ 4.1.0
2.7.0
-
-
4.7.6
2.2.1
-
2.9.3
-
-
2.14.5
-
4.8.1.B
-
-
+
+
+
+
+ com.youlai
+ youlai-common
+ ${project.version}
+
+
+ com.youlai
+ youlai-framework
+ ${project.version}
+
+
+ com.youlai
+ youlai-system
+ ${project.version}
+
+
+ com.youlai
+ youlai-auth
+ ${project.version}
+
+
+ com.youlai
+ youlai-file
+ ${project.version}
+
+
+ com.youlai
+ youlai-message
+ ${project.version}
+
+
+ com.youlai
+ youlai-codegen
+ ${project.version}
+
+
+
+
+
org.projectlombok
lombok
-
provided
-
cn.hutool
hutool-all
${hutool.version}
-
-
-
- com.alibaba
- transmittable-thread-local
- ${transmittable-thread-local.version}
-
-
-
org.projectlombok
lombok-mapstruct-binding
${lombok-mapstruct-binding.version}
provided
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
-
- org.springframework.boot
- spring-boot-starter-data-redis
-
-
-
- org.springframework.boot
- spring-boot-starter-cache
-
-
-
-
- org.springframework.boot
- spring-boot-starter-aspectj
-
-
-
- org.springframework.boot
- spring-boot-starter-validation
-
-
-
- org.springframework.boot
- spring-boot-starter-mail
-
-
-
- com.mysql
- mysql-connector-j
- ${mysql-connector-j.version}
- runtime
-
-
-
- com.alibaba
- druid-spring-boot-starter
- ${druid.version}
-
-
-
-
- com.baomidou
- mybatis-plus-spring-boot4-starter
- ${mybatis-plus.version}
-
-
- com.baomidou
- mybatis-plus-jsqlparser
- ${mybatis-plus.version}
-
-
-
-
- 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
-
-
-
-
- org.mapstruct
- mapstruct
- ${mapstruct.version}
-
-
-
- org.mapstruct
- mapstruct-processor
- ${mapstruct.version}
-
-
-
-
- com.xuxueli
- xxl-job-core
- ${xxl-job.version}
-
-
-
-
- cn.idev.excel
- fastexcel
- ${fastexcel.version}
-
-
-
-
- io.minio
- minio
- ${minio.version}
-
-
-
-
- com.aliyun.oss
- aliyun-sdk-oss
- ${aliyun-sdk-oss.version}
-
-
-
-
- org.redisson
- redisson-spring-boot-starter
- ${redisson.version}
-
-
-
-
- com.baomidou
- mybatis-plus-generator
- ${mybatis-plus-generator.version}
-
-
-
-
- org.apache.velocity
- velocity-engine-core
- ${velocity.version}
-
-
-
-
- org.lionsoul
- ip2region
- ${ip2region.version}
-
-
-
- com.aliyun
- aliyun-java-sdk-core
- ${aliyun.java.sdk.core.version}
-
-
-
- com.aliyun
- aliyun-java-sdk-dysmsapi
- ${aliyun.java.sdk.dysmsapi.version}
-
-
-
-
- com.github.ben-manes.caffeine
- caffeine
- ${caffeine.version}
-
-
-
-
- com.github.binarywang
- weixin-java-miniapp
- ${weixin-java-miniapp.version}
-
-
-
-
-
- ${project.artifactId}
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
diff --git a/sql/mysql/youlai_admin_template.sql b/sql/mysql/youlai_admin_template.sql
deleted file mode 100644
index 48db9455..00000000
--- a/sql/mysql/youlai_admin_template.sql
+++ /dev/null
@@ -1,524 +0,0 @@
-# YouLai_Admin 数据库(MySQL 5.7 ~ MySQL 8.x)
-# Copyright (c) 2021-present, youlai.tech
-
-
--- ----------------------------
--- 1. 创建数据库
--- ----------------------------
-CREATE DATABASE IF NOT EXISTS youlai_admin_template CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
-
-
--- ----------------------------
--- 2. 创建表 && 数据初始化
--- ----------------------------
-USE youlai_admin_template;
-
-SET NAMES utf8mb4; # 设置字符集
-SET FOREIGN_KEY_CHECKS = 0; # 关闭外键检查,加快导入速度
-
--- ----------------------------
--- Table structure for sys_dept
--- ----------------------------
-DROP TABLE IF EXISTS `sys_dept`;
-CREATE TABLE `sys_dept` (
- `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
- `name` varchar(100) NOT NULL COMMENT '部门名称',
- `code` varchar(100) NOT NULL COMMENT '部门编号',
- `parent_id` bigint DEFAULT 0 COMMENT '父节点id',
- `tree_path` varchar(255) NOT NULL COMMENT '父节点id路径',
- `sort` smallint DEFAULT 0 COMMENT '显示顺序',
- `status` tinyint DEFAULT 1 COMMENT '状态(1-正常 0-禁用)',
- `create_by` bigint NULL COMMENT '创建人ID',
- `create_time` datetime NULL COMMENT '创建时间',
- `update_by` bigint NULL COMMENT '修改人ID',
- `update_time` datetime NULL COMMENT '更新时间',
- `is_deleted` tinyint DEFAULT 0 COMMENT '逻辑删除标识(1-已删除 0-未删除)',
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_code`(`code` ASC) USING BTREE COMMENT '部门编号唯一索引'
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '部门管理表';
-
--- ----------------------------
--- Records of sys_dept
--- ----------------------------
-INSERT INTO `sys_dept` VALUES (1, '有来技术', 'YOULAI', 0, '0', 1, 1, 1, NULL, 1, now(), 0);
-INSERT INTO `sys_dept` VALUES (2, '研发部门', 'RD001', 1, '0,1', 1, 1, 2, NULL, 2, now(), 0);
-INSERT INTO `sys_dept` VALUES (3, '测试部门', 'QA001', 1, '0,1', 1, 1, 2, NULL, 2, now(), 0);
-
--- ----------------------------
--- Table structure for sys_dict
--- ----------------------------
-DROP TABLE IF EXISTS `sys_dict`;
-CREATE TABLE `sys_dict` (
- `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键 ',
- `dict_code` varchar(50) COMMENT '类型编码',
- `name` varchar(50) COMMENT '类型名称',
- `status` tinyint(1) DEFAULT '0' COMMENT '状态(0:正常;1:禁用)',
- `remark` varchar(255) COMMENT '备注',
- `create_time` datetime COMMENT '创建时间',
- `create_by` bigint COMMENT '创建人ID',
- `update_time` datetime COMMENT '更新时间',
- `update_by` bigint COMMENT '修改人ID',
- `is_deleted` tinyint DEFAULT '0' COMMENT '是否删除(1-删除,0-未删除)',
- PRIMARY KEY (`id`) USING BTREE,
- KEY `idx_dict_code` (`dict_code`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据字典类型表';
--- ----------------------------
--- Records of sys_dict
--- ----------------------------
-INSERT INTO `sys_dict` VALUES (1, 'gender', '性别', 1, NULL, now() , 1,now(), 1,0);
-INSERT INTO `sys_dict` VALUES (2, 'notice_type', '通知类型', 1, NULL, now(), 1,now(), 1,0);
-INSERT INTO `sys_dict` VALUES (3, 'notice_level', '通知级别', 1, NULL, now(), 1,now(), 1,0);
-
-
--- ----------------------------
--- Table structure for sys_dict_item
--- ----------------------------
-DROP TABLE IF EXISTS `sys_dict_item`;
-CREATE TABLE `sys_dict_item` (
- `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
- `dict_code` varchar(50) COMMENT '关联字典编码,与sys_dict表中的dict_code对应',
- `value` varchar(50) COMMENT '字典项值',
- `label` varchar(100) COMMENT '字典项标签',
- `tag_type` varchar(50) COMMENT '标签类型,用于前端样式展示(如success、warning等)',
- `status` tinyint DEFAULT '0' COMMENT '状态(1-正常,0-禁用)',
- `sort` int DEFAULT '0' COMMENT '排序',
- `remark` varchar(255) COMMENT '备注',
- `create_time` datetime COMMENT '创建时间',
- `create_by` bigint COMMENT '创建人ID',
- `update_time` datetime COMMENT '更新时间',
- `update_by` bigint COMMENT '修改人ID',
- PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='数据字典项表';
-
--- ----------------------------
--- Records of sys_dict_item
--- ----------------------------
-INSERT INTO `sys_dict_item` VALUES (1, 'gender', '1', '男', 'primary', 1, 1, NULL, now(), 1,now(),1);
-INSERT INTO `sys_dict_item` VALUES (2, 'gender', '2', '女', 'danger', 1, 2, NULL, now(), 1,now(),1);
-INSERT INTO `sys_dict_item` VALUES (3, 'gender', '0', '保密', 'info', 1, 3, NULL, now(), 1,now(),1);
-INSERT INTO `sys_dict_item` VALUES (4, 'notice_type', '1', '系统升级', 'success', 1, 1, '', now(), 1,now(),1);
-INSERT INTO `sys_dict_item` VALUES (5, 'notice_type', '2', '系统维护', 'primary', 1, 2, '', now(), 1,now(),1);
-INSERT INTO `sys_dict_item` VALUES (6, 'notice_type', '3', '安全警告', 'danger', 1, 3, '', now(), 1,now(),1);
-INSERT INTO `sys_dict_item` VALUES (7, 'notice_type', '4', '假期通知', 'success', 1, 4, '', now(), 1,now(),1);
-INSERT INTO `sys_dict_item` VALUES (8, 'notice_type', '5', '公司新闻', 'primary', 1, 5, '', now(), 1,now(),1);
-INSERT INTO `sys_dict_item` VALUES (9, 'notice_type', '99', '其他', 'info', 1, 99, '', now(), 1,now(),1);
-INSERT INTO `sys_dict_item` VALUES (10, 'notice_level', 'L', '低', 'info', 1, 1, '', now(), 1,now(),1);
-INSERT INTO `sys_dict_item` VALUES (11, 'notice_level', 'M', '中', 'warning', 1, 2, '', now(), 1,now(),1);
-INSERT INTO `sys_dict_item` VALUES (12, 'notice_level', 'H', '高', 'danger', 1, 3, '', now(), 1,now(),1);
-
--- ----------------------------
--- Table structure for sys_menu
--- ----------------------------
-DROP TABLE IF EXISTS `sys_menu`;
-CREATE TABLE `sys_menu` (
- `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
- `parent_id` bigint NOT NULL COMMENT '父菜单ID',
- `tree_path` varchar(255) COMMENT '父节点ID路径',
- `name` varchar(64) NOT NULL COMMENT '菜单名称',
- `type` char(1) NOT NULL COMMENT '菜单类型(C-目录 M-菜单 B-按钮)',
- `route_name` varchar(255) COMMENT '路由名称(Vue Router 中用于命名路由)',
- `route_path` varchar(128) COMMENT '路由路径(Vue Router 中定义的 URL 路径)',
- `component` varchar(128) COMMENT '组件路径(组件页面完整路径,相对于 src/views/,缺省后缀 .vue)',
- `perm` varchar(128) COMMENT '【按钮】权限标识',
- `always_show` tinyint DEFAULT 0 COMMENT '【目录】只有一个子路由是否始终显示(1-是 0-否)',
- `keep_alive` tinyint DEFAULT 0 COMMENT '【菜单】是否开启页面缓存(1-是 0-否)',
- `visible` tinyint(1) DEFAULT 1 COMMENT '显示状态(1-显示 0-隐藏)',
- `sort` int DEFAULT 0 COMMENT '排序',
- `icon` varchar(64) COMMENT '菜单图标',
- `redirect` varchar(128) COMMENT '跳转路径',
- `create_time` datetime NULL COMMENT '创建时间',
- `update_time` datetime NULL COMMENT '更新时间',
- `params` varchar(255) NULL COMMENT '路由参数',
- PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '系统菜单表';
-
--- ----------------------------
--- Records of sys_menu
--- ----------------------------
--- 顶级目录:系统管理/代码生成/平台文档/接口文档
-INSERT INTO `sys_menu` VALUES (1, 0, '0', '系统管理', 'C', '', '/system', 'Layout', NULL, NULL, NULL, 1, 1, 'system', '/system/user', now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2, 0, '0', '代码生成', 'C', '', '/codegen', 'Layout', NULL, NULL, NULL, 1, 2, 'code', '/codegen/index', now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (4, 0, '0', '平台文档', 'C', '', '/doc', 'Layout', NULL, NULL, NULL, 1, 4, 'document', '', now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (5, 0, '0', '接口文档', 'C', '', '/api', 'Layout', NULL, NULL, NULL, 1, 5, 'api', '', now(), now(), NULL);
-
--- 系统管理
-INSERT INTO `sys_menu` VALUES (210, 1, '0,1', '用户管理', 'M', 'User', 'user', 'system/user/index', NULL, NULL, 1, 1, 1, 'el-icon-User', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2101, 210, '0,1,210', '用户查询', 'B', NULL, '', NULL, 'sys:user:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2102, 210, '0,1,210', '用户新增', 'B', NULL, '', NULL, 'sys:user:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2103, 210, '0,1,210', '用户编辑', 'B', NULL, '', NULL, 'sys:user:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2104, 210, '0,1,210', '用户删除', 'B', NULL, '', NULL, 'sys:user:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2105, 210, '0,1,210', '重置密码', 'B', NULL, '', NULL, 'sys:user:reset-password', NULL, NULL, 1, 5, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2106, 210, '0,1,210', '用户导入', 'B', NULL, '', NULL, 'sys:user:import', NULL, NULL, 1, 6, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2107, 210, '0,1,210', '用户导出', 'B', NULL, '', NULL, 'sys:user:export', NULL, NULL, 1, 7, '', NULL, now(), now(), NULL);
-
-INSERT INTO `sys_menu` VALUES (220, 1, '0,1', '角色管理', 'M', 'Role', 'role', 'system/role/index', NULL, NULL, 1, 1, 2, 'role', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2201, 220, '0,1,220', '角色查询', 'B', NULL, '', NULL, 'sys:role:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2202, 220, '0,1,220', '角色新增', 'B', NULL, '', NULL, 'sys:role:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2203, 220, '0,1,220', '角色编辑', 'B', NULL, '', NULL, 'sys:role:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2204, 220, '0,1,220', '角色删除', 'B', NULL, '', NULL, 'sys:role:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2205, 220, '0,1,220', '角色分配权限', 'B', NULL, '', NULL, 'sys:role:assign', NULL, NULL, 1, 5, '', NULL, now(), now(), NULL);
-
-INSERT INTO `sys_menu` VALUES (230, 1, '0,1', '菜单管理', 'M', 'SysMenu', 'menu', 'system/menu/index', NULL, NULL, 1, 1, 3, 'menu', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2301, 230, '0,1,230', '菜单查询', 'B', NULL, '', NULL, 'sys:menu:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2302, 230, '0,1,230', '菜单新增', 'B', NULL, '', NULL, 'sys:menu:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2303, 230, '0,1,230', '菜单编辑', 'B', NULL, '', NULL, 'sys:menu:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2304, 230, '0,1,230', '菜单删除', 'B', NULL, '', NULL, 'sys:menu:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
-
-INSERT INTO `sys_menu` VALUES (240, 1, '0,1', '部门管理', 'M', 'Dept', 'dept', 'system/dept/index', NULL, NULL, 1, 1, 4, 'tree', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2401, 240, '0,1,240', '部门查询', 'B', NULL, '', NULL, 'sys:dept:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2402, 240, '0,1,240', '部门新增', 'B', NULL, '', NULL, 'sys:dept:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2403, 240, '0,1,240', '部门编辑', 'B', NULL, '', NULL, 'sys:dept:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2404, 240, '0,1,240', '部门删除', 'B', NULL, '', NULL, 'sys:dept:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
-
-INSERT INTO `sys_menu` VALUES (250, 1, '0,1', '字典管理', 'M', 'Dict', 'dict', 'system/dict/index', NULL, NULL, 1, 1, 5, 'dict', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2501, 250, '0,1,250', '字典查询', 'B', NULL, '', NULL, 'sys:dict:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2502, 250, '0,1,250', '字典新增', 'B', NULL, '', NULL, 'sys:dict:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2503, 250, '0,1,250', '字典编辑', 'B', NULL, '', NULL, 'sys:dict:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2504, 250, '0,1,250', '字典删除', 'B', NULL, '', NULL, 'sys:dict:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
-
-INSERT INTO `sys_menu` VALUES (251, 1, '0,1', '字典项', 'M', 'DictItem', 'dict-item', 'system/dict/dict-item', NULL, 0, 1, 0, 6, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2511, 251, '0,1,251', '字典项查询', 'B', NULL, '', NULL, 'sys:dict-item:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2512, 251, '0,1,251', '字典项新增', 'B', NULL, '', NULL, 'sys:dict-item:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2513, 251, '0,1,251', '字典项编辑', 'B', NULL, '', NULL, 'sys:dict-item:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2514, 251, '0,1,251', '字典项删除', 'B', NULL, '', NULL, 'sys:dict-item:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
-
-INSERT INTO `sys_menu` VALUES (260, 1, '0,1', '系统日志', 'M', 'Log', 'log', 'system/log/index', NULL, 0, 1, 1, 7, 'document', NULL, now(), now(), NULL);
-
-INSERT INTO `sys_menu` VALUES (270, 1, '0,1', '系统配置', 'M', 'Config', 'config', 'system/config/index', NULL, 0, 1, 1, 8, 'setting', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2701, 270, '0,1,270', '系统配置查询', 'B', NULL, '', NULL, 'sys:config:list', 0, 1, 1, 1, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2702, 270, '0,1,270', '系统配置新增', 'B', NULL, '', NULL, 'sys:config:create', 0, 1, 1, 2, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2703, 270, '0,1,270', '系统配置修改', 'B', NULL, '', NULL, 'sys:config:update', 0, 1, 1, 3, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2704, 270, '0,1,270', '系统配置删除', 'B', NULL, '', NULL, 'sys:config:delete', 0, 1, 1, 4, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2705, 270, '0,1,270', '系统配置刷新', 'B', NULL, '', NULL, 'sys:config:refresh', 0, 1, 1, 5, '', NULL, now(), now(), NULL);
-
-INSERT INTO `sys_menu` VALUES (280, 1, '0,1', '通知公告', 'M', 'Notice', 'notice', 'system/notice/index', NULL, NULL, NULL, 1, 9, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2801, 280, '0,1,280', '通知查询', 'B', NULL, '', NULL, 'sys:notice:list', NULL, NULL, 1, 1, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2802, 280, '0,1,280', '通知新增', 'B', NULL, '', NULL, 'sys:notice:create', NULL, NULL, 1, 2, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2803, 280, '0,1,280', '通知编辑', 'B', NULL, '', NULL, 'sys:notice:update', NULL, NULL, 1, 3, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2804, 280, '0,1,280', '通知删除', 'B', NULL, '', NULL, 'sys:notice:delete', NULL, NULL, 1, 4, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2805, 280, '0,1,280', '通知发布', 'B', NULL, '', NULL, 'sys:notice:publish', 0, 1, 1, 5, '', NULL, now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (2806, 280, '0,1,280', '通知撤回', 'B', NULL, '', NULL, 'sys:notice:revoke', 0, 1, 1, 6, '', NULL, now(), now(), NULL);
-
--- 代码生成
-INSERT INTO `sys_menu` VALUES (310, 2, '0,2', '代码生成', 'M', 'Codegen', 'codegen', 'codegen/index', NULL, NULL, 1, 1, 1, 'code', NULL, now(), now(), NULL);
-
--- 平台文档(外链通过 route_path 识别)
-INSERT INTO `sys_menu` VALUES (501, 4, '0,4', '平台文档(外链)', 'M', NULL, 'https://juejin.cn/post/7228990409909108793', '', NULL, NULL, NULL, 1, 1, 'document', '', now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (502, 4, '0,4', '后端文档', 'M', NULL, 'https://youlai.blog.csdn.net/article/details/145178880', '', NULL, NULL, NULL, 1, 2, 'document', '', now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (503, 4, '0,4', '移动端文档', 'M', NULL, 'https://youlai.blog.csdn.net/article/details/143222890', '', NULL, NULL, NULL, 1, 3, 'document', '', now(), now(), NULL);
-INSERT INTO `sys_menu` VALUES (504, 4, '0,4', '内部文档', 'M', NULL, 'internal-doc', 'demo/internal-doc', NULL, NULL, NULL, 1, 4, 'document', '', now(), now(), NULL);
-
--- 接口文档
-INSERT INTO `sys_menu` VALUES (601, 5, '0,5', 'Apifox', 'M', 'Apifox', 'apifox', 'demo/api/apifox', NULL, NULL, 1, 1, 1, 'api', '', now(), now(), NULL);
-
--- ----------------------------
--- Table structure for sys_role
--- ----------------------------
-DROP TABLE IF EXISTS `sys_role`;
-CREATE TABLE `sys_role` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `name` varchar(64) NOT NULL COMMENT '角色名称',
- `code` varchar(32) NOT NULL COMMENT '角色编码',
- `sort` int NULL COMMENT '显示顺序',
- `status` tinyint(1) DEFAULT 1 COMMENT '角色状态(1-正常 0-停用)',
- `data_scope` tinyint NULL COMMENT '数据权限(1-所有数据 2-部门及子部门数据 3-本部门数据 4-本人数据 5-自定义部门数据)',
- `create_by` bigint NULL COMMENT '创建人 ID',
- `create_time` datetime NULL COMMENT '创建时间',
- `update_by` bigint NULL COMMENT '更新人ID',
- `update_time` datetime NULL COMMENT '更新时间',
- `is_deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标识(0-未删除 1-已删除)',
- PRIMARY KEY (`id`) USING BTREE,
- UNIQUE INDEX `uk_name`(`name` ASC) USING BTREE COMMENT '角色名称唯一索引',
- UNIQUE INDEX `uk_code`(`code` ASC) USING BTREE COMMENT '角色编码唯一索引'
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '系统角色表';
-
--- ----------------------------
--- Records of sys_role
--- ----------------------------
-INSERT INTO `sys_role` VALUES (1, '超级管理员', 'ROOT', 1, 1, 1, NULL, now(), NULL, now(), 0);
-INSERT INTO `sys_role` VALUES (2, '系统管理员', 'ADMIN', 2, 1, 1, NULL, now(), NULL, NULL, 0);
-INSERT INTO `sys_role` VALUES (3, '访问游客', 'GUEST', 3, 1, 3, NULL, now(), NULL, now(), 0);
-INSERT INTO `sys_role` VALUES (4, '部门主管', 'DEPT_MANAGER', 4, 1, 2, NULL, now(), NULL, now(), 0);
-INSERT INTO `sys_role` VALUES (5, '部门成员', 'DEPT_MEMBER', 5, 1, 3, NULL, now(), NULL, now(), 0);
-INSERT INTO `sys_role` VALUES (6, '普通员工', 'EMPLOYEE', 6, 1, 4, NULL, now(), NULL, now(), 0);
-INSERT INTO `sys_role` VALUES (7, '自定义权限用户', 'CUSTOM_USER', 7, 1, 5, NULL, now(), NULL, now(), 0);
-
--- ----------------------------
--- Table structure for sys_role_menu
--- ----------------------------
-DROP TABLE IF EXISTS `sys_role_menu`;
-CREATE TABLE `sys_role_menu` (
- `role_id` bigint NOT NULL COMMENT '角色ID',
- `menu_id` bigint NOT NULL COMMENT '菜单ID',
- UNIQUE INDEX `uk_roleid_menuid`(`role_id` ASC, `menu_id` ASC) USING BTREE COMMENT '角色菜单唯一索引'
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '角色菜单关联表';
-
--- ----------------------------
--- Table structure for sys_role_dept
--- ----------------------------
-DROP TABLE IF EXISTS `sys_role_dept`;
-CREATE TABLE `sys_role_dept` (
- `role_id` bigint NOT NULL COMMENT '角色ID',
- `dept_id` bigint NOT NULL COMMENT '部门ID',
- UNIQUE INDEX `uk_roleid_deptid`(`role_id` ASC, `dept_id` ASC) USING BTREE COMMENT '角色部门唯一索引'
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '角色部门关联表';
-
--- ----------------------------
--- Records of sys_role_dept
--- ----------------------------
-INSERT IGNORE INTO `sys_role_dept` VALUES (7, 1);
-INSERT IGNORE INTO `sys_role_dept` VALUES (7, 2);
-
--- ============================================
--- 系统管理员角色菜单权限(role_id=2)
--- 顶级目录
-INSERT INTO `sys_role_menu` VALUES (2, 1), (2, 2), (2, 4), (2, 5);
--- 系统管理
-INSERT INTO `sys_role_menu` VALUES (2, 210), (2, 2101), (2, 2102), (2, 2103), (2, 2104), (2, 2105), (2, 2106), (2, 2107);
-INSERT INTO `sys_role_menu` VALUES (2, 220), (2, 2201), (2, 2202), (2, 2203), (2, 2204), (2, 2205);
-INSERT INTO `sys_role_menu` VALUES (2, 230), (2, 2301), (2, 2302), (2, 2303), (2, 2304);
-INSERT INTO `sys_role_menu` VALUES (2, 240), (2, 2401), (2, 2402), (2, 2403), (2, 2404);
-INSERT INTO `sys_role_menu` VALUES (2, 250), (2, 2501), (2, 2502), (2, 2503), (2, 2504);
-INSERT INTO `sys_role_menu` VALUES (2, 251), (2, 2511), (2, 2512), (2, 2513), (2, 2514);
-INSERT INTO `sys_role_menu` VALUES (2, 260), (2, 2601);
-INSERT INTO `sys_role_menu` VALUES (2, 270), (2, 2701), (2, 2702), (2, 2703), (2, 2704), (2, 2705);
-INSERT INTO `sys_role_menu` VALUES (2, 280), (2, 2801), (2, 2802), (2, 2803), (2, 2804), (2, 2805), (2, 2806);
-
-INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1);
-INSERT IGNORE INTO `sys_role_menu` VALUES (4, 210), (4, 2101), (4, 2102), (4, 2103), (4, 2104), (4, 2105), (4, 2106), (4, 2107);
-INSERT IGNORE INTO `sys_role_menu` VALUES (4, 220), (4, 2201), (4, 2202), (4, 2203), (4, 2204), (4, 2205);
-
-INSERT IGNORE INTO `sys_role_menu` VALUES (5, 1);
-INSERT IGNORE INTO `sys_role_menu` VALUES (5, 210), (5, 2101), (5, 2102), (5, 2103), (5, 2104), (5, 2105), (5, 2106), (5, 2107);
-INSERT IGNORE INTO `sys_role_menu` VALUES (5, 220), (5, 2201), (5, 2202), (5, 2203), (5, 2204), (5, 2205);
-
-INSERT IGNORE INTO `sys_role_menu` VALUES (6, 1);
-INSERT IGNORE INTO `sys_role_menu` VALUES (6, 210), (6, 2101), (6, 2102), (6, 2103), (6, 2104), (6, 2105), (6, 2106), (6, 2107);
-INSERT IGNORE INTO `sys_role_menu` VALUES (6, 220), (6, 2201), (6, 2202), (6, 2203), (6, 2204), (6, 2205);
-
-INSERT IGNORE INTO `sys_role_menu` VALUES (7, 1);
-INSERT IGNORE INTO `sys_role_menu` VALUES (7, 210), (7, 2101), (7, 2102), (7, 2103), (7, 2104), (7, 2105), (7, 2106), (7, 2107);
-INSERT IGNORE INTO `sys_role_menu` VALUES (7, 220), (7, 2201), (7, 2202), (7, 2203), (7, 2204), (7, 2205);
--- 代码生成
-INSERT INTO `sys_role_menu` VALUES (2, 310);
--- 平台文档
-INSERT INTO `sys_role_menu` VALUES (2, 501), (2, 502), (2, 503), (2, 504);
--- 接口文档
-INSERT INTO `sys_role_menu` VALUES (2, 601);
-
--- ----------------------------
--- Table structure for sys_user
--- ----------------------------
-DROP TABLE IF EXISTS `sys_user`;
-CREATE TABLE `sys_user` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `username` varchar(64) COMMENT '用户名',
- `nickname` varchar(64) COMMENT '昵称',
- `gender` tinyint(1) DEFAULT 1 COMMENT '性别((1-男 2-女 0-保密)',
- `password` varchar(100) COMMENT '密码',
- `dept_id` int COMMENT '部门ID',
- `avatar` varchar(255) COMMENT '用户头像',
- `mobile` varchar(20) COMMENT '联系方式',
- `status` tinyint(1) DEFAULT 1 COMMENT '状态(1-正常 0-禁用)',
- `email` varchar(128) COMMENT '用户邮箱',
- `create_time` datetime COMMENT '创建时间',
- `create_by` bigint COMMENT '创建人ID',
- `update_time` datetime COMMENT '更新时间',
- `update_by` bigint COMMENT '修改人ID',
- `is_deleted` tinyint(1) DEFAULT 0 COMMENT '逻辑删除标识(0-未删除 1-已删除)',
- PRIMARY KEY (`id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '系统用户表';
-
--- ----------------------------
--- Records of sys_user
--- ----------------------------
-INSERT INTO `sys_user` VALUES (1, 'root', '有来技术', 0, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', NULL, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345677', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0);
-INSERT INTO `sys_user` VALUES (2, 'admin', '系统管理员', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 1, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18888888888', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0);
-INSERT INTO `sys_user` VALUES (3, 'test', '测试小用户', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 3, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345679', 1, 'youlaitech@163.com', now(), NULL, now(), NULL, 0);
-INSERT INTO `sys_user` VALUES (4, 'dept_manager', '部门主管', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 1, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345680', 1, 'manager@youlaitech.com', now(), NULL, now(), NULL, 0);
-INSERT INTO `sys_user` VALUES (5, 'dept_member', '部门成员', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 1, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345681', 1, 'member@youlaitech.com', now(), NULL, now(), NULL, 0);
-INSERT INTO `sys_user` VALUES (6, 'employee', '普通员工', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 2, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345682', 1, 'employee@youlaitech.com', now(), NULL, now(), NULL, 0);
-INSERT INTO `sys_user` VALUES (7, 'custom_user', '自定义权限用户', 1, '$2a$10$xVWsNOhHrCxh5UbpCE7/HuJ.PAOKcYAqRxD2CO2nVnJS.IAXkr5aq', 3, 'https://foruda.gitee.com/images/1723603502796844527/03cdca2a_716974.gif', '18812345683', 1, 'custom@youlaitech.com', now(), NULL, now(), NULL, 0);
-
--- ----------------------------
--- Table structure for sys_user_role
--- ----------------------------
-DROP TABLE IF EXISTS `sys_user_role`;
-CREATE TABLE `sys_user_role` (
- `user_id` bigint NOT NULL COMMENT '用户ID',
- `role_id` bigint NOT NULL COMMENT '角色ID',
- PRIMARY KEY (`user_id`, `role_id`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8mb4 COMMENT = '用户角色关联表';
-
--- ----------------------------
--- Records of sys_user_role
--- ----------------------------
-INSERT INTO `sys_user_role` VALUES (1, 1);
-INSERT INTO `sys_user_role` VALUES (2, 2);
-INSERT INTO `sys_user_role` VALUES (3, 3);
-INSERT IGNORE INTO `sys_user_role` VALUES (4, 4);
-INSERT IGNORE INTO `sys_user_role` VALUES (5, 5);
-INSERT IGNORE INTO `sys_user_role` VALUES (6, 6);
-INSERT IGNORE INTO `sys_user_role` VALUES (7, 7);
-
--- ----------------------------
--- Table structure for sys_log
--- ----------------------------
-DROP TABLE IF EXISTS `sys_log`;
-CREATE TABLE `sys_log` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
- `module` TINYINT NOT NULL COMMENT '模块,数字枚举,参考 LogModule 枚举',
- `action_type` TINYINT NOT NULL COMMENT '操作类型,数字枚举,参考 ActionType 枚举',
- `title` VARCHAR(100) NOT NULL COMMENT '前端显示标题',
- `content` TEXT COMMENT '自定义日志内容',
- `operator_id` BIGINT COMMENT '操作人ID',
- `operator_name` VARCHAR(50) COMMENT '操作人名称',
- `request_uri` VARCHAR(255) COMMENT '请求路径',
- `request_method` VARCHAR(10) COMMENT '请求方法',
- `ip` VARCHAR(45) COMMENT 'IP地址',
- `province` VARCHAR(100) COMMENT '省份',
- `city` VARCHAR(100) COMMENT '城市',
- `device` VARCHAR(100) COMMENT '设备',
- `os` VARCHAR(100) COMMENT '操作系统',
- `browser` VARCHAR(100) COMMENT '浏览器',
- `status` TINYINT DEFAULT 1 COMMENT '0失败 1成功',
- `error_msg` VARCHAR(255) COMMENT '错误信息',
- `execution_time` INT COMMENT '执行时间(ms)',
- `create_time` DATETIME COMMENT '操作时间',
- PRIMARY KEY (`id`) USING BTREE,
- KEY `idx_module_action_time` (`module`, `action_type`, `create_time`),
- KEY `idx_operator_time` (`operator_id`, `create_time`),
- KEY `idx_time` (`create_time`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统操作日志表';
-
--- ----------------------------
--- Table structure for gen_table
--- ----------------------------
-DROP TABLE IF EXISTS `gen_table`;
-CREATE TABLE `gen_table` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `table_name` varchar(100) NOT NULL COMMENT '表名',
- `module_name` varchar(100) COMMENT '模块名',
- `package_name` varchar(255) NOT NULL COMMENT '包名',
- `business_name` varchar(100) NOT NULL COMMENT '业务名',
- `entity_name` varchar(100) NOT NULL COMMENT '实体类名',
- `author` varchar(50) NOT NULL COMMENT '作者',
- `parent_menu_id` bigint COMMENT '上级菜单ID,对应sys_menu的id ',
- `remove_table_prefix` varchar(20) COMMENT '要移除的表前缀,如: sys_',
- `page_type` varchar(20) COMMENT '页面类型(classic|curd)',
- `create_time` datetime COMMENT '创建时间',
- `update_time` datetime COMMENT '更新时间',
- `is_deleted` tinyint(4) DEFAULT 0 COMMENT '是否删除',
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_tablename` (`table_name`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成配置表';
-
--- ----------------------------
--- Table structure for gen_table_column
--- ----------------------------
-DROP TABLE IF EXISTS `gen_table_column`;
-CREATE TABLE `gen_table_column` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `table_id` bigint NOT NULL COMMENT '关联的表配置ID',
- `column_name` varchar(100) ,
- `column_type` varchar(50) ,
- `column_length` int ,
- `field_name` varchar(100) NOT NULL COMMENT '字段名称',
- `field_type` varchar(100) COMMENT '字段类型',
- `field_sort` int COMMENT '字段排序',
- `field_comment` varchar(255) COMMENT '字段描述',
- `max_length` int ,
- `is_required` tinyint(1) COMMENT '是否必填',
- `is_show_in_list` tinyint(1) DEFAULT '0' COMMENT '是否在列表显示',
- `is_show_in_form` tinyint(1) DEFAULT '0' COMMENT '是否在表单显示',
- `is_show_in_query` tinyint(1) DEFAULT '0' COMMENT '是否在查询条件显示',
- `query_type` tinyint COMMENT '查询方式',
- `form_type` tinyint COMMENT '表单类型',
- `dict_type` varchar(50) COMMENT '字典类型',
- `create_time` datetime COMMENT '创建时间',
- `update_time` datetime COMMENT '更新时间',
- PRIMARY KEY (`id`),
- KEY `idx_table_id` (`table_id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='代码生成字段配置表';
-
--- ----------------------------
--- 系统配置表
--- ----------------------------
-DROP TABLE IF EXISTS `sys_config`;
-CREATE TABLE `sys_config` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `config_name` varchar(50) NOT NULL COMMENT '配置名称',
- `config_key` varchar(50) NOT NULL COMMENT '配置key',
- `config_value` varchar(100) NOT NULL COMMENT '配置值',
- `remark` varchar(255) COMMENT '备注',
- `create_time` datetime COMMENT '创建时间',
- `create_by` bigint COMMENT '创建人ID',
- `update_time` datetime COMMENT '更新时间',
- `update_by` bigint COMMENT '更新人ID',
- `is_deleted` tinyint(4) DEFAULT '0' NOT NULL COMMENT '逻辑删除标识(0-未删除 1-已删除)',
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB COMMENT='系统配置表';
-
-INSERT INTO `sys_config` VALUES (1, '系统限流QPS', 'IP_QPS_THRESHOLD_LIMIT', '10', '单个IP请求的最大每秒查询数(QPS)阈值Key', now(), 1, NULL, NULL, 0);
-
--- ----------------------------
--- 通知公告表
--- ----------------------------
-DROP TABLE IF EXISTS `sys_notice`;
-CREATE TABLE `sys_notice` (
- `id` bigint NOT NULL AUTO_INCREMENT,
- `title` varchar(50) COMMENT '通知标题',
- `content` text COMMENT '通知内容',
- `type` tinyint NOT NULL COMMENT '通知类型(关联字典编码:notice_type)',
- `level` varchar(5) NOT NULL COMMENT '通知等级(字典code:notice_level)',
- `target_type` tinyint NOT NULL COMMENT '目标类型(1: 全体, 2: 指定)',
- `target_user_ids` varchar(255) COMMENT '目标人ID集合(多个使用英文逗号,分割)',
- `publisher_id` bigint COMMENT '发布人ID',
- `publish_status` tinyint DEFAULT '0' COMMENT '发布状态(0: 未发布, 1: 已发布, -1: 已撤回)',
- `publish_time` datetime COMMENT '发布时间',
- `revoke_time` datetime COMMENT '撤回时间',
- `create_by` bigint NOT NULL COMMENT '创建人ID',
- `create_time` datetime NOT NULL COMMENT '创建时间',
- `update_by` bigint COMMENT '更新人ID',
- `update_time` datetime COMMENT '更新时间',
- `is_deleted` tinyint(1) DEFAULT '0' COMMENT '是否删除(0: 未删除, 1: 已删除)',
- PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统通知公告表';
-
-INSERT INTO `sys_notice` VALUES (1, 'v3.0.0 版本发布 - 多租户功能上线', '🎉 新版本发布,主要更新内容:
1. 新增多租户功能,支持租户隔离和数据管理
2. 优化系统性能,提升响应速度
3. 完善权限管理,增强安全性
4. 修复已知问题,提升系统稳定性
', 1, 'H', 1, NULL, 1, 1, '2024-12-15 10:00:00', NULL, 1, '2024-12-15 10:00:00', 1, '2024-12-15 10:00:00', 0);
-INSERT INTO `sys_notice` VALUES (2, '系统维护通知 - 2024年12月20日', '⏰ 系统维护通知
系统将于 2024年12月20日(本周五)凌晨 2:00-4:00 进行例行维护升级。
维护期间系统将暂停服务,请提前做好数据备份工作。
给您带来的不便,敬请谅解!
', 2, 'H', 1, NULL, 1, 1, '2024-12-18 14:30:00', NULL, 1, '2024-12-18 14:30:00', 1, '2024-12-18 14:30:00', 0);
-INSERT INTO `sys_notice` VALUES (3, '安全提醒 - 防范钓鱼邮件', '⚠️ 安全提醒
近期发现有不法分子通过钓鱼邮件进行网络攻击,请大家提高警惕:
1. 不要点击来源不明的邮件链接
2. 不要下载可疑附件
3. 遇到可疑邮件请及时联系IT部门
4. 定期修改密码,使用强密码策略
', 3, 'H', 1, NULL, 1, 1, '2024-12-10 09:00:00', NULL, 1, '2024-12-10 09:00:00', 1, '2024-12-10 09:00:00', 0);
-INSERT INTO `sys_notice` VALUES (4, '元旦假期安排通知', '📅 元旦假期安排
根据国家法定节假日安排,公司元旦假期时间为:
2024年12月30日(周一)至 2025年1月1日(周三),共3天。
2024年12月29日(周日)正常上班。
祝大家元旦快乐,假期愉快!
', 4, 'M', 1, NULL, 1, 1, '2024-12-25 16:00:00', NULL, 1, '2024-12-25 16:00:00', 1, '2024-12-25 16:00:00', 0);
-INSERT INTO `sys_notice` VALUES (5, '新产品发布会邀请', '🎊 新产品发布会邀请
公司将于 2025年1月15日下午14:00 在总部会议室举办新产品发布会。
届时将展示最新研发的产品和技术成果,欢迎全体员工参加。
请各部门提前安排好工作,准时参加。
', 5, 'M', 1, NULL, 1, 1, '2024-12-28 11:00:00', NULL, 1, '2024-12-28 11:00:00', 1, '2024-12-28 11:00:00', 0);
-INSERT INTO `sys_notice` VALUES (6, 'v2.16.1 版本更新', '✨ 版本更新
v2.16.1 版本已发布,主要修复内容:
1. 修复 WebSocket 重复连接导致的后台线程阻塞问题
2. 优化通知公告功能,提升用户体验
3. 修复部分已知bug
建议尽快更新到最新版本。
', 1, 'M', 1, NULL, 1, 1, '2024-12-05 15:30:00', NULL, 1, '2024-12-05 15:30:00', 1, '2024-12-05 15:30:00', 0);
-INSERT INTO `sys_notice` VALUES (7, '年终总结会议通知', '📋 年终总结会议通知
各部门年终总结会议将于 2024年12月30日上午9:00 召开。
请各部门负责人提前准备好年度工作总结和下年度工作计划。
会议地点:总部大会议室
', 5, 'M', 2, '1,2', 1, 1, '2024-12-22 10:00:00', NULL, 1, '2024-12-22 10:00:00', 1, '2024-12-22 10:00:00', 0);
-INSERT INTO `sys_notice` VALUES (8, '系统功能优化完成', '✅ 系统功能优化
已完成以下功能优化:
1. 优化用户管理界面,提升操作体验
2. 增强数据导出功能,支持更多格式
3. 优化搜索功能,提升查询效率
4. 修复部分界面显示问题
', 1, 'L', 1, NULL, 1, 1, '2024-12-12 14:20:00', NULL, 1, '2024-12-12 14:20:00', 1, '2024-12-12 14:20:00', 0);
-INSERT INTO `sys_notice` VALUES (9, '员工培训计划', '📚 员工培训计划
为提升员工专业技能,公司将于 2025年1月8日-10日 组织技术培训。
培训内容:
1. 新技术框架应用
2. 代码规范与最佳实践
3. 系统架构设计
请各部门合理安排工作,确保培训顺利进行。
', 5, 'M', 1, NULL, 1, 1, '2024-12-20 09:30:00', NULL, 1, '2024-12-20 09:30:00', 1, '2024-12-20 09:30:00', 0);
-INSERT INTO `sys_notice` VALUES (10, '数据备份提醒', '💾 数据备份提醒
请各部门注意定期备份重要数据,建议每周至少备份一次。
备份方式:
1. 使用系统自带备份功能
2. 手动导出重要数据
3. 联系IT部门协助备份
数据安全,人人有责!
', 3, 'L', 1, NULL, 1, 1, '2024-12-08 08:00:00', NULL, 1, '2024-12-08 08:00:00', 1, '2024-12-08 08:00:00', 0);
-
--- ----------------------------
--- 用户通知公告表
--- ----------------------------
-DROP TABLE IF EXISTS `sys_user_notice`;
-CREATE TABLE `sys_user_notice` (
- `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
- `notice_id` bigint NOT NULL COMMENT '公共通知id',
- `user_id` bigint NOT NULL COMMENT '用户id',
- `is_read` bigint DEFAULT '0' COMMENT '读取状态(0: 未读, 1: 已读)',
- `read_time` datetime COMMENT '阅读时间',
- `create_time` datetime NOT NULL COMMENT '创建时间',
- `update_time` datetime COMMENT '更新时间',
- `is_deleted` tinyint DEFAULT '0' COMMENT '逻辑删除(0: 未删除, 1: 已删除)',
- PRIMARY KEY (`id`) USING BTREE
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户通知公告关联表';
-
-INSERT INTO `sys_user_notice` VALUES (1, 1, 2, 1, NULL, now(), now(), 0);
-INSERT INTO `sys_user_notice` VALUES (2, 2, 2, 1, NULL, now(), now(), 0);
-INSERT INTO `sys_user_notice` VALUES (3, 3, 2, 1, NULL, now(), now(), 0);
-INSERT INTO `sys_user_notice` VALUES (4, 4, 2, 1, NULL, now(), now(), 0);
-INSERT INTO `sys_user_notice` VALUES (5, 5, 2, 1, NULL, now(), now(), 0);
-INSERT INTO `sys_user_notice` VALUES (6, 6, 2, 1, NULL, now(), now(), 0);
-INSERT INTO `sys_user_notice` VALUES (7, 7, 2, 1, NULL, now(), now(), 0);
-INSERT INTO `sys_user_notice` VALUES (8, 8, 2, 1, NULL, now(), now(), 0);
-INSERT INTO `sys_user_notice` VALUES (9, 9, 2, 1, NULL, now(), now(), 0);
-INSERT INTO `sys_user_notice` VALUES (10, 10, 2, 1, NULL, now(), now(), 0);
diff --git a/sql/mysql/youlai_admin.sql b/sql/youlai_admin.sql
similarity index 100%
rename from sql/mysql/youlai_admin.sql
rename to sql/youlai_admin.sql
diff --git a/youlai-application/pom.xml b/youlai-application/pom.xml
new file mode 100644
index 00000000..ca4b043f
--- /dev/null
+++ b/youlai-application/pom.xml
@@ -0,0 +1,61 @@
+
+
+ 4.0.0
+
+
+ com.youlai
+ youlai-boot
+ 4.3.0
+
+
+ youlai-application
+ 启动打包模块 - 唯一包含启动类
+
+
+
+ com.youlai
+ youlai-system
+
+
+ com.youlai
+ youlai-auth
+
+
+ com.youlai
+ youlai-file
+
+
+ com.youlai
+ youlai-message
+
+
+ com.youlai
+ youlai-codegen
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+ ${project.artifactId}
+
+
+ src/main/resources
+ true
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/src/main/java/com/youlai/boot/YouLaiBootApplication.java b/youlai-application/src/main/java/com/youlai/boot/YouLaiBootApplication.java
similarity index 82%
rename from src/main/java/com/youlai/boot/YouLaiBootApplication.java
rename to youlai-application/src/main/java/com/youlai/boot/YouLaiBootApplication.java
index 6c44e203..a40fcaaa 100644
--- a/src/main/java/com/youlai/boot/YouLaiBootApplication.java
+++ b/youlai-application/src/main/java/com/youlai/boot/YouLaiBootApplication.java
@@ -2,6 +2,7 @@ package com.youlai.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
/**
* 应用启动类
@@ -9,6 +10,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
* @author Ray.Hao
* @since 0.0.1
*/
+@EnableScheduling
@SpringBootApplication
public class YouLaiBootApplication {
diff --git a/src/main/resources/application-dev.yml b/youlai-application/src/main/resources/application-dev.yml
similarity index 99%
rename from src/main/resources/application-dev.yml
rename to youlai-application/src/main/resources/application-dev.yml
index a8ddba0c..f4e55e74 100644
--- a/src/main/resources/application-dev.yml
+++ b/youlai-application/src/main/resources/application-dev.yml
@@ -94,6 +94,7 @@ security:
- /v3/api-docs/**
- /webjars/**
- /favicon.ico
+ - /error
# 文件存储配置
oss:
diff --git a/src/main/resources/application-prod.yml b/youlai-application/src/main/resources/application-prod.yml
similarity index 99%
rename from src/main/resources/application-prod.yml
rename to youlai-application/src/main/resources/application-prod.yml
index d3d3fa06..d1bc7ff1 100644
--- a/src/main/resources/application-prod.yml
+++ b/youlai-application/src/main/resources/application-prod.yml
@@ -93,6 +93,7 @@ security:
- /v3/api-docs/**
- /webjars/**
- /favicon.ico
+ - /error
# 文件存储配置
oss:
diff --git a/src/main/resources/application.yml b/youlai-application/src/main/resources/application.yml
similarity index 100%
rename from src/main/resources/application.yml
rename to youlai-application/src/main/resources/application.yml
diff --git a/src/main/resources/banner.txt b/youlai-application/src/main/resources/banner.txt
similarity index 100%
rename from src/main/resources/banner.txt
rename to youlai-application/src/main/resources/banner.txt
diff --git a/src/main/resources/data/ip2region.xdb b/youlai-application/src/main/resources/data/ip2region.xdb
similarity index 100%
rename from src/main/resources/data/ip2region.xdb
rename to youlai-application/src/main/resources/data/ip2region.xdb
diff --git a/src/main/resources/logback-spring.xml b/youlai-application/src/main/resources/logback-spring.xml
similarity index 100%
rename from src/main/resources/logback-spring.xml
rename to youlai-application/src/main/resources/logback-spring.xml
diff --git a/src/test/java/com/youlai/boot/generator/SystemCodeGenerator.java b/youlai-application/src/test/java/com/youlai/boot/generator/SystemCodeGenerator.java
similarity index 100%
rename from src/test/java/com/youlai/boot/generator/SystemCodeGenerator.java
rename to youlai-application/src/test/java/com/youlai/boot/generator/SystemCodeGenerator.java
diff --git a/src/test/java/com/youlai/boot/security/token/JwtTokenManagerTest.java b/youlai-application/src/test/java/com/youlai/boot/security/token/JwtTokenManagerTest.java
similarity index 100%
rename from src/test/java/com/youlai/boot/security/token/JwtTokenManagerTest.java
rename to youlai-application/src/test/java/com/youlai/boot/security/token/JwtTokenManagerTest.java
diff --git a/src/test/resources/templates/bo.java.vm b/youlai-application/src/test/resources/templates/bo.java.vm
similarity index 100%
rename from src/test/resources/templates/bo.java.vm
rename to youlai-application/src/test/resources/templates/bo.java.vm
diff --git a/src/test/resources/templates/controller.java.vm b/youlai-application/src/test/resources/templates/controller.java.vm
similarity index 100%
rename from src/test/resources/templates/controller.java.vm
rename to youlai-application/src/test/resources/templates/controller.java.vm
diff --git a/src/test/resources/templates/converter.java.vm b/youlai-application/src/test/resources/templates/converter.java.vm
similarity index 100%
rename from src/test/resources/templates/converter.java.vm
rename to youlai-application/src/test/resources/templates/converter.java.vm
diff --git a/src/test/resources/templates/dto.java.vm b/youlai-application/src/test/resources/templates/dto.java.vm
similarity index 100%
rename from src/test/resources/templates/dto.java.vm
rename to youlai-application/src/test/resources/templates/dto.java.vm
diff --git a/src/test/resources/templates/entity.java.vm b/youlai-application/src/test/resources/templates/entity.java.vm
similarity index 100%
rename from src/test/resources/templates/entity.java.vm
rename to youlai-application/src/test/resources/templates/entity.java.vm
diff --git a/src/test/resources/templates/form.java.vm b/youlai-application/src/test/resources/templates/form.java.vm
similarity index 100%
rename from src/test/resources/templates/form.java.vm
rename to youlai-application/src/test/resources/templates/form.java.vm
diff --git a/src/test/resources/templates/mapper.java.vm b/youlai-application/src/test/resources/templates/mapper.java.vm
similarity index 100%
rename from src/test/resources/templates/mapper.java.vm
rename to youlai-application/src/test/resources/templates/mapper.java.vm
diff --git a/src/test/resources/templates/mapper.xml.vm b/youlai-application/src/test/resources/templates/mapper.xml.vm
similarity index 100%
rename from src/test/resources/templates/mapper.xml.vm
rename to youlai-application/src/test/resources/templates/mapper.xml.vm
diff --git a/src/test/resources/templates/pageQuery.java.vm b/youlai-application/src/test/resources/templates/pageQuery.java.vm
similarity index 100%
rename from src/test/resources/templates/pageQuery.java.vm
rename to youlai-application/src/test/resources/templates/pageQuery.java.vm
diff --git a/src/test/resources/templates/pageVo.java.vm b/youlai-application/src/test/resources/templates/pageVo.java.vm
similarity index 100%
rename from src/test/resources/templates/pageVo.java.vm
rename to youlai-application/src/test/resources/templates/pageVo.java.vm
diff --git a/src/test/resources/templates/service.java.vm b/youlai-application/src/test/resources/templates/service.java.vm
similarity index 100%
rename from src/test/resources/templates/service.java.vm
rename to youlai-application/src/test/resources/templates/service.java.vm
diff --git a/src/test/resources/templates/serviceImpl.java.vm b/youlai-application/src/test/resources/templates/serviceImpl.java.vm
similarity index 100%
rename from src/test/resources/templates/serviceImpl.java.vm
rename to youlai-application/src/test/resources/templates/serviceImpl.java.vm
diff --git a/src/test/resources/templates/vo.java.vm b/youlai-application/src/test/resources/templates/vo.java.vm
similarity index 100%
rename from src/test/resources/templates/vo.java.vm
rename to youlai-application/src/test/resources/templates/vo.java.vm
diff --git a/youlai-auth/pom.xml b/youlai-auth/pom.xml
new file mode 100644
index 00000000..ea3179d8
--- /dev/null
+++ b/youlai-auth/pom.xml
@@ -0,0 +1,38 @@
+
+
+ 4.0.0
+
+
+ com.youlai
+ youlai-boot
+ 4.3.0
+
+
+ youlai-auth
+ 认证授权模块 - 登录、登出、令牌管理、第三方登录
+
+
+
+ com.youlai
+ youlai-common
+
+
+ com.youlai
+ youlai-framework
+
+
+ com.youlai
+ youlai-system
+
+
+
+
+ com.github.binarywang
+ weixin-java-miniapp
+ ${weixin-java-miniapp.version}
+
+
+
+
diff --git a/src/main/java/com/youlai/boot/auth/controller/AuthController.java b/youlai-auth/src/main/java/com/youlai/boot/auth/controller/AuthController.java
similarity index 100%
rename from src/main/java/com/youlai/boot/auth/controller/AuthController.java
rename to youlai-auth/src/main/java/com/youlai/boot/auth/controller/AuthController.java
diff --git a/src/main/java/com/youlai/boot/auth/controller/WxMaAuthController.java b/youlai-auth/src/main/java/com/youlai/boot/auth/controller/WxMaAuthController.java
similarity index 100%
rename from src/main/java/com/youlai/boot/auth/controller/WxMaAuthController.java
rename to youlai-auth/src/main/java/com/youlai/boot/auth/controller/WxMaAuthController.java
diff --git a/src/main/java/com/youlai/boot/auth/model/LoginReq.java b/youlai-auth/src/main/java/com/youlai/boot/auth/model/LoginReq.java
similarity index 100%
rename from src/main/java/com/youlai/boot/auth/model/LoginReq.java
rename to youlai-auth/src/main/java/com/youlai/boot/auth/model/LoginReq.java
diff --git a/src/main/java/com/youlai/boot/auth/model/WxMaBindMobileReq.java b/youlai-auth/src/main/java/com/youlai/boot/auth/model/WxMaBindMobileReq.java
similarity index 100%
rename from src/main/java/com/youlai/boot/auth/model/WxMaBindMobileReq.java
rename to youlai-auth/src/main/java/com/youlai/boot/auth/model/WxMaBindMobileReq.java
diff --git a/src/main/java/com/youlai/boot/auth/model/WxMaLoginResp.java b/youlai-auth/src/main/java/com/youlai/boot/auth/model/WxMaLoginResp.java
similarity index 100%
rename from src/main/java/com/youlai/boot/auth/model/WxMaLoginResp.java
rename to youlai-auth/src/main/java/com/youlai/boot/auth/model/WxMaLoginResp.java
diff --git a/src/main/java/com/youlai/boot/auth/model/WxMaPhoneLoginReq.java b/youlai-auth/src/main/java/com/youlai/boot/auth/model/WxMaPhoneLoginReq.java
similarity index 100%
rename from src/main/java/com/youlai/boot/auth/model/WxMaPhoneLoginReq.java
rename to youlai-auth/src/main/java/com/youlai/boot/auth/model/WxMaPhoneLoginReq.java
diff --git a/src/main/java/com/youlai/boot/auth/service/AuthService.java b/youlai-auth/src/main/java/com/youlai/boot/auth/service/AuthService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/auth/service/AuthService.java
rename to youlai-auth/src/main/java/com/youlai/boot/auth/service/AuthService.java
diff --git a/src/main/java/com/youlai/boot/auth/service/WxMaAuthService.java b/youlai-auth/src/main/java/com/youlai/boot/auth/service/WxMaAuthService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/auth/service/WxMaAuthService.java
rename to youlai-auth/src/main/java/com/youlai/boot/auth/service/WxMaAuthService.java
diff --git a/src/main/java/com/youlai/boot/auth/service/impl/AuthServiceImpl.java b/youlai-auth/src/main/java/com/youlai/boot/auth/service/impl/AuthServiceImpl.java
similarity index 100%
rename from src/main/java/com/youlai/boot/auth/service/impl/AuthServiceImpl.java
rename to youlai-auth/src/main/java/com/youlai/boot/auth/service/impl/AuthServiceImpl.java
diff --git a/src/main/java/com/youlai/boot/auth/service/impl/WxMaAuthServiceImpl.java b/youlai-auth/src/main/java/com/youlai/boot/auth/service/impl/WxMaAuthServiceImpl.java
similarity index 100%
rename from src/main/java/com/youlai/boot/auth/service/impl/WxMaAuthServiceImpl.java
rename to youlai-auth/src/main/java/com/youlai/boot/auth/service/impl/WxMaAuthServiceImpl.java
diff --git a/youlai-codegen/pom.xml b/youlai-codegen/pom.xml
new file mode 100644
index 00000000..c9046f37
--- /dev/null
+++ b/youlai-codegen/pom.xml
@@ -0,0 +1,41 @@
+
+
+ 4.0.0
+
+
+ com.youlai
+ youlai-boot
+ 4.3.0
+
+
+ youlai-codegen
+ 代码生成器模块 - 可视化配置的前后端代码生成
+
+
+
+ com.youlai
+ youlai-common
+
+
+ com.youlai
+ youlai-framework
+
+
+
+
+ org.apache.velocity
+ velocity-engine-core
+ ${velocity.version}
+
+
+
+
+ com.baomidou
+ mybatis-plus-generator
+ ${mybatis-plus-generator.version}
+
+
+
+
diff --git a/src/main/java/com/youlai/boot/codegen/config/CodegenProperties.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/config/CodegenProperties.java
similarity index 93%
rename from src/main/java/com/youlai/boot/codegen/config/CodegenProperties.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/config/CodegenProperties.java
index 5f327996..0490f559 100644
--- a/src/main/java/com/youlai/boot/codegen/config/CodegenProperties.java
+++ b/youlai-codegen/src/main/java/com/youlai/boot/codegen/config/CodegenProperties.java
@@ -92,6 +92,11 @@ public class CodegenProperties {
*/
private String moduleName;
+ /**
+ * 基础包名 (e.g. com.youlai.boot)
+ */
+ private String packageName = "com.youlai.boot";
+
}
diff --git a/src/main/java/com/youlai/boot/codegen/controller/CodegenController.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/controller/CodegenController.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/controller/CodegenController.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/controller/CodegenController.java
diff --git a/src/main/java/com/youlai/boot/codegen/converter/CodegenConverter.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/converter/CodegenConverter.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/converter/CodegenConverter.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/converter/CodegenConverter.java
diff --git a/src/main/java/com/youlai/boot/codegen/enums/FormTypeEnum.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/enums/FormTypeEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/enums/FormTypeEnum.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/enums/FormTypeEnum.java
diff --git a/src/main/java/com/youlai/boot/codegen/enums/JavaTypeEnum.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/enums/JavaTypeEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/enums/JavaTypeEnum.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/enums/JavaTypeEnum.java
diff --git a/src/main/java/com/youlai/boot/codegen/enums/QueryTypeEnum.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/enums/QueryTypeEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/enums/QueryTypeEnum.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/enums/QueryTypeEnum.java
diff --git a/src/main/java/com/youlai/boot/codegen/mapper/DatabaseMapper.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/mapper/DatabaseMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/mapper/DatabaseMapper.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/mapper/DatabaseMapper.java
diff --git a/src/main/java/com/youlai/boot/codegen/mapper/GenTableColumnMapper.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/mapper/GenTableColumnMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/mapper/GenTableColumnMapper.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/mapper/GenTableColumnMapper.java
diff --git a/src/main/java/com/youlai/boot/codegen/mapper/GenTableMapper.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/mapper/GenTableMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/mapper/GenTableMapper.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/mapper/GenTableMapper.java
diff --git a/src/main/java/com/youlai/boot/codegen/model/entity/GenTable.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/model/entity/GenTable.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/model/entity/GenTable.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/model/entity/GenTable.java
diff --git a/src/main/java/com/youlai/boot/codegen/model/entity/GenTableColumn.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/model/entity/GenTableColumn.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/model/entity/GenTableColumn.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/model/entity/GenTableColumn.java
diff --git a/src/main/java/com/youlai/boot/codegen/model/form/GenConfigForm.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/model/form/GenConfigForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/model/form/GenConfigForm.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/model/form/GenConfigForm.java
diff --git a/src/main/java/com/youlai/boot/codegen/model/query/TablePageQuery.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/model/query/TablePageQuery.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/model/query/TablePageQuery.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/model/query/TablePageQuery.java
diff --git a/src/main/java/com/youlai/boot/codegen/model/query/TableQuery.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/model/query/TableQuery.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/model/query/TableQuery.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/model/query/TableQuery.java
diff --git a/src/main/java/com/youlai/boot/codegen/model/vo/CodegenPreviewVO.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/model/vo/CodegenPreviewVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/model/vo/CodegenPreviewVO.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/model/vo/CodegenPreviewVO.java
diff --git a/src/main/java/com/youlai/boot/codegen/model/vo/ColumnMetaVO.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/model/vo/ColumnMetaVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/model/vo/ColumnMetaVO.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/model/vo/ColumnMetaVO.java
diff --git a/src/main/java/com/youlai/boot/codegen/model/vo/TableMetaVO.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/model/vo/TableMetaVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/model/vo/TableMetaVO.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/model/vo/TableMetaVO.java
diff --git a/src/main/java/com/youlai/boot/codegen/model/vo/TablePageVO.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/model/vo/TablePageVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/model/vo/TablePageVO.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/model/vo/TablePageVO.java
diff --git a/src/main/java/com/youlai/boot/codegen/service/CodegenService.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/service/CodegenService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/service/CodegenService.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/service/CodegenService.java
diff --git a/src/main/java/com/youlai/boot/codegen/service/GenTableColumnService.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/service/GenTableColumnService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/service/GenTableColumnService.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/service/GenTableColumnService.java
diff --git a/src/main/java/com/youlai/boot/codegen/service/GenTableService.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/service/GenTableService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/service/GenTableService.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/service/GenTableService.java
diff --git a/src/main/java/com/youlai/boot/codegen/service/impl/CodegenServiceImpl.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/service/impl/CodegenServiceImpl.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/service/impl/CodegenServiceImpl.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/service/impl/CodegenServiceImpl.java
diff --git a/src/main/java/com/youlai/boot/codegen/service/impl/GenTableColumnServiceImpl.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/service/impl/GenTableColumnServiceImpl.java
similarity index 100%
rename from src/main/java/com/youlai/boot/codegen/service/impl/GenTableColumnServiceImpl.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/service/impl/GenTableColumnServiceImpl.java
diff --git a/src/main/java/com/youlai/boot/codegen/service/impl/GenTableServiceImpl.java b/youlai-codegen/src/main/java/com/youlai/boot/codegen/service/impl/GenTableServiceImpl.java
similarity index 95%
rename from src/main/java/com/youlai/boot/codegen/service/impl/GenTableServiceImpl.java
rename to youlai-codegen/src/main/java/com/youlai/boot/codegen/service/impl/GenTableServiceImpl.java
index 6df5b3d5..e914c7c2 100644
--- a/src/main/java/com/youlai/boot/codegen/service/impl/GenTableServiceImpl.java
+++ b/youlai-codegen/src/main/java/com/youlai/boot/codegen/service/impl/GenTableServiceImpl.java
@@ -5,7 +5,6 @@ import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.youlai.boot.YouLaiBootApplication;
import com.youlai.boot.common.enums.EnvEnum;
import com.youlai.boot.codegen.enums.FormTypeEnum;
import com.youlai.boot.codegen.enums.JavaTypeEnum;
@@ -22,9 +21,10 @@ import com.youlai.boot.codegen.model.entity.GenTableColumn;
import com.youlai.boot.codegen.model.form.GenConfigForm;
import com.youlai.boot.codegen.service.GenTableService;
import com.youlai.boot.codegen.service.GenTableColumnService;
-import com.youlai.boot.system.service.MenuService;
+import com.youlai.boot.common.event.CodegenMenuEvent;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@@ -50,7 +50,7 @@ public class GenTableServiceImpl extends ServiceImpl i
@Value("${spring.profiles.active}")
private String springProfilesActive;
- private final MenuService menuService;
+ private final ApplicationEventPublisher eventPublisher;
/**
* 获取代码生成配置
@@ -91,7 +91,7 @@ public class GenTableServiceImpl extends ServiceImpl i
}
genTable.setEntityName(StrUtil.toCamelCase(StrUtil.upperFirst(StrUtil.toCamelCase(processedTable))));
- genTable.setPackageName(YouLaiBootApplication.class.getPackageName());
+ genTable.setPackageName(codegenProperties.getDefaultConfig().getPackageName());
genTable.setModuleName(codegenProperties.getDefaultConfig().getModuleName()); // 默认模块名
genTable.setAuthor(codegenProperties.getDefaultConfig().getAuthor());
}
@@ -185,10 +185,11 @@ public class GenTableServiceImpl extends ServiceImpl i
GenTable genTable = codegenConverter.toGenTable(formData);
this.saveOrUpdate(genTable);
- // 如果选择上级菜单且当前环境不是生产环境,则保存菜单
+ // 如果选择上级菜单且当前环境不是生产环境,发布菜单创建事件
Long parentMenuId = formData.getParentMenuId();
if (parentMenuId != null && !EnvEnum.PROD.getValue().equals(springProfilesActive)) {
- menuService.addMenuForCodegen(parentMenuId, genTable);
+ eventPublisher.publishEvent(new CodegenMenuEvent(this, parentMenuId,
+ genTable.getBusinessName(), genTable.getModuleName(), genTable.getPackageName()));
}
List genTableColumns = codegenConverter.toGenTableColumn(formData.getFieldConfigs());
diff --git a/src/main/resources/codegen.yml b/youlai-codegen/src/main/resources/codegen.yml
similarity index 100%
rename from src/main/resources/codegen.yml
rename to youlai-codegen/src/main/resources/codegen.yml
diff --git a/src/main/resources/mapper/codegen/DatabaseMapper.xml b/youlai-codegen/src/main/resources/mapper/codegen/DatabaseMapper.xml
similarity index 100%
rename from src/main/resources/mapper/codegen/DatabaseMapper.xml
rename to youlai-codegen/src/main/resources/mapper/codegen/DatabaseMapper.xml
diff --git a/src/main/resources/mapper/codegen/GenConfigMapper.xml b/youlai-codegen/src/main/resources/mapper/codegen/GenConfigMapper.xml
similarity index 100%
rename from src/main/resources/mapper/codegen/GenConfigMapper.xml
rename to youlai-codegen/src/main/resources/mapper/codegen/GenConfigMapper.xml
diff --git a/src/main/resources/mapper/codegen/GenFieldConfigMapper.xml b/youlai-codegen/src/main/resources/mapper/codegen/GenFieldConfigMapper.xml
similarity index 100%
rename from src/main/resources/mapper/codegen/GenFieldConfigMapper.xml
rename to youlai-codegen/src/main/resources/mapper/codegen/GenFieldConfigMapper.xml
diff --git a/src/main/resources/mapper/codegen/GenTableColumnMapper.xml b/youlai-codegen/src/main/resources/mapper/codegen/GenTableColumnMapper.xml
similarity index 100%
rename from src/main/resources/mapper/codegen/GenTableColumnMapper.xml
rename to youlai-codegen/src/main/resources/mapper/codegen/GenTableColumnMapper.xml
diff --git a/src/main/resources/mapper/codegen/GenTableMapper.xml b/youlai-codegen/src/main/resources/mapper/codegen/GenTableMapper.xml
similarity index 100%
rename from src/main/resources/mapper/codegen/GenTableMapper.xml
rename to youlai-codegen/src/main/resources/mapper/codegen/GenTableMapper.xml
diff --git a/src/main/resources/templates/codegen/backend/controller.java.vm b/youlai-codegen/src/main/resources/templates/codegen/backend/controller.java.vm
similarity index 100%
rename from src/main/resources/templates/codegen/backend/controller.java.vm
rename to youlai-codegen/src/main/resources/templates/codegen/backend/controller.java.vm
diff --git a/src/main/resources/templates/codegen/backend/converter.java.vm b/youlai-codegen/src/main/resources/templates/codegen/backend/converter.java.vm
similarity index 87%
rename from src/main/resources/templates/codegen/backend/converter.java.vm
rename to youlai-codegen/src/main/resources/templates/codegen/backend/converter.java.vm
index ed1dd163..63648c17 100644
--- a/src/main/resources/templates/codegen/backend/converter.java.vm
+++ b/youlai-codegen/src/main/resources/templates/codegen/backend/converter.java.vm
@@ -1,7 +1,6 @@
package ${packageName}.${moduleName}.${subpackageName};
import org.mapstruct.Mapper;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import ${packageName}.${moduleName}.model.entity.${entityName};
import ${packageName}.${moduleName}.model.form.${entityName}Form;
diff --git a/src/main/resources/templates/codegen/backend/entity.java.vm b/youlai-codegen/src/main/resources/templates/codegen/backend/entity.java.vm
similarity index 100%
rename from src/main/resources/templates/codegen/backend/entity.java.vm
rename to youlai-codegen/src/main/resources/templates/codegen/backend/entity.java.vm
diff --git a/src/main/resources/templates/codegen/backend/form.java.vm b/youlai-codegen/src/main/resources/templates/codegen/backend/form.java.vm
similarity index 96%
rename from src/main/resources/templates/codegen/backend/form.java.vm
rename to youlai-codegen/src/main/resources/templates/codegen/backend/form.java.vm
index f05ce6b8..e157c2aa 100644
--- a/src/main/resources/templates/codegen/backend/form.java.vm
+++ b/youlai-codegen/src/main/resources/templates/codegen/backend/form.java.vm
@@ -30,6 +30,9 @@ public class ${entityName}Form implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
+ @Schema(description = "${businessName}ID")
+ private Long id;
+
## ---------- BEGIN 字段循环遍历 ----------
#if($fieldConfigs)
#foreach($fieldConfig in ${fieldConfigs})
diff --git a/src/main/resources/templates/codegen/backend/mapper.java.vm b/youlai-codegen/src/main/resources/templates/codegen/backend/mapper.java.vm
similarity index 100%
rename from src/main/resources/templates/codegen/backend/mapper.java.vm
rename to youlai-codegen/src/main/resources/templates/codegen/backend/mapper.java.vm
diff --git a/src/main/resources/templates/codegen/backend/mapper.xml.vm b/youlai-codegen/src/main/resources/templates/codegen/backend/mapper.xml.vm
similarity index 100%
rename from src/main/resources/templates/codegen/backend/mapper.xml.vm
rename to youlai-codegen/src/main/resources/templates/codegen/backend/mapper.xml.vm
diff --git a/src/main/resources/templates/codegen/backend/query.java.vm b/youlai-codegen/src/main/resources/templates/codegen/backend/query.java.vm
similarity index 100%
rename from src/main/resources/templates/codegen/backend/query.java.vm
rename to youlai-codegen/src/main/resources/templates/codegen/backend/query.java.vm
diff --git a/src/main/resources/templates/codegen/backend/service.java.vm b/youlai-codegen/src/main/resources/templates/codegen/backend/service.java.vm
similarity index 100%
rename from src/main/resources/templates/codegen/backend/service.java.vm
rename to youlai-codegen/src/main/resources/templates/codegen/backend/service.java.vm
diff --git a/src/main/resources/templates/codegen/backend/serviceImpl.java.vm b/youlai-codegen/src/main/resources/templates/codegen/backend/serviceImpl.java.vm
similarity index 98%
rename from src/main/resources/templates/codegen/backend/serviceImpl.java.vm
rename to youlai-codegen/src/main/resources/templates/codegen/backend/serviceImpl.java.vm
index a1b8d55b..6e8db040 100644
--- a/src/main/resources/templates/codegen/backend/serviceImpl.java.vm
+++ b/youlai-codegen/src/main/resources/templates/codegen/backend/serviceImpl.java.vm
@@ -15,7 +15,6 @@ import ${packageName}.${moduleName}.converter.${entityName}Converter;
import java.util.Arrays;
import java.util.List;
-import java.util.stream.Collectors;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
diff --git a/src/main/resources/templates/codegen/backend/vo.java.vm b/youlai-codegen/src/main/resources/templates/codegen/backend/vo.java.vm
similarity index 100%
rename from src/main/resources/templates/codegen/backend/vo.java.vm
rename to youlai-codegen/src/main/resources/templates/codegen/backend/vo.java.vm
diff --git a/src/main/resources/templates/codegen/frontend/js/api.js.vm b/youlai-codegen/src/main/resources/templates/codegen/frontend/js/api.js.vm
similarity index 100%
rename from src/main/resources/templates/codegen/frontend/js/api.js.vm
rename to youlai-codegen/src/main/resources/templates/codegen/frontend/js/api.js.vm
diff --git a/src/main/resources/templates/codegen/frontend/js/index.curd.js.vue.vm b/youlai-codegen/src/main/resources/templates/codegen/frontend/js/index.curd.js.vue.vm
similarity index 100%
rename from src/main/resources/templates/codegen/frontend/js/index.curd.js.vue.vm
rename to youlai-codegen/src/main/resources/templates/codegen/frontend/js/index.curd.js.vue.vm
diff --git a/src/main/resources/templates/codegen/frontend/js/index.js.vue.vm b/youlai-codegen/src/main/resources/templates/codegen/frontend/js/index.js.vue.vm
similarity index 100%
rename from src/main/resources/templates/codegen/frontend/js/index.js.vue.vm
rename to youlai-codegen/src/main/resources/templates/codegen/frontend/js/index.js.vue.vm
diff --git a/src/main/resources/templates/codegen/frontend/ts/api-types.ts.vm b/youlai-codegen/src/main/resources/templates/codegen/frontend/ts/api-types.ts.vm
similarity index 98%
rename from src/main/resources/templates/codegen/frontend/ts/api-types.ts.vm
rename to youlai-codegen/src/main/resources/templates/codegen/frontend/ts/api-types.ts.vm
index 7b100b31..fe1bb1c4 100644
--- a/src/main/resources/templates/codegen/frontend/ts/api-types.ts.vm
+++ b/youlai-codegen/src/main/resources/templates/codegen/frontend/ts/api-types.ts.vm
@@ -26,6 +26,7 @@ export interface ${entityName}QueryParams extends BaseQueryParams {
/** $!{businessName}表单对象 */
export interface ${entityName}Form {
+ id?: number;
#foreach($fieldConfig in $fieldConfigs)
#if($fieldConfig.isShowInForm)
#if("$!fieldConfig.fieldComment" != "")
diff --git a/src/main/resources/templates/codegen/frontend/ts/api.ts.vm b/youlai-codegen/src/main/resources/templates/codegen/frontend/ts/api.ts.vm
similarity index 100%
rename from src/main/resources/templates/codegen/frontend/ts/api.ts.vm
rename to youlai-codegen/src/main/resources/templates/codegen/frontend/ts/api.ts.vm
diff --git a/src/main/resources/templates/codegen/frontend/ts/index.curd.vue.vm b/youlai-codegen/src/main/resources/templates/codegen/frontend/ts/index.curd.vue.vm
similarity index 100%
rename from src/main/resources/templates/codegen/frontend/ts/index.curd.vue.vm
rename to youlai-codegen/src/main/resources/templates/codegen/frontend/ts/index.curd.vue.vm
diff --git a/src/main/resources/templates/codegen/frontend/ts/index.vue.vm b/youlai-codegen/src/main/resources/templates/codegen/frontend/ts/index.vue.vm
similarity index 100%
rename from src/main/resources/templates/codegen/frontend/ts/index.vue.vm
rename to youlai-codegen/src/main/resources/templates/codegen/frontend/ts/index.vue.vm
diff --git a/src/main/resources/templates/excel/用户导入模板.xlsx b/youlai-codegen/src/main/resources/templates/excel/用户导入模板.xlsx
similarity index 100%
rename from src/main/resources/templates/excel/用户导入模板.xlsx
rename to youlai-codegen/src/main/resources/templates/excel/用户导入模板.xlsx
diff --git a/youlai-common/pom.xml b/youlai-common/pom.xml
new file mode 100644
index 00000000..5a6e4f5f
--- /dev/null
+++ b/youlai-common/pom.xml
@@ -0,0 +1,70 @@
+
+
+ 4.0.0
+
+
+ com.youlai
+ youlai-boot
+ 4.3.0
+
+
+ youlai-common
+ 公共基础模块 - 常量、枚举、异常、工具、基础模型
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-aspectj
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+ provided
+
+
+ com.baomidou
+ mybatis-plus-spring-boot4-starter
+ ${mybatis-plus.version}
+ provided
+
+
+ io.swagger.core.v3
+ swagger-annotations-jakarta
+ 2.2.29
+ provided
+
+
+ cn.idev.excel
+ fastexcel
+ ${fastexcel.version}
+ provided
+
+
+ org.lionsoul
+ ip2region
+ ${ip2region.version}
+ provided
+
+
+ org.redisson
+ redisson-spring-boot-starter
+ ${redisson.version}
+ provided
+
+
+ org.projectlombok
+ lombok-mapstruct-binding
+ ${lombok-mapstruct-binding.version}
+ provided
+
+
+
+
diff --git a/src/main/java/com/youlai/boot/common/annotation/DataPermission.java b/youlai-common/src/main/java/com/youlai/boot/common/annotation/DataPermission.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/annotation/DataPermission.java
rename to youlai-common/src/main/java/com/youlai/boot/common/annotation/DataPermission.java
diff --git a/src/main/java/com/youlai/boot/common/annotation/Log.java b/youlai-common/src/main/java/com/youlai/boot/common/annotation/Log.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/annotation/Log.java
rename to youlai-common/src/main/java/com/youlai/boot/common/annotation/Log.java
diff --git a/src/main/java/com/youlai/boot/common/annotation/RepeatSubmit.java b/youlai-common/src/main/java/com/youlai/boot/common/annotation/RepeatSubmit.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/annotation/RepeatSubmit.java
rename to youlai-common/src/main/java/com/youlai/boot/common/annotation/RepeatSubmit.java
diff --git a/src/main/java/com/youlai/boot/common/annotation/ValidField.java b/youlai-common/src/main/java/com/youlai/boot/common/annotation/ValidField.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/annotation/ValidField.java
rename to youlai-common/src/main/java/com/youlai/boot/common/annotation/ValidField.java
diff --git a/src/main/java/com/youlai/boot/common/base/BaseEntity.java b/youlai-common/src/main/java/com/youlai/boot/common/base/BaseEntity.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/base/BaseEntity.java
rename to youlai-common/src/main/java/com/youlai/boot/common/base/BaseEntity.java
diff --git a/src/main/java/com/youlai/boot/common/base/BaseQuery.java b/youlai-common/src/main/java/com/youlai/boot/common/base/BaseQuery.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/base/BaseQuery.java
rename to youlai-common/src/main/java/com/youlai/boot/common/base/BaseQuery.java
diff --git a/src/main/java/com/youlai/boot/common/base/IBaseEnum.java b/youlai-common/src/main/java/com/youlai/boot/common/base/IBaseEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/base/IBaseEnum.java
rename to youlai-common/src/main/java/com/youlai/boot/common/base/IBaseEnum.java
diff --git a/src/main/java/com/youlai/boot/common/constant/JwtClaimConstants.java b/youlai-common/src/main/java/com/youlai/boot/common/constant/JwtClaimConstants.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/constant/JwtClaimConstants.java
rename to youlai-common/src/main/java/com/youlai/boot/common/constant/JwtClaimConstants.java
diff --git a/src/main/java/com/youlai/boot/common/constant/RedisConstants.java b/youlai-common/src/main/java/com/youlai/boot/common/constant/RedisConstants.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/constant/RedisConstants.java
rename to youlai-common/src/main/java/com/youlai/boot/common/constant/RedisConstants.java
diff --git a/src/main/java/com/youlai/boot/common/constant/SecurityConstants.java b/youlai-common/src/main/java/com/youlai/boot/common/constant/SecurityConstants.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/constant/SecurityConstants.java
rename to youlai-common/src/main/java/com/youlai/boot/common/constant/SecurityConstants.java
diff --git a/src/main/java/com/youlai/boot/common/constant/SystemConstants.java b/youlai-common/src/main/java/com/youlai/boot/common/constant/SystemConstants.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/constant/SystemConstants.java
rename to youlai-common/src/main/java/com/youlai/boot/common/constant/SystemConstants.java
diff --git a/src/main/java/com/youlai/boot/common/enums/ActionTypeEnum.java b/youlai-common/src/main/java/com/youlai/boot/common/enums/ActionTypeEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/enums/ActionTypeEnum.java
rename to youlai-common/src/main/java/com/youlai/boot/common/enums/ActionTypeEnum.java
diff --git a/src/main/java/com/youlai/boot/common/enums/CaptchaTypeEnum.java b/youlai-common/src/main/java/com/youlai/boot/common/enums/CaptchaTypeEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/enums/CaptchaTypeEnum.java
rename to youlai-common/src/main/java/com/youlai/boot/common/enums/CaptchaTypeEnum.java
diff --git a/src/main/java/com/youlai/boot/common/enums/DataScopeEnum.java b/youlai-common/src/main/java/com/youlai/boot/common/enums/DataScopeEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/enums/DataScopeEnum.java
rename to youlai-common/src/main/java/com/youlai/boot/common/enums/DataScopeEnum.java
diff --git a/src/main/java/com/youlai/boot/common/enums/EnvEnum.java b/youlai-common/src/main/java/com/youlai/boot/common/enums/EnvEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/enums/EnvEnum.java
rename to youlai-common/src/main/java/com/youlai/boot/common/enums/EnvEnum.java
diff --git a/src/main/java/com/youlai/boot/common/enums/LogModuleEnum.java b/youlai-common/src/main/java/com/youlai/boot/common/enums/LogModuleEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/enums/LogModuleEnum.java
rename to youlai-common/src/main/java/com/youlai/boot/common/enums/LogModuleEnum.java
diff --git a/src/main/java/com/youlai/boot/common/enums/StatusEnum.java b/youlai-common/src/main/java/com/youlai/boot/common/enums/StatusEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/enums/StatusEnum.java
rename to youlai-common/src/main/java/com/youlai/boot/common/enums/StatusEnum.java
diff --git a/youlai-common/src/main/java/com/youlai/boot/common/event/CodegenMenuEvent.java b/youlai-common/src/main/java/com/youlai/boot/common/event/CodegenMenuEvent.java
new file mode 100644
index 00000000..9e1341b0
--- /dev/null
+++ b/youlai-common/src/main/java/com/youlai/boot/common/event/CodegenMenuEvent.java
@@ -0,0 +1,24 @@
+package com.youlai.boot.common.event;
+
+import lombok.Getter;
+import org.springframework.context.ApplicationEvent;
+
+/**
+ * 代码生成菜单创建事件
+ */
+@Getter
+public class CodegenMenuEvent extends ApplicationEvent {
+
+ private final Long parentMenuId;
+ private final String businessName;
+ private final String moduleName;
+ private final String packageName;
+
+ public CodegenMenuEvent(Object source, Long parentMenuId, String businessName, String moduleName, String packageName) {
+ super(source);
+ this.parentMenuId = parentMenuId;
+ this.businessName = businessName;
+ this.moduleName = moduleName;
+ this.packageName = packageName;
+ }
+}
diff --git a/youlai-common/src/main/java/com/youlai/boot/common/event/DictChangeEvent.java b/youlai-common/src/main/java/com/youlai/boot/common/event/DictChangeEvent.java
new file mode 100644
index 00000000..f598d594
--- /dev/null
+++ b/youlai-common/src/main/java/com/youlai/boot/common/event/DictChangeEvent.java
@@ -0,0 +1,16 @@
+package com.youlai.boot.common.event;
+
+import org.springframework.context.ApplicationEvent;
+
+public class DictChangeEvent extends ApplicationEvent {
+ private final Long dictId;
+
+ public DictChangeEvent(Object source, Long dictId) {
+ super(source);
+ this.dictId = dictId;
+ }
+
+ public Long getDictId() {
+ return dictId;
+ }
+}
diff --git a/youlai-common/src/main/java/com/youlai/boot/common/event/NoticePublishEvent.java b/youlai-common/src/main/java/com/youlai/boot/common/event/NoticePublishEvent.java
new file mode 100644
index 00000000..83c5d912
--- /dev/null
+++ b/youlai-common/src/main/java/com/youlai/boot/common/event/NoticePublishEvent.java
@@ -0,0 +1,23 @@
+package com.youlai.boot.common.event;
+
+import java.util.List;
+import org.springframework.context.ApplicationEvent;
+
+public class NoticePublishEvent extends ApplicationEvent {
+ private final Long noticeId;
+ private final List userIds;
+
+ public NoticePublishEvent(Object source, Long noticeId, List userIds) {
+ super(source);
+ this.noticeId = noticeId;
+ this.userIds = userIds;
+ }
+
+ public Long getNoticeId() {
+ return noticeId;
+ }
+
+ public List getUserIds() {
+ return userIds;
+ }
+}
diff --git a/src/main/java/com/youlai/boot/common/exception/BusinessException.java b/youlai-common/src/main/java/com/youlai/boot/common/exception/BusinessException.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/exception/BusinessException.java
rename to youlai-common/src/main/java/com/youlai/boot/common/exception/BusinessException.java
diff --git a/src/main/java/com/youlai/boot/common/model/KeyValue.java b/youlai-common/src/main/java/com/youlai/boot/common/model/KeyValue.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/model/KeyValue.java
rename to youlai-common/src/main/java/com/youlai/boot/common/model/KeyValue.java
diff --git a/src/main/java/com/youlai/boot/common/model/Option.java b/youlai-common/src/main/java/com/youlai/boot/common/model/Option.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/model/Option.java
rename to youlai-common/src/main/java/com/youlai/boot/common/model/Option.java
diff --git a/src/main/java/com/youlai/boot/common/result/ExcelResult.java b/youlai-common/src/main/java/com/youlai/boot/common/result/ExcelResult.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/result/ExcelResult.java
rename to youlai-common/src/main/java/com/youlai/boot/common/result/ExcelResult.java
diff --git a/src/main/java/com/youlai/boot/common/result/IResultCode.java b/youlai-common/src/main/java/com/youlai/boot/common/result/IResultCode.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/result/IResultCode.java
rename to youlai-common/src/main/java/com/youlai/boot/common/result/IResultCode.java
diff --git a/src/main/java/com/youlai/boot/common/result/PageResult.java b/youlai-common/src/main/java/com/youlai/boot/common/result/PageResult.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/result/PageResult.java
rename to youlai-common/src/main/java/com/youlai/boot/common/result/PageResult.java
diff --git a/src/main/java/com/youlai/boot/common/result/ResponseWriter.java b/youlai-common/src/main/java/com/youlai/boot/common/result/ResponseWriter.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/result/ResponseWriter.java
rename to youlai-common/src/main/java/com/youlai/boot/common/result/ResponseWriter.java
diff --git a/src/main/java/com/youlai/boot/common/result/Result.java b/youlai-common/src/main/java/com/youlai/boot/common/result/Result.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/result/Result.java
rename to youlai-common/src/main/java/com/youlai/boot/common/result/Result.java
diff --git a/src/main/java/com/youlai/boot/common/result/ResultCode.java b/youlai-common/src/main/java/com/youlai/boot/common/result/ResultCode.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/result/ResultCode.java
rename to youlai-common/src/main/java/com/youlai/boot/common/result/ResultCode.java
diff --git a/src/main/java/com/youlai/boot/common/util/ExcelUtils.java b/youlai-common/src/main/java/com/youlai/boot/common/util/ExcelUtils.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/util/ExcelUtils.java
rename to youlai-common/src/main/java/com/youlai/boot/common/util/ExcelUtils.java
diff --git a/src/main/java/com/youlai/boot/common/util/IPUtils.java b/youlai-common/src/main/java/com/youlai/boot/common/util/IPUtils.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/util/IPUtils.java
rename to youlai-common/src/main/java/com/youlai/boot/common/util/IPUtils.java
diff --git a/src/main/java/com/youlai/boot/common/validator/FieldValidator.java b/youlai-common/src/main/java/com/youlai/boot/common/validator/FieldValidator.java
similarity index 100%
rename from src/main/java/com/youlai/boot/common/validator/FieldValidator.java
rename to youlai-common/src/main/java/com/youlai/boot/common/validator/FieldValidator.java
diff --git a/youlai-file/pom.xml b/youlai-file/pom.xml
new file mode 100644
index 00000000..79eb976c
--- /dev/null
+++ b/youlai-file/pom.xml
@@ -0,0 +1,39 @@
+
+
+ 4.0.0
+
+
+ com.youlai
+ youlai-boot
+ 4.3.0
+
+
+ youlai-file
+ 文件服务模块 - 多存储后端文件上传下载
+
+
+
+ com.youlai
+ youlai-common
+
+
+ com.youlai
+ youlai-framework
+
+
+
+
+ io.minio
+ minio
+ ${minio.version}
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ ${aliyun-sdk-oss.version}
+
+
+
+
diff --git a/src/main/java/com/youlai/boot/file/controller/FileController.java b/youlai-file/src/main/java/com/youlai/boot/file/controller/FileController.java
similarity index 100%
rename from src/main/java/com/youlai/boot/file/controller/FileController.java
rename to youlai-file/src/main/java/com/youlai/boot/file/controller/FileController.java
diff --git a/src/main/java/com/youlai/boot/file/model/FileInfo.java b/youlai-file/src/main/java/com/youlai/boot/file/model/FileInfo.java
similarity index 100%
rename from src/main/java/com/youlai/boot/file/model/FileInfo.java
rename to youlai-file/src/main/java/com/youlai/boot/file/model/FileInfo.java
diff --git a/src/main/java/com/youlai/boot/file/service/FileService.java b/youlai-file/src/main/java/com/youlai/boot/file/service/FileService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/file/service/FileService.java
rename to youlai-file/src/main/java/com/youlai/boot/file/service/FileService.java
diff --git a/src/main/java/com/youlai/boot/file/service/impl/AliyunFileService.java b/youlai-file/src/main/java/com/youlai/boot/file/service/impl/AliyunFileService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/file/service/impl/AliyunFileService.java
rename to youlai-file/src/main/java/com/youlai/boot/file/service/impl/AliyunFileService.java
diff --git a/src/main/java/com/youlai/boot/file/service/impl/LocalFileService.java b/youlai-file/src/main/java/com/youlai/boot/file/service/impl/LocalFileService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/file/service/impl/LocalFileService.java
rename to youlai-file/src/main/java/com/youlai/boot/file/service/impl/LocalFileService.java
diff --git a/src/main/java/com/youlai/boot/file/service/impl/MinioFileService.java b/youlai-file/src/main/java/com/youlai/boot/file/service/impl/MinioFileService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/file/service/impl/MinioFileService.java
rename to youlai-file/src/main/java/com/youlai/boot/file/service/impl/MinioFileService.java
diff --git a/youlai-framework/pom.xml b/youlai-framework/pom.xml
new file mode 100644
index 00000000..a05fdb61
--- /dev/null
+++ b/youlai-framework/pom.xml
@@ -0,0 +1,175 @@
+
+
+ 4.0.0
+
+
+ com.youlai
+ youlai-boot
+ 4.3.0
+
+
+ youlai-framework
+ 技术框架模块 - Security基础设施、缓存、MyBatis、验证码、集成
+
+
+
+ com.youlai
+ youlai-common
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+ org.springframework.boot
+ spring-boot-starter-cache
+
+
+ org.springframework.boot
+ spring-boot-starter-aspectj
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
+ org.springframework.boot
+ spring-boot-starter-mail
+
+
+
+
+ com.mysql
+ mysql-connector-j
+ runtime
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ ${druid.version}
+
+
+ com.baomidou
+ mybatis-plus-spring-boot4-starter
+ ${mybatis-plus.version}
+
+
+ com.baomidou
+ mybatis-plus-jsqlparser
+ ${mybatis-plus.version}
+
+
+
+
+ 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
+
+
+
+
+ org.mapstruct
+ mapstruct
+ ${mapstruct.version}
+
+
+ org.mapstruct
+ mapstruct-processor
+ ${mapstruct.version}
+
+
+
+
+ com.github.ben-manes.caffeine
+ caffeine
+ ${caffeine.version}
+
+
+ org.redisson
+ redisson-spring-boot-starter
+ ${redisson.version}
+
+
+
+
+ com.xuxueli
+ xxl-job-core
+ ${xxl-job.version}
+
+
+
+
+ cn.idev.excel
+ fastexcel
+ ${fastexcel.version}
+
+
+
+
+ io.minio
+ minio
+ ${minio.version}
+ true
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ ${aliyun-sdk-oss.version}
+ true
+
+
+ com.github.binarywang
+ weixin-java-miniapp
+ ${weixin-java-miniapp.version}
+ true
+
+
+ com.aliyun
+ aliyun-java-sdk-core
+ ${aliyun.java.sdk.core.version}
+ true
+
+
+ com.aliyun
+ aliyun-java-sdk-dysmsapi
+ ${aliyun.java.sdk.dysmsapi.version}
+ true
+
+
+
+
+ org.lionsoul
+ ip2region
+ ${ip2region.version}
+
+
+ com.alibaba
+ transmittable-thread-local
+ ${transmittable-thread-local.version}
+
+
+
+
diff --git a/src/main/java/com/youlai/boot/framework/apidoc/Knife4jOpenApiCustomizer.java b/youlai-framework/src/main/java/com/youlai/boot/framework/apidoc/Knife4jOpenApiCustomizer.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/apidoc/Knife4jOpenApiCustomizer.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/apidoc/Knife4jOpenApiCustomizer.java
diff --git a/src/main/java/com/youlai/boot/framework/apidoc/OpenApiConfig.java b/youlai-framework/src/main/java/com/youlai/boot/framework/apidoc/OpenApiConfig.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/apidoc/OpenApiConfig.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/apidoc/OpenApiConfig.java
diff --git a/src/main/java/com/youlai/boot/common/aspect/RepeatSubmitAspect.java b/youlai-framework/src/main/java/com/youlai/boot/framework/aspect/RepeatSubmitAspect.java
similarity index 98%
rename from src/main/java/com/youlai/boot/common/aspect/RepeatSubmitAspect.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/aspect/RepeatSubmitAspect.java
index 97011be1..2a45c737 100644
--- a/src/main/java/com/youlai/boot/common/aspect/RepeatSubmitAspect.java
+++ b/youlai-framework/src/main/java/com/youlai/boot/framework/aspect/RepeatSubmitAspect.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.common.aspect;
+package com.youlai.boot.framework.aspect;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
diff --git a/src/main/java/com/youlai/boot/framework/cache/CaffeineConfig.java b/youlai-framework/src/main/java/com/youlai/boot/framework/cache/CaffeineConfig.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/cache/CaffeineConfig.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/cache/CaffeineConfig.java
diff --git a/src/main/java/com/youlai/boot/framework/cache/RedisCacheConfig.java b/youlai-framework/src/main/java/com/youlai/boot/framework/cache/RedisCacheConfig.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/cache/RedisCacheConfig.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/cache/RedisCacheConfig.java
diff --git a/src/main/java/com/youlai/boot/framework/cache/RedisConfig.java b/youlai-framework/src/main/java/com/youlai/boot/framework/cache/RedisConfig.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/cache/RedisConfig.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/cache/RedisConfig.java
diff --git a/src/main/java/com/youlai/boot/framework/captcha/config/CaptchaConfig.java b/youlai-framework/src/main/java/com/youlai/boot/framework/captcha/config/CaptchaConfig.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/captcha/config/CaptchaConfig.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/captcha/config/CaptchaConfig.java
diff --git a/src/main/java/com/youlai/boot/framework/captcha/config/CaptchaProperties.java b/youlai-framework/src/main/java/com/youlai/boot/framework/captcha/config/CaptchaProperties.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/captcha/config/CaptchaProperties.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/captcha/config/CaptchaProperties.java
diff --git a/src/main/java/com/youlai/boot/framework/captcha/exception/CaptchaException.java b/youlai-framework/src/main/java/com/youlai/boot/framework/captcha/exception/CaptchaException.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/captcha/exception/CaptchaException.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/captcha/exception/CaptchaException.java
diff --git a/src/main/java/com/youlai/boot/framework/captcha/model/CaptchaInfo.java b/youlai-framework/src/main/java/com/youlai/boot/framework/captcha/model/CaptchaInfo.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/captcha/model/CaptchaInfo.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/captcha/model/CaptchaInfo.java
diff --git a/src/main/java/com/youlai/boot/framework/captcha/service/CaptchaService.java b/youlai-framework/src/main/java/com/youlai/boot/framework/captcha/service/CaptchaService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/captcha/service/CaptchaService.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/captcha/service/CaptchaService.java
diff --git a/src/main/java/com/youlai/boot/framework/integration/mail/config/MailConfig.java b/youlai-framework/src/main/java/com/youlai/boot/framework/integration/mail/config/MailConfig.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/integration/mail/config/MailConfig.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/integration/mail/config/MailConfig.java
diff --git a/src/main/java/com/youlai/boot/framework/integration/mail/config/MailProperties.java b/youlai-framework/src/main/java/com/youlai/boot/framework/integration/mail/config/MailProperties.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/integration/mail/config/MailProperties.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/integration/mail/config/MailProperties.java
diff --git a/src/main/java/com/youlai/boot/framework/integration/mail/service/MailService.java b/youlai-framework/src/main/java/com/youlai/boot/framework/integration/mail/service/MailService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/integration/mail/service/MailService.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/integration/mail/service/MailService.java
diff --git a/src/main/java/com/youlai/boot/framework/integration/sms/config/AliyunSmsProperties.java b/youlai-framework/src/main/java/com/youlai/boot/framework/integration/sms/config/AliyunSmsProperties.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/integration/sms/config/AliyunSmsProperties.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/integration/sms/config/AliyunSmsProperties.java
diff --git a/src/main/java/com/youlai/boot/framework/integration/sms/enums/SmsTypeEnum.java b/youlai-framework/src/main/java/com/youlai/boot/framework/integration/sms/enums/SmsTypeEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/integration/sms/enums/SmsTypeEnum.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/integration/sms/enums/SmsTypeEnum.java
diff --git a/src/main/java/com/youlai/boot/framework/integration/sms/service/SmsService.java b/youlai-framework/src/main/java/com/youlai/boot/framework/integration/sms/service/SmsService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/integration/sms/service/SmsService.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/integration/sms/service/SmsService.java
diff --git a/src/main/java/com/youlai/boot/framework/integration/sms/service/impl/AliyunSmsService.java b/youlai-framework/src/main/java/com/youlai/boot/framework/integration/sms/service/impl/AliyunSmsService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/integration/sms/service/impl/AliyunSmsService.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/integration/sms/service/impl/AliyunSmsService.java
diff --git a/src/main/java/com/youlai/boot/framework/integration/wxma/WxMaConfig.java b/youlai-framework/src/main/java/com/youlai/boot/framework/integration/wxma/WxMaConfig.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/integration/wxma/WxMaConfig.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/integration/wxma/WxMaConfig.java
diff --git a/src/main/java/com/youlai/boot/framework/integration/wxma/WxMaProperties.java b/youlai-framework/src/main/java/com/youlai/boot/framework/integration/wxma/WxMaProperties.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/integration/wxma/WxMaProperties.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/integration/wxma/WxMaProperties.java
diff --git a/src/main/java/com/youlai/boot/framework/job/XxlJobConfig.java b/youlai-framework/src/main/java/com/youlai/boot/framework/job/XxlJobConfig.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/job/XxlJobConfig.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/job/XxlJobConfig.java
diff --git a/src/main/java/com/youlai/boot/framework/mybatis/config/MybatisConfig.java b/youlai-framework/src/main/java/com/youlai/boot/framework/mybatis/config/MybatisConfig.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/mybatis/config/MybatisConfig.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/mybatis/config/MybatisConfig.java
diff --git a/src/main/java/com/youlai/boot/framework/mybatis/handler/MyMetaObjectHandler.java b/youlai-framework/src/main/java/com/youlai/boot/framework/mybatis/handler/MyMetaObjectHandler.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/mybatis/handler/MyMetaObjectHandler.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/mybatis/handler/MyMetaObjectHandler.java
diff --git a/src/main/java/com/youlai/boot/framework/mybatis/interceptor/MyDataPermissionHandler.java b/youlai-framework/src/main/java/com/youlai/boot/framework/mybatis/interceptor/MyDataPermissionHandler.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/mybatis/interceptor/MyDataPermissionHandler.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/mybatis/interceptor/MyDataPermissionHandler.java
diff --git a/src/main/java/com/youlai/boot/framework/security/config/PasswordEncoderConfig.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/config/PasswordEncoderConfig.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/config/PasswordEncoderConfig.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/config/PasswordEncoderConfig.java
diff --git a/src/main/java/com/youlai/boot/framework/security/config/SecurityProperties.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/config/SecurityProperties.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/config/SecurityProperties.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/config/SecurityProperties.java
diff --git a/src/main/java/com/youlai/boot/framework/security/exception/CaptchaValidationException.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/exception/CaptchaValidationException.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/exception/CaptchaValidationException.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/exception/CaptchaValidationException.java
diff --git a/src/main/java/com/youlai/boot/framework/security/exception/NeedBindMobileException.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/exception/NeedBindMobileException.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/exception/NeedBindMobileException.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/exception/NeedBindMobileException.java
diff --git a/src/main/java/com/youlai/boot/framework/security/filter/CaptchaValidationFilter.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/filter/CaptchaValidationFilter.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/filter/CaptchaValidationFilter.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/filter/CaptchaValidationFilter.java
diff --git a/src/main/java/com/youlai/boot/framework/security/filter/TokenAuthenticationFilter.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/filter/TokenAuthenticationFilter.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/filter/TokenAuthenticationFilter.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/filter/TokenAuthenticationFilter.java
diff --git a/src/main/java/com/youlai/boot/framework/security/handler/MyAccessDeniedHandler.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/handler/MyAccessDeniedHandler.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/handler/MyAccessDeniedHandler.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/handler/MyAccessDeniedHandler.java
diff --git a/src/main/java/com/youlai/boot/framework/security/handler/MyAuthenticationEntryPoint.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/handler/MyAuthenticationEntryPoint.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/handler/MyAuthenticationEntryPoint.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/handler/MyAuthenticationEntryPoint.java
diff --git a/src/main/java/com/youlai/boot/framework/security/model/AuthenticationToken.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/model/AuthenticationToken.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/model/AuthenticationToken.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/model/AuthenticationToken.java
diff --git a/src/main/java/com/youlai/boot/framework/security/model/RoleDataScope.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/model/RoleDataScope.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/model/RoleDataScope.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/model/RoleDataScope.java
diff --git a/src/main/java/com/youlai/boot/framework/security/model/SmsAuthenticationToken.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/model/SmsAuthenticationToken.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/model/SmsAuthenticationToken.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/model/SmsAuthenticationToken.java
diff --git a/src/main/java/com/youlai/boot/framework/security/model/SysUserDetails.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/model/SysUserDetails.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/model/SysUserDetails.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/model/SysUserDetails.java
diff --git a/src/main/java/com/youlai/boot/framework/security/model/UserAuthInfo.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/model/UserAuthInfo.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/model/UserAuthInfo.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/model/UserAuthInfo.java
diff --git a/src/main/java/com/youlai/boot/framework/security/model/UserSession.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/model/UserSession.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/model/UserSession.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/model/UserSession.java
diff --git a/src/main/java/com/youlai/boot/framework/security/model/WxMaAuthenticationToken.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/model/WxMaAuthenticationToken.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/model/WxMaAuthenticationToken.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/model/WxMaAuthenticationToken.java
diff --git a/src/main/java/com/youlai/boot/framework/security/token/JwtTokenManager.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/token/JwtTokenManager.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/token/JwtTokenManager.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/token/JwtTokenManager.java
diff --git a/src/main/java/com/youlai/boot/framework/security/token/RedisTokenManager.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/token/RedisTokenManager.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/token/RedisTokenManager.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/token/RedisTokenManager.java
diff --git a/src/main/java/com/youlai/boot/framework/security/token/TokenManager.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/token/TokenManager.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/token/TokenManager.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/token/TokenManager.java
diff --git a/src/main/java/com/youlai/boot/framework/security/util/SecurityUtils.java b/youlai-framework/src/main/java/com/youlai/boot/framework/security/util/SecurityUtils.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/security/util/SecurityUtils.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/security/util/SecurityUtils.java
diff --git a/src/main/java/com/youlai/boot/framework/web/advice/GlobalExceptionHandler.java b/youlai-framework/src/main/java/com/youlai/boot/framework/web/advice/GlobalExceptionHandler.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/web/advice/GlobalExceptionHandler.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/web/advice/GlobalExceptionHandler.java
diff --git a/src/main/java/com/youlai/boot/framework/web/config/CorsConfig.java b/youlai-framework/src/main/java/com/youlai/boot/framework/web/config/CorsConfig.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/web/config/CorsConfig.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/web/config/CorsConfig.java
diff --git a/src/main/java/com/youlai/boot/framework/web/config/JacksonConfig.java b/youlai-framework/src/main/java/com/youlai/boot/framework/web/config/JacksonConfig.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/web/config/JacksonConfig.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/web/config/JacksonConfig.java
diff --git a/src/main/java/com/youlai/boot/framework/web/filter/RequestLogFilter.java b/youlai-framework/src/main/java/com/youlai/boot/framework/web/filter/RequestLogFilter.java
similarity index 100%
rename from src/main/java/com/youlai/boot/framework/web/filter/RequestLogFilter.java
rename to youlai-framework/src/main/java/com/youlai/boot/framework/web/filter/RequestLogFilter.java
diff --git a/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/youlai-framework/src/main/resources/META-INF/additional-spring-configuration-metadata.json
similarity index 100%
rename from src/main/resources/META-INF/additional-spring-configuration-metadata.json
rename to youlai-framework/src/main/resources/META-INF/additional-spring-configuration-metadata.json
diff --git a/youlai-message/pom.xml b/youlai-message/pom.xml
new file mode 100644
index 00000000..f97c2687
--- /dev/null
+++ b/youlai-message/pom.xml
@@ -0,0 +1,27 @@
+
+
+ 4.0.0
+
+
+ com.youlai
+ youlai-boot
+ 4.3.0
+
+
+ youlai-message
+ 消息推送模块 - SSE 服务端推送、在线用户统计
+
+
+
+ com.youlai
+ youlai-common
+
+
+ com.youlai
+ youlai-framework
+
+
+
+
diff --git a/src/main/java/com/youlai/boot/message/controller/SseController.java b/youlai-message/src/main/java/com/youlai/boot/message/controller/SseController.java
similarity index 100%
rename from src/main/java/com/youlai/boot/message/controller/SseController.java
rename to youlai-message/src/main/java/com/youlai/boot/message/controller/SseController.java
diff --git a/src/main/java/com/youlai/boot/message/dto/DictChangeEvent.java b/youlai-message/src/main/java/com/youlai/boot/message/dto/DictChangeEvent.java
similarity index 100%
rename from src/main/java/com/youlai/boot/message/dto/DictChangeEvent.java
rename to youlai-message/src/main/java/com/youlai/boot/message/dto/DictChangeEvent.java
diff --git a/src/main/java/com/youlai/boot/message/dto/OnlineUserDTO.java b/youlai-message/src/main/java/com/youlai/boot/message/dto/OnlineUserDTO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/message/dto/OnlineUserDTO.java
rename to youlai-message/src/main/java/com/youlai/boot/message/dto/OnlineUserDTO.java
diff --git a/src/main/java/com/youlai/boot/message/job/OnlineUserCountJob.java b/youlai-message/src/main/java/com/youlai/boot/message/job/OnlineUserCountJob.java
similarity index 100%
rename from src/main/java/com/youlai/boot/message/job/OnlineUserCountJob.java
rename to youlai-message/src/main/java/com/youlai/boot/message/job/OnlineUserCountJob.java
diff --git a/youlai-message/src/main/java/com/youlai/boot/message/listener/SseEventListener.java b/youlai-message/src/main/java/com/youlai/boot/message/listener/SseEventListener.java
new file mode 100644
index 00000000..0239cff2
--- /dev/null
+++ b/youlai-message/src/main/java/com/youlai/boot/message/listener/SseEventListener.java
@@ -0,0 +1,26 @@
+package com.youlai.boot.message.listener;
+
+import com.youlai.boot.common.event.DictChangeEvent;
+import com.youlai.boot.common.event.NoticePublishEvent;
+import com.youlai.boot.message.service.SseService;
+import com.youlai.boot.message.topic.SseTopics;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
+@Component
+@RequiredArgsConstructor
+public class SseEventListener {
+
+ private final SseService sseService;
+
+ @EventListener
+ public void onDictChange(DictChangeEvent event) {
+ sseService.broadcast(SseTopics.DICT_CHANGE, event.getDictId());
+ }
+
+ @EventListener
+ public void onNoticePublish(NoticePublishEvent event) {
+ sseService.send(event.getUserIds(), SseTopics.NOTICE, event.getNoticeId());
+ }
+}
diff --git a/src/main/java/com/youlai/boot/message/registry/SseSessionRegistry.java b/youlai-message/src/main/java/com/youlai/boot/message/registry/SseSessionRegistry.java
similarity index 88%
rename from src/main/java/com/youlai/boot/message/registry/SseSessionRegistry.java
rename to youlai-message/src/main/java/com/youlai/boot/message/registry/SseSessionRegistry.java
index 502ec3a4..f6923b41 100644
--- a/src/main/java/com/youlai/boot/message/registry/SseSessionRegistry.java
+++ b/youlai-message/src/main/java/com/youlai/boot/message/registry/SseSessionRegistry.java
@@ -6,10 +6,12 @@ import org.springframework.context.event.ContextClosedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
+import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -198,6 +200,28 @@ public class SseSessionRegistry {
}
}
+ /**
+ * 心跳检测:每30秒向所有连接发送ping事件,及时清理已断开的僵尸连接
+ */
+ @Scheduled(fixedRate = 30000)
+ public void heartbeat() {
+ if (emitterUserMap.isEmpty()) {
+ return;
+ }
+ List failedEmitters = new ArrayList<>();
+ for (SseEmitter emitter : emitterUserMap.keySet()) {
+ try {
+ emitter.send(SseEmitter.event().name("ping").data("heartbeat"));
+ } catch (Exception e) {
+ failedEmitters.add(emitter);
+ }
+ }
+ if (!failedEmitters.isEmpty()) {
+ log.debug("心跳检测清理{}个失效SSE连接", failedEmitters.size());
+ failedEmitters.forEach(this::removeEmitter);
+ }
+ }
+
/**
* 容器关闭时主动断开所有 SSE 连接,避免阻塞应用停止
*/
diff --git a/src/main/java/com/youlai/boot/message/service/SseService.java b/youlai-message/src/main/java/com/youlai/boot/message/service/SseService.java
similarity index 82%
rename from src/main/java/com/youlai/boot/message/service/SseService.java
rename to youlai-message/src/main/java/com/youlai/boot/message/service/SseService.java
index d4b59f26..289c9d76 100644
--- a/src/main/java/com/youlai/boot/message/service/SseService.java
+++ b/youlai-message/src/main/java/com/youlai/boot/message/service/SseService.java
@@ -120,6 +120,35 @@ public class SseService {
return sessionRegistry.getOnlineUserCount();
}
+ /**
+ * 广播消息给所有在线用户
+ *
+ * @param topic 主题
+ * @param data 数据
+ */
+ public void broadcast(String topic, Object data) {
+ sessionRegistry.broadcast(topic, data);
+ log.info("已广播消息: topic={}", topic);
+ }
+
+ /**
+ * 发送消息给指定用户ID列表
+ *
+ * @param userIds 用户ID列表
+ * @param topic 主题
+ * @param data 数据
+ */
+ public void send(List userIds, String topic, Object data) {
+ if (userIds == null || userIds.isEmpty()) {
+ return;
+ }
+ for (Long userId : userIds) {
+ String username = String.valueOf(userId);
+ sessionRegistry.sendToUser(username, topic, data);
+ }
+ log.info("已向{}个用户发送消息: topic={}", userIds.size(), topic);
+ }
+
/**
* 发送系统消息
*
diff --git a/src/main/java/com/youlai/boot/message/topic/SseTopics.java b/youlai-message/src/main/java/com/youlai/boot/message/topic/SseTopics.java
similarity index 69%
rename from src/main/java/com/youlai/boot/message/topic/SseTopics.java
rename to youlai-message/src/main/java/com/youlai/boot/message/topic/SseTopics.java
index 0b48b51d..f1ce335b 100644
--- a/src/main/java/com/youlai/boot/message/topic/SseTopics.java
+++ b/youlai-message/src/main/java/com/youlai/boot/message/topic/SseTopics.java
@@ -11,9 +11,15 @@ public final class SseTopics {
/** 字典变更事件 */
public static final String DICT = "dict";
+ /** 字典变更通知 */
+ public static final String DICT_CHANGE = "dict-change";
+
/** 在线用户数事件 */
public static final String ONLINE_COUNT = "online-count";
+ /** 通知公告事件 */
+ public static final String NOTICE = "notice";
+
/** 系统消息事件 */
public static final String SYSTEM = "system";
}
diff --git a/youlai-system/pom.xml b/youlai-system/pom.xml
new file mode 100644
index 00000000..a85d0502
--- /dev/null
+++ b/youlai-system/pom.xml
@@ -0,0 +1,32 @@
+
+
+ 4.0.0
+
+
+ com.youlai
+ youlai-boot
+ 4.3.0
+
+
+ youlai-system
+ 系统管理模块 - 用户、角色、菜单、部门、字典、日志、通知、配置
+
+
+
+ com.youlai
+ youlai-common
+
+
+ com.youlai
+ youlai-framework
+
+
+ com.github.binarywang
+ weixin-java-miniapp
+ ${weixin-java-miniapp.version}
+
+
+
+
diff --git a/src/main/java/com/youlai/boot/common/aspect/LogAspect.java b/youlai-system/src/main/java/com/youlai/boot/system/aspect/LogAspect.java
similarity index 99%
rename from src/main/java/com/youlai/boot/common/aspect/LogAspect.java
rename to youlai-system/src/main/java/com/youlai/boot/system/aspect/LogAspect.java
index 145341c9..22424788 100644
--- a/src/main/java/com/youlai/boot/common/aspect/LogAspect.java
+++ b/youlai-system/src/main/java/com/youlai/boot/system/aspect/LogAspect.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.common.aspect;
+package com.youlai.boot.system.aspect;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.useragent.UserAgent;
diff --git a/src/main/java/com/youlai/boot/system/controller/ConfigController.java b/youlai-system/src/main/java/com/youlai/boot/system/controller/ConfigController.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/controller/ConfigController.java
rename to youlai-system/src/main/java/com/youlai/boot/system/controller/ConfigController.java
diff --git a/src/main/java/com/youlai/boot/system/controller/DeptController.java b/youlai-system/src/main/java/com/youlai/boot/system/controller/DeptController.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/controller/DeptController.java
rename to youlai-system/src/main/java/com/youlai/boot/system/controller/DeptController.java
diff --git a/src/main/java/com/youlai/boot/system/controller/DictController.java b/youlai-system/src/main/java/com/youlai/boot/system/controller/DictController.java
similarity index 88%
rename from src/main/java/com/youlai/boot/system/controller/DictController.java
rename to youlai-system/src/main/java/com/youlai/boot/system/controller/DictController.java
index ef55538d..64d6f2c2 100644
--- a/src/main/java/com/youlai/boot/system/controller/DictController.java
+++ b/youlai-system/src/main/java/com/youlai/boot/system/controller/DictController.java
@@ -17,7 +17,6 @@ import com.youlai.boot.system.model.form.DictForm;
import com.youlai.boot.common.annotation.Log;
import com.youlai.boot.system.service.DictItemService;
import com.youlai.boot.system.service.DictService;
-import com.youlai.boot.message.service.SseService;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Operation;
@@ -28,6 +27,8 @@ import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
+import com.youlai.boot.common.event.DictChangeEvent;
+import org.springframework.context.ApplicationEventPublisher;
/**
* 字典控制层
@@ -41,9 +42,9 @@ import java.util.List;
@RequiredArgsConstructor
public class DictController {
+ private final ApplicationEventPublisher applicationEventPublisher;
private final DictService dictService;
private final DictItemService dictItemService;
- private final SseService sseService;
//---------------------------------------------------
// 字典相关接口
@@ -82,9 +83,9 @@ public class DictController {
@Log(module = LogModuleEnum.DICT, value = ActionTypeEnum.INSERT)
public Result> saveDict(@Valid @RequestBody DictForm formData) {
boolean result = dictService.saveDict(formData);
- // 发送字典更新通知
+ // 发布字典变更事件
if (result) {
- sseService.sendDictChange(formData.getDictCode());
+ applicationEventPublisher.publishEvent(new DictChangeEvent(this, formData.getId()));
}
return Result.judge(result);
}
@@ -98,9 +99,9 @@ public class DictController {
@RequestBody DictForm dictForm
) {
boolean status = dictService.updateDict(id, dictForm);
- // 发送字典更新通知
+ // 发布字典变更事件
if (status && dictForm.getDictCode() != null) {
- sseService.sendDictChange(dictForm.getDictCode());
+ applicationEventPublisher.publishEvent(new DictChangeEvent(this, id));
}
return Result.judge(status);
}
@@ -117,9 +118,9 @@ public class DictController {
dictService.deleteDictByIds(Arrays.stream(ids.split(",")).toList());
- // 发送字典删除通知
+ // 发布字典删除事件
for (String dictCode : dictCodes) {
- sseService.sendDictChange(dictCode);
+ applicationEventPublisher.publishEvent(new DictChangeEvent(this, null));
}
return Result.success();
@@ -161,9 +162,9 @@ public class DictController {
formData.setDictCode(dictCode);
boolean result = dictItemService.saveDictItem(formData);
- // 发送字典更新通知
+ // 发布字典变更事件
if (result) {
- sseService.sendDictChange(dictCode);
+ applicationEventPublisher.publishEvent(new DictChangeEvent(this, null));
}
return Result.judge(result);
@@ -193,9 +194,9 @@ public class DictController {
formData.setDictCode(dictCode);
boolean status = dictItemService.updateDictItem(formData);
- // 发送字典更新通知
+ // 发布字典变更事件
if (status) {
- sseService.sendDictChange(dictCode);
+ applicationEventPublisher.publishEvent(new DictChangeEvent(this, null));
}
return Result.judge(status);
@@ -211,8 +212,8 @@ public class DictController {
) {
dictItemService.deleteDictItemByIds(itemIds);
- // 发送字典更新通知
- sseService.sendDictChange(dictCode);
+ // 发布字典变更事件
+ applicationEventPublisher.publishEvent(new DictChangeEvent(this, null));
return Result.success();
}
diff --git a/src/main/java/com/youlai/boot/system/controller/LogController.java b/youlai-system/src/main/java/com/youlai/boot/system/controller/LogController.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/controller/LogController.java
rename to youlai-system/src/main/java/com/youlai/boot/system/controller/LogController.java
diff --git a/src/main/java/com/youlai/boot/system/controller/MenuController.java b/youlai-system/src/main/java/com/youlai/boot/system/controller/MenuController.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/controller/MenuController.java
rename to youlai-system/src/main/java/com/youlai/boot/system/controller/MenuController.java
diff --git a/src/main/java/com/youlai/boot/system/controller/NoticeController.java b/youlai-system/src/main/java/com/youlai/boot/system/controller/NoticeController.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/controller/NoticeController.java
rename to youlai-system/src/main/java/com/youlai/boot/system/controller/NoticeController.java
diff --git a/src/main/java/com/youlai/boot/system/controller/RoleController.java b/youlai-system/src/main/java/com/youlai/boot/system/controller/RoleController.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/controller/RoleController.java
rename to youlai-system/src/main/java/com/youlai/boot/system/controller/RoleController.java
diff --git a/src/main/java/com/youlai/boot/system/controller/UserController.java b/youlai-system/src/main/java/com/youlai/boot/system/controller/UserController.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/controller/UserController.java
rename to youlai-system/src/main/java/com/youlai/boot/system/controller/UserController.java
diff --git a/src/main/java/com/youlai/boot/system/converter/ConfigConverter.java b/youlai-system/src/main/java/com/youlai/boot/system/converter/ConfigConverter.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/converter/ConfigConverter.java
rename to youlai-system/src/main/java/com/youlai/boot/system/converter/ConfigConverter.java
diff --git a/src/main/java/com/youlai/boot/system/converter/DeptConverter.java b/youlai-system/src/main/java/com/youlai/boot/system/converter/DeptConverter.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/converter/DeptConverter.java
rename to youlai-system/src/main/java/com/youlai/boot/system/converter/DeptConverter.java
diff --git a/src/main/java/com/youlai/boot/system/converter/DictConverter.java b/youlai-system/src/main/java/com/youlai/boot/system/converter/DictConverter.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/converter/DictConverter.java
rename to youlai-system/src/main/java/com/youlai/boot/system/converter/DictConverter.java
diff --git a/src/main/java/com/youlai/boot/system/converter/DictItemConverter.java b/youlai-system/src/main/java/com/youlai/boot/system/converter/DictItemConverter.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/converter/DictItemConverter.java
rename to youlai-system/src/main/java/com/youlai/boot/system/converter/DictItemConverter.java
diff --git a/src/main/java/com/youlai/boot/system/converter/MenuConverter.java b/youlai-system/src/main/java/com/youlai/boot/system/converter/MenuConverter.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/converter/MenuConverter.java
rename to youlai-system/src/main/java/com/youlai/boot/system/converter/MenuConverter.java
diff --git a/src/main/java/com/youlai/boot/system/converter/NoticeConverter.java b/youlai-system/src/main/java/com/youlai/boot/system/converter/NoticeConverter.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/converter/NoticeConverter.java
rename to youlai-system/src/main/java/com/youlai/boot/system/converter/NoticeConverter.java
diff --git a/src/main/java/com/youlai/boot/system/converter/RoleConverter.java b/youlai-system/src/main/java/com/youlai/boot/system/converter/RoleConverter.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/converter/RoleConverter.java
rename to youlai-system/src/main/java/com/youlai/boot/system/converter/RoleConverter.java
diff --git a/src/main/java/com/youlai/boot/system/converter/UserConverter.java b/youlai-system/src/main/java/com/youlai/boot/system/converter/UserConverter.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/converter/UserConverter.java
rename to youlai-system/src/main/java/com/youlai/boot/system/converter/UserConverter.java
diff --git a/src/main/java/com/youlai/boot/system/enums/DictCodeEnum.java b/youlai-system/src/main/java/com/youlai/boot/system/enums/DictCodeEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/enums/DictCodeEnum.java
rename to youlai-system/src/main/java/com/youlai/boot/system/enums/DictCodeEnum.java
diff --git a/src/main/java/com/youlai/boot/system/enums/MenuTypeEnum.java b/youlai-system/src/main/java/com/youlai/boot/system/enums/MenuTypeEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/enums/MenuTypeEnum.java
rename to youlai-system/src/main/java/com/youlai/boot/system/enums/MenuTypeEnum.java
diff --git a/src/main/java/com/youlai/boot/system/enums/NoticePublishStatusEnum.java b/youlai-system/src/main/java/com/youlai/boot/system/enums/NoticePublishStatusEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/enums/NoticePublishStatusEnum.java
rename to youlai-system/src/main/java/com/youlai/boot/system/enums/NoticePublishStatusEnum.java
diff --git a/src/main/java/com/youlai/boot/system/enums/NoticeTargetEnum.java b/youlai-system/src/main/java/com/youlai/boot/system/enums/NoticeTargetEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/enums/NoticeTargetEnum.java
rename to youlai-system/src/main/java/com/youlai/boot/system/enums/NoticeTargetEnum.java
diff --git a/src/main/java/com/youlai/boot/system/enums/SocialPlatformEnum.java b/youlai-system/src/main/java/com/youlai/boot/system/enums/SocialPlatformEnum.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/enums/SocialPlatformEnum.java
rename to youlai-system/src/main/java/com/youlai/boot/system/enums/SocialPlatformEnum.java
diff --git a/src/main/java/com/youlai/boot/system/handler/XxlJobSampleHandler.java b/youlai-system/src/main/java/com/youlai/boot/system/handler/XxlJobSampleHandler.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/handler/XxlJobSampleHandler.java
rename to youlai-system/src/main/java/com/youlai/boot/system/handler/XxlJobSampleHandler.java
diff --git a/youlai-system/src/main/java/com/youlai/boot/system/listener/CodegenMenuEventListener.java b/youlai-system/src/main/java/com/youlai/boot/system/listener/CodegenMenuEventListener.java
new file mode 100644
index 00000000..2f1b0b8e
--- /dev/null
+++ b/youlai-system/src/main/java/com/youlai/boot/system/listener/CodegenMenuEventListener.java
@@ -0,0 +1,36 @@
+package com.youlai.boot.system.listener;
+
+import com.youlai.boot.common.event.CodegenMenuEvent;
+import com.youlai.boot.system.model.form.MenuForm;
+import com.youlai.boot.system.service.MenuService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
+/**
+ * 代码生成菜单事件监听
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class CodegenMenuEventListener {
+
+ private final MenuService menuService;
+
+ @EventListener
+ public void onCodegenMenu(CodegenMenuEvent event) {
+ log.info("收到代码生成菜单事件: parentMenuId={}, businessName={}", event.getParentMenuId(), event.getBusinessName());
+
+ MenuForm dirMenu = new MenuForm();
+ dirMenu.setParentId(event.getParentMenuId());
+ dirMenu.setName(event.getBusinessName());
+ dirMenu.setType("M");
+ dirMenu.setRouteName(event.getBusinessName());
+ dirMenu.setRoutePath(event.getModuleName() + "/" + event.getBusinessName());
+ dirMenu.setComponent(event.getPackageName() + "." + event.getModuleName() + ".controller." + event.getBusinessName() + "Controller");
+ dirMenu.setVisible(1);
+ dirMenu.setSort(0);
+ menuService.saveMenu(dirMenu);
+ }
+}
diff --git a/youlai-system/src/main/java/com/youlai/boot/system/listener/DictChangeEvent.java b/youlai-system/src/main/java/com/youlai/boot/system/listener/DictChangeEvent.java
new file mode 100644
index 00000000..a1675cd1
--- /dev/null
+++ b/youlai-system/src/main/java/com/youlai/boot/system/listener/DictChangeEvent.java
@@ -0,0 +1,16 @@
+package com.youlai.boot.system.listener;
+
+import org.springframework.context.ApplicationEvent;
+
+public class DictChangeEvent extends ApplicationEvent {
+ private final Long dictId;
+
+ public DictChangeEvent(Object source, Long dictId) {
+ super(source);
+ this.dictId = dictId;
+ }
+
+ public Long getDictId() {
+ return dictId;
+ }
+}
diff --git a/youlai-system/src/main/java/com/youlai/boot/system/listener/NoticePublishEvent.java b/youlai-system/src/main/java/com/youlai/boot/system/listener/NoticePublishEvent.java
new file mode 100644
index 00000000..e4e282b6
--- /dev/null
+++ b/youlai-system/src/main/java/com/youlai/boot/system/listener/NoticePublishEvent.java
@@ -0,0 +1,23 @@
+package com.youlai.boot.system.listener;
+
+import java.util.List;
+import org.springframework.context.ApplicationEvent;
+
+public class NoticePublishEvent extends ApplicationEvent {
+ private final Long noticeId;
+ private final List userIds;
+
+ public NoticePublishEvent(Object source, Long noticeId, List userIds) {
+ super(source);
+ this.noticeId = noticeId;
+ this.userIds = userIds;
+ }
+
+ public Long getNoticeId() {
+ return noticeId;
+ }
+
+ public List getUserIds() {
+ return userIds;
+ }
+}
diff --git a/src/main/java/com/youlai/boot/system/listener/UserImportListener.java b/youlai-system/src/main/java/com/youlai/boot/system/listener/UserImportListener.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/listener/UserImportListener.java
rename to youlai-system/src/main/java/com/youlai/boot/system/listener/UserImportListener.java
diff --git a/src/main/java/com/youlai/boot/system/mapper/ConfigMapper.java b/youlai-system/src/main/java/com/youlai/boot/system/mapper/ConfigMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/mapper/ConfigMapper.java
rename to youlai-system/src/main/java/com/youlai/boot/system/mapper/ConfigMapper.java
diff --git a/src/main/java/com/youlai/boot/system/mapper/DeptMapper.java b/youlai-system/src/main/java/com/youlai/boot/system/mapper/DeptMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/mapper/DeptMapper.java
rename to youlai-system/src/main/java/com/youlai/boot/system/mapper/DeptMapper.java
diff --git a/src/main/java/com/youlai/boot/system/mapper/DictItemMapper.java b/youlai-system/src/main/java/com/youlai/boot/system/mapper/DictItemMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/mapper/DictItemMapper.java
rename to youlai-system/src/main/java/com/youlai/boot/system/mapper/DictItemMapper.java
diff --git a/src/main/java/com/youlai/boot/system/mapper/DictMapper.java b/youlai-system/src/main/java/com/youlai/boot/system/mapper/DictMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/mapper/DictMapper.java
rename to youlai-system/src/main/java/com/youlai/boot/system/mapper/DictMapper.java
diff --git a/src/main/java/com/youlai/boot/system/mapper/LogMapper.java b/youlai-system/src/main/java/com/youlai/boot/system/mapper/LogMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/mapper/LogMapper.java
rename to youlai-system/src/main/java/com/youlai/boot/system/mapper/LogMapper.java
diff --git a/src/main/java/com/youlai/boot/system/mapper/MenuMapper.java b/youlai-system/src/main/java/com/youlai/boot/system/mapper/MenuMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/mapper/MenuMapper.java
rename to youlai-system/src/main/java/com/youlai/boot/system/mapper/MenuMapper.java
diff --git a/src/main/java/com/youlai/boot/system/mapper/NoticeMapper.java b/youlai-system/src/main/java/com/youlai/boot/system/mapper/NoticeMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/mapper/NoticeMapper.java
rename to youlai-system/src/main/java/com/youlai/boot/system/mapper/NoticeMapper.java
diff --git a/src/main/java/com/youlai/boot/system/mapper/RoleDeptMapper.java b/youlai-system/src/main/java/com/youlai/boot/system/mapper/RoleDeptMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/mapper/RoleDeptMapper.java
rename to youlai-system/src/main/java/com/youlai/boot/system/mapper/RoleDeptMapper.java
diff --git a/src/main/java/com/youlai/boot/system/mapper/RoleMapper.java b/youlai-system/src/main/java/com/youlai/boot/system/mapper/RoleMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/mapper/RoleMapper.java
rename to youlai-system/src/main/java/com/youlai/boot/system/mapper/RoleMapper.java
diff --git a/src/main/java/com/youlai/boot/system/mapper/RoleMenuMapper.java b/youlai-system/src/main/java/com/youlai/boot/system/mapper/RoleMenuMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/mapper/RoleMenuMapper.java
rename to youlai-system/src/main/java/com/youlai/boot/system/mapper/RoleMenuMapper.java
diff --git a/src/main/java/com/youlai/boot/system/mapper/UserMapper.java b/youlai-system/src/main/java/com/youlai/boot/system/mapper/UserMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/mapper/UserMapper.java
rename to youlai-system/src/main/java/com/youlai/boot/system/mapper/UserMapper.java
diff --git a/src/main/java/com/youlai/boot/system/mapper/UserNoticeMapper.java b/youlai-system/src/main/java/com/youlai/boot/system/mapper/UserNoticeMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/mapper/UserNoticeMapper.java
rename to youlai-system/src/main/java/com/youlai/boot/system/mapper/UserNoticeMapper.java
diff --git a/src/main/java/com/youlai/boot/system/mapper/UserRoleMapper.java b/youlai-system/src/main/java/com/youlai/boot/system/mapper/UserRoleMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/mapper/UserRoleMapper.java
rename to youlai-system/src/main/java/com/youlai/boot/system/mapper/UserRoleMapper.java
diff --git a/src/main/java/com/youlai/boot/system/mapper/UserSocialMapper.java b/youlai-system/src/main/java/com/youlai/boot/system/mapper/UserSocialMapper.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/mapper/UserSocialMapper.java
rename to youlai-system/src/main/java/com/youlai/boot/system/mapper/UserSocialMapper.java
diff --git a/src/main/java/com/youlai/boot/system/model/dto/RolePermsDTO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/dto/RolePermsDTO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/dto/RolePermsDTO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/dto/RolePermsDTO.java
diff --git a/src/main/java/com/youlai/boot/system/model/dto/VisitCountDTO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/dto/VisitCountDTO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/dto/VisitCountDTO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/dto/VisitCountDTO.java
diff --git a/src/main/java/com/youlai/boot/system/model/entity/Config.java b/youlai-system/src/main/java/com/youlai/boot/system/model/entity/Config.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/entity/Config.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/entity/Config.java
diff --git a/src/main/java/com/youlai/boot/system/model/entity/Dept.java b/youlai-system/src/main/java/com/youlai/boot/system/model/entity/Dept.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/entity/Dept.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/entity/Dept.java
diff --git a/src/main/java/com/youlai/boot/system/model/entity/Dict.java b/youlai-system/src/main/java/com/youlai/boot/system/model/entity/Dict.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/entity/Dict.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/entity/Dict.java
diff --git a/src/main/java/com/youlai/boot/system/model/entity/DictItem.java b/youlai-system/src/main/java/com/youlai/boot/system/model/entity/DictItem.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/entity/DictItem.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/entity/DictItem.java
diff --git a/src/main/java/com/youlai/boot/system/model/entity/Menu.java b/youlai-system/src/main/java/com/youlai/boot/system/model/entity/Menu.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/entity/Menu.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/entity/Menu.java
diff --git a/src/main/java/com/youlai/boot/system/model/entity/Notice.java b/youlai-system/src/main/java/com/youlai/boot/system/model/entity/Notice.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/entity/Notice.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/entity/Notice.java
diff --git a/src/main/java/com/youlai/boot/system/model/entity/Role.java b/youlai-system/src/main/java/com/youlai/boot/system/model/entity/Role.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/entity/Role.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/entity/Role.java
diff --git a/src/main/java/com/youlai/boot/system/model/entity/RoleDept.java b/youlai-system/src/main/java/com/youlai/boot/system/model/entity/RoleDept.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/entity/RoleDept.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/entity/RoleDept.java
diff --git a/src/main/java/com/youlai/boot/system/model/entity/RoleMenu.java b/youlai-system/src/main/java/com/youlai/boot/system/model/entity/RoleMenu.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/entity/RoleMenu.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/entity/RoleMenu.java
diff --git a/src/main/java/com/youlai/boot/system/model/entity/SysLog.java b/youlai-system/src/main/java/com/youlai/boot/system/model/entity/SysLog.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/entity/SysLog.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/entity/SysLog.java
diff --git a/src/main/java/com/youlai/boot/system/model/entity/SysUser.java b/youlai-system/src/main/java/com/youlai/boot/system/model/entity/SysUser.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/entity/SysUser.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/entity/SysUser.java
diff --git a/src/main/java/com/youlai/boot/system/model/entity/UserNotice.java b/youlai-system/src/main/java/com/youlai/boot/system/model/entity/UserNotice.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/entity/UserNotice.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/entity/UserNotice.java
diff --git a/src/main/java/com/youlai/boot/system/model/entity/UserRole.java b/youlai-system/src/main/java/com/youlai/boot/system/model/entity/UserRole.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/entity/UserRole.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/entity/UserRole.java
diff --git a/src/main/java/com/youlai/boot/system/model/entity/UserSocial.java b/youlai-system/src/main/java/com/youlai/boot/system/model/entity/UserSocial.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/entity/UserSocial.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/entity/UserSocial.java
diff --git a/src/main/java/com/youlai/boot/system/model/form/ConfigForm.java b/youlai-system/src/main/java/com/youlai/boot/system/model/form/ConfigForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/form/ConfigForm.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/form/ConfigForm.java
diff --git a/src/main/java/com/youlai/boot/system/model/form/DeptForm.java b/youlai-system/src/main/java/com/youlai/boot/system/model/form/DeptForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/form/DeptForm.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/form/DeptForm.java
diff --git a/src/main/java/com/youlai/boot/system/model/form/DictForm.java b/youlai-system/src/main/java/com/youlai/boot/system/model/form/DictForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/form/DictForm.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/form/DictForm.java
diff --git a/src/main/java/com/youlai/boot/system/model/form/DictItemForm.java b/youlai-system/src/main/java/com/youlai/boot/system/model/form/DictItemForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/form/DictItemForm.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/form/DictItemForm.java
diff --git a/src/main/java/com/youlai/boot/system/model/form/EmailUpdateForm.java b/youlai-system/src/main/java/com/youlai/boot/system/model/form/EmailUpdateForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/form/EmailUpdateForm.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/form/EmailUpdateForm.java
diff --git a/src/main/java/com/youlai/boot/system/model/form/MenuForm.java b/youlai-system/src/main/java/com/youlai/boot/system/model/form/MenuForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/form/MenuForm.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/form/MenuForm.java
diff --git a/src/main/java/com/youlai/boot/system/model/form/MobileUpdateForm.java b/youlai-system/src/main/java/com/youlai/boot/system/model/form/MobileUpdateForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/form/MobileUpdateForm.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/form/MobileUpdateForm.java
diff --git a/src/main/java/com/youlai/boot/system/model/form/NoticeForm.java b/youlai-system/src/main/java/com/youlai/boot/system/model/form/NoticeForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/form/NoticeForm.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/form/NoticeForm.java
diff --git a/src/main/java/com/youlai/boot/system/model/form/PasswordUpdateForm.java b/youlai-system/src/main/java/com/youlai/boot/system/model/form/PasswordUpdateForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/form/PasswordUpdateForm.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/form/PasswordUpdateForm.java
diff --git a/src/main/java/com/youlai/boot/system/model/form/PasswordVerifyForm.java b/youlai-system/src/main/java/com/youlai/boot/system/model/form/PasswordVerifyForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/form/PasswordVerifyForm.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/form/PasswordVerifyForm.java
diff --git a/src/main/java/com/youlai/boot/system/model/form/RoleForm.java b/youlai-system/src/main/java/com/youlai/boot/system/model/form/RoleForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/form/RoleForm.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/form/RoleForm.java
diff --git a/src/main/java/com/youlai/boot/system/model/form/UserForm.java b/youlai-system/src/main/java/com/youlai/boot/system/model/form/UserForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/form/UserForm.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/form/UserForm.java
diff --git a/src/main/java/com/youlai/boot/system/model/form/UserImportForm.java b/youlai-system/src/main/java/com/youlai/boot/system/model/form/UserImportForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/form/UserImportForm.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/form/UserImportForm.java
diff --git a/src/main/java/com/youlai/boot/system/model/form/UserProfileForm.java b/youlai-system/src/main/java/com/youlai/boot/system/model/form/UserProfileForm.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/form/UserProfileForm.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/form/UserProfileForm.java
diff --git a/src/main/java/com/youlai/boot/system/model/query/ConfigQuery.java b/youlai-system/src/main/java/com/youlai/boot/system/model/query/ConfigQuery.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/query/ConfigQuery.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/query/ConfigQuery.java
diff --git a/src/main/java/com/youlai/boot/system/model/query/DeptQuery.java b/youlai-system/src/main/java/com/youlai/boot/system/model/query/DeptQuery.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/query/DeptQuery.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/query/DeptQuery.java
diff --git a/src/main/java/com/youlai/boot/system/model/query/DictItemQuery.java b/youlai-system/src/main/java/com/youlai/boot/system/model/query/DictItemQuery.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/query/DictItemQuery.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/query/DictItemQuery.java
diff --git a/src/main/java/com/youlai/boot/system/model/query/DictQuery.java b/youlai-system/src/main/java/com/youlai/boot/system/model/query/DictQuery.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/query/DictQuery.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/query/DictQuery.java
diff --git a/src/main/java/com/youlai/boot/system/model/query/LogQuery.java b/youlai-system/src/main/java/com/youlai/boot/system/model/query/LogQuery.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/query/LogQuery.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/query/LogQuery.java
diff --git a/src/main/java/com/youlai/boot/system/model/query/MenuQuery.java b/youlai-system/src/main/java/com/youlai/boot/system/model/query/MenuQuery.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/query/MenuQuery.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/query/MenuQuery.java
diff --git a/src/main/java/com/youlai/boot/system/model/query/NoticeQuery.java b/youlai-system/src/main/java/com/youlai/boot/system/model/query/NoticeQuery.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/query/NoticeQuery.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/query/NoticeQuery.java
diff --git a/src/main/java/com/youlai/boot/system/model/query/RoleQuery.java b/youlai-system/src/main/java/com/youlai/boot/system/model/query/RoleQuery.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/query/RoleQuery.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/query/RoleQuery.java
diff --git a/src/main/java/com/youlai/boot/system/model/query/UserQuery.java b/youlai-system/src/main/java/com/youlai/boot/system/model/query/UserQuery.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/query/UserQuery.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/query/UserQuery.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/ConfigVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/ConfigVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/ConfigVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/ConfigVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/CurrentUserVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/CurrentUserVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/CurrentUserVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/CurrentUserVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/DeptVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/DeptVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/DeptVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/DeptVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/DictItemOptionVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/DictItemOptionVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/DictItemOptionVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/DictItemOptionVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/DictItemPageVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/DictItemPageVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/DictItemPageVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/DictItemPageVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/DictPageVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/DictPageVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/DictPageVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/DictPageVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/LogPageVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/LogPageVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/LogPageVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/LogPageVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/MenuVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/MenuVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/MenuVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/MenuVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/NoticeDetailVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/NoticeDetailVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/NoticeDetailVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/NoticeDetailVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/NoticePageVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/NoticePageVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/NoticePageVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/NoticePageVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/NoticeVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/NoticeVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/NoticeVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/NoticeVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/RolePageVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/RolePageVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/RolePageVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/RolePageVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/RouteVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/RouteVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/RouteVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/RouteVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/UserExportVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/UserExportVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/UserExportVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/UserExportVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/UserNoticePageVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/UserNoticePageVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/UserNoticePageVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/UserNoticePageVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/UserPageVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/UserPageVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/UserPageVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/UserPageVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/UserProfileVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/UserProfileVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/UserProfileVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/UserProfileVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/VisitOverviewVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/VisitOverviewVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/VisitOverviewVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/VisitOverviewVO.java
diff --git a/src/main/java/com/youlai/boot/system/model/vo/VisitTrendVO.java b/youlai-system/src/main/java/com/youlai/boot/system/model/vo/VisitTrendVO.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/model/vo/VisitTrendVO.java
rename to youlai-system/src/main/java/com/youlai/boot/system/model/vo/VisitTrendVO.java
diff --git a/src/main/java/com/youlai/boot/framework/security/config/SecurityConfig.java b/youlai-system/src/main/java/com/youlai/boot/system/security/config/SecurityConfig.java
similarity index 94%
rename from src/main/java/com/youlai/boot/framework/security/config/SecurityConfig.java
rename to youlai-system/src/main/java/com/youlai/boot/system/security/config/SecurityConfig.java
index 190175e6..731fa3f4 100644
--- a/src/main/java/com/youlai/boot/framework/security/config/SecurityConfig.java
+++ b/youlai-system/src/main/java/com/youlai/boot/system/security/config/SecurityConfig.java
@@ -1,17 +1,17 @@
-package com.youlai.boot.framework.security.config;
+package com.youlai.boot.system.security.config;
import cn.binarywang.wx.miniapp.api.WxMaService;
import com.youlai.boot.framework.captcha.service.CaptchaService;
import cn.hutool.core.util.ArrayUtil;
-import com.youlai.boot.framework.web.filter.RateLimiterFilter;
+import com.youlai.boot.system.security.filter.RateLimiterFilter;
import com.youlai.boot.framework.security.filter.CaptchaValidationFilter;
import com.youlai.boot.framework.security.filter.TokenAuthenticationFilter;
import com.youlai.boot.framework.security.handler.MyAccessDeniedHandler;
import com.youlai.boot.framework.security.handler.MyAuthenticationEntryPoint;
-import com.youlai.boot.framework.security.provider.SmsAuthenticationProvider;
-import com.youlai.boot.framework.security.provider.WxMaAuthenticationProvider;
+import com.youlai.boot.system.security.provider.SmsAuthenticationProvider;
+import com.youlai.boot.system.security.provider.WxMaAuthenticationProvider;
import com.youlai.boot.framework.security.token.TokenManager;
-import com.youlai.boot.framework.security.service.SysUserDetailsService;
+import com.youlai.boot.system.security.service.SysUserDetailsService;
import com.youlai.boot.system.service.ConfigService;
import com.youlai.boot.system.service.UserService;
import lombok.RequiredArgsConstructor;
@@ -53,7 +53,7 @@ public class SecurityConfig {
private final CaptchaService captchaService;
private final ConfigService configService;
- private final SecurityProperties securityProperties;
+ private final com.youlai.boot.framework.security.config.SecurityProperties securityProperties;
/**
* 配置安全过滤链 SecurityFilterChain
diff --git a/src/main/java/com/youlai/boot/framework/web/filter/RateLimiterFilter.java b/youlai-system/src/main/java/com/youlai/boot/system/security/filter/RateLimiterFilter.java
similarity index 97%
rename from src/main/java/com/youlai/boot/framework/web/filter/RateLimiterFilter.java
rename to youlai-system/src/main/java/com/youlai/boot/system/security/filter/RateLimiterFilter.java
index 5b860442..4621214b 100644
--- a/src/main/java/com/youlai/boot/framework/web/filter/RateLimiterFilter.java
+++ b/youlai-system/src/main/java/com/youlai/boot/system/security/filter/RateLimiterFilter.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.framework.web.filter;
+package com.youlai.boot.system.security.filter;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
@@ -13,7 +13,7 @@ import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
-import org.jetbrains.annotations.NotNull;
+import jakarta.validation.constraints.NotNull;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.filter.OncePerRequestFilter;
diff --git a/src/main/java/com/youlai/boot/framework/security/provider/SmsAuthenticationProvider.java b/youlai-system/src/main/java/com/youlai/boot/system/security/provider/SmsAuthenticationProvider.java
similarity index 98%
rename from src/main/java/com/youlai/boot/framework/security/provider/SmsAuthenticationProvider.java
rename to youlai-system/src/main/java/com/youlai/boot/system/security/provider/SmsAuthenticationProvider.java
index ec5c63f1..2efba359 100644
--- a/src/main/java/com/youlai/boot/framework/security/provider/SmsAuthenticationProvider.java
+++ b/youlai-system/src/main/java/com/youlai/boot/system/security/provider/SmsAuthenticationProvider.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.framework.security.provider;
+package com.youlai.boot.system.security.provider;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
diff --git a/src/main/java/com/youlai/boot/framework/security/provider/WxMaAuthenticationProvider.java b/youlai-system/src/main/java/com/youlai/boot/system/security/provider/WxMaAuthenticationProvider.java
similarity index 96%
rename from src/main/java/com/youlai/boot/framework/security/provider/WxMaAuthenticationProvider.java
rename to youlai-system/src/main/java/com/youlai/boot/system/security/provider/WxMaAuthenticationProvider.java
index d30bfd60..d652d52d 100644
--- a/src/main/java/com/youlai/boot/framework/security/provider/WxMaAuthenticationProvider.java
+++ b/youlai-system/src/main/java/com/youlai/boot/system/security/provider/WxMaAuthenticationProvider.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.framework.security.provider;
+package com.youlai.boot.system.security.provider;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
@@ -7,7 +7,7 @@ import com.youlai.boot.framework.security.exception.NeedBindMobileException;
import com.youlai.boot.framework.security.model.SysUserDetails;
import com.youlai.boot.framework.security.model.UserAuthInfo;
import com.youlai.boot.framework.security.model.WxMaAuthenticationToken;
-import com.youlai.boot.framework.security.service.SysUserDetailsService;
+import com.youlai.boot.system.security.service.SysUserDetailsService;
import com.youlai.boot.system.model.entity.UserSocial;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
diff --git a/src/main/java/com/youlai/boot/framework/security/service/PermissionService.java b/youlai-system/src/main/java/com/youlai/boot/system/security/service/PermissionService.java
similarity index 97%
rename from src/main/java/com/youlai/boot/framework/security/service/PermissionService.java
rename to youlai-system/src/main/java/com/youlai/boot/system/security/service/PermissionService.java
index 46516f3c..893ed1ba 100644
--- a/src/main/java/com/youlai/boot/framework/security/service/PermissionService.java
+++ b/youlai-system/src/main/java/com/youlai/boot/system/security/service/PermissionService.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.framework.security.service;
+package com.youlai.boot.system.security.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
diff --git a/src/main/java/com/youlai/boot/framework/security/service/SysUserDetailsService.java b/youlai-system/src/main/java/com/youlai/boot/system/security/service/SysUserDetailsService.java
similarity index 98%
rename from src/main/java/com/youlai/boot/framework/security/service/SysUserDetailsService.java
rename to youlai-system/src/main/java/com/youlai/boot/system/security/service/SysUserDetailsService.java
index 2bbe035b..e13b4a54 100644
--- a/src/main/java/com/youlai/boot/framework/security/service/SysUserDetailsService.java
+++ b/youlai-system/src/main/java/com/youlai/boot/system/security/service/SysUserDetailsService.java
@@ -1,4 +1,4 @@
-package com.youlai.boot.framework.security.service;
+package com.youlai.boot.system.security.service;
import com.youlai.boot.framework.security.model.SysUserDetails;
import com.youlai.boot.framework.security.model.UserAuthInfo;
diff --git a/src/main/java/com/youlai/boot/system/service/ConfigService.java b/youlai-system/src/main/java/com/youlai/boot/system/service/ConfigService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/service/ConfigService.java
rename to youlai-system/src/main/java/com/youlai/boot/system/service/ConfigService.java
diff --git a/src/main/java/com/youlai/boot/system/service/DeptService.java b/youlai-system/src/main/java/com/youlai/boot/system/service/DeptService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/service/DeptService.java
rename to youlai-system/src/main/java/com/youlai/boot/system/service/DeptService.java
diff --git a/src/main/java/com/youlai/boot/system/service/DictItemService.java b/youlai-system/src/main/java/com/youlai/boot/system/service/DictItemService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/service/DictItemService.java
rename to youlai-system/src/main/java/com/youlai/boot/system/service/DictItemService.java
diff --git a/src/main/java/com/youlai/boot/system/service/DictService.java b/youlai-system/src/main/java/com/youlai/boot/system/service/DictService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/service/DictService.java
rename to youlai-system/src/main/java/com/youlai/boot/system/service/DictService.java
diff --git a/src/main/java/com/youlai/boot/system/service/LogService.java b/youlai-system/src/main/java/com/youlai/boot/system/service/LogService.java
similarity index 100%
rename from src/main/java/com/youlai/boot/system/service/LogService.java
rename to youlai-system/src/main/java/com/youlai/boot/system/service/LogService.java
diff --git a/src/main/java/com/youlai/boot/system/service/MenuService.java b/youlai-system/src/main/java/com/youlai/boot/system/service/MenuService.java
similarity index 93%
rename from src/main/java/com/youlai/boot/system/service/MenuService.java
rename to youlai-system/src/main/java/com/youlai/boot/system/service/MenuService.java
index 1429226c..d6c80b26 100644
--- a/src/main/java/com/youlai/boot/system/service/MenuService.java
+++ b/youlai-system/src/main/java/com/youlai/boot/system/service/MenuService.java
@@ -1,7 +1,6 @@
package com.youlai.boot.system.service;
import com.baomidou.mybatisplus.extension.service.IService;
-import com.youlai.boot.codegen.model.entity.GenTable;
import com.youlai.boot.system.model.form.MenuForm;
import com.youlai.boot.common.model.Option;
import com.youlai.boot.system.model.entity.Menu;
@@ -78,5 +77,4 @@ public interface MenuService extends IService