本文件定义了 ykt_server 项目的业务功能开发指令,驱动从需求分析到代码生成的完整流程。
| 指令 | 用途 | 调用技能 | 产物 |
|---|---|---|---|
/require |
生成需求规格说明书 | require | doc/{模块}-{功能名}-requirements.md |
/dev |
基于需求规格说明书生成前后端代码 | ruoyi-backend + ykt-web-dev | 后端 Java 文件 + 前端 Vue/TS 文件 |
/require — 需求规格说明书生成/require <模块> <功能名> [简要需求描述] [选项]
| 参数 | 必填 | 说明 | 示例 |
|---|---|---|---|
| 模块 | 是 | 模块名(不含 ruoyi- 前缀) | ecs、backstage、system |
| 功能名 | 是 | 功能简写(英文,驼峰命名) | course、student |
| 简要需求 | 否 | 自然语言描述字段和特殊要求 | 课程名称、课程类型(字典course_type)、讲师(多对多) |
| 标记 | 说明 | 示例 |
|---|---|---|
--table=表名 |
指定主表名(默认 t_{模块}_{功能名}) |
--table=t_ecs_course |
--sub-table=表名 |
指定从表名 | --sub-table=t_ecs_course_teacher |
--no-tenant |
非多租户表 | --no-tenant |
--no-import |
不需要导入导出 | --no-import |
--dubbo |
需要暴露 Dubbo 接口 | --dubbo |
--db=数据库类型 |
指定数据库类型,影响建表语句生成(默认 kingbase) |
--db=mysql、--db=dm、--db=oceanbase |
1. 解析指令参数(模块、功能名、简要需求、选项)
2. 调用 require 技能
3. 加载需求规格说明书模板(references/requirements-template.md)
4. 分析简要需求,自动推断字段属性:
- 字段类型、查询方式、表单组件
- 字典字段(描述中含"字典"、"下拉")
- 关联字段(描述中含"关联"、"选择"、"多对多")
- 主从关系(描述中含"多对多"、"一对多",或指定了 --sub-table)
5. 填充模板,生成初始需求规格说明书(含建表语句)
6. 输出到 doc/{模块}-{功能名}-requirements.md
7. 展示给用户,支持反复沟通修改
8. 用户确认后形成最终需求规格说明书
| 用户描述 | 推断结果 |
|---|---|
| "名称" | fieldType=String, component=input, inQuery=true, queryType=like |
| "类型(字典xxx)" | fieldType=String, dictType=xxx, component=select |
| "编码" | fieldType=String, component=input, inQuery=true, queryType=like, required=true |
| "学分/分数" | fieldType=BigDecimal, component=inputNumber |
| "数量/人数" | fieldType=Integer, component=inputNumber |
| "时间/日期" | fieldType=Date, component=datetime |
| "备注/描述" | fieldType=String, component=textarea |
| "状态" | fieldType=String, dictType=status, component=select |
| "讲师/教师(多对多)" | 生成从表 + relation 配置 |
| "排序" | fieldType=Integer, component=inputNumber |
| "来源" | fieldType=Integer, dictType=data_source, component=select |
| "ID/标识" | fieldType=Long, inTable=false, inForm=false |
--db=mysql |
数据库类型设为 MySQL,生成 MySQL 建表语句 |
--db=dm |
数据库类型设为达梦,生成达盛建表语句 |
--db=oceanbase |
数据库类型设为 OceanBase,生成 OceanBase 建表语句 |
| (默认) | 数据库类型为人大金仓(kingbase) |
基础用法:
/require ecs 课程 课程名称、课程编码、课程类型(字典course_type)、学分、学时、讲师(多对多关联) --sub-table=t_ecs_course_teacher
仅指定模块和功能名,后续逐步补充需求:
/require ecs 教室
指定表名和选项:
/require backstage 房间 房间名称、房间类型(字典FJLX)、容纳人数 --table=t_pt_room --no-import
多行描述:
/require ecs 课程
字段:课程名称、课程编码、课程类型(字典course_type)、学分、学时
特殊:教师为多对多关联,需要Dubbo暴露,需要导入导出
/dev — 代码生成/dev <模块> <功能名> [选项]
| 参数 | 必填 | 说明 | 示例 |
|---|---|---|---|
| 模块 | 是 | 模块名 | ecs |
| 功能名 | 是 | 功能简写 | course |
| 标记 | 说明 | 示例 |
|---|---|---|
--backend=路径 |
后端项目根路径(默认 d:/dt_ykt/ykt_server) |
--backend=d:/other/server |
--frontend=路径 |
前端项目根路径(默认 d:/dt_ykt/ykt_web) |
--frontend=d:/other/web |
--backend-only |
仅生成后端代码 | --backend-only |
--frontend-only |
仅生成前端代码 | --frontend-only |
1. 解析指令参数(模块、功能名、选项)
2. 读取需求规格说明书 doc/{模块}-{功能名}-requirements.md
- 如果文件不存在,提示用户先执行 /require
3. 后端代码生成(调用 ruoyi-backend 技能):
a. 解析需求文档的字段清单、接口清单、特殊需求
b. 生成 Domain/Bo/Vo/Mapper/Service/ServiceImpl/Controller
c. 如有导入需求,生成 ImportVo/ImportListener
d. 如有 Dubbo 暴露需求,生成 RemoteService/RemoteServiceImpl
e. 如有从表,生成从表相关文件
4. 前端代码生成(调用 ykt-web-dev 技能):
a. 解析需求文档的字段清单、接口清单、VO 结构
b. 生成 api/{模块}/{功能名}/index.ts + types.ts
c. 生成 views/{模块}/{功能名}/index.vue(列表页)
d. 生成 views/{模块}/{功能名}/form.vue(表单页)
e. 处理字典字段(useDict 引用)
f. 处理关联字段(关联选择组件)
5. 展示生成结果清单
6. 用户确认后写入文件
| 需求文档内容 | 后端生成 | 前端生成 |
|---|---|---|
| 基础信息.模块 | 包路径 org.dromara.{module} |
目录 api/{module}/、views/{module}/ |
| 基础信息.主表名 | @TableName、Domain 类 |
types.ts 表单类型 |
| 基础信息.从表名 | 从表 Domain/Bo/Vo/Mapper/Service | 从表类型定义、子表单组件 |
| 基础信息.是否多租户 | extends TenantEntity / BaseEntity |
— |
| 字段(inDb=true) | Domain 字段 | — |
| 字段(required=true) | Bo @NotNull/@NotBlank 校验 |
types.ts 必填校验 |
| 字段(inTable=true) | Vo @ExcelProperty |
index.vue 表格列 |
| 字段(inQuery=true) | Bo 查询字段 | index.vue 搜索栏 |
| 字段(inForm=true) | Bo 表单字段 | form.vue 表单项 |
| 字段(dictType) | Vo @ExcelDictFormat |
useDict() + el-select |
| 字段(relation) | — | 关联选择弹窗组件 |
| 字段(inDb=false) | Vo 纯计算字段 | types.ts 只读展示 |
| 字段(component) | — | 对应 Element Plus 组件 |
| 接口清单 | Controller 方法 | api/index.ts 接口函数 |
| VO 结构 | Vo 类定义 | types.ts 类型定义 |
| 特殊需求.excelImport | ImportVo + ImportListener | — |
| 特殊需求.excelExport | Vo @ExcelProperty |
— |
| 特殊需求.dubboExpose | RemoteService + RemoteServiceImpl | — |
基础用法:
/dev ecs 课程
自动查找 doc/ecs-course-requirements.md,使用默认路径生成前后端代码。
仅生成后端:
/dev ecs 课程 --backend-only
指定自定义路径:
/dev ecs 课程 --backend=d:/other/server --frontend=d:/other/web
仅生成前端:
/dev ecs 课程 --frontend-only
Step 1:生成需求规格说明书
/require ecs 课程 课程名称、课程编码、课程类型(字典course_type)、学分、学时、讲师(多对多关联) --sub-table=t_ecs_course_teacher --dubbo --db=kingbase
Step 2:确认/修改需求规格说明书
AI 生成 doc/ecs-course-requirements.md,用户检查并修改(可多轮对话调整字段、增删接口等)。
Step 3:生成代码
/dev ecs 课程
Step 4:验证生成结果
后端文件:
ruoyi-modules/ruoyi-ecs/src/main/java/org/dromara/ecs/
├── controller/CourseController.java
├── domain/
│ ├── Course.java
│ ├── CourseTeacher.java
│ ├── bo/CourseBo.java
│ └── vo/CourseVo.java
├── mapper/CourseMapper.java
└── service/
├── ICourseService.java
└── impl/CourseServiceImpl.java
前端文件:
d:/dt_ykt/ykt_web/src/
├── api/ecs/course/
│ ├── index.ts
│ └── types.ts
└── views/ecs/course/
├── index.vue
└── form.vue
| 资源 | 默认路径 | 说明 |
|---|---|---|
| 需求文档 | d:/dt_ykt/ykt_server/doc/{模块}-{功能名}-requirements.md |
Markdown 格式 |
| 后端代码 | d:/dt_ykt/ykt_server/ruoyi-modules/ruoyi-{模块}/ |
Java 微服务模块 |
| 前端代码 | d:/dt_ykt/ykt_web/src/ |
Vue 3 + TypeScript |
| require 技能 | d:/dt_ykt/ykt_server/.workbuddy/skills/require/ |
需求分析技能 |
| 后端技能 | d:/dt_ykt/ykt_server/.workbuddy/skills/ruoyi-backend/ |
后端代码生成技能 |
| 前端技能 | d:/dt_ykt/ykt_web/.workbuddy/skills/ykt-web-dev/ |
前端代码生成技能 |
/require:/dev 指令依赖需求规格说明书,未找到时会提示先执行 /require/dev 以文件内容为准/dev 会提示覆盖风险,由用户决定course_type 而非 ecs_course_type)Dto 后缀(如 RemoteCourseDto)