MianyVue/docs/cad-batch-plan.md

156 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CAD 批处理串行执行框架(设计与开发进度)
## 1. 文档目的
本文件用于同步两类信息:
1. 总体批处理设计(长期有效)
2. 当前代码开发进度(持续更新)
---
## 2. 总体设计(已定稿)
### 2.1 目标
- 前端提交批次任务(多模型、多步骤按条目表达)
- 后端按模型扩展名路由到对应 CAD 插件
- 全局严格 FIFO 串行执行(跨软件也串行)
- 插件通过 HTTP 接口执行,结果通过回调闭环
- 单任务失败后按重试策略处理,最终失败不阻塞后续任务
### 2.2 执行策略
- 队列:全局单队列 + 单 worker
- 顺序:严格按提交顺序
- 状态机:`queued -> dispatching -> waiting_callback -> succeeded/failed`
- 失败策略:重试后失败,继续执行后续任务
- 存储策略:首版内存态(重启不恢复)
### 2.3 架构模块
- 模型层:`app/models/cad_batch.py`
- 路由层:`app/core/cad_task_router.py`
- 插件下发层:`app/core/plugin_http_client.py`
- 回调等待层:`app/core/plugin_callback_registry.py`
- 串行执行层:`app/core/serial_batch_executor.py`
- 业务管理层:`app/core/cad_batch_manager.py`
- 插件回调接口:`app/api/v1/plugin_callbacks.py`
- 前端通道WebSocket`app/api/v1/websocket.py`
---
## 3. 公共接口设计
### 3.1 WebSocket 消息
- `submit_batch_tasks`:提交批次
- `get_batch_status`:查询批次
- `get_batch_item_status`:查询条目
### 3.2 WebSocket 推送事件
- `batch_created`
- `batch_item_update`
- `batch_completed`
### 3.3 插件回调 HTTP
- `POST /api/v1/plugin-callbacks/task-result`
- 核心字段:
- `execution_id`
- `software_id`
- `status` (`success|failed`)
- `error_message`
- `result`
- `finished_at`
- `token/signature`(当前实现为 token 校验)
---
## 4. 配置设计
### 4.1 已支持配置
- `routing.extension_to_software`
- `plugins.{software_id}.base_url`
- `plugins.{software_id}.request_timeout_sec`
- `plugins.{software_id}.callback_timeout_sec`
- `plugins.{software_id}.max_retries`
- `plugins.{software_id}.retry_backoff_sec`
- `plugins.{software_id}.callback_token`
- `plugins.{software_id}.tasks.{task_type}.path`
- `plugins.{software_id}.tasks.{task_type}.body_mode`
- `plugins.{software_id}.tasks.{task_type}.completion_mode`
### 4.2 body_mode 语义
- `file_path`:发送 `filePath + task_params + callback元信息`
- `task_params_only`:发送 `task_params + callback元信息`
- `project_open`:发送 `task_params + callback元信息`
- `creo_close_model`:发送 `{ software_type: "creo", force_close: boolean }`
- `empty`:发送空请求体 `{}`
- `passthrough`:原样透传
### 4.3 completion_mode 语义
- `callback`:下发后进入 `waiting_callback`,等待插件回调判定结果
- `sync`:以接口同步返回结果直接判定成功/失败,不等待回调
---
## 5. 当前开发进度(截至本次更新)
### 5.1 已完成
- [x] 计划文档落盘:`cad-batch-plan.md`
- [x] 批处理核心模型、执行器、管理器已实现
- [x] 插件异步回调机制与幂等处理已实现
- [x] 主应用 `startup/shutdown` 已接入批处理执行器
- [x] WebSocket 提交/查询批次能力已接入
- [x] 插件任务映射已支持按 `software_id + task_type` 路由
- [x] 单元测试已覆盖路由/执行器/回调/API 映射
### 5.2 已集成的 CAD 插件资料
#### Creo (localhost:12345)
- `open_model` -> `/api/model/open` (`file_path`)
- `shrinkwrap_shell` -> `/api/creo/shrinkwrap/shell` (`task_params_only`)
- `shell_analysis` -> `/api/analysis/shell-analysis` (`task_params_only`)
- `close_model` -> `/api/model/close` (`creo_close_model`, `sync`, 已接入)
#### Revit (localhost:9000)
- `open_model` -> `/api/open` (`file_path`)
- `shell_analyze` -> `/api/shell/analyze` (`task_params_only`)
- `shell_execute` -> `/api/shell/execute` (`task_params_only`)
- `close_model` -> `/api/close` (`empty`, `sync`, 已接入)
#### PDMS (localhost:9001)
- `open_project` -> `/api/project/open` (`project_open`)
- `open_mdb` -> `/api/mdb/open` (`project_open`)
- `shrinkwrap_model` -> `/api/model/shrinkwrap` (`task_params_only`)
- `simplify_model` -> `/api/model/simplify` (`task_params_only`)
- `close_project` -> `/api/project/close` (`task_params_only`, 占位)
### 5.3 当前测试状态
- 已通过:`13 passed`
- 覆盖文件:
- `tests/test_cad_task_router.py`
- `tests/test_serial_batch_executor.py`
- `tests/test_plugin_callback_api.py`
- `tests/test_plugin_http_client_mapping.py`
- `tests/test_creo_close_model_sync_flow.py`
---
## 6. 待补资料与后续工作
### 6.1 你后续补充后可继续对接
1. 每个 `task_type` 的最终命名标准(是否沿用当前命名)
2. Revit 大任务轮询接口细节(如 `/api/task` 的请求/返回)
3. PDMS `close_project` 是否真实可用(当前仍按占位映射)
4. 回调安全方案最终版token 还是 signature签名算法与字段
5. 各 API 的完整错误码与失败语义(用于统一重试/终止策略)
### 6.2 下一步建议
- 基于真实插件联调一轮 `open -> 处理 -> close`
- 优先确认 PDMS `close_project` 实际行为与容错策略
- 增加端到端集成测试(含回调超时、插件离线、重复回调场景)
---
## 7. 验收标准(当前版本)
- 可提交批次并进入全局串行队列
- 可按扩展名路由并向插件正确下发
- 可通过回调驱动状态闭环
- 单任务失败不会阻塞后续任务
- 可通过 WebSocket 查询批次与条目状态