# RuoYi-Vue 代码生成平台

基于 RuoYi-Vue v3.8.8 二次开发的前后端分离后台管理系统。项目保留若依的用户、角色、菜单、日志、监控、定时任务、代码生成等基础能力，并在 `ruoyi-generator` 与 `ruoyi-ui/src/views/generator` 下扩展了项目级代码生成平台能力。

当前仓库更适合按“后台基础框架 + 可配置代码生成平台”来理解：先用若依提供认证、权限、菜单、数据权限、日志和基础运维能力，再围绕项目、数据源、模板、模块、代码片段和项目结构生成完整代码包。

## 技术栈

| 层级 | 技术 |
| --- | --- |
| 后端 | Java 8、Spring Boot 2.5.15、Spring Framework 5.3.39、Spring Security 5.7.12 |
| 数据访问 | MyBatis、PageHelper、Druid、MySQL |
| 缓存与任务 | Redis、Quartz |
| 接口与工具 | JWT、Swagger/Springfox 3、Velocity、Fastjson2、Apache POI、OSHI |
| 后台前端 | Vue 2.6.12、Vue CLI 4.4.6、Element UI 2.15.14、Vue Router、Vuex、Axios |
| 前台工作台 | Vue 3、Vite、Element Plus、Vue Router、Axios |
| 构建 | Maven、npm |

## 架构概览

```mermaid
flowchart LR
  A["浏览器 / ruoyi-ui"] --> B["Vue DevServer<br/>/dev-api 代理"]
  B --> C["ruoyi-admin<br/>Spring Boot 入口"]
  C --> D["ruoyi-framework<br/>安全、配置、Web 基础设施"]
  C --> E["ruoyi-system<br/>用户、角色、菜单、字典等"]
  C --> F["ruoyi-generator<br/>代码生成与扩展平台"]
  C --> G["ruoyi-quartz<br/>定时任务"]
  C --> H["MySQL"]
  C --> I["Redis"]
  F --> J["Velocity 模板"]
  F --> K["代码预览 / ZIP 下载"]
```

## 目录结构

| 路径 | 说明 |
| --- | --- |
| `ruoyi-admin` | 后端启动入口，打包为可执行 `war`；包含 Web Controller、配置文件和静态资源入口。 |
| `ruoyi-framework` | 若依框架层，承载安全认证、权限校验、数据源、Web 配置、拦截器、异步任务等基础能力。 |
| `ruoyi-system` | 系统管理业务模块，包括用户、角色、菜单、部门、岗位、字典、参数、通知公告、日志等。 |
| `ruoyi-quartz` | 定时任务模块，封装 Quartz 任务、任务日志和调度管理。 |
| `ruoyi-generator` | 代码生成模块；包含若依原生表驱动代码生成，以及本项目扩展的项目、模板、数据源、模块、代码片段、项目结构等功能。 |
| `ruoyi-common` | 通用工具、常量、注解、基础实体、响应对象、异常、工具类等公共代码。 |
| `ruoyi-ui` | Vue 2 + Element UI 后台前端工程。 |
| `easycode-web` | Vue 3 + Vite 前台生成工作台，提供前台登录、数据库生成、表结构编辑和项目预览。 |
| `sql` | 数据库初始化与扩展脚本。 |
| `doc` | 代码生成平台规划文档。 |
| `docs` | 部分扩展 Controller 的接口说明文档。 |
| `bin`、`ry.bat`、`ry.sh` | 启停脚本与辅助脚本。 |

## 核心功能

### 若依基础能力

- 用户、角色、菜单、部门、岗位管理。
- 字典、参数、通知公告管理。
- 登录日志、操作日志、在线用户管理。
- 服务监控、缓存监控、Druid 连接池监控。
- Quartz 定时任务与任务日志。
- Swagger 接口文档、表单构建、若依原生代码生成。

### 代码生成平台扩展

