新增JeecgBoot BPM流程自动生成器,包含流程创建、修改及审批人配置功能,支持自然语言描述转化为BPMN XML,并通过API与JeecgBoot系统交互。

This commit is contained in:
geht
2026-04-08 16:24:41 +08:00
parent 7c60acd679
commit 67104af7de
168 changed files with 207167 additions and 8 deletions

View File

@@ -0,0 +1,76 @@
# JeecgBoot 代码生成 SkillClaude Code 专用)
将自然语言需求转换为 JeecgBoot 全套 CRUD 代码(后端 Java + 前端 Vue3 + 菜单权限 SQL
## 功能特性
- 单表 / 树表 / 一对多(主子表)三种模式
- 已有表反向生成(自动读取数据库 DDL
- 新建表智能推导(自然语言 → 字段类型 + 控件)
- 增量字段修改(加字段/删字段/改字段,无需重新生成)
- 字典智能匹配(自动关联系统 `sys_dict` 字典)
- Flyway 版本号自动递增
- 菜单权限 SQL 自动生成(真实时间戳 ID
## 安装方法
`SKILL.md``codegen-reference.md` 两个文件复制到 Claude Code 的 skills 目录:
```bash
# Windows
mkdir %USERPROFILE%\.claude\skills\jeecg-codegen
copy SKILL.md %USERPROFILE%\.claude\skills\jeecg-codegen\
copy codegen-reference.md %USERPROFILE%\.claude\skills\jeecg-codegen\
# macOS / Linux
mkdir -p ~/.claude/skills/jeecg-codegen
cp SKILL.md ~/.claude/skills/jeecg-codegen/
cp codegen-reference.md ~/.claude/skills/jeecg-codegen/
```
## 使用前配置
安装后需要根据实际项目修改 `SKILL.md` 中的以下配置:
| 配置项 | 位置 | 说明 |
|--------|------|------|
| 后端根路径 | "项目路径"章节 | 改为你的后端项目绝对路径 |
| 前端根路径 | "项目路径"章节 | 改为你的前端项目绝对路径 |
| 数据库连接 | "数据库连接"章节 | 改为你的 MySQL 地址/端口/用户名/密码/数据库名 |
| Flyway SQL 目录 | "Flyway 版本号规则"章节 | 如果目录不同需要调整 |
## 触发方式
在 Claude Code 中直接说以下关键词即可触发:
- `代码生成` / `生成代码` / `创建模块` / `新增功能` / `建表`
- `加字段` / `增加字段` / `新增字段` / `修改字段` / `删除字段`
- `generate code` / `new entity` / `add field`
## 使用示例
```
# 单表
生成一个商品管理模块,字段:商品名、价格、库存、状态、图片、描述
# 一对多
生成一个采购单模块,主表是采购单(单号、供应商、日期、总金额),子表是采购明细(商品名、数量、单价、小计)
# 已有表
给 biz_customer 表生成代码
# 增量修改
给采购单模块加一个"备注"字段
```
## 文件说明
| 文件 | 说明 |
|------|------|
| `SKILL.md` | Skill 入口,定义触发规则、交互流程、字段推导、字典匹配等 |
| `codegen-reference.md` | 完整代码模板骨架,包含 Entity/Controller/Service/Mapper/Vue3 等全部模板 |
## 适用版本
- JeecgBoot 3.xSpring Boot 3 + Jakarta + MyBatis-Plus
- Vue3 + TypeScript + Vite + Ant Design Vue 4

View File

@@ -0,0 +1,256 @@
---
name: jeecg-codegen
description: "Use when user asks to generate JeecgBoot CRUD code, create a new module, add/modify fields on existing module, or says \"代码生成\", \"生成代码\", \"创建模块\", \"新增功能\", \"建表\", \"加字段\", \"加一个字段\", \"增加字段\", \"新增字段\", \"修改字段\", \"删除字段\", \"generate code\", \"new entity\", \"add field\""
---
# JeecgBoot 代码生成器
将自然语言需求转换为 JeecgBoot 全套 CRUD 代码(后端 Java + 前端 Vue3 + 菜单权限 SQL并支持对已生成模块的增量字段修改。
## 交互流程
### Step 0: 判断操作类型 — 全量生成 or 增量修改?
**识别增量修改的关键词:** "加字段"、"增加字段"、"新增字段"、"加一个XX字段"、"删除字段"、"修改字段"、"改一下XX"、"给XX模块加"、"给XX表加"
如果是增量修改 → 进入 **场景C**
如果是全量生成 → 进入 **场景A****场景B**
### Step 1: 全量生成 — 判断场景
**场景A — 已有表(用户给了表名):**
1. 通过数据库查询获取精确 DDL见"数据库连接"章节)
2. 从 DDL 中解析:主键类型、全部字段(名称/类型/注释/是否nullable、是否有系统字段
3. 根据字段类型和注释自动推导前端控件类型
4. 用户无需描述字段AI 全部自动推导
**场景B — 新建表(用户用自然语言描述需求):**
1. 从用户描述中提取:表名、实体名、功能描述、字段列表
2. 用"智能字段推导"规则推导 DB 类型和前端控件
3. 默认添加全部系统字段create_by/create_time/update_by/update_time/sys_org_code
4. 生成建表 DDL 写入 Flyway SQL
**场景C — 增量修改(给已有模块加/改/删字段):**
1. **定位目标模块**:从用户提到的表名、模块名、实体名中识别目标
2. **扫描已有代码文件**:在后端和前端目录中搜索已生成的文件
```bash
# 搜索后端 Entity 文件
find {后端项目根目录} -name "{EntityName}.java" -path "*/entity/*"
# 搜索前端 data.ts 文件
find {前端项目根目录}/src/views -name "{EntityName}.data.ts"
```
3. **读取全部已有文件**Entity.java、*.data.ts、*List.vue、*Modal.vue如有 Form.vue 也读取)
4. **解析当前字段列表**:从 Entity.java 解析已有字段
5. **推导新字段属性**:用"智能字段推导"规则推导 DB 类型、Java 类型、前端控件
6. **展示修改摘要**,等待用户确认后再修改
**增量修改的操作类型:**
- **加字段**:在所有文件中追加新字段定义
- **删字段**:从所有文件中移除指定字段定义
- **改字段**:修改指定字段的类型、控件、注释等
**判断表类型:**
- 提到"分类/层级/树/上下级" → **树表**
- 提到"主子表/明细/一对多/订单+商品" → **一对多**
- 默认 → **单表**
### Step 2: 询问用户选项(仅全量生成需要)
一次性展示所有选项及默认值,用户说"确认"即可全部采用默认值,或只说需要改的:
1. **后端模块**:默认 `jeecg-module-system/jeecg-system-biz`
2. **前端风格**:默认 `vue3`(封装风格),可选 `vue3Native`(原生风格)
3. **前端视图目录**:默认用 entityPackage 值
4. **是否读取系统字典**:默认 ``,读取后可自动为字段匹配已有字典编码(见"字典智能匹配"章节)
### Step 3: 展示摘要
- **全量生成**:列出表名、字段清单(名称/类型/控件/校验/字典),等待用户确认后再生成。
- **增量修改**:列出要修改的文件路径 + 每个文件的具体变更内容(新增/删除/修改哪些行),等待用户确认。
### Step 4: 执行
- **全量生成**:读取 `codegen-reference.md` 获取完整模板模式,按顺序生成全部文件。
- **增量修改**:使用 Edit 工具精确修改每个文件,读取 `codegen-reference.md` 的 Section F 获取增量修改模板。
### Step 5: 输出清单
列出所有生成/修改的文件路径 + 后续操作说明执行SQL、重启后端等
### 本地环境自动执行菜单 SQL 规则
**判断条件:** 数据库连接地址为 `127.0.0.1` 或 `localhost`(即本地开发环境)。
**自动执行方式:** 生成 Flyway SQL 文件后,同时通过 Bash 工具直接执行菜单权限 SQL
```bash
# 先检查菜单是否已存在,避免重复插入
mysql -h127.0.0.1 -P3306 -uroot -proot jeecgboot3 -e "SELECT id FROM sys_permission WHERE id='{timestamp}01'"
# 不存在则执行全部菜单 + 角色授权 SQL
mysql -h127.0.0.1 -P3306 -uroot -proot jeecgboot3 < {flyway_sql_file_path}
```
**注意事项:**
- 仅在本地环境127.0.0.1/localhost自动执行远程环境只生成 Flyway 文件
- 执行前先检查主菜单 ID 是否已存在,避免重复插入
- 如果 MySQL 执行失败,提示用户手动执行 Flyway SQL不中断整体流程
- 输出结果中标注 `菜单 SQL已自动执行 ✓`
## 数据库连接
**已有表场景必须先查数据库!** 通过以下方式获取精确 DDL
```bash
# 读取项目数据库配置
# 配置文件: jeecg-boot-framework-2026/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml
# 默认连接: mysql -h127.0.0.1 -P3306 -uroot -proot jeecgboot3
# 查询表 DDL
mysql -h127.0.0.1 -P3306 -uroot -proot jeecgboot3 -e "SHOW CREATE TABLE 表名\G"
# 查询字段注释
mysql -h127.0.0.1 -P3306 -uroot -proot jeecgboot3 -e "SELECT COLUMN_NAME, COLUMN_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT, COLUMN_KEY, EXTRA FROM information_schema.COLUMNS WHERE TABLE_SCHEMA='jeecgboot3' AND TABLE_NAME='表名' ORDER BY ORDINAL_POSITION"
```
如果无法连接数据库,回退方案:在项目 SQL 文件中搜索表定义(`grep -r "CREATE TABLE.*表名"` 在 docs/db/ 目录下)。
## Flyway 版本号规则
**生成 Flyway SQL 前必须检查已有版本号,自动递增避免冲突!**
```bash
# Flyway SQL 目录
ls {后端项目根目录}/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/ | sort -V | tail -5
```
版本命名规则:`V{YYYYMMDD}_{序号}__{描述}.sql`
- 检查当天是否已有文件(如 `V20260311_1__xxx.sql`
- 如果有,序号递增(`V20260311_2__xxx.sql`
- 如果没有,从 `_1` 开始
## 菜单 SQL 的 ID 生成
**必须使用真实时间戳确保唯一性!** 通过以下命令获取:
```bash
date +%s%3N # 输出13位毫秒级时间戳如 1741704000123
```
用这个时间戳作为基础 ID依次拼接 01-14
- 主菜单: `{timestamp}01`
- 添加按钮: `{timestamp}02`
- 编辑按钮: `{timestamp}03`
- ... 以此类推
## 字典智能匹配
**用户选择"读取系统字典"后,执行以下查询获取全部可用字典:**
```bash
# 查询所有字典编码及其选项值
mysql -h127.0.0.1 -P3306 -uroot -proot jeecgboot3 -e "
SELECT d.dict_code, d.dict_name, GROUP_CONCAT(i.item_text, '=', i.item_value ORDER BY i.sort_order SEPARATOR ', ') AS items
FROM sys_dict d
LEFT JOIN sys_dict_item i ON d.id = i.dict_id AND i.status = 1
WHERE d.del_flag = 0
GROUP BY d.dict_code, d.dict_name
ORDER BY d.dict_code
"
```
**匹配规则:** 拿到字典列表后,按以下优先级为字段匹配字典:
1. **用户明确指定** — 用户说"状态用字典 order_status",直接使用
2. **字段名精确匹配** — 字段名(如 `status`)与 dict_code 完全一致
3. **语义关键词匹配** — 字段注释含"状态/类型/级别/分类"等关键词,搜索 dict_name 包含相同关键词的字典
4. **不匹配** — 找不到合适字典时,不使用字典注解,按普通 Input 处理
**匹配成功后的效果:**
- Entity: 自动添加 `@Dict(dicCode = "matched_dict_code")`
- data.ts columns: `dataIndex` 使用 `fieldName_dictText` 后缀
- data.ts formSchema: `component` 使用 `JDictSelectTag``componentProps: { dictCode: 'matched_dict_code' }`
- data.ts searchFormSchema: 同样使用 `JDictSelectTag` 组件
**展示格式:** 在 Step 3 表结构摘要中,匹配到字典的字段标注字典编码和选项值,如:
```
| 字段名 | 类型 | 控件 | 字典 |
| status | varchar(10) | JDictSelectTag | order_status (待付款=0, 已付款=1, 已完成=2) |
```
## 项目路径
| 类别 | 路径 |
|------|------|
| 后端根 | `{后端项目根目录}` |
| 前端根 | `{前端项目根目录}` |
| 后端代码 | `{module}/src/main/java/org/jeecg/modules/{entityPackage}/` |
| 前端代码 | `src/views/{viewDir}/` |
| Flyway SQL | `jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/` |
## 命名约定
- **表名**snake_case如 `biz_goods`
- **实体名**:表名转 PascalCase如 `BizGoods`
- **entityPackage**:表名前缀或用户指定(如 `biz`
- **bussiPackage** 固定:`org.jeecg.modules`
- **权限编码**`{entityPackage}:{tableName}:add/edit/delete/deleteBatch/exportXls/importExcel`
## 智能字段推导
**用于新建表场景(从自然语言推导),或已有表但字段无注释时的补充推导:**
| 语义关键词 | dbType | Java 类型 | vue3 组件 | vue3Native 组件 |
|-----------|--------|----------|----------|----------------|
| 名称/标题/编码 | varchar(100) | String | Input | a-input |
| 金额/价格/费用 | decimal(10,2) | BigDecimal | InputNumber | a-input-number |
| 数量/数目/个数 | int | Integer | InputNumber | a-input-number |
| 状态/类型/级别 | varchar(10) | String | JDictSelectTag | JDictSelectTag |
| 是否/开关 | varchar(2) | String | Switch | a-switch |
| 日期/生日 | date | Date | DatePicker | a-date-picker |
| 时间/日期时间 | datetime | Date | DatePicker(showTime) | a-date-picker(showTime) |
| 备注/描述/说明 | text | String | InputTextArea | a-textarea |
| 内容/富文本 | text | String | JEditor | JEditor |
| 图片/头像/照片 | varchar(1000) | String | JImageUpload | JImageUpload |
| 文件/附件 | varchar(1000) | String | JUpload | JUpload |
| 用户/负责人 | varchar(32) | String | JSelectUserByDept | JSelectUserByDept |
| 部门/组织 | varchar(32) | String | JSelectDept | JSelectDept |
| 排序/序号 | int | Integer | InputNumber | a-input-number |
**已有表场景的 DB类型→控件 映射(当字段无注释时使用):**
| DB列类型 | Java类型 | 默认前端控件 |
|---------|---------|-----------|
| varchar(n) n<=200 | String | Input |
| varchar(n) n>200 | String | InputTextArea |
| text / longtext | String | InputTextArea |
| int / tinyint | Integer | InputNumber |
| bigint | Long | InputNumber |
| decimal / double / float | BigDecimal | InputNumber |
| date | Date | DatePicker |
| datetime / timestamp | Date | DatePicker(showTime) |
## 主键策略(根据已有表结构自适应)
| 表DDL中的主键定义 | Java类型 | @TableId | 说明 |
|------------------|---------|----------|------|
| `int AUTO_INCREMENT` | Integer | `@TableId(type = IdType.AUTO)` | int自增主键 |
| `bigint AUTO_INCREMENT` | Long | `@TableId(type = IdType.AUTO)` | bigint自增主键 |
| `varchar(36)` / `varchar(32)` 无AUTO_INCREMENT | String | `@TableId(type = IdType.ASSIGN_ID)` | JeecgBoot标准字符串主键 |
| `bigint` 无AUTO_INCREMENT | Long | `@TableId(type = IdType.ASSIGN_ID)` | 雪花ID |
**注意:** 当主键为 Integer/Long 类型时Controller 中 `delete` 和 `queryById` 的参数类型也要对应调整。
## 系统字段(按实际表结构判断)
**不是所有表都有系统字段!** 生成前必须检查表是否实际包含这些字段,**只生成表中存在的字段**
| 字段 | 说明 | 不存在时的处理 |
|------|------|--------------|
| `create_by` | 创建人 | 不生成该属性 |
| `create_time` | 创建时间 | 不生成该属性 |
| `update_by` | 更新人 | 不生成该属性 |
| `update_time` | 更新时间 | 不生成该属性 |
| `sys_org_code` | 所属部门 | 不生成该属性 |
如果是**新建表**(用户自然语言描述需求),则默认添加全部系统字段。
如果是**已有表**(用户指定了表名且数据库中已存在),则必须根据实际 DDL 来决定。
树表额外字段:`pid`、`has_child`(同样需检查是否实际存在)。
## 参考文件
生成代码前,**必须读取** 同目录下的 `codegen-reference.md` 获取完整代码模板骨架。

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,357 @@
# jeecg-codegen Skills 使用指南
> 通过 Claude Code 以自然语言描述业务需求,自动生成 JeecgBoot 全套 CRUD 代码(后端 Java + 前端 Vue3 + 建表 SQL + 菜单 SQL
> 无需预建表结构AI 根据语义自动推导表结构、字段类型与前端控件;也支持基于已有表或多表关联生成代码。覆盖单表、树表、一对多等模型,可一次性生成整个业务模块。主键策略自适应,字典字段自动匹配系统已有编码——不只是模板填充,而是从业务需求到可运行代码的端到端生成。
## 与传统代码生成器的区别
- **无需预建表结构**只需用自然语言描述业务需求AI 即可自动推导出表结构与字段属性,省去手动建表的前置工作
- **表结构驱动同样支持**:也可以直接基于已有的数据库表或多表关联关系生成代码,兼容传统代码生成器的使用习惯
- **模块级批量生成**:支持一次性生成整个业务模块的全部代码文件(涵盖多张表、多个功能点),而非逐表逐模型地单独生成
- **主键策略自适应**AI 会参照项目中已有表的主键定义,自动选用合适的 MyBatis-Plus 主键策略,不局限于 String 类型的雪花 ID
- **字典智能匹配**:自动读取系统字典表(`sys_dict` + `sys_dict_item`),为字段精准匹配已有的字典编码,免去手动查找和指定的繁琐步骤
- **代码自动归位**:生成的前后端代码自动落入项目对应目录,建表与菜单 SQL 自动追加至 Flyway 升级脚本,无需手动搬运,生成即就绪
---
## 触发方式
在 Claude Code 对话中,用自然语言描述你要创建的功能,包含以下任意关键词即可自动触发:
```
代码生成 / 生成代码 / 创建模块 / 新增功能 / 建表 / 加字段 / 增加字段 / 新增字段 / 修改字段 / 删除字段
```
## 示例用法
### 1. 一句话描述(最简方式)
```
帮我生成一个商品管理模块,包含商品名称、价格、库存、状态、图片、描述
```
AI 会自动推导:表名 `biz_goods`、字段类型价格→BigDecimal、库存→Integer、图片→JImageUpload 等)。
### 2. 指定表名和字典
```
创建一个订单管理功能:
- 表名 biz_order
- 字段:订单编号、客户名称、下单日期、金额、状态(待付款/已付款/已发货/已完成)、备注
- 状态用字典 order_status
```
### 3. 树表(带层级关系)
```
建一个部门分类的树表,包含分类名称和分类编码
```
提到"分类/层级/树/上下级"等关键词AI 自动识别为树表模式。
### 4. 一对多(主子表)
```
生成一个采购单模块,主表是采购单(单号、供应商、日期、总金额),
子表是采购明细(商品名、数量、单价、小计)
```
提到"主子表/明细/一对多"等关键词AI 自动识别为一对多模式。
### 5. 指定后端模块
```
在 jeecg-module-demo 模块下生成一个公告管理,包含标题、内容(富文本)、发布时间、状态
```
### 6. 已有表反向生成(给表名即可)
```
生成 tmp_tables 这个表的代码
```
AI 会自动连接数据库查询 DDL解析主键类型、全部字段、系统字段然后生成匹配的代码。无需手动描述字段。
### 7. 增量修改(给已有模块加/改/删字段)
```
给表信息管理加一个备注字段
```
```
给 tmp_tables 增加两个字段:排序号和状态(启用/停用)
```
```
把商品管理的价格字段从 int 改成 decimal
```
```
删除商品管理的描述字段
```
AI 会自动定位已生成的全部代码文件Entity、data.ts、Form.vue 等),精确修改每个文件,并生成 ALTER TABLE 的 Flyway SQL无需重新生成整个模块。
## 交互流程
### 全量生成流程
```
Step 0 判断操作类型:全量生成 or 增量修改?
Step 1 解析需求,判断场景:
· 场景A — 已有表 → 查数据库获取 DDL自动解析字段
· 场景B — 新建表 → 从自然语言推导表结构
Step 2 询问 4 个选项(都有默认值,说"确认"即可):
① 后端模块 — 默认 jeecg-module-system/jeecg-system-biz
② 前端风格 — vue3封装风格或 vue3Native原生风格
③ 前端目录 — 默认按 entityPackage 值
④ 是否读取系统字典 — 默认是,自动匹配已有字典编码
Step 3 展示表结构摘要(含匹配到的字典),等待确认
Step 4 确认后,自动生成全部文件写入项目目录
Step 5 输出生成文件清单 + 后续操作说明
```
### 增量修改流程
```
Step 0 识别增量修改关键词(加字段/删字段/修改字段/给XX加...
Step 1 定位目标模块,扫描并读取已有代码文件
Entity.java / *.data.ts / *List.vue / *Modal.vue / *Form.vue
Step 2 解析已有字段,推导新字段属性
Step 3 展示修改摘要(每个文件的具体变更内容),等待确认
Step 4 确认后,用 Edit 精确修改每个文件 + 生成 ALTER TABLE SQL
Step 5 输出修改文件清单 + 后续操作说明
```
## 生成产物
### 单表模式11 个文件)
| 类别 | 文件 | 说明 |
|------|------|------|
| **后端** | `Entity.java` | 实体类,含 MyBatis-Plus / AutoPoi / Dict 注解 |
| | `Controller.java` | REST 控制器,继承 JeecgController含权限注解 |
| | `IService.java` | Service 接口 |
| | `ServiceImpl.java` | Service 实现 |
| | `Mapper.java` | MyBatis Mapper 接口 |
| | `Mapper.xml` | MyBatis XML 映射 |
| **前端** | `*.api.ts` | API 接口定义list/save/edit/delete/export/import |
| | `*.data.ts` | 列定义 + 查询表单 + 编辑表单 Schema |
| | `*List.vue` | 列表页面(表格 + 查询 + 操作按钮) |
| | `*Modal.vue` | 编辑弹窗 |
| | `*Form.vue` | 表单组件(仅 vue3Native 风格) |
| **SQL** | `V*__.sql` | Flyway 迁移建表DDL + 菜单 + 7个按钮权限 + 角色授权 |
### 树表模式
在单表基础上增加:
- Entity 额外字段:`pid`(父节点)、`has_child`(是否有子节点)
- Controller 额外接口:`rootList``childList``getChildListBatch`
- Service 额外方法:树节点的增删改逻辑
- 前端额外接口:树数据加载、子节点查询
### 一对多模式
在单表基础上增加:
- 子表完整的 Entity / Mapper / Service 各一套
- 主表 Service 包含联合保存/更新/删除
- Page VO 用于 Excel 主子表导入导出
- 前端 Tab 页展示子表数据
## 两种前端风格
| | vue3 封装风格 | vue3Native 原生风格 |
|---|-------------|-------------------|
| **表单** | `BasicForm` + FormSchema 配置驱动 | `a-form` + `a-form-item` 模板直接写控件 |
| **弹窗** | `BasicModal` + `useModal` Hook | `JModal` + `ref` + `defineExpose` |
| **表格** | `BasicTable` + `useTable` + `formConfig` 内置查询 | `BasicTable` + 手写查询表单区域 |
| **数据文件** | columns + searchFormSchema + formSchema | columns + superQuerySchema表单在模板中 |
| **优点** | 代码量少,配置化,统一风格 | 灵活度高,可深度定制交互 |
| **适合** | 标准 CRUD 页面 | 需要复杂交互或自定义布局的场景 |
## 智能字段推导
AI 根据字段语义自动推导类型和控件:
| 语义关键词 | 数据库类型 | Java 类型 | 前端控件 |
|-----------|----------|----------|---------|
| 名称/标题/编码 | varchar(100) | String | Input / a-input |
| 金额/价格/费用 | decimal(10,2) | BigDecimal | InputNumber / a-input-number |
| 数量/个数 | int | Integer | InputNumber / a-input-number |
| 状态/类型/级别 | varchar(10) | String | JDictSelectTag |
| 是否/开关 | varchar(2) | String | Switch / a-switch |
| 日期/生日 | date | Date | DatePicker / a-date-picker |
| 时间/日期时间 | datetime | Date | DatePicker(showTime) |
| 备注/描述/说明 | text | String | InputTextArea / a-textarea |
| 内容/富文本 | text | String | JEditor |
| 图片/头像/照片 | varchar(1000) | String | JImageUpload |
| 文件/附件 | varchar(1000) | String | JUpload |
| 用户/负责人 | varchar(32) | String | JSelectUserByDept |
| 部门/组织 | varchar(32) | String | JSelectDept |
| 排序/序号 | int | Integer | InputNumber / a-input-number |
当然你也可以在描述中明确指定字段类型AI 会优先使用你的指定。
### 已有表的 DB 类型→控件自动映射
对于已有表场景如果字段没有注释AI 根据数据库列类型自动推导前端控件:
| DB 列类型 | Java 类型 | 默认前端控件 |
|----------|----------|-----------|
| varchar(n) n<=200 | String | Input |
| varchar(n) n>200 | String | InputTextArea |
| text / longtext | String | InputTextArea |
| int / tinyint | Integer | InputNumber |
| bigint | Long | InputNumber |
| decimal / double / float | BigDecimal | InputNumber |
| date | Date | DatePicker |
| datetime / timestamp | Date | DatePicker(showTime) |
## 字典智能匹配
生成代码时AI 可选择读取系统字典表(`sys_dict` + `sys_dict_item`),自动为字段匹配已有的字典编码。
**匹配优先级:**
1. **用户明确指定**`"状态用字典 order_status"`,直接使用
2. **字段名精确匹配** — 字段名 `status` 与字典编码 `status` 一致
3. **语义关键词匹配** — 字段注释含"状态",搜索字典名称含"状态"的字典
4. **不匹配** — 找不到合适字典时,不使用字典注解,按普通 Input 处理
**效果示例:**
假设系统中已有字典 `order_status`(待付款=0, 已付款=1, 已完成=2当你描述字段"订单状态"时:
| 位置 | 自动生成内容 |
|------|-------------|
| Entity.java | `@Dict(dicCode = "order_status")` |
| columns | `dataIndex: 'orderStatus_dictText'` |
| formSchema | `component: 'JDictSelectTag', componentProps: { dictCode: 'order_status' }` |
| searchFormSchema | `component: 'JDictSelectTag', componentProps: { dictCode: 'order_status' }` |
在 Step 3 表结构摘要中会展示匹配结果,确认前可以修改或取消字典关联。
## 已有表反向生成
给定表名时AI 会自动连接数据库获取精确表结构:
1. **查询 DDL**`SHOW CREATE TABLE 表名` 获取完整建表语句
2. **查询字段详情**:从 `information_schema.COLUMNS` 获取每个字段的类型、注释、是否可空、默认值、主键标识
3. **解析主键策略**:根据主键列类型和是否 AUTO_INCREMENT 选择 MyBatis-Plus 注解
4. **识别系统字段**:检查 create_by/create_time/update_by/update_time/sys_org_code 是否存在
5. **推导前端控件**:优先用字段注释语义匹配,无注释时按 DB 类型映射
数据库连接信息:`mysql -h127.0.0.1 -P3306 -uroot -proot jeecgboot3`(配置文件:`application-dev.yml`
## 增量修改详解
### 支持的操作
| 操作 | 说明 | 影响的文件 |
|------|------|-----------|
| **加字段** | 在所有文件中追加新字段定义 | Entity + data.ts + Form.vue(Native) + ALTER TABLE SQL |
| **删字段** | 从所有文件中移除指定字段 | Entity + data.ts + Form.vue(Native) + DROP COLUMN SQL |
| **改字段** | 修改字段类型/控件/注释等 | Entity + data.ts + Form.vue(Native) + MODIFY COLUMN SQL |
### 修改位置清单
每次增量修改AI 会精确定位并修改以下位置:
1. **Entity.java** — 字段声明 + 注解(@Excel@Dict@Schema@JsonFormat 等)+ 必要的 import
2. ***.data.ts** — columns 列定义 + formSchema 表单项 + searchFormSchema 查询条件(如需) + superQuerySchema如存在
3. ***Form.vue**(仅 vue3Native`<a-form-item>` 控件 + `formData` 初始值
4. **Flyway SQL**`ALTER TABLE ADD/DROP/MODIFY COLUMN` 语句
## Flyway 版本号规则
生成 Flyway SQL 前自动检查已有版本号,递增避免冲突:
- 版本命名:`V{YYYYMMDD}_{序号}__{描述}.sql`
- 检查当天是否已有文件(如 `V20260311_1__xxx.sql`
- 如果有,序号递增(`V20260311_2__xxx.sql`
- 如果没有,从 `_1` 开始
- 菜单 SQL 的 ID 使用 13 位毫秒级真实时间戳(`date +%s%3N`),确保全局唯一
## 主键策略自适应
AI 会根据已有表的 DDL 自动选择正确的主键策略:
| 表DDL中的主键定义 | Java类型 | MyBatis-Plus 注解 |
|------------------|---------|------------------|
| `int AUTO_INCREMENT` | Integer | `@TableId(type = IdType.AUTO)` |
| `bigint AUTO_INCREMENT` | Long | `@TableId(type = IdType.AUTO)` |
| `varchar(36)` 无自增 | String | `@TableId(type = IdType.ASSIGN_ID)` |
| `bigint` 无自增 | Long | `@TableId(type = IdType.ASSIGN_ID)` |
新建表时默认使用 JeecgBoot 标准的 `varchar(36) + ASSIGN_ID`
**注意:** 当主键为 Integer/Long 类型时Controller 中 `delete``queryById` 的参数类型也要对应调整,`deleteBatch` 需要做类型转换。
## 系统字段智能判断
**对于已有表**AI 会检查表结构,只生成表中实际存在的系统字段:
| 字段 | 不存在时 |
|------|---------|
| `create_by` / `create_time` | 不生成对应 Java 属性 |
| `update_by` / `update_time` | 不生成对应 Java 属性 |
| `sys_org_code` | 不生成对应 Java 属性 |
**对于新建表**(自然语言描述需求),默认添加全部系统字段。
树表额外字段:`pid``has_child`(同样需检查是否实际存在)。
## 生成后的操作
### 1. 执行 SQL
生成的 Flyway SQL 文件位于:
```
jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/
```
两种方式:
- **自动执行**:重启后端时 Flyway 自动执行
- **手动执行**:在数据库中手动执行 SQL 文件内容
### 2. 重启后端
```bash
cd jeecg-boot-framework-2026
mvn spring-boot:run -pl jeecg-module-system/jeecg-system-start
```
### 3. 刷新前端
开发服务器(`pnpm dev`)会自动热更新,无需重启。
### 4. 访问功能
登录系统后,新菜单已自动添加(默认授权给 admin 角色),直接可见可用。
## 文件路径说明
| 类别 | 路径 |
|------|------|
| 后端代码 | `jeecg-boot-framework-2026/{module}/src/main/java/org/jeecg/modules/{package}/` |
| 前端代码 | `jeecgboot-vue3-2026/src/views/{viewDir}/` |
| Flyway SQL | `jeecg-boot-framework-2026/jeecg-module-system/jeecg-system-start/src/main/resources/flyway/sql/mysql/` |
## 注意事项
1. **每次生成/修改前会展示摘要等你确认**,不会直接写文件,放心使用
2. **已有表按实际结构生成**,不会盲目添加不存在的字段
3. **权限编码规则**`{entityPackage}:{tableName}:add/edit/delete/deleteBatch/exportXls/importExcel`
4. **如果后端模块目录不存在**AI 会提示你先创建 Maven 模块结构
5. **生成的代码可以二次修改**,和手写代码完全一样,没有任何框架锁定
6. **增量修改只改动必要的文件和位置**,不会影响你手动修改过的其他代码
7. **字典匹配可选**,不想自动匹配字典时在 Step 2 选择"否"即可