1.整体架构

2.后端结构
代码结构如下:

后端的代码整体目录结构如下:
ruoyi/
├── pom.xml # 父工程(聚合模块 + 依赖管理)
├── ruoyi-admin/ # 后台管理主模块
├── ruoyi-common/ # 通用工具库
├── ruoyi-framework/ # 框架核心
├── ruoyi-system/ # 系统业务模块
├── ruoyi-quartz/ # 定时任务
└── ruoyi-generator/ # 代码生成
(1)后台管理主模块ruoyi-admin
ruoyi-admin/
├── src/
│ ├── main/
│ │ ├── java/com/ruoyi/
│ │ │ ├── web/ # 核心Web层
│ │ │ │ ├── controller/
│ │ │ │ │ ├── common/ # 通用接口
│ │ │ │ │ │ ├── CaptchaController.java # 验证码
│ │ │ │ │ │ └── FileController.java # 文件上传/下载
│ │ │ │ │ │
│ │ │ │ │ ├── system/ # 系统模块API(示例)
│ │ │ │ │ │ ├── SysUserController.java
│ │ │ │ │ │ └── SysRoleController.java
│ │ │ │ │ │
│ │ │ │ │ └── monitor/ # 监控类API
│ │ │ │ │ ├── ServerController.java # 服务器监控
│ │ │ │ │ └── RedisController.java # 缓存监控
│ │ │ │ │
│ │ │ │ └── filter/ # 过滤器
│ │ │ │ ├── RepeatSubmitFilter.java # 防重复提交
│ │ │ │ └── XssFilter.java # XSS防护
│ │ │ │
│ │ │ ├── config/ # 全局配置
│ │ │ │ ├── SwaggerConfig.java # API文档
│ │ │ │ ├── MyBatisConfig.java # MyBatis配置
│ │ │ │ ├── SecurityConfig.java # 安全配置(放行路径等)
│ │ │ │ └── ThreadPoolConfig.java # 异步线程池
│ │ │ │
│ │ │ ├── aspect/ # 切面
│ │ │ │ ├── DataScopeAspect.java # 数据权限过滤
│ │ │ │ └── RateLimitAspect.java # 限流控制
│ │ │ │
│ │ │ └── Application.java # 主启动类
│ │ │
│ │ └── resources/
│ │ ├── static/ # 静态资源
│ │ │ ├── css/ # 样式文件
│ │ │ ├── img/ # 图片
│ │ │ └── js/ # 前端工具库(非Vue编译产物)
│ │ │
│ │ ├── templates/ # 模板文件(如邮件模板)
│ │ │ └── mail/register.html # 用户注册邮件模板
│ │ │
│ │ ├── application.yml # 主配置
│ │ ├── application-dev.yml # 开发环境配置
│ │ ├── application-prod.yml # 生产环境配置
│ │ │
│ │ └── banner.txt # 启动Banner
│ │
│ └── test/ # 测试代码
│ └── java/com/ruoyi/web/controller/TestController.java
│
├── Dockerfile # 容器化部署配置
├── pom.xml # 模块依赖配置
└── target/ # 编译输出目录(自动生成)
(2)通用工具库ruoyi-common
ruoyi-common/
├── src/
│ ├── main/
│ │ ├── java/com/ruoyi/common/
│ │ │ ├── annotation/ # 核心注解
│ │ │ │ ├── DataScope.java # 数据权限过滤注解
│ │ │ │ ├── Excel.java # Excel导出注解
│ │ │ │ ├── RateLimiter.java # 限流注解(基于Guava)
│ │ │ │ └── Log.java # 操作日志记录注解
│ │ │ │
│ │ │ ├── config/ # 跨模块配置
│ │ │ │ ├── RedisConfig.java # 自定义Redis序列化
│ │ │ │ ├── JacksonConfig.java # 日期全局格式化
│ │ │ │ └── FeignConfig.java # Feign透传Header配置
│ │ │ │
│ │ │ ├── constant/ # 常量池
│ │ │ │ ├── CacheConstants.java # Redis缓存键命名规范
│ │ │ │ ├── UserConstants.java # 用户状态常量
│ │ │ │ └── ServiceNameConstants.java # 微服务名常量
│ │ │ │
│ │ │ ├── core/ # 核心工具
│ │ │ │ ├── domain/ # 基础领域对象
│ │ │ │ │ ├── R.java # 统一响应体
│ │ │ │ │ ├── BaseEntity.java # 实体基类(含创建时间等字段)
│ │ │ │ │ └── PageResult.java # 分页结果封装
│ │ │ │ │
│ │ │ │ ├── utils/ # 工具类库
│ │ │ │ │ ├── ServletUtils.java # Http请求工具
│ │ │ │ │ ├── StringUtils.java # 增强版字符串工具
│ │ │ │ │ ├── ExcelUtil.java # POI二次封装
│ │ │ │ │ └── IdUtils.java # 分布式ID生成器
│ │ │ │ │
│ │ │ │ └── redis/ # Redis高级封装
│ │ │ │ ├── RedisLock.java # 分布式锁
│ │ │ │ └── RedisCache.java # 缓存模板方法
│ │ │ │
│ │ │ ├── exception/ # 异常体系
│ │ │ │ ├── ServiceException.java # 业务异常
│ │ │ │ ├── CaptchaException.java # 验证码异常
│ │ │ │ └── GlobalExceptionHandler.java # 全局处理器
│ │ │ │
│ │ │ ├── xss/ # 安全防护
│ │ │ │ ├── XssFilter.java # XSS过滤
│ │ │ │ └── XssHttpServletRequestWrapper.java # 请求包装器
│ │ │ │
│ │ │ └── enums/ # 枚举类
│ │ │ ├── BusinessType.java # 操作类型枚举
│ │ │ └── UserStatus.java # 用户状态枚举
│ │ │
│ │ └── resources/
│ │ ├── i18n/ # 国际化资源
│ │ │ ├── messages.properties # 默认语言包
│ │ │ ├── messages_en.properties # 英文
│ │ │ └── messages_ja.properties # 日文
│ │ │
│ │ └── META-INF/
│ │ └── spring.factories # 自动装配配置(Spring Boot 2.7+)
│ │
│ └── test/ # 测试案例
│ └── java/com/ruoyi/common/utils/StringUtilsTest.java
│
├── pom.xml # 关键依赖
│ ├── hutool-all # 全能工具库
│ ├── lombok # 简化POJO
│ └── spring-boot-starter-validation # 参数校验
└── target/
(3)框架核心ruoyi-framework
ruoyi-framework/
├── src/main/java/com/ruoyi/framework/
│ ├── aspectj/ # AOP切面编程
│ │ ├── DataScopeAspect.java # 数据权限过滤(自动拼接SQL)
│ │ ├── LogAspect.java # 操作日志记录(@Log注解触发)
│ │ └── RepeatSubmitAspect.java # 基于Redis的防重复提交
│ │
│ ├── config/ # Spring Boot配置类
│ │ ├── RedisConfig.java # Redis连接池与序列化配置
│ │ ├── SecurityConfig.java # Spring Security核心配置(新版)
│ │ ├── ShiroConfig.java # 旧版权限配置(兼容性保留)
│ │ └── ThreadPoolConfig.java # 异步任务线程池参数
│ │
│ ├── datasource/ # 数据源管理
│ │ ├── DynamicDataSource.java # 动态数据源路由(主从/多租户)
│ │ └── DataSourceAspect.java # @DataSource注解实现切换
│ │
│ ├── interceptor/ # 拦截器链
│ │ ├── RateLimitInterceptor.java # 接口限流(令牌桶算法)
│ │ └── HeaderInterceptor.java # 请求头校验
│ │
│ ├── manager/ # 资源管理
│ │ ├── AsyncManager.java # 异步任务调度(记录日志等)
│ │ └── Factory.java # 对象工厂模式封装
│ │
│ ├── security/ # 安全认证(Spring Security)
│ │ ├── web/
│ │ │ ├── AuthenticateFilter.java # JWT令牌校验过滤器
│ │ │ └── SecurityUtils.java # 获取当前用户上下文
│ │ ├── PasswordService.java # 密码加密与验证
│ │ └── LoginUser.java # 用户认证信息DTO
│ │
│ ├── servlet/ # Servlet扩展
│ │ ├── RepeatableFilter.java # 请求包装(支持重复读取Body)
│ │ └── XssFilter.java # XSS攻击过滤
│ │
│ └── web/ # Web层工具
│ ├── BaseController.java # 控制器父类(统一响应格式)
│ ├── TableDataInfo.java # 分页数据标准封装
│ └── ServletUtils.java # 快速获取请求参数
│
├── src/main/resources/
│ ├── ehcache.xml # Ehcache缓存配置(可选)
│ └── messages/ # 国际化文件
│ ├── messages_zh_CN.properties # 中文提示
│ └── messages_en_US.properties # 英文提示
│
└── pom.xml # 依赖声明(核心依赖:spring-boot-starter-*)
核心功能交互的流程图:

(4)系统业务模块ruoyi-system
ruoyi-system/
├── src/main/java/com/ruoyi/system/
│ ├── controller/ # 控制器层(REST API)
│ │ ├── SysUserController.java # 用户管理(增删改查/重置密码)
│ │ ├── SysRoleController.java # 角色权限分配
│ │ ├── SysMenuController.java # 菜单树形结构管理
│ │ └── SysDictController.java # 字典数据管理
│ │
│ ├── domain/ # 实体类(对应数据库表)
│ │ ├── SysUser.java # 用户实体(关联角色、部门)
│ │ ├── SysRole.java # 角色实体(包含权限字符串)
│ │ └── SysDictData.java # 字典数据实体
│ │
│ ├── mapper/ # MyBatis Mapper接口
│ │ ├── SysUserMapper.java # 用户表SQL操作
│ │ ├── SysRoleMapper.java # 角色表SQL操作(含动态权限SQL)
│ │ └── SysMenuMapper.xml # XML配置(树形查询SQL)
│ │
│ ├── service/ # 业务逻辑层
│ │ ├── ISysUserService.java # 用户服务接口
│ │ ├── SysUserServiceImpl.java # 用户服务实现(密码加密/事务控制)
│ │ ├── ISysMenuService.java # 菜单服务接口(构建前端路由)
│ │ └── SysMenuServiceImpl.java # 菜单服务实现(递归构建树形结构)
│ │
│ └── utils/ # 模块专用工具
│ └── DictUtils.java # 字典数据缓存工具类
│
├── src/main/resources/
│ ├── mapper/system/ # MyBatis XML文件
│ │ ├── SysUserMapper.xml # 用户复杂查询(如分页+数据权限)
│ │ └── SysRoleMenuMapper.xml # 角色-菜单关联操作
│ └── application.yml # 模块独立配置(如业务参数)
│
└── test/ # 单元测试(示例)
└── com/ruoyi/system/service/SysUserServiceTest.java
模块交互流程:

(5)定时任务模块ruoyi-quartz
ruoyi-quartz/
├── src/main/java/com/ruoyi/quartz/
│ ├── config/ # 调度器配置
│ │ └── SchedulerConfig.java # 初始化Quartz Scheduler(与Spring集成)
│ │
│ ├── domain/ # 实体类
│ │ ├── SysJob.java # 任务实体(cron表达式/调用目标方法)
│ │ └── SysJobLog.java # 任务执行日志实体
│ │
│ ├── mapper/ # 数据持久层
│ │ ├── SysJobMapper.java # 任务配置CRUD
│ │ └── SysJobLogMapper.java # 日志记录操作
│ │
│ ├── service/ # 业务逻辑
│ │ ├── ISysJobService.java # 任务管理接口
│ │ ├── SysJobServiceImpl.java # 任务增删改查实现
│ │ └── QuartzManager.java # Quartz核心工具类(动态操作任务)
│ │
│ ├── task/ # 任务执行逻辑
│ │ ├── QuartzDisallowConcurrentExecution.java # 禁止并发执行的Job
│ │ └── QuartzJobExecution.java # 实际任务执行代理(反射调用目标方法)
│ │
│ └── util/ # 工具类
│ └── ScheduleUtils.java # 任务状态校验与触发器构建
│
├── src/main/resources/
│ ├── mapper/quartz/ # MyBatis XML
│ │ ├── SysJobMapper.xml # 任务查询SQL(包含状态过滤)
│ │ └── SysJobLogMapper.xml # 日志分页查询
│ └── application.yml # Quartz数据源配置(默认使用系统库)
模块交互流程图