| 功能 | 后端接口前缀 | 前端位置 |
| --- | --- | --- |
| 数据源管理 | `/generator/datasource` | `ruoyi-ui/src/views/generator/datasource` |
| 项目管理 | `/generator/project` | `ruoyi-ui/src/views/generator/project` |
| 项目关联表 | `/generator/project/table` | `ProjectTableConfig.vue` |
| 项目关联模块 | `/generator/project/module` | `ProjectModuleConfig.vue` |
| 项目模板配置 | `/generator/project/template` | `ProjectTemplateConfig.vue` |
| 项目结构树 | `/generator/structure` | `ruoyi-ui/src/views/generator/structure` |
| 模板管理 | `/generator/template` | `ruoyi-ui/src/views/generator/template` |
| 模板文件管理 | `/generator/templateFile` | `templateFile.js` 与模板相关页面 |
| 功能模块管理 | `/generator/module` | `ruoyi-ui/src/views/generator/module` |
| 代码片段管理 | `/generator/snippet` | `ruoyi-ui/src/views/generator/snippet` |
| 原生表代码生成 | `/tool/gen` | `ruoyi-ui/src/views/tool/gen` |

扩展生成链路大致为：维护数据源和数据表，配置项目基本信息、项目关联表、模块、模板和结构树，通过 `GenProjectController` 预览或下载项目结构与生成代码。

### 前台生成工作台

- 前台目录：`easycode-web`
- 后端接口前缀：`/front/**`
- 前台用户与项目草稿使用独立的 `front_*` 表，不复用后台 `sys_user`。
- DeepSeek 只在后端 `AiGenerateService` 中调用，前端不会直接访问 AI 服务。
- 新增数据库脚本：`sql/front_workbench.sql`，完整初始化脚本已合并到 `sql/db.sql`。
- 工作流：前台注册/登录 -> 创建项目草稿 -> 生成 MySQL 表结构 -> 编辑表和字段 -> 预览后端、前台前端、后台前端项目结构和代码。

## 本地启动

### 1. 环境准备

- JDK 1.8
- Maven 3.6+
- MySQL 5.7/8.0
- Redis 5+
- Node.js：`package.json` 要求 `>=8.9`，实际开发建议使用 Node 14/16 LTS
- npm 6+

### 2. 初始化数据库

默认数据库配置在 `ruoyi-admin/src/main/resources/application-druid.yml`：

```yaml
spring:
  datasource:
    druid:
      master:
        url: jdbc:mysql://localhost:3306/ry
        username: root
        password: 123456
```

创建数据库：

```sql
CREATE DATABASE ry DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```

新库推荐直接导入完整脚本：

```bash
mysql -uroot -p ry < sql/db.sql
```

`sql/db.sql` 已整合若依基础表、Quartz 调度表、代码生成平台扩展表、前台工作台表、源码商城表、业务蓝图模板、初始化数据、代码生成平台菜单和按钮权限。新库只需要导入这一份脚本；分散脚本保留作旧库增量、模板重放或排查参考：

1. `sql/ry_20240629.sql`：若依基础表与基础数据。
2. `sql/quartz.sql`：Quartz 调度表。
3. `sql/gen_project.sql`：项目基础信息表 `gen_project`。
4. `sql/module_management.sql`：功能模块、代码片段、项目模块关系表。
5. `sql/gen_table_project_rel.sql`：项目与代码生成表关系。
6. `sql/sys_project_structure.sql`：项目结构节点表与初始化结构。
7. `sql/add_create_table_sql_field.sql`：给 `gen_table` 增加建表 SQL 字段。
8. `ruoyi-generator/sql/template_file_update.sql`：模板文件表增量字段。
9. `sql/source_store.sql`：源码商城表、源码分类字典与示例数据。
10. `sql/front_workbench.sql`：前台用户、项目草稿、表结构、生成记录和预览文件表。
11. `sql/front_requirement_keyword.sql`、`sql/front_app_blueprint.sql`、`sql/front_er_diagram.sql`、`sql/front_project_upgrade.sql`：旧版前台项目草稿表升级到当前字段结构。
12. `sql/business_blueprint_templates.sql`：业务蓝图后端、前端和结构模板种子。
13. `sql/generator_test_data.sql`：生成器演示/测试数据，默认不并入生产初始化脚本。

### 3. 配置后端

重点检查以下配置：

| 文件 | 关键项 |
| --- | --- |
| `ruoyi-admin/src/main/resources/application.yml` | `server.port` 默认 `8080`，`server.servlet.context-path` 默认 `/`，Redis 地址，上传目录 `ruoyi.profile`，Swagger 开关。 |
| `ruoyi-admin/src/main/resources/application-druid.yml` | MySQL 地址、账号、密码、Druid 控制台账号。 |
| `ruoyi-generator/src/main/resources/generator.yml` | 代码生成默认作者、包名、表前缀策略。 |

