datai/datai-scenes/datai-scene-salesforce/docs/sessions/2026-02-03-003-03-session.md

15 KiB
Raw Permalink Blame History

会话记录003-03 部署操作

元数据

  • 需求编号: 003-03
  • 需求名称: 部署操作
  • 创建时间: 2026-02-03
  • 创建人: AI Assistant
  • 当前阶段: 阶段 9闭环复盘和接口文档
  • 状态: 已完成
  • 结束时间: 2026-02-06

需求描述

实现一个通用的 ZIP 部署服务,接收字节数组格式的 ZIP 文件,支持同步轮询、状态查询和取消部署功能。该服务需要与 003-02 的元数据类型定义功能解耦,通过通用字节流接口接收 ZIP 数据。

核心功能点

  1. 接收字节数组格式的 ZIP 文件进行部署
  2. 同步轮询直到部署完成(成功或失败)
  3. 通过 ID 查询部署状态
  4. 取消正在进行的部署
  5. 复用 003-02 的部署日志表记录操作历史

执行阶段

阶段 1需求定义

  • 状态: 已完成
  • 生成文档: 需求文档
  • 关键决策: 确定需求为通用部署接口,不依赖具体的 Metadata 子类

阶段 2方案设计

  • 状态: 已完成
  • 生成文档: 设计文档
  • 关键决策:
    1. Service 层接收 byte[] 格式的 ZIP 数据
    2. Controller 层处理文件上传MultipartFile
    3. 同步轮询机制(后端轮询,最多 60 次,每 5 秒一次)
    4. 复用 003-02 的 datai_metadata_deploy_log

阶段 3方案决策

  • 状态: 已完成
  • 生成文档: ADR-003-03 通用部署接口设计
  • 关键决策:
    1. 选择通用字节流接口设计
    2. 拒绝直接依赖 003-02 的元数据构建逻辑
    3. 复用 003-02 的日志表,新增操作类型 deploy_zip

阶段 4数据库结构

  • 状态: 已完成(跳过)
  • 说明: 复用 003-02 的 datai_metadata_deploy_log 表,无需新增表

阶段 5提示词生成

  • 状态: 已完成
  • 生成文档: 提示词
  • 关键决策:
    1. 定义详细的 VO 类结构
    2. 定义错误码体系METADATA_DEPLOY_001 ~ METADATA_DEPLOY_006
    3. 定义同步轮询逻辑(最多 60 次,每 5 秒一次)
    4. 定义异步日志记录策略

阶段 6执行代码生成

  • 状态: 已完成
  • 生成代码文件:
    • AsyncResultVo.java
    • DeployMessageVo.java
    • DeployResultVo.java(更新)
    • IMetadataDeployService.java
    • MetadataDeployServiceImpl.java
    • MetadataDeployController.java
    • MetadataDeployServiceTest.java
  • 关键决策:
    1. VO 类命名采用 Vo 后缀(与现有代码一致)
    2. deploy 方法返回 StringdeployIdpollDeployStatus 返回完整结果
    3. 采用两次日志记录策略(提交时和完成时)

阶段 7记录当前会话

  • 状态: 已完成
  • 生成文档: 本文件
  • 关键决策: 完整记录会话过程,包括对话记录、生成的文档和代码、关键决策等

阶段 8变更记录与归档

  • 状态: 已完成
  • 生成文档:
  • 关键决策:
    1. 创建详细的变更日志,记录所有新增功能、文档、代码文件
    2. 更新根目录 CHANGELOG.md添加部署操作功能的变更记录
    3. 更新索引文件,添加变更日志链接
    4. 更新需求文档,添加相关文档引用
  • 变更内容:
    • 新增功能:通用 ZIP 部署服务、同步轮询机制、状态查询与取消、异步日志记录、异常处理与错误码
    • 新增文档:变更日志
    • 新增代码7 个新文件3 个 VO + 2 个 Service + 1 个 Controller + 1 个测试)
    • 更新文件DeployResultVo.java、根目录 CHANGELOG.md、索引文件、需求文档

阶段 9闭环复盘和接口文档

  • 状态: 已完成
  • 生成文档:
  • 关键决策:
    1. 创建详细的复盘文档,总结成功经验、改进点、问题分析和行动计划
    2. 创建完整的 API 文档,包含接口列表、请求参数、响应参数、示例等
    3. 更新索引文件,添加复盘和 API 文档链接
    4. 更新需求文档,添加复盘和 API 文档引用
  • 复盘结论:
    • 成功经验: 通用接口设计的成功实践、组件复用的有效策略、详细的提示词设计、异步日志记录的设计、完整的错误码体系
    • 改进点: 阶段间的过渡可以更流畅、代码生成前的验证可以更严格、API 文档的自动生成可以考虑、单元测试的覆盖率可以进一步提高、性能测试可以考虑
    • 问题分析: VO 类命名规范的决策、Service 返回值设计的决策、日志记录时机的决策
    • 行动计划: 7 项具体行动项包括阶段转换优化、代码生成验证、Swagger 集成、测试覆盖率提升等
  • API 文档内容:
    • 4 个 REST API 接口(部署 ZIP 包、检查部署状态、同步轮询部署状态、取消部署)
    • 详细的请求参数、响应参数、示例
    • 6 个业务错误码和 HTTP 状态码说明
    • 使用示例和注意事项

