datai-vue/.trae/skills/phase6-code-generation/SKILL.md
Kris a66ecad0f9 feat: 修复初始化从库接口参数并完善环境管理功能
- 更新 environment.js 中 initSlaveDatasource 函数参数从 environmentCode 改为 environmentId
- 更新 SourceEnvironmentTab.vue 中的初始化从库功能以使用 environmentId
- 在 TargetEnvironmentTab.vue 中添加完整的初始化从库功能
- 初始化项目单一真源(SSOT)文档结构,包括:
  - 创建主 index.md 作为项目单一真源
  - 创建 Authentication.canvas 可视化文件
  - 创建所有必需的文档目录和 README.md 文件
  - 建立完整的双向索引关系
2026-01-26 17:23:15 +08:00

25 KiB
Raw Blame History

name description
phase6-code-generation 在 Datai 项目中,基于已创建的需求文档、设计文档、决策记录和提示词,生成符合项目规范的代码文件,并更新索引和会话记录。此技能确保代码生成的准确性和规范性。

阶段 6执行代码生成技能书

A. 元数据 (Metadata)

name: phase6-code-generation

description: 在 Datai 项目中,基于已创建的需求文档、设计文档、决策记录和提示词,生成符合项目规范的代码文件,并更新索引和会话记录。此技能确保代码生成的准确性和规范性。


B. 触发与定位 (Triggers & Scope)

触发关键词

当用户输入包含以下关键词时,必须觉醒此技能:

  • "执行代码生成"、"生成代码"、"代码生成"
  • "进入阶段 6"、"下一阶段"
  • "代码"、"实现"、"开发"

触发场景

  • 用户确认阶段 5 完成,要求进入阶段 6
  • 用户要求生成代码
  • 用户询问如何执行代码生成
  • 用户提到"按照项目规则"或"SSOT 流程"进行代码生成

操作路径

此技能涉及以下文件和目录的操作:

  • 读取: docs/requirements/YYYY-MM-DD-00X-需求名.md (阶段 1 创建的需求文档)
  • 读取: docs/design/YYYY-MM-DD-00X-设计名.md (阶段 2 创建的设计文档)
  • 读取: docs/decisions/YYYY-MM-DD-00X-ADR-决策名.md (阶段 3 创建的决策记录)
  • 读取: docs/prompts/YYYY-MM-DD-00X-prompt-提示词名.md (阶段 5 创建的提示词)
  • 读取: docs/sql/YYYY-MM-DD-00X-表名.sql (阶段 4 创建的 SQL 文件)
  • 读取: datai-models/datai-generator/ 目录下的代码生成器模板
  • 扫描: 项目目录下已生成的代码文件(检查代码生成器是否已生成基础代码)
  • 创建: 项目目录下的 Java 代码文件(根据提示词要求)
  • 更新: docs/index.md
  • 更新: docs/design/YYYY-MM-DD-00X-设计名.md (标记代码实现状态)
  • 更新: docs/sessions/YYYY-MM-DD-00X-session.md
  • 读取: .trae/rules/project_rules.md (项目规则)

SSOT 依赖

必须参考以下"唯一真源"


C. 核心指令集 (Instructions)

架构约束

1. 代码生成约束(强制)

  • 必须严格按照阶段 5 生成的提示词要求生成代码
  • 必须遵循 Spring Boot 最佳实践
  • 必须遵循若依框架规范
  • 必须使用 MyBatis Plus 进行数据库操作(如果需要)
  • 必须使用指定的包结构和文件路径
  • 必须包含单元测试

2. 代码生成器使用约束(强制)

  • 对于涉及数据库表新增的需求,必须先询问用户是否使用代码生成器
  • 代码生成器路径:datai-models/datai-generator/
  • 代码生成器可以生成的基础代码包括:
    • 实体类Entity
    • Mapper 接口
    • Mapper XML
    • Service 接口
    • Service 实现类
    • Controller
    • 前端 Vue 页面(可选)
  • 如果使用代码生成器,必须先扫描项目目录,检查代码生成器是否已生成基础代码
  • 如果代码生成器已生成基础代码,则从提示词要求中排除这些基础代码,生成其他代码
  • 如果代码生成器未生成基础代码,则直接提示用户使用代码生成器生成基础代码,不继续生成其他代码
  • 排除后,明确列出还需要手动实现的代码