启动后端：

```bash
mvn clean install -DskipTests
mvn -pl ruoyi-admin -am spring-boot:run
```

也可以打包后运行：

```bash
mvn clean package -DskipTests
java -jar ruoyi-admin/target/ruoyi-admin.war
```

后端默认地址：`http://localhost:8080`

### 4. 启动前端

后台前端：

```bash
cd ruoyi-ui
npm install --registry=https://registry.npmmirror.com
npm run dev
```

前端默认端口来自 `ruoyi-ui/vue.config.js`，为 `80`。开发环境的 `VUE_APP_BASE_API=/dev-api`，会代理到 `http://localhost:8080/`。

浏览器访问：`http://localhost:80`

前台工作台：

```bash
cd easycode-web
npm install
npm run dev
```

前台默认端口为 `5174`，开发环境会将 `/front/**` 代理到 `VITE_API_BASE_URL`，默认 `http://localhost:8080`。

浏览器访问：`http://localhost:5174`

默认账号：

```text
admin / admin123
```

如果本机 80 端口被占用，可以临时指定端口：

```bash
# Windows PowerShell
$env:port=81
npm run dev
```

## 构建与发布

后端构建：

```bash
mvn clean package -DskipTests
```

产物位于：

```text
ruoyi-admin/target/ruoyi-admin.war
```

前端构建：

```bash
cd ruoyi-ui
npm run build:prod
```

产物位于：

```text
ruoyi-ui/dist
```

前台工作台构建：

```bash
cd easycode-web
npm run build
```

产物位于：

```text
easycode-web/dist
```

生产环境需要注意：

- `ruoyi-ui/vue.config.js` 中生产 `publicPath` 为 `/yidaima`。
- `ruoyi-ui/.env.production` 中接口前缀为 `/prod-api`。
- 如果部署在子路径或网关后面，需要同步调整 Nginx、前端 `publicPath`、接口代理和后端 `context-path`。

## 常用入口

| 入口 | 地址 |
| --- | --- |
| 后端服务 | `http://localhost:8080` |
| 后台前端页面 | `http://localhost:80` |
| 前台生成工作台 | `http://localhost:5174` |
| Swagger UI | `http://localhost:8080/swagger-ui/index.html` |
| Druid 控制台 | `http://localhost:8080/druid`，默认 `ruoyi / 123456` |

## 开发约定

- 后端扩展 Controller 主要位于 `ruoyi-generator/src/main/java/com/ruoyi/generator/controller`。
- 后端扩展实体、Mapper、Service 位于 `ruoyi-generator/src/main/java/com/ruoyi/generator/{domain,mapper,service}`。
- MyBatis XML 位于 `ruoyi-generator/src/main/resources/mapper/generator`。
- 后台前端接口封装位于 `ruoyi-ui/src/api/generator`。
- 后台前端扩展页面位于 `ruoyi-ui/src/views/generator`。
- 前台工作台接口封装位于 `easycode-web/src/api`，页面位于 `easycode-web/src/views`。
- 权限标识沿用若依格式，例如 `generator:project:list`、`generator:template:add`、`tool:gen:preview`。
- 代码生成模板分为若依默认模板 `ruoyi-generator/src/main/resources/vm` 与扩展模板目录 `ruoyi-generator/src/main/resources/qing`。

## 文档索引

- `doc/code-generator-platform.md`：代码生成平台功能规划。
- `docs/*.md`：扩展 Controller 的接口说明。
- `ruoyi-ui/README.md`：前端工程原始启动说明。
- `easycode-web/README.md`：前台生成工作台启动说明。
- 若依官方文档：`http://doc.ruoyi.vip`

## 排查提示

- 后端启动失败优先检查 MySQL、Redis 是否启动，以及 `application-druid.yml` 中数据库账号密码是否正确。
- 前端请求 404 或跨域异常时，检查 `.env.development` 的 `VUE_APP_BASE_API` 与 `vue.config.js` 的代理目标。
- 使用生产构建部署到非根路径时，检查 `/yidaima`、`/prod-api` 与网关转发规则是否一致。
- 生成平台页面报表不存在时，优先核对扩展 SQL 是否已导入，尤其是模板、数据源、项目结构和项目关联表。