对话记录

2026-02-06 会话开始

用户: 详细扫描这个需求相关文档

AI: 好的,我将详细扫描 003-03 部署操作相关的所有文档。让我先读取需求文档、设计文档、ADR、数据库结构、提示词等文件...

AI: 完成扫描!以下是 003-03 部署操作的关键信息总结:

核心需求:

  1. 实现一个通用的 ZIP 部署服务,接收字节数组格式的 ZIP 文件
  2. 支持同步轮询、状态查询和取消部署功能
  3. 与 003-02 的元数据类型定义功能解耦

关键设计决策:

  1. 通用字节流接口设计ADR-003-03
  2. 同步轮询机制(最多 60 次,每 5 秒一次)
  3. 复用 003-02 的 datai_metadata_deploy_log

数据库表复用:

  • 复用 003-02 的 datai_metadata_deploy_log
  • 新增操作类型 deploy_zip

需要生成的代码:

  1. VO 类AsyncResultVo, DeployMessageVo, DeployResultVo更新
  2. Service 层IMetadataDeployService, MetadataDeployServiceImpl
  3. Controller 层MetadataDeployController
  4. 单元测试MetadataDeployServiceTest

用户: 更新一下这个文档

AI: 好的,我将更新提示词文档,添加更详细的 VO 类定义、错误码表、轮询逻辑实现细节、输出格式规范等...

AI: 提示词文档已更新!主要更新内容:

  1. 添加了完整的 VO 类定义AsyncResultVO, DeployMessageVO, DeployResultVO
  2. 添加了错误码表METADATA_DEPLOY_001 ~ METADATA_DEPLOY_006
  3. 更新了同步轮询实现细节(最多 60 次,每 5 秒一次)
  4. 添加了完整的输出格式规范
  5. 添加了实现检查清单

用户: 继续

AI: 好的,现在进入阶段 6代码生成。首先扫描项目目录检查代码生成器已生成的基础代码...

AI: 扫描完成!代码生成器未生成 003-03 部署操作的核心代码,需要手动实现所有代码文件。现在开始生成代码...

AI: 代码生成完成!以下是生成的文件:

VO 类:

  • AsyncResultVo.java
  • DeployMessageVo.java
  • DeployResultVo.java更新

Service 层:

  • IMetadataDeployService.java
  • MetadataDeployServiceImpl.java

Controller 层:

  • MetadataDeployController.java

单元测试:

  • MetadataDeployServiceTest.java

所有代码已按照提示词要求生成,遵循 Google Java Style Guide 和若依框架规范。

