You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

211 lines
8.5 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Repository Guidelines
## 文档定位
本文件聚焦“写代码时需要的架构与模块提示信息”,不包含 Git 流程、编译或测试命令。
## 系统架构总览
- 工程形态Maven 多模块单体应用,前后端分离(`ruoyi-ui` + Spring Boot 后端)。
- 模块分层:
- `ruoyi-admin`应用入口、Controller 暴露层。
- `ruoyi-framework`安全认证、AOP、拦截器、数据权限与限流实现层。
- `ruoyi-system`:系统业务域(用户/角色/菜单/字典等)服务层。
- `ruoyi-common`:跨模块基础设施与通用契约层。
- `ruoyi-quartz`:任务调度能力层。
- `ruoyi-generator`:代码生成能力层。
- 关键依赖方向:`admin -> framework -> system -> common``quartz/generator -> common`。
## Backend Tech Stack (With Versions)
版本来源:根 `pom.xml``properties``dependencyManagement`
| 技术 | 版本 | 说明 |
|---|---:|---|
| Java | 17 | 语言与运行时基线 |
| Spring Boot BOM | 3.5.8 | Spring 生态版本管理 |
| MyBatis Spring Boot Starter | 3.0.5 | ORM/Mapper |
| Druid Spring Boot 3 Starter | 1.2.27 | 数据源与连接池 |
| PageHelper Starter | 2.1.1 | 分页 |
| MySQL Connector/J | 8.2.0 | MySQL 驱动 |
| SpringDoc OpenAPI | 2.8.14 | API 文档 |
| Spring Security | 由 Boot 3.5.8 管理 | 认证鉴权 |
| Spring Data Redis | 由 Boot 3.5.8 管理 | 缓存/会话 |
| JJWT | 0.9.1 | JWT |
| Quartz | 2.5.2 | 定时任务 |
| Fastjson2 | 2.0.60 | JSON |
| Apache POI | 4.1.2 | Excel 导入导出 |
| Velocity | 2.3 | 代码生成模板 |
| Kaptcha | 2.3.3 | 验证码 |
| YAUAA | 7.32.0 | User-Agent 解析 |
| OSHI | 6.9.1 | 主机监控信息 |
| Commons IO | 2.21.0 | IO 工具 |
| Jakarta Servlet API | 6.0.0 | Servlet 规范 |
## ruoyi-common 模块深度分析
### 模块定位与边界
- `ruoyi-common` 是后端基础设施层,提供统一契约、基类、工具和安全过滤,不承载业务流程。
- 当前约 `109` 个 Java 类,属于项目复用中心模块。
### 包结构概览(一级包)
- `utils`36通用工具主集合。
- `core`22Controller/Domain/Page/Redis/Text 基础抽象。
- `exception`18统一异常体系。
- `annotation`9横切能力注解契约。
- `constant`6/`enums`8常量与策略枚举。
- `filter`6/`xss`2请求过滤与输入安全。
- `config`2通用配置与序列化器。
### 架构中心性(跨模块复用)
- `ruoyi-framework`: 148 次 `import com.ruoyi.common.*`
- `ruoyi-admin`: 138 次
- `ruoyi-system`: 86 次
- `ruoyi-quartz`: 40 次
- `ruoyi-generator`: 25 次
- 高频类:`StringUtils`、`AjaxResult`、`Constants`、`BaseController`、`SecurityUtils`、`ExcelUtil`。
### 设计机制(写代码时重点)
- 契约与实现分离:`@DataScope/@RateLimiter/@RepeatSubmit/@Log` 定义在 common实现放在 framework 的 Aspect/Interceptor。
- 统一返回规范Controller 继承 `BaseController`,统一输出 `AjaxResult`/`TableDataInfo`。
- 统一实体扩展位:`BaseEntity.params` 用于数据权限 SQL 片段等横切参数传递。
- 统一安全输入链路:`SqlUtil`、`XssFilter`、`XssValidator`、`RepeatableFilter` 负责请求与参数安全治理。
## ruoyi-common 类级别索引清单(按包)
### `annotation`
| 类 | 使用场景 |
|---|---|
| `Anonymous` | 标记匿名可访问接口 |
| `DataScope` | 服务查询方法注入数据权限条件 |
| `DataSource` | 动态切换主从数据源 |
| `Excel`/`Excels` | 实体字段导入导出映射 |
| `Log` | 业务操作日志切面采集 |
| `RateLimiter` | 接口限流(全局或按 IP |
| `RepeatSubmit` | 防重复提交 |
| `Sensitive` | 返回字段脱敏 |
### `config`
| 类 | 使用场景 |
|---|---|
| `RuoYiConfig` | 读取 `ruoyi.*` 业务基础配置(上传路径、验证码类型等) |
| `SensitiveJsonSerializer` | 配合 `@Sensitive` 做序列化脱敏 |
### `constant`
| 类 | 使用场景 |
|---|---|
| `Constants` | 全局常量JWT 字段、权限标识、资源前缀等) |
| `CacheConstants` | Redis key 前缀统一管理 |
| `HttpStatus` | 返回状态码常量 |
| `GenConstants` | 代码生成器常量 |
| `ScheduleConstants` | 调度任务常量 |
| `UserConstants` | 用户/角色状态常量 |
### `core.controller`
| 类 | 使用场景 |
|---|---|
| `BaseController` | 分页、排序、安全用户获取、统一响应快捷方法 |
### `core.domain`
| 类 | 使用场景 |
|---|---|
| `AjaxResult` | 标准接口返回体Map 风格) |
| `R<T>` | 泛型响应体(类型化返回) |
| `BaseEntity` | 审计字段与 `params` 扩展参数 |
| `TreeEntity`/`TreeSelect` | 树结构实体与前端下拉树数据 |
### `core.domain.entity`
| 类 | 使用场景 |
|---|---|
| `SysUser` | 用户领域共享实体含校验、Excel 注解) |
| `SysRole` | 角色与数据权限范围 |
| `SysDept` | 部门树领域实体 |
| `SysMenu` | 菜单与权限节点 |
| `SysDictType`/`SysDictData` | 字典类型与字典项 |
### `core.domain.model`
| 类 | 使用场景 |
|---|---|
| `LoginBody` | 登录请求体 |
| `RegisterBody` | 注册请求体 |
| `LoginUser` | 安全上下文主体token、权限、登录态 |
### `core.page`
| 类 | 使用场景 |
|---|---|
| `PageDomain` | 分页参数承载 |
| `TableSupport` | 从请求提取分页参数 |
| `TableDataInfo` | 表格分页响应结构 |
### `core.redis`
| 类 | 使用场景 |
|---|---|
| `RedisCache` | 对 `RedisTemplate` 的统一封装(对象/列表/集合/Map/过期) |
### `core.text`
| 类 | 使用场景 |
|---|---|
| `Convert` | 安全类型转换 |
| `StrFormatter` | `{}` 占位符格式化 |
| `CharsetKit` | 字符集处理 |
### `enums`
| 类 | 使用场景 |
|---|---|
| `BusinessType`/`OperatorType` | 操作日志分类 |
| `DataSourceType` | 主从数据源策略 |
| `LimitType` | 限流维度(默认/IP |
| `HttpMethod` | 请求方法匹配 |
| `UserStatus`/`BusinessStatus` | 状态语义统一 |
| `DesensitizedType` | 脱敏策略函数集合 |
### `exception`
| 类 | 使用场景 |
|---|---|
| `BaseException` | 业务基础异常(支持国际化 code |
| `ServiceException` | 服务层运行时异常(可带状态码) |
| `UtilException` | 工具类异常 |
| `DemoModeException`/`GlobalException` | 演示模式与全局业务异常 |
| `file.*` | 文件上传、大小、扩展名异常 |
| `user.*` | 登录、验证码、密码重试、黑名单异常 |
| `job.TaskException` | 定时任务执行异常 |
### `filter`
| 类 | 使用场景 |
|---|---|
| `RepeatableFilter`/`RepeatedlyRequestWrapper` | JSON 请求体可重复读取 |
| `XssFilter`/`XssHttpServletRequestWrapper` | 请求参数与 JSON 体 XSS 清洗 |
| `RefererFilter` | 防盗链 Referer 校验 |
| `PropertyPreExcludeFilter` | JSON 属性排除辅助 |
### `utils`(重点工具类补充)
| 类 | 使用场景 |
|---|---|
| `StringUtils` | 字符串/集合空判断、模板格式化、命名转换 |
| `DateUtils` | 日期解析与格式化 |
| `SecurityUtils` | 获取当前用户、权限匹配、密码加密 |
| `ServletUtils` | request/response/session 获取与渲染 |
| `PageUtils` | 分页启动与清理 |
| `DictUtils` | 字典缓存读写与标签值转换 |
| `FileUploadUtils` | 统一上传路径、命名、扩展名校验 |
| `FileUtils`/`ImageUtils`/`MimeTypeUtils` | 文件读写、图片处理、类型识别 |
| `ExcelUtil` | Excel 导入导出核心工具 |
| `SqlUtil` | orderBy 白名单校验与关键字过滤 |
| `IpUtils`/`AddressUtils` | IP 解析与归属地查询 |
| `HttpUtils`/`HttpHelper`/`UserAgentUtils` | HTTP 调用、请求体读取、UA 解析 |
| `SpringUtils` | 非托管代码获取 Bean/环境信息 |
| `BeanUtils`/`BeanValidators`/`ReflectUtils` | Bean 复制、校验、反射访问 |
| `IdUtils`/`UUID`/`Seq` | 唯一 ID 与序列号 |
| `Md5Utils`/`Base64` | 摘要与编码 |
### `xss`
| 类 | 使用场景 |
|---|---|
| `Xss` | 字段级 XSS 校验注解 |
| `XssValidator` | XSS 校验实现 |
## 写代码时的实用提示(聚焦 common
- 返回值统一:优先使用 `AjaxResult`/`TableDataInfo`,避免模块间返回结构不一致。
- 分页与排序安全:动态排序字段必须走 `SqlUtil.escapeOrderBySql` 逻辑。
- Redis key 必须使用 `CacheConstants` 前缀,避免不同模块 key 冲突。
- 上传逻辑优先复用 `FileUploadUtils`,不要在业务层重复拼接文件路径。
- 涉及脱敏字段优先用 `@Sensitive`,不要在 Controller 手工字符串处理。
- 新增通用能力时,先判断是否应放在 `ruoyi-common`(跨模块复用)还是业务模块(仅单域使用)。