3. 索引更新约束(强制)

  • 必须在生成代码后立即更新 docs/index.md
  • 采用增量更新策略,严禁删除现有内容

4. 会话记录约束(强制)

  • 必须更新 docs/sessions/YYYY-MM-DD-00X-session.md
  • 必须更新当前阶段为"阶段 6执行代码生成"
  • 必须记录生成的代码文件列表
  • 必须记录是否使用代码生成器
  • 必须记录代码生成器扫描结果(如果使用)
  • 必须记录 AI 的质疑、替代方案以及最终的复现步骤

业务逻辑 SOP标准操作流程

步骤 1代码生成分析Let's think step by step

在生成代码前,必须执行以下分析:

  1. 分析需求和设计文档

    • 读取阶段 1 创建的需求文档
    • 读取阶段 2 创建的设计文档
    • 读取阶段 3 创建的决策记录
    • 明确需求的核心功能和非功能需求
    • 明确设计的技术方案和架构
  2. 确定是否涉及数据库表新增

    • 读取阶段 4 创建的 SQL 文件
    • 检查是否包含 CREATE TABLE 语句
    • 如果涉及表新增,标记需要使用代码生成器确认
    • 如果不涉及表新增,直接进入步骤 4
  3. 确定需要生成的代码文件

    • 读取阶段 5 创建的提示词
    • 明确需要生成的代码文件类型和路径
    • 明确代码规范和测试要求
  4. 遵循 Spring Boot 最佳实践

    • 明确 Spring Boot 的代码结构和规范
    • 明确若依框架的代码结构和规范
    • 明确 MyBatis Plus 的使用规范

步骤 2首句申明

在生成代码前,必须明确当前"现状"与"目标"


现状:已完成需求定义、方案设计、方案决策、数据库结构生成和提示词生成 目标:根据提示词生成符合项目规范的代码文件

步骤 3代码生成器确认新增步骤

