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.jsVue 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;
    });
  }
});