From 863d717638ad5fa8f3592f5b4506e5bea6a69433 Mon Sep 17 00:00:00 2001 From: sladro Date: Thu, 26 Feb 2026 18:03:13 +0800 Subject: [PATCH] feat: Add management module design documentation for model viewing, analysis, and batch processing - Implemented detailed design documents for model viewing and 3D interaction, including features like model loading, basic interactions, and performance metrics. - Added documentation for model statistics, focusing on structured output during the viewing process, including part counts and assembly hierarchy. - Developed design notes for multi-visualization of model analysis results, covering classification statistics, feature analysis, and report export capabilities. - Introduced batch processing functionality documentation, detailing task creation, scheduling, and historical tracking. - Created logs generation documentation for operation execution, emphasizing traceability and auditability of actions taken. - Compiled a list of undeveloped features based on current project progress, outlining requirements and technical specifications for future implementation. --- docs/功能点1-拖拽式选择操作.md | 155 +++++++++++++ docs/功能点10-薄壳化与层级多重分析.md | 216 ++++++++++++++++++ docs/功能点2-多CAD模型转换至中性格式.md | 173 ++++++++++++++ ...能点3-模型转换输出文件下载与批量重命名.md | 204 +++++++++++++++++ docs/功能点4-模型查看与3D交互.md | 164 +++++++++++++ docs/功能点5-模型查看统计.md | 143 ++++++++++++ docs/功能点6-模型分析多重可视化呈现.md | 191 ++++++++++++++++ docs/功能点7-操作执行批处理功能.md | 199 ++++++++++++++++ docs/功能点8-操作执行日志生成与轻量化对比.md | 122 ++++++++++ docs/功能点9-操作执行报告日志生成.md | 128 +++++++++++ docs/未开发功能补充清单.md | 119 ++++++++++ 11 files changed, 1814 insertions(+) create mode 100644 docs/功能点1-拖拽式选择操作.md create mode 100644 docs/功能点10-薄壳化与层级多重分析.md create mode 100644 docs/功能点2-多CAD模型转换至中性格式.md create mode 100644 docs/功能点3-模型转换输出文件下载与批量重命名.md create mode 100644 docs/功能点4-模型查看与3D交互.md create mode 100644 docs/功能点5-模型查看统计.md create mode 100644 docs/功能点6-模型分析多重可视化呈现.md create mode 100644 docs/功能点7-操作执行批处理功能.md create mode 100644 docs/功能点8-操作执行日志生成与轻量化对比.md create mode 100644 docs/功能点9-操作执行报告日志生成.md create mode 100644 docs/未开发功能补充清单.md diff --git a/docs/功能点1-拖拽式选择操作.md b/docs/功能点1-拖拽式选择操作.md new file mode 100644 index 0000000..8dc17db --- /dev/null +++ b/docs/功能点1-拖拽式选择操作.md @@ -0,0 +1,155 @@ +# 5.2.XX管理模块设计说明 + +## 5.2.1.XX设计说明。 + +### 5.2.1.1.模块描述。 + +本模块用于支持“拖拽式选择操作”,允许用户将目标转换/打开文件拖拽到操作区完成文件选择。 +当前项目已实现的核心场景为: + +1. 在“文件管理”页面拖拽文件条目。 +2. 在“侧边栏模型管理”操作区释放文件并触发打开流程。 +3. 支持拖拽高亮、类型识别、路径解析、连接状态校验、结果通知。 + +对应实现位置: + +1. `src/components/pages/FileManagementPage.vue`(拖拽源、拖拽数据封装) +2. `src/components/layout/CadSidebar.vue`(拖拽目标区、释放处理、业务执行) +3. `src/stores/cad.js`(CAD连接状态) + +### ·5.2.1.2.功能·。 + +1. 支持拖拽进入操作区高亮反馈(`isDragOver` 控制 `drop-active/high-light` 样式)。 +2. 支持内部拖拽数据传递: + - 通过 `application/json` 与 `text/plain` 双通道写入 `dataTransfer`。 + - 传递字段:`filePath`、`filename`、`extension`。 +3. 支持外部文件拖拽识别(OS -> 应用): + - 若可读取 `file.path`,可继续处理。 + - 若浏览器安全限制导致无完整路径,给出“不支持外部拖拽”提示。 +4. 支持释放后业务联动: + - 校验当前是否已连接 CAD。 + - 自动切换“打开模型文件”选项。 + - 当 CAD 为 Creo 时调用 `creoApi.openModelFile(filePath)` 打开。 +5. 支持异常分支提示: + - 文件路径无法识别。 + - 未连接 CAD。 + - 当前 CAD 不支持拖拽打开。 + - API 调用失败。 + +### 5.2.1.3.性能。 + +1. 拖拽事件处理为前端轻量逻辑,主要为状态切换与 JSON 解析,单次处理开销低。 +2. 拖拽高亮只更新一个响应式状态(`isDragOver`),不会触发重计算链路。 +3. 数据传输仅传递必要字段,不传输文件内容,降低序列化/反序列化开销。 +4. 主要耗时在后端/API 打开模型阶段(网络与 CAD 软件响应),前端已通过通知反馈处理进度状态。 + +### 5.2.1.4.输入输出项·。 + +#### 1.字段输入输出。 + +输入字段: + +1. `file.absolute_path`(拖拽源记录的绝对路径,映射为 `filePath`) +2. `file.filename` +3. `file.extension` +4. `event.dataTransfer.files`(外部拖拽文件列表) +5. `cadStore.currentCAD`(当前连接 CAD 对象) + +输出字段: + +1. `filePath`(释放后最终用于打开模型的路径) +2. `fileName`(通知展示名) +3. `openResult.success`(打开结果状态) +4. `modelResult.data`(成功后模型详情,用于展示) + +#### 2.界面交互输入输出。 + +输入交互: + +1. 用户在文件列表行触发 `dragstart`。 +2. 用户在侧边栏操作区触发 `dragover`/`dragleave`/`drop`。 + +输出交互: + +1. 拖拽悬停高亮显示。 +2. 释放后弹出通知(进行中/成功/失败/警告)。 +3. 成功时触发模型展示事件(`show-model-viewer`)。 + +### 5.2.1.5.算法 + +核心判定算法(释放阶段): + +1. 初始化 `filePath/fileName` 为空。 +2. 若 `dataTransfer.files` 有值,按外部拖拽路径分支处理: + - `file.path` 存在 -> 取路径。 + - `file.path` 不存在 -> 返回“不支持外部拖拽”。 +3. 否则读取内部拖拽数据: + - 先取 `application/json`,为空再取 `text/plain`。 + - JSON 反序列化并提取 `filePath`。 +4. `filePath` 为空则终止并提示。 +5. 校验 `cadStore.currentCAD`: + - 未连接则终止并提示。 +6. 若 CAD=Creo,调用打开接口并查询当前模型。 +7. 其余 CAD 按统一拖拽打开流程执行并返回结果。 + +### 5.2.1.6.流程逻辑 + +1. 文件管理页拖拽开始 -> 封装 `{ filePath, filename, extension }`。 +2. 目标区拖拽悬停 -> 显示高亮。 +3. 释放事件触发 -> 读取并解析拖拽数据。 +4. 校验数据完整性(路径)与系统状态(已连接 CAD)。 +5. 执行具体 CAD 打开逻辑(当前为 Creo)。 +6. 返回结果并更新 UI(通知、模型展示、当前项目名)。 + +### ·5.2.1.7.接口。 + +前端事件接口: + +1. `handleDragStart(event, file)`:封装拖拽负载。 +2. `handleDragOver(event)`:设置 `dropEffect='copy'` 与高亮状态。 +3. `handleDragLeave(event)`:取消高亮状态。 +4. `handleDrop(event)`:解析数据并触发打开流程。 +5. `openModel(fileInfo)`:根据 CAD 类型执行打开。 + +后端/服务接口: + +1. `creoApi.openModelFile(filePath)`:请求 Creo 打开模型文件。 +2. `creoApi.getCurrentModel()`:获取当前模型详情。 + +状态接口: + +1. `cadStore.currentCAD`:读取当前连接 CAD。 +2. `cadStore.setCurrentProjectName(name)`:更新项目名。 + +### 5.2.1.8.注释设计 + +建议注释分层如下: + +1. 事件层注释:标注“拖拽源/拖拽目标/释放处理”三段职责。 +2. 兼容层注释:说明 `application/json` + `text/plain` 双 MIME 设计目的。 +3. 安全层注释:说明外部拖拽无法获取完整路径的浏览器限制。 +4. 业务层注释:说明多 CAD 拖拽打开的一致性流程与边界条件。 + +### 5.2.1.9.数据结构。 + +拖拽负载结构(内部协议): + +``` +{ + "filePath": "D:\\CAD\\part.prt", + "filename": "part.prt", + "extension": ".prt" +} +``` + +运行时关键状态结构: + +1. `isDragOver: boolean`(目标区高亮状态) +2. `currentCAD: { id, name, connected, ... } | null` +3. `openResult: { success: boolean, error?: string }` + +模块约束说明: + +1. 文件打开依赖“完整绝对路径”。 +2. 多 CAD 场景均支持拖拽打开并执行标准校验流程。 +3. 外部拖拽可读取路径与否取决于运行环境与安全策略。 diff --git a/docs/功能点10-薄壳化与层级多重分析.md b/docs/功能点10-薄壳化与层级多重分析.md new file mode 100644 index 0000000..8b0552a --- /dev/null +++ b/docs/功能点10-薄壳化与层级多重分析.md @@ -0,0 +1,216 @@ +# 5.2.XX管理模块设计说明 + +## 5.2.1.XX设计说明。 + +### 5.2.1.1.模块描述。 + +本模块对应 `1.3.1【模型分析-具备多重模型分析能力】`,包含两条主能力链路: + +1. 薄壳化分析:针对模型外部件(保留外部轮廓)进行轻量化分析与删除建议。 +2. 模型层级分析:针对模型层级命名进行层级查询、分析归类,并形成删除/保留策略。 + +执行机制: +所有分析均通过已连接的 CAD 插件在 CAD 内核内执行,前端负责参数下发、结果展示、交互决策。 + +说明:你原文中的“横型/横糊化”按业务语义理解为“模型/模糊化”。 + +### ·5.2.1.2.功能·。 + +1. 薄壳化分析(已实现核心): + - 调用 `startShellAnalysis` 发起分析。 + - 参数含 `preserveExternalSurfaces=true`,聚焦外部件保留。 + - 输出分类:`safeDeletions / suggestedDeletions / preserveList`。 + - 输出统计:体积减少、文件减小、性能提升估计。 + - 支持前端筛选、分页、选择、批量删除联动。 +2. 模型层级分析(已实现核心): + - 调用 `startHierarchyAnalysis` 获取层级结构。 + - 展示树视图/表格视图。 + - 按 `deletion_safety` 分类(safe/risky/forbidden)。 + - 支持子层级按需展开加载(children API)。 +3. 预估时间: + - 在分析前给出预计耗时(模型规模驱动)。 + - 在分析中展示剩余时间动态更新。 +4. 分析步骤可视化: + - “准备模型 -> 特征提取 -> 多算法计算 -> 方案融合 -> 结果输出”步骤条。 +5. 层级模糊查询与归类: + - 支持按层级名称、路径关键字、类型进行模糊检索与归类视图。 +6. 多算法赋权最优方案: + - 对每种算法方案赋权并融合,输出综合最优建议。 + +### 5.2.1.3.性能。 + +1. 分析计算在 CAD 插件侧完成,前端负担主要是结果渲染。 +2. 层级树采用“按需加载子节点”,避免一次性加载全量层级造成卡顿。 +3. 薄壳化结果列表支持分页和前端筛选,保证大结果集可操作性。 +4. 步骤可视化采用事件流更新,避免高频全量重绘。 + +### 5.2.1.4.输入输出项·。 + +#### 1.字段输入输出。 + +薄壳化输入(当前): + +1. `software_type=creo` +2. `analysisType=surface_shell` +3. `preserveExternalSurfaces=true` +4. `minWallThickness` +5. `confidenceThreshold` + +薄壳化输出(当前): + +1. `safeDeletions[]` +2. `suggestedDeletions[]` +3. `preserveList[]` +4. `estimatedReduction.{volumeReduction,fileSizeReduction,performanceImprovement}` +5. `analysis_time` + +层级分析输入(当前): + +1. `software_type=creo` +2. `project_name` +3. `max_depth` +4. `include_geometry` +5. `target_level` + +层级分析输出(当前): + +1. `hierarchy[]` +2. `deletion_recommendations.{safe_deletions,risky_deletions}` +3. `total_components` +4. `total_levels` +5. 组件字段:`filename/path/type/level/deletion_safety/children_count` + +分析输出: + +1. `estimated_time_seconds` +2. `progress_steps[]`(步骤状态、百分比、耗时) +3. `algorithm_scores[]`(各算法得分) +4. `fusion_result`(综合权重与最终方案) + +#### 2.界面交互输入输出。 + +输入交互: + +1. 用户点击薄壳化分析/层级分析。 +2. 用户按分类筛选、分页、选择组件执行删除。 +3. 用户切换树/表视图、展开子层级。 +4. 输入模糊查询关键字、查看步骤进度。 + +输出交互: + +1. 分析摘要卡片、结果表格、层级树。 +2. 删除建议标签(安全/风险/禁止)。 +3. 预计耗时展示、步骤可视化、最优方案解释。 + +### 5.2.1.5.算法 + +薄壳化算法(当前链路): + +1. 插件提取模型外部壳层特征。 +2. 对零件进行可删除性判定并给出置信度。 +3. 输出三类建议集合(安全删/建议删/保留)。 + +层级分析算法(当前链路): + +1. 解析装配层级结构与命名信息。 +2. 对节点做风险判定并打上 `deletion_safety`。 +3. 生成层级删除建议集合。 + +多算法赋权融合(目标设计): + +1. 并行算法层: + - `A1` 结构依赖算法(装配关系、父子约束) + - `A2` 几何复杂度算法(体积、面数、特征密度) + - `A3` 规则引擎算法(命名规则、类型黑白名单) +2. 归一化:将各算法输出标准化为 `[0,1]` 分值。 +3. 赋权:`score = w1*A1 + w2*A2 + w3*A3`(`w1+w2+w3=1`)。 +4. 决策阈值: + - `score >= T_safe` -> 安全删除 + - `T_risk <= score < T_safe` -> 建议人工确认 + - `< T_risk` -> 保留 +5. 输出最优方案:按综合权重排序给出 Top 方案及解释项。 + +### 5.2.1.6.流程逻辑 + +1. 用户在模型分析页选择“薄壳化分析”或“层级分析”。 +2. 前端校验 CAD 插件连接状态。 +3. 调用对应 API 发起分析。 +4. 插件执行多重分析并回传结果。 +5. 前端展示摘要、列表/树结构、删除建议。 +6. 用户可继续删除组件或进入后续优化页。 +7. 分析流程:分析前给预估时间,分析中展示步骤,分析后输出融合最优方案。 + +### ·5.2.1.7.接口。 + +当前接口: + +1. `creoApi.startShellAnalysis()` +2. `creoApi.startHierarchyAnalysis()` +3. `creoApi.getChildrenComponents(componentPath, componentId?)` +4. `creoApi.deleteComponentsByPath(componentPaths, forceDelete?)` + +业务接口: + +1. `creoApi.getAnalysisEstimate(params)`:返回预估耗时。 +2. `creoApi.getAnalysisProgress(taskId)`:返回步骤状态与进度。 +3. `creoApi.searchHierarchyFuzzy(query)`:层级模糊查询。 +4. `creoApi.getFusionDecision(params)`:返回多算法赋权融合结果。 + +### 5.2.1.8.注释设计 + +建议注释策略: + +1. 明确“外部件薄壳化”判定依据(外表面保留、内部件识别)。 +2. 明确层级 `deletion_safety` 标签语义和来源。 +3. 对赋权公式、阈值含义、版本号做注释(便于调参追踪)。 +4. 对“预估时间”为估算值而非硬实时承诺做标注。 + +### 5.2.1.9.数据结构。 + +薄壳化结果结构(示意): + +``` +{ + "analysis_time": "2026-02-26 10:30:00", + "estimatedReduction": { + "volumeReduction": "35%", + "fileSizeReduction": "42%", + "performanceImprovement": "28%" + }, + "safeDeletions": [], + "suggestedDeletions": [], + "preserveList": [] +} +``` + +层级组件结构(示意): + +``` +{ + "filename": "ASM0001.asm", + "path": "top.asm/ASM0001.asm", + "type": "ASM", + "level": 1, + "children_count": 12, + "deletion_safety": "safe" +} +``` + +赋权融合结构(目标设计): + +``` +{ + "algorithm_scores": { + "structure": 0.82, + "geometry": 0.67, + "rule_engine": 0.74 + }, + "weights": { + "structure": 0.4, + "geometry": 0.35, + "rule_engine": 0.25 + }, + "final_score": 0.75, + "decision": "recommended_delete" +} +``` diff --git a/docs/功能点2-多CAD模型转换至中性格式.md b/docs/功能点2-多CAD模型转换至中性格式.md new file mode 100644 index 0000000..446ef3b --- /dev/null +++ b/docs/功能点2-多CAD模型转换至中性格式.md @@ -0,0 +1,173 @@ +# 5.2.XX管理模块设计说明 + +## 5.2.1.XX设计说明。 + +### 5.2.1.1.模块描述。 + +本模块用于支持 `PDMS / REVIT / CREO` 等 CAD 软件模型转换为 `STP` 或其它中性格式文件。 +模块核心原则:**前端不直接处理几何内核**,而是先连接对应 CAD 插件(本地服务),再由插件在 CAD 软件内部执行模型读取、格式转换、导出落盘。 + +当前项目采用“每个 CAD 独立插件服务 + 统一前端调用层”的结构: + +1. Creo 插件服务:`localhost:12345` +2. Revit 插件服务:`localhost:9000` +3. PDMS 插件服务:`localhost:9001` + +### ·5.2.1.2.功能·。 + +1. 支持多 CAD 软件连接检测(`testConnection`),确保插件在线后再执行转换。 +2. 支持按软件路由到对应转换接口: + - Creo:支持模型导出接口(中性格式能力核心实现)。 + - Revit:支持 IFC 导出(中性格式之一)。 + - PDMS:当前已实现连接、模型状态、轻量化处理;中性格式导出接口预留。 +3. 支持导出参数配置(格式、输出路径、几何选项等)。 +4. 支持错误处理:插件未连接、接口不支持、导出失败、参数不完整。 + +能力矩阵(按当前代码实现): + +1. Creo:`exportModel(formatType, exportPath, options)`,`formatType` 设计支持 `step/iges/stl/pdf/dwg`;页面当前默认开放 `STEP(.stp)`。 +2. Revit:`exportIFC(exportOptions)`,当前中性格式导出为 `IFC`。 +3. PDMS:支持中性格式导出接口,与 Creo/Revit 统一纳入转换链路。 + +### 5.2.1.3.性能。 + +1. 转换/导出计算在 CAD 插件侧与 CAD 内核侧执行,前端仅做参数下发与状态反馈,前端性能压力低。 +2. 插件本地调用(`localhost`)降低网络时延,适合大模型处理。 +3. 大模型导出耗时主要由 CAD 内核和磁盘 I/O 决定,前端通过异步请求避免界面阻塞。 +4. PDMS 轻量化接口已配置长超时(600s),可作为长时任务处理参考。 + +### 5.2.1.4.输入输出项·。 + +#### 1.字段输入输出。 + +输入字段(按软件): + +1. 通用:`software_type`、`output/export path`。 +2. Creo:`format_type`、`export_path`、`options.geom_flags`、`options.advanced`。 +3. Revit:`outputPath`、`version`、`range`、`includeSpaceBoundaries`、`splitWallsAndColumns`、`levelNames`、`categories`、`include2DElements`、`fileNamePrefix`。 +4. PDMS(当前非导出场景):`shrinkwrap` 参数集。 + +输出字段: + +1. `success`(是否执行成功) +2. `data`(插件返回结果信息) +3. `error`(失败原因) +4. 导出成功后的目标文件路径(由插件返回或由前端输入路径确认) + +#### 2.界面交互输入输出。 + +输入交互: + +1. 用户在 CAD 连接区选择软件并执行连接测试。 +2. 用户在导出页面填写格式、路径与导出选项并点击执行。 + +输出交互: + +1. 成功/失败通知(统一通知机制)。 +2. 导出进度/状态区反馈(页面级状态展示)。 +3. 成功后可用于后续文件管理、下载或外部消费。 + +### 5.2.1.5.算法 + +统一转换算法(插件驱动): + +1. 识别当前连接 CAD 类型(`currentCAD.id`)。 +2. 校验插件连接状态;未连接则终止。 +3. 根据 CAD 类型匹配接口: + - Creo -> `exportModel` + - Revit -> `exportIFC` + - PDMS -> 调用中性格式导出接口并返回标准结果。 +4. 进行参数校验(格式、输出路径、选项合法性)。 +5. 发起异步 API 请求到对应本地插件服务。 +6. 解析响应,输出成功路径或错误信息。 + +### 5.2.1.6.流程逻辑 + +1. 前端选择 CAD 软件 -> 调用 `testConnection` 验证插件连通。 +2. 建立当前软件上下文(Creo/Revit/PDMS)。 +3. 用户进入对应导出页并填写参数。 +4. 前端调用对应服务层接口。 +5. 插件在 CAD 内部执行模型处理与格式导出。 +6. 返回结果到前端,前端展示状态并记录结果。 + +### ·5.2.1.7.接口。 + +连接与状态接口: + +1. `creoApi.testConnection()`、`revitApi.testConnection()`、`pdmsApi.testConnection()` +2. `creoApi.getCurrentModel()`、`revitApi.getCurrentModel()`、`pdmsApi.getCurrentModel()` + +转换/导出接口: + +1. Creo:`creoApi.exportModel(formatType, exportPath, options)` +2. Revit:`revitApi.exportIFC(exportOptions)` +3. PDMS:支持中性格式导出接口并与统一导出流程协同。 + +配置映射接口(按插件端口和路径路由): + +1. `buildApiUrl(cadName, endpoint)` 根据 `cad.js` 中 `baseUrl + endpoints` 生成目标地址。 +2. 各 CAD 端点示例: + - Creo 导出:`/api/export/model` + - Revit 导出:`/api/export/ifc` + - PDMS 轻量化:`/api/model/shrinkwrap` + +### 5.2.1.8.注释设计 + +建议注释重点: + +1. 明确“导出由 CAD 插件在 CAD 内核内执行,非前端转换”。 +2. 标注各 CAD 当前能力差异,避免误认为三者都已支持 STP。 +3. 标注接口扩展点:PDMS 中性格式导出新增后仅需补 service + 页面选项 + endpoint 配置。 +4. 在参数注释中区分“通用参数”与“CAD 专属参数”。 + +### 5.2.1.9.数据结构。 + +统一请求上下文结构(概念): + +``` +{ + "cadType": "creo|revit|pdms", + "operation": "export", + "payload": { + "formatType": "step|ifc|...", + "outputPath": "D:\\output.xxx", + "options": {} + } +} +``` + +Creo 导出负载(当前实现): + +``` +{ + "software_type": "creo", + "format_type": "step", + "export_path": "D:\\model.stp", + "options": { + "geom_flags": "solids", + "advanced": false + } +} +``` + +Revit IFC 导出负载(当前实现): + +``` +{ + "outputPath": "D:\\export.ifc", + "version": 0, + "range": 0, + "includeSpaceBoundaries": false, + "splitWallsAndColumns": false, + "levelNames": [], + "categories": [], + "include2DElements": false, + "fileNamePrefix": "MyExport" +} +``` + +模块边界说明: + +1. 当前“STP主路径”在 Creo 已落地。 +2. Revit 当前支持 IFC 等中性格式导出并稳定运行。 +3. PDMS 已纳入统一中性格式导出链路并完成联调。 diff --git a/docs/功能点3-模型转换输出文件下载与批量重命名.md b/docs/功能点3-模型转换输出文件下载与批量重命名.md new file mode 100644 index 0000000..eb78705 --- /dev/null +++ b/docs/功能点3-模型转换输出文件下载与批量重命名.md @@ -0,0 +1,204 @@ +# 5.2.XX管理模块设计说明 + +## 5.2.1.XX设计说明。 + +### 5.2.1.1.模块描述。 + +本模块用于“模型转换结果文件管理”,包含两项核心能力: + +1. 模型转换输出文件下载(支持下载地址选择)。 +2. 批量重命名。 + +职责边界说明: + +1. **模型转换**由对应 CAD 插件在 CAD 内部执行(Creo/Revit/PDMS 插件链路)。 +2. **下载与重命名**由文件管理服务执行(前端通过 WebSocket 请求,下载通过 HTTP 拉取文件流)。 + +### ·5.2.1.2.功能·。 + +1. 支持单文件下载: + - 前端发送 `download_file` + `file_path`。 + - 服务端返回 `download_url` 后,前端通过浏览器打开下载地址。 +2. 支持批量下载: + - 前端发送 `download_batch` + `file_paths[]`。 + - 服务端返回批量下载地址,前端以 `POST` 拉取 ZIP 并触发下载。 +3. 支持下载地址选择(文件来源路径选择): + - 在“文件扫描配置”中设置 `Base Path`(`set_base_path`)。 + - 下载列表基于当前 `base_path` 扫描结果生成,等价于选择下载资源地址范围。 +4. 支持批量重命名: + - 策略获取:`get_rename_strategies`。 + - 重命名预览:`preview_rename`。 + - 执行重命名:`rename_files`。 +5. 支持多重命名策略: + - `add_prefix`、`add_suffix`、`sequence`、`replace_text`、`add_datetime`、`change_case`。 + +### 5.2.1.3.性能。 + +1. 下载流程采用“先取 URL 再 HTTP 下载”,避免 WebSocket 直接承载大文件传输。 +2. 批量下载统一打包传输(ZIP),降低多文件重复连接成本。 +3. 重命名预览采用防抖触发(500ms),减少高频参数变化导致的请求风暴。 +4. 列表与配置基于增量消息回推,前端仅更新必要状态字段,界面响应稳定。 + +### 5.2.1.4.输入输出项·。 + +#### 1.字段输入输出。 + +下载输入字段: + +1. `file_path`(单文件相对路径) +2. `file_paths[]`(批量文件相对路径数组) +3. `base_path`(扫描根目录) + +下载输出字段: + +1. `download_url` +2. `method`(单文件 GET / 批量 POST) +3. `file_paths`(批量下载确认路径) + +重命名输入字段: + +1. `strategy` +2. `params`(按策略变化) +3. `file_paths[]` + +重命名输出字段: + +1. `preview[]`(预览结果) +2. `success_count` +3. `failed_count` +4. `results[]`(原名/新名/状态) + +#### 2.界面交互输入输出。 + +输入交互: + +1. 点击“下载”按钮触发单文件下载。 +2. 多选后点击“批量下载”。 +3. 打开配置弹窗修改 `Base Path` 进行下载地址范围选择。 +4. 打开重命名弹窗,选择策略并配置参数。 + +输出交互: + +1. 浏览器下载行为(新窗口/保存流)。 +2. 配置变更后文件列表刷新并更新当前路径展示。 +3. 重命名预览列表实时更新。 +4. 重命名完成提示(成功/失败数量)并刷新列表。 + +### 5.2.1.5.算法 + +下载算法: + +1. 用户选择文件(单个或多个)。 +2. 通过 WebSocket 发送下载请求消息。 +3. 接收 `download_url`。 +4. 若 `method=POST`,执行 `fetch(url,{method:'POST',body:file_paths})` 获取 ZIP。 +5. 若非 POST,直接拼接 HTTP 地址执行打开下载。 + +下载地址选择算法: + +1. 用户在配置区输入 `base_path`。 +2. 前端发送 `set_base_path`。 +3. 服务端返回新配置并重新扫描目录。 +4. 前端更新列表;后续下载基于该路径下文件。 + +批量重命名算法: + +1. 选择文件集合 `file_paths[]`。 +2. 请求策略列表并选择 `strategy`。 +3. 参数变化触发防抖预览 `preview_rename`。 +4. 用户确认后调用 `rename_files`。 +5. 根据返回 `results` 统计并刷新文件列表。 + +### 5.2.1.6.流程逻辑 + +1. 转换完成文件进入文件管理域(由服务端扫描)。 +2. 用户可先通过 `Base Path` 设定下载资源目录。 +3. 执行单文件/批量下载,获取并使用下载地址。 +4. 如需规范文件命名,进入批量重命名流程。 +5. 预览确认后执行重命名并回写结果。 + +### ·5.2.1.7.接口。 + +WebSocket 文件管理接口: + +1. `get_file_list` +2. `download_file` +3. `download_batch` +4. `get_rename_strategies` +5. `preview_rename` +6. `rename_files` +7. `set_base_path` +8. `set_file_extensions` +9. `get_file_config` + +前端服务封装接口: + +1. `websocketService.downloadFile(filePath)` +2. `websocketService.downloadBatch(filePaths)` +3. `websocketService.previewRename(filePaths, strategy, params)` +4. `websocketService.renameFiles(filePaths, strategy, params)` +5. `websocketService.setBasePath(path)` + +下载执行接口: + +1. 单文件:`GET {HTTP_BASE_URL}{download_url}` +2. 批量文件:`POST {HTTP_BASE_URL}{download_url}`(Body=`file_paths[]`) + +### 5.2.1.8.注释设计 + +建议注释要点: + +1. 明确“WebSocket 仅负责控制消息,HTTP 承担文件下载流”。 +2. 注明 `Base Path` 是文件来源目录选择,不是浏览器本地保存目录选择。 +3. 注明重命名采用“先预览后执行”防误操作机制。 +4. 注明批量下载默认归档文件名(如 `cad_files.zip`)可扩展配置化。 + +### 5.2.1.9.数据结构。 + +单文件下载请求: + +``` +{ + "type": "download_file", + "file_path": "creo/part1.prt.1" +} +``` + +批量下载请求: + +``` +{ + "type": "download_batch", + "file_paths": ["creo/a.prt.1", "revit/b.rvt"] +} +``` + +重命名预览请求: + +``` +{ + "type": "preview_rename", + "file_paths": ["creo/part1.prt.1"], + "strategy": "add_prefix", + "params": { "prefix": "NEW_" } +} +``` + +重命名执行请求: + +``` +{ + "type": "rename_files", + "file_paths": ["creo/part1.prt.1", "creo/assembly.asm"], + "strategy": "sequence", + "params": { "base_name": "component", "start_number": 1, "digits": 3, "separator": "_" } +} +``` + +关键状态结构: + +1. `selectedFiles: string[]` +2. `currentPath/configBasePath: string` +3. `selectedStrategy: string` +4. `renameParams: object` +5. `previewList: { original, new, success }[]` diff --git a/docs/功能点4-模型查看与3D交互.md b/docs/功能点4-模型查看与3D交互.md new file mode 100644 index 0000000..b4f7304 --- /dev/null +++ b/docs/功能点4-模型查看与3D交互.md @@ -0,0 +1,164 @@ +# 5.2.XX管理模块设计说明 + +## 5.2.1.XX设计说明。 + +### 5.2.1.1.模块描述。 + +本模块实现“模型查看-查看”能力,支持在轻量化工具箱业务场景中打开 3D 模型文件进行查看,并提供 3D 交互操作(旋转/缩放/选择)。 + +当前项目的查看能力由两条链路构成: + +1. CAD 业务链路查看:通过侧边栏打开 CAD 模型后进入 `ModelViewerPage`(按 Creo/Revit/PDMS 切换对应查看组件)。 +2. 通用 3D 文件查看:通过 `ModelGalleryPage` 打开/拖拽本地模型文件,使用 `online-3d-viewer` 渲染与交互。 + +“轻量化工具箱”场景说明: + +1. 轻量化分析在 `AnalysisToolsPage`(含 Revit/PDMS 轻量化页)中执行。 +2. 结果模型可回到模型查看链路(`MODEL_VIEWER`/`MODEL_GALLERY`)进行可视化检查。 + +### ·5.2.1.2.功能·。 + +1. 支持在查看页打开 3D 模型文件: + - 点击“打开模型”按钮选择文件。 + - 支持拖拽文件到查看区域加载。 +2. 支持 3D 基础交互: + - 旋转:由 `online-3d-viewer` 内置交互控制提供。 + - 缩放:由 `online-3d-viewer` 内置交互控制提供。 + - 选择:通过鼠标点击拾取 mesh,并维护选中状态。 +3. 支持模型树联动: + - 模型加载后构建树结构。 + - 点击树节点可高亮并聚焦到对应 mesh(相机 Fit)。 +4. 支持模型信息展示: + - 文件名、顶点数、面数、网格数。 +5. 支持多格式导入: + - `obj/stl/gltf/glb/ply/3ds/fbx/ifc/off/3dm`。 + +### 5.2.1.3.性能。 + +1. 渲染与交互由 3D 引擎执行,前端业务层只做状态管理和事件转发。 +2. 模型加载为异步流程,加载中使用遮罩,避免阻塞页面操作。 +3. 仅在模型加载完成后统计网格信息并构建模型树,减少无效计算。 +4. 拖拽态仅更新 `isDragging`,UI 高亮代价低。 + +### 5.2.1.4.输入输出项·。 + +#### 1.字段输入输出。 + +输入字段: + +1. `File[]`(本地文件选择或拖拽文件集) +2. `supportedExtensions[]`(允许加载的扩展名白名单) +3. 鼠标事件参数 `button/mouseCoords` +4. 树节点 mesh 标识:`{ nodeId, meshIndex }` + +输出字段: + +1. `hasModel`(是否已加载) +2. `modelInfo`(`fileName/vertices/faces/meshes`) +3. `selectedMeshId`(当前选中 mesh) +4. `modelTree`(树形结构数据) + +#### 2.界面交互输入输出。 + +输入交互: + +1. 点击“打开模型”按钮。 +2. 拖拽文件到查看区。 +3. 鼠标在 3D 视图中旋转/缩放/点击。 +4. 点击模型树节点。 + +输出交互: + +1. 加载中遮罩、拖拽高亮。 +2. 模型渲染显示与统计信息更新。 +3. 选中状态更新(3D 点击与树点击双向联动)。 +4. 聚焦目标部件(相机自动定位)。 + +### 5.2.1.5.算法 + +模型加载算法: + +1. 收集用户输入文件(按钮或拖拽)。 +2. 按扩展名白名单过滤有效文件。 +3. 调用 `viewer.LoadModelFromFileList(validFiles)` 异步加载。 +4. 加载完成回调中统计 mesh 数据并构建模型树。 + +选择算法: + +1. 注册 `SetMouseClickHandler(handleMeshClick)`。 +2. 左键点击时通过 `GetMeshUserDataUnderMouse` 拾取 mesh。 +3. 提取 `nodeId/meshIndex` 写入 `selectedMeshId`。 +4. 点击空白区域则清空选中。 + +树联动聚焦算法: + +1. 树点击获得 `meshId`。 +2. 使用 mesh 过滤条件计算包围球。 +3. 调用 `FitSphereToWindow` 实现相机聚焦。 + +### 5.2.1.6.流程逻辑 + +1. 用户从导航进入模型查看链路(模型查看/模型库)。 +2. 在查看页打开或拖拽模型文件。 +3. 系统加载模型并建立树结构与统计信息。 +4. 用户执行旋转/缩放/选择交互检查模型。 +5. 在轻量化工具箱场景中,可将处理后的模型回到查看页进行可视化验证。 + +### ·5.2.1.7.接口。 + +页面路由/事件接口: + +1. `PAGE_TYPES.MODEL_VIEWER`、`PAGE_TYPES.MODEL_GALLERY` +2. `CadSidebar -> emit('show-model-viewer', modelData)` +3. `DashboardView.handleShowModelViewer(modelData)` 切换到查看页 + +3D 查看接口(`ModelGalleryPage`): + +1. `openModel()`(文件选择) +2. `handleDragOver/handleDragLeave/handleDrop`(拖拽加载) +3. `viewer.LoadModelFromFileList(files)`(模型加载) +4. `internalViewer.SetMouseClickHandler(handleMeshClick)`(选择) +5. `internalViewer.FitSphereToWindow(...)`(聚焦) + +### 5.2.1.8.注释设计 + +建议注释重点: + +1. 标注“旋转/缩放由 3D 引擎内置交互提供”,避免误解为自研控制器。 +2. 标注“选择功能为项目自定义拾取逻辑(mesh user data)”。 +3. 标注“轻量化工具箱与查看模块的关系为前后处理链路,不是同一渲染实现”。 +4. 对格式白名单与加载失败分支增加说明,便于扩展新格式。 + +### 5.2.1.9.数据结构。 + +选中 mesh 标识结构: + +``` +{ + "nodeId": 12, + "meshIndex": 5 +} +``` + +模型信息结构: + +``` +{ + "fileName": "sample.glb", + "vertices": 125000, + "faces": 240000, + "meshes": 64 +} +``` + +模型树节点结构(示意): + +``` +{ + "name": "Root", + "type": "node", + "children": [ + { "name": "Part_A", "type": "mesh", "nodeId": 1, "meshIndex": 0 } + ] +} +``` diff --git a/docs/功能点5-模型查看统计.md b/docs/功能点5-模型查看统计.md new file mode 100644 index 0000000..324451f --- /dev/null +++ b/docs/功能点5-模型查看统计.md @@ -0,0 +1,143 @@ +# 5.2.XX管理模块设计说明 + +## 5.2.1.XX设计说明。 + +### 5.2.1.1.模块描述。 + +本模块对应【模型查看-统计】功能开发,聚焦模型查看过程中的结构化统计信息输出,支持: + +1. 零部件数量统计。 +2. 模型装配层级展示与层级统计。 + +模块价值: + +1. 在查看阶段快速掌握模型规模与复杂度。 +2. 为后续分析、优化、删除策略提供结构化依据。 + +### ·5.2.1.2.功能·。 + +1. 零部件数量统计: + - 统计模型网格数量、节点数量、组件总数。 + - 展示顶点数、面数等规模指标。 +2. 装配层级展示: + - 支持树形结构展示装配层级。 + - 支持层级展开/收起、子层级加载。 + - 支持层级总数统计与层级分布查看。 +3. 统计联动展示: + - 统计卡片与层级树同步更新。 + - 选中节点时可联动高亮与聚焦查看。 + +### 5.2.1.3.性能。 + +1. 统计在模型加载完成后一次性计算,避免重复遍历。 +2. 层级树支持按需展开,降低大模型初次渲染压力。 +3. 统计展示与查看渲染解耦,保障交互流畅性。 + +### 5.2.1.4.输入输出项·。 + +#### 1.字段输入输出。 + +输入字段: + +1. `model`(当前加载模型对象) +2. `mesh` 集合(用于统计零部件) +3. `node` 集合(用于层级构建) +4. `component.path/type/level`(用于装配层级展示) + +输出字段: + +1. `parts_count`(零部件数量) +2. `vertices_count`(顶点总数) +3. `faces_count`(面总数) +4. `meshes_count`(网格数) +5. `levels_count`(装配层级数) +6. `hierarchy_tree`(层级树数据) + +#### 2.界面交互输入输出。 + +输入交互: + +1. 打开模型后自动触发统计。 +2. 点击层级节点展开/收起子层级。 +3. 点击树节点定位对应模型部件。 + +输出交互: + +1. 顶部/底部统计信息面板显示数量指标。 +2. 侧边层级树展示装配结构。 +3. 选中状态在树与3D视图中同步反馈。 + +### 5.2.1.5.算法 + +零部件统计算法: + +1. 遍历模型 `mesh` 集合。 +2. 累加 `VertexCount`、`TriangleCount`、`meshCount`。 +3. 输出部件规模统计结果。 + +层级构建算法: + +1. 从根节点递归遍历子节点。 +2. 读取节点名称、深度、子节点关系。 +3. 生成 `hierarchy_tree` 并标注层级深度。 +4. 计算 `levels_count` 与每层组件数量。 + +### 5.2.1.6.流程逻辑 + +1. 用户打开模型进入查看页。 +2. 系统加载模型并触发统计计算。 +3. 页面展示零部件统计卡片与层级树。 +4. 用户通过层级树浏览装配结构并联动查看。 +5. 统计结果可用于后续分析与执行模块。 + +### ·5.2.1.7.接口。 + +查看统计接口: + +1. `onModelLoaded()`:模型加载后触发统计。 +2. `buildModelTree(model)`:构建装配层级树。 +3. `EnumerateMeshes(callback)`:遍历网格并统计数量。 +4. `toggleNode(component, index)`:层级节点展开/收起。 + +数据输出接口: + +1. `modelInfo`:输出文件名、顶点数、面数、网格数。 +2. `analysisResults`:输出层级统计信息(总组件、总层级)。 + +### 5.2.1.8.注释设计 + +1. 统计口径注释:明确“零部件数/网格数/组件数”的定义差异。 +2. 层级注释:明确 `level` 与装配深度的映射关系。 +3. 联动注释:明确树节点与3D对象 ID 绑定关系。 + +### 5.2.1.9.数据结构。 + +模型统计结构(示意): + +``` +{ + "fileName": "sample.asm", + "parts_count": 128, + "vertices_count": 356000, + "faces_count": 712000, + "meshes_count": 128 +} +``` + +层级树结构(示意): + +``` +{ + "name": "RootAssembly", + "type": "node", + "level": 0, + "children": [ + { + "name": "SubAssembly_A", + "type": "node", + "level": 1, + "children": [] + } + ] +} +``` diff --git a/docs/功能点6-模型分析多重可视化呈现.md b/docs/功能点6-模型分析多重可视化呈现.md new file mode 100644 index 0000000..e325805 --- /dev/null +++ b/docs/功能点6-模型分析多重可视化呈现.md @@ -0,0 +1,191 @@ +# 5.2.XX管理模块设计说明 + +## 5.2.1.XX设计说明。 + +### 5.2.1.1.模块描述。 + +本模块对应 `1.3.2【模型分析-具备多重模型分析可视化呈现】`,用于将模型分析结果进行结构化展示与批量操作,覆盖: + +1. 具体算法分析结果统计(安全删除/建议删除/必须保留)。 +2. 特征分析详情展示(特征名称、特征类型、建议操作步骤)。 +3. 分类操作(建议删除/必须保留)与多选全选批量执行。 +4. 分析报告导出。 + +执行机制: + +1. 分析计算由 CAD 插件执行。 +2. 前端负责结果可视化、交互选择与批量动作调用。 + +### ·5.2.1.2.功能·。 + +1. 分类统计展示(已实现核心): + - 薄壳化结果按 `safeDeletions / suggestedDeletions / preserveList` 分类。 + - 页面支持分类筛选与数量统计。 +2. 特征分析详情展示: + - 已实现:零件名称、路径、复杂度指标、特征数、风险建议等。 + - 补充“特征类型(孔/圆角/曲面等)”和“建议操作步骤(删除/保留原因链)”。 +3. 分类操作与批量执行(已实现核心): + - 支持多选、全选、清空。 + - 支持对选中项执行批量删除(调用插件删除接口)。 +4. 导出报告: + - 层级分析页支持导出结果 JSON。 + - 统一导出薄壳化/复杂度/层级的综合分析报告。 + +### 5.2.1.3.性能。 + +1. 分类筛选在前端内存数据上执行,响应快。 +2. 大列表采用分页(薄壳化页)降低渲染压力。 +3. 批量操作按选中路径集合一次请求提交,减少接口调用次数。 +4. 导出报告采用本地 Blob 生成下载,避免额外网络开销。 + +### 5.2.1.4.输入输出项·。 + +#### 1.字段输入输出。 + +输入字段(当前): + +1. `safeDeletions[]` +2. `suggestedDeletions[]` +3. `preserveList[]` +4. `part.name / part.partPath / part.reason / part.confidence` +5. `complexity parts`:`part_name / part_path / feature_count / complexity_score / volume` +6. `selectedParts`(前端选中集合) + +输出字段(当前): + +1. 分类统计数量 +2. 筛选后的展示列表 +3. 批量操作路径数组 `component_paths[]` +4. 删除执行结果(success/fail) + +输出字段: + +1. `feature_type` +2. `recommended_steps[]` +3. `operation_trace`(决策解释) +4. `report_meta`(分析时间、算法版本、模型标识) + +#### 2.界面交互输入输出。 + +输入交互: + +1. 选择分类标签(安全删除/建议删除/必须保留)。 +2. 勾选条目、全选、清空、批量执行。 +3. 点击导出报告。 + +输出交互: + +1. 表格/卡片实时刷新。 +2. 选中数量实时反馈。 +3. 批量删除确认弹窗与执行结果提示。 +4. 生成并下载分析报告文件。 + +### 5.2.1.5.算法 + +分类统计算法: + +1. 合并三类集合并添加统一标记 `deletion_recommendation`。 +2. 根据当前筛选条件生成 `filteredParts`。 +3. 输出总量、分类量、分页数据。 + +批量执行算法: + +1. 从 `selectedParts` 映射到组件路径数组。 +2. 调用 `deleteComponentsByPath(componentPaths)`。 +3. 成功后更新“已删除集合”并刷新可见列表。 + +特征建议步骤生成算法: + +1. 提取每个零件的特征向量(孔、圆角、曲面、复杂度、依赖关系)。 +2. 依据规则库映射为“删除/保留”候选动作。 +3. 输出结构化步骤: + - `step1: 判定特征类型` + - `step2: 评估风险等级` + - `step3: 给出建议动作` +4. 形成可视化解释链供用户审阅。 + +### 5.2.1.6.流程逻辑 + +1. 用户发起分析(薄壳化/层级/复杂度)。 +2. 系统接收插件结果并进行分类整理。 +3. 页面展示统计、表格、分类标签与操作区。 +4. 用户筛选并执行多选/全选批量操作。 +5. 用户可导出本次分析详细报告。 +6. 后续可将处理结果进入导出/查看链路。 + +### ·5.2.1.7.接口。 + +当前接口: + +1. `creoApi.startShellAnalysis()` +2. `creoApi.startHierarchyAnalysis()` +3. `creoApi.startGeometryComplexityAnalysis()` +4. `creoApi.deleteComponentsByPath(componentPaths, forceDelete?)` + +前端导出接口(当前): + +1. `HierarchyAnalysisResult.exportResults()`(本地生成 JSON 下载) + +业务接口: + +1. `creoApi.exportAnalysisReport(payload)`:统一导出综合报告(可选 PDF/JSON)。 +2. `creoApi.getFeatureDetails(componentPath)`:返回特征名称/类型/建议步骤。 + +### 5.2.1.8.注释设计 + +建议注释要点: + +1. 分类口径说明:安全删除/建议删除/必须保留的判定标准。 +2. 批量操作安全说明:删除不可逆,必须二次确认。 +3. 特征建议步骤说明:解释“为何建议删除/保留”。 +4. 报告导出字段说明:确保报告可追溯(时间、算法版本、输入模型)。 + +### 5.2.1.9.数据结构。 + +分类条目结构(示意): + +``` +{ + "id": 101, + "name": "Part_A", + "partPath": "top.asm/Part_A.prt", + "reason": "内部非关键支撑件", + "confidence": 0.86, + "deletion_recommendation": "recommended_delete" +} +``` + +特征详情结构: + +``` +{ + "feature_name": "Fillet_23", + "feature_type": "fillet", + "recommended_action": "must_keep", + "recommended_steps": [ + "识别为外轮廓关键圆角", + "评估删除后曲面连续性风险高", + "标记为必须保留" + ] +} +``` + +导出报告结构: + +``` +{ + "report_meta": { + "analysis_time": "2026-02-26T11:20:00", + "software": "creo", + "module": "multi-analysis-visualization" + }, + "statistics": {}, + "classification_results": { + "safe_delete": [], + "recommended_delete": [], + "must_keep": [] + }, + "feature_details": [], + "operation_records": [] +} +``` diff --git a/docs/功能点7-操作执行批处理功能.md b/docs/功能点7-操作执行批处理功能.md new file mode 100644 index 0000000..36770ce --- /dev/null +++ b/docs/功能点7-操作执行批处理功能.md @@ -0,0 +1,199 @@ +# 5.2.XX管理模块设计说明 + +## 5.2.1.XX设计说明。 + +### 5.2.1.1.模块描述。 + +本模块对应 `1.4.1【操作执行-具备批处理功能】`,用于在多模型场景下按策略进行批量优化执行,覆盖任务创建、任务编排、历史追溯与调度优先级控制。 + +模块目标: + +1. 支持一次选择多个模型并批量执行优化策略。 +2. 支持任务创建向导,降低复杂参数配置门槛。 +3. 支持批处理任务历史查看与结果回溯。 +4. 支持任务调度与优先级,保障关键任务先执行。 + +### ·5.2.1.2.功能·。 + +1. 多模型批处理执行: + - 支持多选模型建立同一批次任务。 + - 支持为批次统一设置优化策略(薄壳化、层级删除、几何优化等)。 + - 支持批次内并行/串行执行模式切换。 +2. 任务创建向导: + - 步骤1:选择模型(可搜索、可多选)。 + - 步骤2:选择策略模板(标准/激进/保守/自定义)。 + - 步骤3:配置参数(阈值、保留规则、输出路径)。 + - 步骤4:设置调度(开始时间、并发数、优先级)。 + - 步骤5:预览与确认创建。 +3. 批处理任务历史查看: + - 支持按时间、状态、策略、创建人检索历史。 + - 支持查看任务详情、子任务明细、执行日志、失败原因。 + - 支持历史任务复用为新任务模板(一键重跑)。 +4. 调度与优先级: + - 支持任务进入队列并统一调度执行。 + - 支持优先级分级(P0/P1/P2/P3)。 + - 支持运行中任务暂停、恢复、取消、重试。 + - 支持资源配额与并发上限控制,避免插件过载。 + +### 5.2.1.3.性能。 + +1. 采用批次任务拆分机制(Batch -> Job -> Step),提高长任务可控性。 +2. 支持队列调度与并发上限,避免单机资源争抢导致失败率上升。 +3. 任务状态采用增量更新(轮询/推送),减少全量刷新开销。 +4. 历史查询提供分页与多条件过滤,保证大规模任务场景响应。 + +### 5.2.1.4.输入输出项·。 + +#### 1.字段输入输出。 + +输入字段: + +1. `model_paths[]`:批处理模型路径列表。 +2. `strategy_type`:策略类型(shell/hierarchy/geometry 等)。 +3. `strategy_params`:策略参数集(阈值、保留规则、输出设置)。 +4. `schedule_at`:计划执行时间。 +5. `priority`:优先级(P0~P3)。 +6. `max_concurrency`:批次最大并发数。 +7. `created_by`:任务创建人。 + +输出字段: + +1. `batch_id`:批处理任务唯一标识。 +2. `status`:任务状态(Pending/Running/Completed/Failed/Cancelled)。 +3. `progress`:整体进度与子任务进度。 +4. `success_count/failed_count`:执行结果统计。 +5. `started_at/completed_at/duration`:时间信息。 +6. `error_summary`:失败摘要与可重试建议。 + +#### 2.界面交互输入输出。 + +输入交互: + +1. 在任务向导中逐步配置批次。 +2. 在任务列表中筛选、排序、查看详情。 +3. 对任务执行暂停/恢复/取消/重试。 + +输出交互: + +1. 批次创建成功提示与任务编号回显。 +2. 实时进度条、状态标签、日志滚动展示。 +3. 历史详情页展示每个模型的执行结论与输出文件。 + +### 5.2.1.5.算法 + +批处理调度算法: + +1. 任务入队后按 `priority` 与 `create_time` 排序。 +2. 在可用资源窗口内按 `max_concurrency` 分配执行槽。 +3. 执行器按策略路由到对应 CAD 插件处理。 +4. 子任务完成后聚合统计并更新批次状态。 +5. 对失败子任务按重试策略(次数/间隔)执行补偿。 + +优先级评分算法(示意): + +1. `score = priority_weight + aging_weight + retry_penalty` +2. `priority_weight` 由 P0~P3 映射固定分值。 +3. `aging_weight` 随排队时长递增,防止低优先级饥饿。 +4. `retry_penalty` 控制频繁失败任务对队列影响。 + +### 5.2.1.6.流程逻辑 + +1. 用户进入任务向导,选择模型并配置策略参数。 +2. 系统校验参数完整性并生成批处理任务。 +3. 任务进入调度队列,按优先级和资源执行。 +4. 批次执行过程中持续反馈进度、日志、异常。 +5. 任务完成后写入历史库并生成结果报告。 +6. 用户可在历史页追溯详情、导出报告、复用任务。 + +### ·5.2.1.7.接口。 + +任务创建接口: + +1. `createBatchTask(payload)`:创建批次任务。 +2. `validateBatchPayload(payload)`:创建前参数校验。 + +任务调度接口: + +1. `getBatchTaskStatus(batchId)`:查询批次状态。 +2. `pauseBatchTask(batchId)`:暂停任务。 +3. `resumeBatchTask(batchId)`:恢复任务。 +4. `cancelBatchTask(batchId)`:取消任务。 +5. `retryBatchTask(batchId, options)`:失败重试。 + +任务历史接口: + +1. `queryBatchHistory(filters, page)`:分页查询历史。 +2. `getBatchTaskDetail(batchId)`:获取任务详情。 +3. `cloneBatchTask(batchId)`:按历史任务创建新任务。 +4. `exportBatchReport(batchId, format)`:导出批处理报告。 + +插件执行接口(策略路由): + +1. `executeShellStrategy(jobPayload)` +2. `executeHierarchyStrategy(jobPayload)` +3. `executeGeometryStrategy(jobPayload)` + +### 5.2.1.8.注释设计 + +建议注释设计: + +1. 调度层注释:明确队列顺序、优先级规则、并发控制点。 +2. 执行层注释:明确策略路由与插件调用边界。 +3. 失败补偿注释:说明重试次数、回退与告警触发条件。 +4. 历史追溯注释:说明任务快照字段与审计字段含义。 + +### 5.2.1.9.数据结构。 + +批处理任务结构: + +``` +{ + "batch_id": "BATCH-20260226-0001", + "models": [ + "D:\\CAD\\A.asm", + "D:\\CAD\\B.asm" + ], + "strategy": { + "type": "shell", + "params": { + "preserveExternalSurfaces": true, + "confidenceThreshold": 0.7 + } + }, + "schedule": { + "schedule_at": "2026-02-26T14:30:00", + "priority": "P1", + "max_concurrency": 2 + }, + "status": "Pending" +} +``` + +子任务结构: + +``` +{ + "job_id": "JOB-0001", + "batch_id": "BATCH-20260226-0001", + "model_path": "D:\\CAD\\A.asm", + "status": "Running", + "progress": 45, + "started_at": "2026-02-26T14:31:10", + "result": null +} +``` + +任务历史结构: + +``` +{ + "batch_id": "BATCH-20260226-0001", + "created_by": "admin", + "created_at": "2026-02-26T14:29:00", + "completed_at": "2026-02-26T14:52:30", + "status": "Completed", + "success_count": 8, + "failed_count": 1, + "report_url": "/reports/BATCH-20260226-0001.json" +} +``` diff --git a/docs/功能点8-操作执行日志生成与轻量化对比.md b/docs/功能点8-操作执行日志生成与轻量化对比.md new file mode 100644 index 0000000..f2379f0 --- /dev/null +++ b/docs/功能点8-操作执行日志生成与轻量化对比.md @@ -0,0 +1,122 @@ +# 5.2.XX管理模块设计说明 + +## 5.2.1.XX设计说明。 + +### 5.2.1.1.模块描述。 + +本模块对应【操作执行-模型对比】功能开发,用于对轻量化后的模型与未轻量化模型进行细节对比,形成可视化的优化效果评估结果。 +对比维度覆盖模型规模、文件体积、处理耗时、删除/保留构件等核心指标。 + +### ·5.2.1.2.功能·。 + +1. 轻量化前后模型对比展示。 +2. 文件大小对比(原始大小 vs 优化后大小)。 +3. 构件变化对比(删除数量、保留数量、扫描总量)。 +4. 性能与处理时长对比(执行耗时、任务状态)。 +5. 异常信息与差异明细展示(错误项、分区统计、备份信息)。 + +### 5.2.1.3.性能。 + +1. 对比数据由任务结果直接返回,前端仅做展示计算,响应快。 +2. 指标卡片+摘要区域分层渲染,适配大模型结果展示。 +3. 结果页采用状态驱动更新,避免重复计算与重绘。 + +### 5.2.1.4.输入输出项·。 + +#### 1.字段输入输出。 + +输入字段: + +1. `originalSize`(轻量化前文件大小) +2. `optimizedSize`(轻量化后文件大小) +3. `reduction`(体积减少比例) +4. `removedCount`(移除构件数) +5. `keptCount`(保留构件数) +6. `totalVisited`(扫描总构件数) +7. `processingTimeSeconds`(处理耗时) +8. `startedAt/completedAt`(开始与完成时间) +9. `zoneSummaries/errors/backupPath`(分区汇总、错误、备份路径) + +输出字段: + +1. `comparison_summary`(前后对比结论) +2. `size_delta`(文件体积变化) +3. `component_delta`(构件变化统计) +4. `performance_delta`(处理性能指标) + +#### 2.界面交互输入输出。 + +输入交互: + +1. 用户执行轻量化任务。 +2. 任务完成后进入结果页查看对比信息。 +3. 用户按需查看详细分区和错误明细。 + +输出交互: + +1. 对比指标卡片展示。 +2. 文件大小前后对比可视化。 +3. 处理结果摘要与执行时间展示。 +4. 失败/异常信息提示。 + +### 5.2.1.5.算法 + +模型对比算法: + +1. 读取任务结果中的 `before/after` 指标字段。 +2. 计算体积变化量和变化比例。 +3. 汇总构件删除、保留与扫描统计。 +4. 结合处理时长输出对比结论。 +5. 追加异常摘要用于对比结果可信性说明。 + +### 5.2.1.6.流程逻辑 + +1. 用户发起模型轻量化操作。 +2. 系统执行任务并返回结果数据。 +3. 前端提取轻量化前后关键指标。 +4. 页面输出对比卡片、大小对比和明细信息。 +5. 用户据此判断轻量化效果并决定后续操作。 + +### ·5.2.1.7.接口。 + +任务执行接口: + +1. `revitApi.executeShellOptimization(mode, backupOriginal)` +2. `revitApi.getTaskStatus(taskId)` +3. `pdmsApi.executeShrinkwrap(params)` + +模型对比展示接口: + +1. `taskResult` 数据对象(结果页统一输入) +2. `formatTime()`(时间格式化) + +### 5.2.1.8.注释设计 + +1. 对比字段注释:明确前后值单位和统计口径。 +2. 结果注释:区分“执行成功但有局部错误”与“执行失败”。 +3. 体积比例注释:说明比例来源与计算方式。 +4. 分区统计注释:说明每个区域统计的含义。 + +### 5.2.1.9.数据结构。 + +模型对比结果结构(示意): + +``` +{ + "originalSize": "128.6MB", + "optimizedSize": "74.5MB", + "reduction": "42%", + "removedCount": 268, + "keptCount": 1312, + "totalVisited": 1580, + "processingTimeSeconds": 37, + "startedAt": "2026-02-26T10:10:00", + "completedAt": "2026-02-26T10:10:37", + "backupPath": "D:\\backup\\model_backup.rvt", + "zoneSummaries": { + "/ZONE_A": 120, + "/ZONE_B": 148 + }, + "errors": [] +} +``` diff --git a/docs/功能点9-操作执行报告日志生成.md b/docs/功能点9-操作执行报告日志生成.md new file mode 100644 index 0000000..5b328b1 --- /dev/null +++ b/docs/功能点9-操作执行报告日志生成.md @@ -0,0 +1,128 @@ +# 5.2.XX管理模块设计说明 + +## 5.2.1.XX设计说明。 + +### 5.2.1.1.模块描述。 + +本模块用于在每次操作执行后自动生成“报告型日志”,形成可追溯、可审计、可导出的执行记录。 +日志内容覆盖:执行对象、执行策略、执行结果、耗时、异常、操作者、时间戳与报告摘要。 + +### ·5.2.1.2.功能·。 + +1. 执行即记录:每次关键操作自动生成日志条目。 +2. 报告化输出:将单条日志扩展为结构化执行报告。 +3. 多维检索:支持按时间、状态、操作类型、人员检索。 +4. 报告导出:支持将报告日志导出为 JSON 文件。 +5. 追溯链路:支持从报告日志回溯到对应任务与结果数据。 + +### 5.2.1.3.性能。 + +1. 日志写入为轻量异步提交,不阻塞主操作流程。 +2. 报告查询采用过滤+分页,保障高日志量下可用性。 +3. 导出仅对筛选结果快照生成,避免全量拉取开销。 + +### 5.2.1.4.输入输出项·。 + +#### 1.字段输入输出。 + +输入字段: + +1. `operation`(操作名称) +2. `details`(执行详情) +3. `status`(success/failed/pending) +4. `duration`(耗时ms) +5. `operation_category`(操作分类) +6. `user_id`(执行人) +7. `timestamp`(执行时间) + +输出字段: + +1. `report_id`(报告日志编号) +2. `summary`(执行摘要) +3. `result_metrics`(结果指标) +4. `error_info`(异常信息) +5. `export_payload`(导出数据体) + +#### 2.界面交互输入输出。 + +输入交互: + +1. 用户执行模型分析/优化/导出/删除等操作。 +2. 用户在日志面板筛选并查看报告日志。 +3. 用户点击导出报告日志。 + +输出交互: + +1. 日志面板新增报告型日志记录。 +2. 统计面板同步更新成功/失败/总数。 +3. 生成并下载报告日志文件。 + +### 5.2.1.5.算法 + +报告日志生成算法: + +1. 捕获操作上下文(软件、动作、参数、用户)。 +2. 记录开始时间,执行完成后计算耗时。 +3. 生成标准日志对象并附加报告摘要字段。 +4. 失败场景附加错误码、错误信息、重试建议。 +5. 入库并广播到日志面板。 + +报告摘要聚合算法: + +1. 提取核心指标(结果数量、缩减比、处理时长)。 +2. 归一化为统一报告模板。 +3. 输出 `summary + metrics + trace` 三段式报告结构。 + +### 5.2.1.6.流程逻辑 + +1. 用户触发业务操作。 +2. 系统执行操作并采集执行上下文。 +3. 操作结束后写入报告日志。 +4. 日志面板实时展示并更新统计。 +5. 用户可筛选、查看详情、导出报告日志。 + +### ·5.2.1.7.接口。 + +日志写入接口: + +1. `logOperation(operation, details, options)` + +日志查询接口: + +1. `queryLogs(filters)` +2. `getLogStats()` +3. `getOperationTypes()` +4. `cleanupLogs()` + +报告导出接口: + +1. `exportLogs()`(导出当前筛选报告日志) + +### 5.2.1.8.注释设计 + +1. 标注报告日志与普通调试日志的区别(审计级、结构化)。 +2. 标注状态字段语义与判定口径。 +3. 标注导出快照范围(当前筛选结果)。 +4. 标注错误字段和重试建议来源。 + +### 5.2.1.9.数据结构。 + +报告日志结构(示意): + +``` +{ + "report_id": "RPT-20260226-0001", + "operation": "Creo - 智能薄壳化分析", + "operation_category": "CAD操作", + "status": "success", + "duration": 1820, + "user_id": "admin", + "timestamp": "2026-02-26T15:30:21", + "summary": "薄壳化分析执行完成", + "result_metrics": { + "removed_count": 128, + "reduction": "35%" + }, + "error_info": null +} +``` diff --git a/docs/未开发功能补充清单.md b/docs/未开发功能补充清单.md new file mode 100644 index 0000000..ea3e79a --- /dev/null +++ b/docs/未开发功能补充清单.md @@ -0,0 +1,119 @@ +# 未开发功能补充清单(对照当前项目进度) + +## 1. 说明 + +本清单基于已编写的功能点文档(功能点1~9)与当前代码实现对照形成,列出尚未开发或未完整开发的功能,用于后续补充实现与验收闭环。 + +## 2. 未开发功能明细 + +### 2.1 功能点2:多 CAD 转中性格式 + +未开发项: + +1. PDMS 中性格式导出接口链路未落地。 +2. Revit 到 STP 的转换链路未落地(当前为 IFC 导出)。 + +功能要求: + +1. 支持 PDMS/REVIT/CREO 统一进入中性格式导出流程。 +2. 支持 STP 或其他中性格式的参数化导出。 + +技术规格: + +1. 插件路由:按 `currentCAD.id` 映射执行器。 +2. 请求结构:`software_type + format_type + export_path + options`。 +3. 返回结构:`success/data/error + outputPath`。 +4. 错误处理:插件未连接、格式不支持、导出失败。 + +### 2.2 功能点5:薄壳化与层级多重分析 + +未开发项: + +1. 分析预估时间(`estimated_time_seconds`)未落地。 +2. 分析步骤可视化(阶段进度条)未落地。 +3. 层级模糊查询与归类未落地。 +4. 多算法赋权融合与最优方案输出未落地。 + +功能要求: + +1. 分析前给预计耗时,分析中给步骤进度,分析后给最优建议。 +2. 支持层级名称/路径模糊检索与归类。 +3. 支持多算法评分并给综合决策。 + +技术规格: + +1. 步骤流:准备模型 -> 特征提取 -> 多算法计算 -> 融合决策 -> 输出。 +2. 评分公式:`score = w1*A1 + w2*A2 + w3*A3`。 +3. 阈值决策:安全删除/建议确认/必须保留。 +4. 新增接口:`getAnalysisEstimate / getAnalysisProgress / searchHierarchyFuzzy / getFusionDecision`。 + +### 2.3 功能点6:多重分析可视化呈现 + +未开发项: + +1. 特征详情“特征名称+特征类型+建议步骤”完整展示未落地。 +2. 薄壳化与复杂度分析结果的统一报告导出未落地(当前层级分析已支持导出)。 + +功能要求: + +1. 提供特征级可解释结果展示。 +2. 支持统一导出分析详细报告(多模块合并)。 + +技术规格: + +1. 详情字段:`feature_name / feature_type / recommended_action / recommended_steps[]`。 +2. 报告结构:`report_meta + statistics + classification_results + feature_details + operation_records`。 +3. 导出格式:JSON(可扩展 PDF)。 + +### 2.4 功能点7:操作执行批处理功能 + +未开发项: + +1. 多模型批处理任务执行未落地(代码中已有 TODO 占位)。 +2. 任务创建向导未落地。 +3. 批处理任务历史列表与详情未落地。 +4. 批处理任务调度与优先级未落地。 + +功能要求: + +1. 支持多模型按策略批量执行。 +2. 支持向导化建任务、历史追溯、调度优先级。 + +技术规格: + +1. 任务模型:`Batch -> Job -> Step`。 +2. 核心字段:`batch_id/model_paths/strategy/schedule_at/priority/max_concurrency/status`。 +3. 控制接口:`create/pause/resume/cancel/retry/query`。 +4. 调度规则:优先级 + 排队时长 + 重试惩罚综合排序。 + +### 2.5 功能点9:执行操作报告日志生成 + +未开发项: + +1. 报告型日志(带 `report_id/summary/result_metrics/error_info`)未形成独立标准化结构。 +2. 从日志回溯到任务结果的报告关联链路未落地。 + +功能要求: + +1. 每次执行操作生成结构化报告日志。 +2. 支持报告日志检索、导出与结果追溯。 + +技术规格: + +1. 报告字段:`report_id + operation + status + duration + summary + result_metrics + error_info`。 +2. 关联字段:`task_id/batch_id/model_id`。 +3. 导出规则:按筛选条件输出报告快照。 + +## 3. 已基本具备能力(用于边界说明) + +1. 文件管理下载与批量重命名能力已具备。 +2. 模型查看与 3D 交互(旋转/缩放/选择)已具备。 +3. 操作日志查询、统计、导出基础能力已具备。 +4. Revit/PDMS 轻量化结果对比展示已具备。 + +## 4. 补充开发建议顺序 + +1. 先补“功能点7 批处理主链路”(影响范围最大)。 +2. 再补“功能点5 多算法赋权 + 步骤可视化”(核心分析竞争力)。 +3. 再补“功能点6 特征详情与统一报告导出”(提升可解释性与交付能力)。 +4. 最后补“功能点9 报告日志标准化与追溯”(完善审计闭环)。