如果需求涉及数据库表新增,必须执行此步骤:

  1. 检测是否涉及表新增

    • 检查阶段 4 创建的 SQL 文件
    • 如果包含 CREATE TABLE 语句,则涉及表新增
    • 如果不涉及表新增,跳过此步骤,直接进入步骤 4
  2. 询问用户是否使用代码生成器

    • 向用户说明代码生成器的位置和功能
    • 说明代码生成器可以生成的基础代码类型
    • 询问:"是否使用代码生成器生成基础代码?"
    • 等待用户确认
  3. 如果用户选择使用代码生成器

    • 读取 datai-models/datai-generator/ 目录下的代码生成器模板
    • 分析代码生成器可以生成的基础代码:
      • 实体类Entityvm/java/domain.java.vm
      • Mapper 接口:vm/java/mapper.java.vm
      • Mapper XMLvm/xml/mapper.xml.vm
      • Service 接口:vm/java/service.java.vm
      • Service 实现类:vm/java/serviceImpl.java.vm
      • Controllervm/java/controller.java.vm
    • 扫描项目目录,检查代码生成器是否已生成基础代码
      • 使用 SearchCodebase 或 Glob 工具扫描项目目录
      • 根据表名(从 SQL 文件中提取查找对应的实体类、Mapper、Service、Controller
      • 检查这些文件是否存在
      • 记录扫描结果:哪些基础代码已生成,哪些未生成
    • 如果代码生成器已生成所有基础代码
      • 从提示词要求中排除这些基础代码
      • 明确列出还需要手动实现的代码
      • 记录用户选择使用代码生成器,且基础代码已生成
      • 继续进入步骤 4
    • 如果代码生成器未生成基础代码或部分生成
      • 直接提示用户:"代码生成器未生成基础代码请先使用代码生成器生成基础代码Entity、Mapper、Service、Controller然后再继续生成其他代码。"
      • 列出未生成的基础代码文件
      • 提供代码生成器的使用方法
      • 记录用户选择使用代码生成器,但基础代码未生成
      • 不继续进入步骤 4等待用户完成代码生成器生成后再继续
  4. 如果用户选择不使用代码生成器

    • 按照提示词要求生成所有代码
    • 记录用户选择不使用代码生成器
  5. 如果需求不涉及表新增

    • 直接按照提示词要求生成所有代码
    • 不需要询问用户是否使用代码生成器

步骤 4加载阶段 5 准备的 Prompt观察输出

  1. 加载提示词

    • 读取阶段 5 创建的提示词
    • 如果步骤 3 确认使用代码生成器且基础代码已生成,从提示词要求中排除基础代码
    • 按照提示词的要求生成代码
  2. 生成代码

    • 生成 Java 代码文件
    • 保存到对应的项目目录
    • 确保代码符合项目规范
    • 确保代码包含单元测试
  3. 观察输出

    • 记录 AI 的质疑
    • 记录替代方案
    • 记录最终的复现步骤

步骤 5更新索引和设计文档

  1. 更新设计文档

    • 使用 Read 工具读取设计文档
    • 更新文档状态,标记代码已实现
    • 使用 Write 工具更新设计文档
  2. 保存索引

    • 使用 Write 工具更新 docs/index.md
    • 确保索引文件是最新的,严禁删除现有内容

步骤 6更新会话记录

  1. 读取现有会话记录

    • 使用 Read 工具读取 docs/sessions/YYYY-MM-DD-00X-session.md
  2. 更新阶段 6 信息

    • 更新"当前阶段"为"阶段 6执行代码生成"
    • 更新"阶段 6执行代码生成"的状态为"已完成"或"待继续"(如果基础代码未生成)
    • 添加生成的代码文件列表
    • 记录是否使用代码生成器
    • 如果使用代码生成器,记录代码生成器扫描结果
    • 如果基础代码未生成,记录提示用户使用代码生成器的信息
    • 记录 AI 的质疑、替代方案以及最终的复现步骤
  3. 保存会话记录

    • 使用 Write 工具更新会话记录

步骤 7确认与询问

  1. 向用户确认

    • 显示生成的代码文件列表
    • 如果使用代码生成器,说明哪些代码由代码生成器生成,哪些代码手动实现
    • 如果代码生成器未生成基础代码,提示用户使用代码生成器
    • 询问:"代码是否正确?"
    • 如果基础代码未生成,询问:"是否已使用代码生成器生成基础代码?是否继续生成其他代码?"
    • 如果基础代码已生成,询问:"是否进入下一阶段(记录当前会话)?"
  2. 等待用户反馈

    • 如果用户不满意,询问具体需要修改的地方
    • 如果用户要求回退,执行回退机制(见错误陷阱部分)
    • 如果用户确认,标记阶段 6 为已完成,准备进入阶段 7

工具调用

必须使用的工具

  1. Read 工具:读取现有文件

    • 使用场景读取需求文档、设计文档、决策记录、提示词、SQL 文件、索引、会话记录
    • 命令:Read(file_path="d:\\idea_demo\\datai\\docs\\prompts\\2026-01-21-001-prompt-用户登录功能.md")
  2. Write 工具:创建或更新文件

    • 使用场景:生成代码文件、更新索引、更新设计文档、更新会话记录
    • 命令:Write(file_path="d:\\idea_demo\\datai\\datai-modules-system\\src\\main\\java\\com\\datai\\modules\\system\\controller\\SysLoginController.java", content="...")
  3. RunCommand 工具:运行代码验证

    • 使用场景:运行单元测试验证代码正确性
    • 命令:RunCommand(command="mvn test", blocking=true, requires_approval=false, target_terminal="new")

可选使用的工具

  1. SearchCodebase 工具:搜索现有代码

    • 使用场景:查找现有代码作为参考、扫描代码生成器生成的文件
    • 命令:SearchCodebase(information_request="查找 datai-modules-system 模块下的 Controller 类")
  2. Glob 工具:搜索文件

    • 使用场景:扫描代码生成器生成的文件
    • 命令:Glob(path="d:\\idea_demo\\datai", pattern="**/SysDatasourceConfig.java")
  3. GetDiagnostics 工具:获取代码诊断

    • 使用场景:检查代码的语法错误和类型错误
    • 命令:GetDiagnostics(uri="d:\\idea_demo\\datai\\datai-modules-system\\src\\main\\java\\com\\datai\\modules\\system\\controller\\SysLoginController.java")
  4. TodoWrite 工具:管理任务

    • 使用场景:跟踪阶段执行进度
    • 命令:TodoWrite(todos=[...])

D. 错误陷阱与验证 (Anti-Patterns & Checklist)

常见错误Anti-Patterns

错误 1不询问用户是否使用代码生成器

错误示例


AI检测到需求涉及表新增 AI直接按照提示词生成所有代码 AI跳过代码生成器确认步骤

问题

  • 没有询问用户是否使用代码生成器
  • 违反了代码生成器使用约束
  • 可能导致重复生成基础代码

正确示例


AI检测到需求涉及表新增 AI询问用户是否使用代码生成器生成基础代码 AI根据用户选择排除或包含基础代码 AI生成剩余代码

错误 2不扫描代码生成器生成的文件

错误示例


AI用户选择使用代码生成器 AI直接从提示词要求中排除基础代码 AI没有扫描项目目录检查基础代码是否已生成 AI可能生成重复代码或遗漏代码

问题

  • 没有扫描代码生成器生成的文件
  • 无法确定基础代码是否已生成
  • 可能导致重复生成代码或遗漏代码

正确示例


AI用户选择使用代码生成器 AI扫描项目目录检查代码生成器是否已生成基础代码 AI如果基础代码已生成从提示词要求中排除 AI如果基础代码未生成提示用户使用代码生成器

错误 3代码生成器未生成基础代码时继续生成其他代码

错误示例


AI用户选择使用代码生成器 AI扫描项目目录发现基础代码未生成 AI仍然继续生成其他代码 AI导致代码不完整

问题

  • 代码生成器未生成基础代码时继续生成其他代码
  • 导致代码不完整,缺少基础代码

正确示例


AI用户选择使用代码生成器 AI扫描项目目录发现基础代码未生成 AI直接提示用户使用代码生成器生成基础代码 AI不继续生成其他代码等待用户完成代码生成器生成后再继续

错误 4不按提示词要求生成代码

错误示例


AI读取提示词要求生成 Controller、Service、Mapper、Entity AI只生成了 Controller 和 Service没有生成 Mapper 和 Entity

问题

  • 没有按照提示词要求生成所有代码文件
  • 违反了阶段 5 生成的提示词约束

正确示例


AI读取提示词要求生成 Controller、Service、Mapper、Entity AI按照提示词要求生成了所有代码文件 AI确保代码符合提示词的代码规范和测试要求

错误 5不排除代码生成器生成的基础代码

错误示例


AI用户选择使用代码生成器 AI仍然手动生成了 Entity、Mapper、Service、Controller AI导致代码重复

问题

  • 没有排除代码生成器生成的基础代码
  • 导致代码重复和维护困难

正确示例


AI用户选择使用代码生成器 AI扫描项目目录确认基础代码已生成 AI从提示词要求中排除 Entity、Mapper、Service、Controller AI只生成代码生成器无法生成的代码

错误 6不包含单元测试

错误示例


AI生成代码不包含单元测试 AI违反了提示词的测试要求

正确示例


AI生成代码包含单元测试 AI确保单元测试覆盖率不低于 80% AI确保测试用例包含正常场景和异常场景

错误 7代码不符合项目规范

错误示例

// 违反若依框架规范的代码
public class loginController {
    public String login(String username, String password) {
        // 代码逻辑
    }
}

问题

  • 类名不符合规范(首字母小写,驼峰命名错误)

  • 方法参数不符合规范(没有使用 DTO 类)

  • 没有使用若依框架的注解

  • 没有异常处理

正确示例

Java

// 符合若依框架规范的代码
@RestController
@RequestMapping("/system/auth")
public class SysLoginController {
    @Autowired
    private SysLoginService loginService;

    @PostMapping("/login")
    public AjaxResult login(@RequestBody LoginBody loginBody) {
        // 代码逻辑
        return AjaxResult.success(token);
    }
}

错误 8不询问用户确认就进入下一阶段

错误示例

AI生成代码
AI进入阶段 7记录当前会话未询问用户

正确示例

AI生成代码
AI代码已生成
AI代码是否正确
AI是否进入下一阶段记录当前会话

验收清单Checklist

在完成阶段 6 前,必须检查以下项目:

代码生成器确认检查

  • 已检测需求是否涉及数据库表新增

  • 如果涉及表新增,已询问用户是否使用代码生成器

  • 已记录用户的选择(使用或不使用代码生成器)

  • 如果使用代码生成器,已扫描项目目录检查基础代码是否已生成

  • 已记录代码生成器扫描结果(哪些基础代码已生成,哪些未生成)

  • 如果基础代码已生成,已从提示词要求中排除基础代码

  • 如果基础代码未生成,已提示用户使用代码生成器,不继续生成其他代码

  • 已明确列出还需要手动实现的代码

代码生成检查

  • 已按照提示词要求生成所有代码文件(排除代码生成器生成的基础代码)

  • 代码文件保存到了正确的项目目录

  • 代码符合 Spring Boot 最佳实践

  • 代码符合若依框架规范

  • 代码符合 MyBatis Plus 使用规范

  • 代码包含单元测试

  • 单元测试覆盖率不低于 80%

  • 测试用例包含正常场景和异常场景

  • 代码没有语法错误和类型错误

索引与文档更新检查

  • docs/index.md 已更新

  • 索引更新采用增量策略,未删除现有内容

  • 设计文档已更新,标记代码实现完成状态

会话记录更新检查

  • 会话记录已更新

  • 会话记录的"当前阶段"已更新为"阶段 6执行代码生成"

  • 会话记录的"阶段 6执行代码生成"状态已更新为"已完成"或"待继续"

  • 会话记录包含生成的代码文件列表

  • 会话记录记录是否使用代码生成器

  • 如果使用代码生成器,会话记录记录代码生成器扫描结果

  • 如果基础代码未生成,会话记录记录提示用户使用代码生成器的信息

  • 会话记录包含 AI 的质疑、替代方案以及最终的复现步骤

用户确认检查

  • 已向用户显示生成的代码文件列表

  • 如果使用代码生成器,已向用户说明哪些代码由代码生成器生成,哪些代码手动实现

  • 如果代码生成器未生成基础代码,已向用户提示使用代码生成器

  • 已询问用户"代码是否正确?"

  • 如果基础代码未生成,已询问用户"是否已使用代码生成器生成基础代码?是否继续生成其他代码?"

  • 如果基础代码已生成,已询问用户"是否进入下一阶段?"

  • 已等待用户反馈

回退机制检查(如果需要)

  • 如果用户不满意,已询问具体需要修改的地方

  • 如果用户要求回退,已删除相关代码文件

  • 如果用户要求回退,已撤销索引更新

  • 如果用户要求回退,已撤销设计文档更新

  • 如果用户要求回退,已更新会话记录

Correct vs Incorrect 代码对比

Incorrect错误示例

Java

// 违反若依框架规范的代码
public class loginController {
    public String login(String username, String password) {
        // 简单的用户名密码验证
        if ("admin".equals(username) && "123456".equals(password)) {
            return "success";
        } else {
            return "failure";
        }
    }
}

Correct正确示例

Java

// 符合若依框架规范的代码
@RestController
@RequestMapping("/system/auth")
public class SysLoginController {
    private static final Logger log = LoggerFactory.getLogger(SysLoginController.class);

    @Autowired
    private SysLoginService loginService;

    /**
     * 登录方法
     * * @param loginBody 登录信息
     * @return 结果
     */
    @PostMapping("/login")
    public AjaxResult login(@RequestBody LoginBody loginBody) {
        AjaxResult ajax = AjaxResult.success();
        // 生成令牌
        String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
                loginBody.getUuid());
        ajax.put(Constants.TOKEN, token);
        return ajax;
    }
}