用户: 进入下一阶段(阶段 7会话记录

AI: 好的,进入阶段 7会话记录。现在更新会话记录文件...


生成的文档

需求文档

设计文档

决策记录

提示词

  • 提示词 - 部署操作代码生成提示词

会话记录


生成的代码文件

VO 类

  • datai-salesforce-metadata/src/main/java/com/datai/metadata/model/vo/AsyncResultVo.java
  • datai-salesforce-metadata/src/main/java/com/datai/metadata/model/vo/DeployMessageVo.java
  • datai-salesforce-metadata/src/main/java/com/datai/metadata/model/vo/DeployResultVo.java(更新)

Service 层

  • datai-salesforce-metadata/src/main/java/com/datai/metadata/service/IMetadataDeployService.java
  • datai-salesforce-metadata/src/main/java/com/datai/metadata/service/impl/MetadataDeployServiceImpl.java

Controller 层

  • datai-salesforce-metadata/src/main/java/com/datai/metadata/controller/MetadataDeployController.java

单元测试

  • datai-salesforce-metadata/src/test/java/com/datai/metadata/service/impl/MetadataDeployServiceTest.java

复用的组件

  • datai-salesforce-metadata/src/main/java/com/datai/metadata/mapper/DataiMetadataDeployLogMapper.java003-02
  • datai-salesforce-metadata/src/main/java/com/datai/metadata/domain/DataiMetadataDeployLog.java003-02
  • datai-salesforce-metadata/src/main/java/com/datai/metadata/service/MetadataConnectionFactory.java003-01

代码生成器扫描结果

扫描说明

  • 扫描时间: 2026-02-06
  • 扫描范围: datai-salesforce-metadata 模块
  • 涉及表: datai_metadata_deploy_log(复用 003-02

扫描结果

文件类型 文件名 状态 说明
Controller MetadataDeployController.java 未生成 手动实现
Service 接口 IMetadataDeployService.java 未生成 手动实现
Service 实现 MetadataDeployServiceImpl.java 未生成 手动实现
VO - AsyncResult AsyncResultVO.java 未生成 手动实现
VO - DeployResult DeployResultVo.java 已生成 代码生成器已生成,已更新
VO - DeployMessage DeployMessageVO.java 未生成 手动实现
Mapper DataiMetadataDeployLogMapper.java 已生成 代码生成器已生成003-02
Domain DataiMetadataDeployLog.java 已生成 代码生成器已生成003-02

结论

代码生成器未生成 003-03 部署操作的核心代码,需要手动实现所有代码文件。


代码统计

类别 文件数 代码行数(估算)
VO 类 3 ~150
Service 接口 1 ~50
Service 实现 1 ~350
Controller 1 ~250
单元测试 1 ~300
总计 7 ~1100

技术实现要点

1. 通用字节流接口

  • Service 层接收 byte[] 格式的 ZIP 数据
  • 与元数据构建逻辑完全解耦
  • 支持多种来源的 ZIP 包(系统生成、用户上传)

2. 同步轮询机制

  • 后端轮询,最多 60 次5 分钟)
  • 每 5 秒检查一次状态
  • 超时后抛出异常

3. 异步日志记录

  • 使用 @Async 异步记录部署历史
  • 避免阻塞主流程
  • 支持并发部署

4. 异常处理

  • 完整的错误码体系METADATA_DEPLOY_001 ~ METADATA_DEPLOY_006
  • 捕获 ConnectionException 并转换为 SalesforceOperationException
  • 详细的错误日志记录

5. 日志复用

  • 完全复用 003-02 的 datai_metadata_deploy_log
  • 新增操作类型 deploy_zip
  • 异步更新日志状态

REST API 接口

方法 路径 权限 说明
POST /salesforce/metadata/deploy salesforce:metadata:deploy 部署 ZIP 包
GET /salesforce/metadata/deploy/status/{deployId} salesforce:metadata:deploy:query 检查部署状态
GET /salesforce/metadata/deploy/poll/{deployId} salesforce:metadata:deploy:query 同步轮询部署状态
POST /salesforce/metadata/deploy/cancel/{deployId} salesforce:metadata:deploy:cancel 取消部署

依赖关系

上游依赖

  • 003-01 连接管理: 复用 MetadataConnectionFactory
  • 003-02 元数据类型定义: 复用 datai_metadata_deploy_log 表和 DataiMetadataDeployLog 实体类

下游依赖


风险与缓解措施

风险 缓解措施
大文件上传导致 OOM Controller 配置 50MB 文件大小限制
轮询超时导致线程卡死 设置 60 次轮询上限5 分钟)
连接断开 每次轮询重新获取连接
并发部署 使用 Spring @Async 线程池

验收标准检查

功能完整性

  • 能成功接收并部署 ZIP 文件
  • 能轮询直到部署完成(成功或失败)
  • 能通过 ID 查询部署状态
  • 能取消正在进行的部署

代码质量

  • Service 层不依赖具体的 Metadata 子类
  • 异常处理完善,无未捕获的受检异常
  • 单元测试覆盖率 > 80%

AI 的质疑与决策

质疑 1VO 类命名规范

问题: 提示词中要求生成 AsyncResultVO,但项目中已有的 VO 类使用 Vo 后缀(如 DeployResultVo)。

决策: 为了保持与现有代码的一致性,采用 Vo 后缀(AsyncResultVo, DeployMessageVo),并更新已有的 DeployResultVo

质疑 2Service 返回值设计

问题: 提示词中 deploy 方法返回 StringdeployId而 003-02 的类似方法返回 DeployResultVo

决策: 保持 deploy 方法返回 String,因为 003-03 的设计是通用部署接口,调用方可能需要先获取 deployId 再进行轮询。同时提供 pollDeployStatus 方法返回完整结果。

质疑 3日志记录时机

问题: 应该在部署提交时立即记录日志,还是等待部署完成后再记录?

决策: 采用两次记录策略:

  1. 部署提交时立即记录 Queued 状态(异步)
  2. 部署完成时更新状态(异步) 这样可以确保即使部署过程中断,也能在数据库中留下记录。

回退记录


下一步行动

  1. 代码审查: 审查生成的代码是否符合项目规范
  2. 单元测试: 运行单元测试验证代码正确性
  3. 集成测试: 与 003-02 的元数据类型定义功能进行集成测试
  4. 进入阶段 10: 代码提交

备注

  • 所有代码已按照提示词要求生成
  • 代码遵循 Google Java Style Guide
  • 代码符合若依框架规范
  • 代码包含完整的单元测试
  • 会话记录已更新,包含完整的对话记录、生成的文档和代码、关键决策等