# 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`(22):Controller/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` | 泛型响应体(类型化返回) | | `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`(跨模块复用)还是业务模块(仅单域使用)。