附录:快速参考

文件路径速查

  • 需求文档:docs/requirements/YYYY-MM-DD-00X-需求名.md

  • 设计文档:docs/design/YYYY-MM-DD-00X-设计名.md

  • 决策记录:docs/decisions/YYYY-MM-DD-00X-ADR-决策名.md

  • SQL 文件:docs/sql/YYYY-MM-DD-00X-表名.sql

  • 提示词:docs/prompts/YYYY-MM-DD-00X-prompt-提示词名.md

  • 主索引:docs/index.md

  • 会话记录:docs/sessions/YYYY-MM-DD-00X-session.md

  • 项目规则:.trae/rules/project_rules.md

  • SSOT 架构师提示词:docs/Prompt/0004-单一真源文档驱动架构师.md

  • 代码生成器:datai-models/datai-generator/

代码生成器模板速查

  • 实体类模板:datai-models/datai-generator/src/main/resources/vm/java/domain.java.vm

  • Mapper 接口模板:datai-models/datai-generator/src/main/resources/vm/java/mapper.java.vm

  • Mapper XML 模板:datai-models/datai-generator/src/main/resources/vm/xml/mapper.xml.vm

  • Service 接口模板:datai-models/datai-generator/src/main/resources/vm/java/service.java.vm

  • Service 实现类模板:datai-models/datai-generator/src/main/resources/vm/java/serviceImpl.java.vm

  • Controller 模板:datai-models/datai-generator/src/main/resources/vm/java/controller.java.vm