(6)代码生成模块ruoyi-generator
ruoyi-generator/
├── src/main/java/com/ruoyi/generator/
│ ├── config/ # 配置类
│ │ └── GenConfig.java # 代码生成全局配置(作者/包路径等)
│ │
│ ├── domain/ # 数据模型
│ │ ├── TableInfo.java # 表元数据(表名/字段/主键)
│ │ └── ColumnInfo.java # 列信息(类型/注释/Java字段映射)
│ │
│ ├── mapper/ # 数据库访问
│ │ └── GenMapper.java # 查询表结构(information_schema)
│ │
│ ├── service/ # 核心逻辑
│ │ ├── IGenService.java # 生成接口
│ │ └── GenServiceImpl.java # 实现类(模板渲染/文件写入)
│ │
│ └── util/ # 工具类
│ ├── GenUtils.java # 类型转换(MySQL→Java)
│ └── VelocityUtils.java # 模板引擎初始化
│
├── src/main/resources/
│ ├── templates/ # Velocity模板
│ │ ├── vm/java/ # 后端模板
│ │ │ ├── controller.java.vm # Controller模板
│ │ │ ├── service.java.vm # Service接口模板
│ │ │ ├── serviceImpl.java.vm # Service实现模板
│ │ │ └── mapper.java.vm # MyBatis Mapper模板
│ │ │
│ │ ├── vm/xml/ # MyBatis XML模板
│ │ │ └── mapper.xml.vm # SQL映射文件模板
│ │ │
│ │ └── vm/vue/ # 前端模板
│ │ ├── api.js.vm # API请求模板
│ │ ├── index.vue.vm # Vue页面模板
│ │ └── component.vue.vm # 子组件模板
│ │
│ └── application.yml # 生成路径配置(如默认包名com.ruoyi)
模板渲染流程:

3.前端结构
ruoyi-ui/
├── build/ # Webpack 构建配置(Vue CLI 内部)
├── public/ # 静态资源(不参与打包)
│ ├── favicon.ico # 网站图标
│ └── index.html # 主入口 HTML
├── src/ # 核心代码目录
│ ├── api/ # 接口请求封装
│ │ ├── system.js # 系统模块 API(用户/角色等)
│ │ └── ... # 其他模块 API
│ ├── assets/ # 静态资源(图片/字体等)
│ ├── components/ # 全局公共组件
│ │ ├── Breadcrumb/ # 面包屑导航
│ │ ├── SvgIcon/ # SVG 图标组件
│ │ └── ...
│ ├── directive/ # Vue 自定义指令
│ │ └── permission.js # 权限控制指令(v-permission)
│ ├── layout/ # 框架布局组件
│ │ ├── components/ # 布局子组件(侧边栏/导航栏等)
│ │ └── index.vue # 主布局入口
│ ├── router/ # 路由配置
│ │ └── index.js # 动态路由生成逻辑
│ ├── store/ # Vuex 状态管理
│ │ ├── modules/ # 模块化状态
│ │ │ ├── user.js # 用户信息状态
│ │ │ └── permission.js # 权限路由状态
│ │ └── index.js # Vuex 主入口
│ ├── styles/ # 全局样式
│ │ ├── element-ui.scss # Element UI 主题覆盖
│ │ └── variables.scss # Sass 变量定义
│ ├── utils/ # 工具函数
│ │ ├── auth.js # Token 处理
│ │ ├── request.js # Axios 请求封装
│ │ └── ...
│ ├── views/ # 业务页面
│ │ ├── system/ # 系统管理模块
│ │ │ ├── user/ # 用户管理页面
│ │ │ ├── role/ # 角色管理页面
│ │ │ └── ...
│ │ ├── dashboard/ # 控制台页面
│ │ └── ...
│ ├── App.vue # Vue 根组件
│ └── main.js # 应用入口文件
├── .env.development # 开发环境变量配置
├── .env.production # 生产环境变量配置
├── .eslintrc.js # ESLint 规则配置
├── babel.config.js # Babel 配置
├── package.json # 项目依赖和脚本
└── vue.config.js # Vue CLI 自定义配置
其中,package.json文件的详细解释如下:
{
"name": "ruoyi-ui", // 项目名称(必须全小写、无空格)
"version": "1.0.0", // 项目版本号(遵循语义化版本规范)
"private": true, // 是否为私有项目(避免误发布到 npm)
"scripts": { // 自定义脚本命令(通过 `npm run <script>` 执行)
"dev": "vue-cli-service serve", // 启动开发服务器
"build:prod": "vue-cli-service build", // 生产环境打包
"build:stage": "vue-cli-service build --mode staging", // 测试环境打包
"preview": "vue-cli-service preview", // 预览生产环境构建
"lint": "eslint --ext .js,.vue src" // 代码格式检查
},
"dependencies": { // 生产环境依赖(会被打包到最终代码中)
"vue": "^2.6.14", // Vue 2.x 核心库
"vue-router": "^3.5.1", // 路由管理
"vuex": "^3.6.2", // 状态管理
"axios": "^0.21.1", // HTTP 请求库
"element-ui": "^2.15.6", // UI 组件库
"core-js": "^3.8.3" // 浏览器兼容性垫片
},
"devDependencies": { // 开发环境依赖(仅用于本地开发)
"@vue/cli-service": "^4.5.15", // Vue CLI 脚手架工具
"eslint": "^6.8.0", // 代码规范检查
"sass": "^1.26.5", // CSS 预处理器
"sass-loader": "^8.0.2" // Webpack 的 Sass 加载器
},
"browserslist": [ // 目标浏览器兼容范围
"> 1%", // 全球使用率 >1% 的浏览器
"last 2 versions" // 兼容最新两个版本
]
}
vue.config.js配置文件解释如下:
vue.config.js
是 Vue CLI 项目的核心配置文件,用于自定义构建工具(Webpack)的默认行为。
const { defineConfig } = require('@vue/cli-service');
const path = require('path');
module.exports = defineConfig({
// 基本配置
publicPath: './', // 部署路径(相对路径避免前端路由 404)
outputDir: 'dist', // 打包输出目录
assetsDir: 'static', // 静态资源目录(js/css/img 等)
lintOnSave: process.env.NODE_ENV !== 'production', // 生产环境下禁用 ESLint
// 开发服务器配置
devServer: {
port: 80, // 开发服务器端口
proxy: { // API 代理(解决跨域)
'/api': {
target: 'http://localhost:8080', // 后端地址
changeOrigin: true, // 允许跨域
pathRewrite: {
'^/api': '' // 重写路径(去掉 /api 前缀)
}
}
}
},
// Webpack 高级配置
configureWebpack: {
resolve: {
alias: { // 路径别名
'@': path.resolve(__dirname, 'src'),
'components': '@/components'
}
},
externals: process.env.NODE_ENV === 'production' ? {
'vue': 'Vue', // CDN 引入的库(减少打包体积)
'element-ui': 'ELEMENT'
} : {}
},
// 链式操作(更细粒度控制 Webpack)
chainWebpack: config => {
config.plugin('html').tap(args => {
args[0].title = '若依管理系统'; // 修改 HTML 标题
return args;
});
}
});