工具命令速查

PowerShell

# 读取提示词
Read(file_path="d:\\idea_demo\\datai\\docs\\prompts\\2026-01-21-001-prompt-用户登录功能.md")

# 读取 SQL 文件
Read(file_path="d:\\idea_demo\\datai\\docs\\sql\\2026-01-21-001-sys_user.sql")

# 扫描代码生成器生成的文件
Glob(path="d:\\idea_demo\\datai", pattern="**/SysDatasourceConfig.java")
SearchCodebase(information_request="查找 SysDatasourceConfig 相关的文件")

# 生成代码文件
Write(file_path="d:\\idea_demo\\datai\\datai-modules-system\\src\\main\\java\\com\\datai\\modules\\system\\controller\\SysLoginController.java", content="...")

# 运行单元测试
RunCommand(command="mvn test", blocking=true, requires_approval=false, target_terminal="new")

# 检查代码诊断
GetDiagnostics(uri="d:\\idea_demo\\datai\\datai-modules-system\\src\\main\\java\\com\\datai\\modules\\system\\controller\\SysLoginController.java")

代码生成器使用流程

  1. 检测需求是否涉及数据库表新增

  2. 如果涉及表新增,询问用户是否使用代码生成器

  3. 如果用户选择使用代码生成器:

    • 扫描项目目录,检查代码生成器是否已生成基础代码

    • 如果基础代码已生成:

      • 从提示词要求中排除基础代码Entity、Mapper、Service、Controller

      • 明确列出还需要手动实现的代码

      • 继续生成其他代码

    • 如果基础代码未生成:

      • 直接提示用户使用代码生成器生成基础代码

      • 列出未生成的基础代码文件

      • 提供代码生成器的使用方法

      • 不继续生成其他代码,等待用户完成代码生成器生成后再继续

  4. 如果用户选择不使用代码生成器:

    • 按照提示词要求生成所有代码

代码生成器扫描方法

  1. 从 SQL 文件中提取表名

  2. 根据表名生成对应的实体类名、Mapper 接口名、Service 接口名、Controller 类名

  3. 使用 Glob 或 SearchCodebase 工具扫描项目目录

  4. 检查这些文件是否存在

  5. 记录扫描结果:哪些基础代码已生成,哪些未生成

  6. 根据扫描结果决定后续操作