267 lines
8.6 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.

# Implementation Plan: AMT Hardware Information Query
## Overview
本实现计划将硬件信息查看功能分解为可执行的开发任务。按照后端数据模型 → 后端服务 → 后端 API → 前端界面的顺序实施,确保每个步骤都可以独立测试和验证。
## Tasks
- [x] 1. 创建数据库模型和迁移
- 创建 HardwareInfo、MemoryModule、StorageDevice 实体类
- 配置 Entity Framework 关系映射
- 创建数据库迁移文件
- 应用迁移到数据库
- _Requirements: 6.1, 6.2_
- [x] 2. 实现 AMT 硬件查询服务
- [x] 2.1 创建 AmtHardwareQueryService 接口和实现类
- 定义查询方法接口
- 实现 WsmanConnection 创建和管理
- _Requirements: 10.1, 10.2_
- [x] 2.2 实现系统信息查询CIM_ComputerSystem
- 查询制造商、型号、序列号
- 处理查询异常和空值
- _Requirements: 5.1, 5.2, 5.3, 5.4_
- [x] 2.3 实现 CPU 信息查询CIM_Processor via CIM_Realizes
- 查询 CPU 型号、核心数、主频
- 解析 CPU Family 枚举值
- _Requirements: 2.1, 2.2, 2.3, 2.4_
- [x] 2.4 实现内存信息查询CIM_PhysicalMemory
- 查询所有内存模块
- 提取容量、速度、类型、插槽位置
- 计算总内存容量
- _Requirements: 3.1, 3.2, 3.3, 3.4_
- [x] 2.5 实现存储设备信息查询CIM_MediaAccessDevice
- 查询所有存储设备
- 提取容量、型号、接口类型
- _Requirements: 4.1, 4.2, 4.3, 4.4_
- [x] 2.6 实现错误处理和降级逻辑
- 单个组件查询失败时继续其他查询
- 记录详细错误日志
- 返回部分可用信息
- _Requirements: 7.1, 7.2, 7.3, 7.4_
- [ ] 3. 实现硬件信息业务服务
- [ ] 3.1 创建 HardwareInfoService 接口和实现类
- 定义服务方法接口
- 注入依赖Repository、AmtHardwareQueryService、CredentialService
- _Requirements: 6.1_
- [ ] 3.2 实现单设备硬件信息查询逻辑
- 检查缓存是否存在且有效24小时内
- 如果缓存有效且不强制刷新,返回缓存
- 否则查询 AMT 设备并更新缓存
- _Requirements: 6.1, 6.2, 6.3, 6.4_
- [ ] 3.3 实现批量设备硬件信息查询
- 使用 SemaphoreSlim 控制并发(最多 10 个)
- 使用 Task.WhenAll 并行查询
- 聚合成功和失败结果
- _Requirements: 9.1, 9.2, 9.3, 9.5_
- [ ] 3.4 实现硬件信息导出功能
- 实现 CSV 格式导出
- 实现 JSON 格式导出
- 生成文件流供下载
- _Requirements: 8.4, 9.4_
- [-] 4. 实现数据访问层
- [ ] 4.1 创建 HardwareInfoRepository 接口和实现类
- 实现 GetByDeviceIdAsync 方法
- 实现 SaveAsync 方法(包含级联保存 MemoryModules 和 StorageDevices
- 实现 GetByDeviceIdsAsync 方法
- 实现 DeleteByDeviceIdAsync 方法
- _Requirements: 6.1, 6.2_
- [ ] 4.2 配置 Entity Framework 关系
- 配置 HardwareInfo 与 AmtDevice 的外键关系
- 配置 MemoryModule 和 StorageDevice 的级联删除
- 添加数据库索引DeviceId, LastUpdated
- _Requirements: 6.1_
- [ ] 5. 实现 API 控制器
- [ ] 5.1 创建 HardwareInfoController
- 注入 HardwareInfoService
- 配置路由 /api/hardware-info
- _Requirements: 1.1, 1.2_
- [ ] 5.2 实现单设备查询端点
- GET /api/hardware-info/{deviceId}
- 支持 refresh 查询参数
- 返回 HardwareInfo JSON
- 处理设备不存在的情况
- _Requirements: 1.1, 1.2, 1.3, 1.4, 1.5_
- [ ] 5.3 实现批量查询端点
- POST /api/hardware-info/batch
- 接收设备 ID 列表
- 返回批量查询结果(成功/失败)
- _Requirements: 9.1, 9.2, 9.3, 9.5_
- [ ] 5.4 实现导出端点
- GET /api/hardware-info/export
- 支持 deviceIds 和 format 查询参数
- 返回文件下载响应
- 设置正确的 Content-Type 和文件名
- _Requirements: 8.4, 9.4_
- [ ] 6. 实现前端硬件信息弹窗组件
- [ ] 6.1 创建 HardwareInfoModal.vue 组件
- 创建组件基本结构
- 定义 propsdeviceId, deviceIp
- 定义 emitsclose
- _Requirements: 1.4, 8.1_
- [ ] 6.2 实现硬件信息数据获取
- 调用 API 获取硬件信息
- 显示加载状态
- 处理错误情况
- _Requirements: 1.2, 1.3, 1.5_
- [ ] 6.3 实现系统信息展示区域
- 显示制造商、型号、序列号
- 使用网格布局
- _Requirements: 5.5, 8.1_
- [ ] 6.4 实现 CPU 信息展示区域
- 显示型号、核心数、线程数、主频
- 使用图标标识
- _Requirements: 2.5, 8.2_
- [ ] 6.5 实现内存信息展示区域
- 显示总容量摘要
- 使用表格展示各内存模块详情
- 显示插槽、容量、速度、类型、制造商
- 自动转换容量单位GB
- _Requirements: 3.5, 8.1, 8.3_
- [ ] 6.6 实现存储设备信息展示区域
- 使用表格或卡片展示各存储设备
- 显示型号、容量、接口类型
- 自动转换容量单位GB/TB
- _Requirements: 4.5, 8.1, 8.3_
- [ ] 6.7 实现刷新和导出功能
- 添加刷新按钮,调用 API 强制刷新
- 添加导出按钮,下载 CSV 或 JSON
- 显示最后更新时间
- _Requirements: 6.4, 8.4_
- [ ] 6.8 实现错误和不可用信息的展示
- 对于不可用的信息显示"不支持"或"信息不可用"
- 显示友好的错误提示
- _Requirements: 7.2, 7.5_
- [ ] 7. 更新设备列表组件
- [ ] 7.1 在 DeviceList.vue 添加"查看硬件"按钮
- 在操作列添加按钮
- 绑定点击事件打开硬件信息弹窗
- _Requirements: 1.1_
- [ ] 7.2 集成 HardwareInfoModal 组件
- 导入 HardwareInfoModal 组件
- 管理弹窗显示状态
- 传递设备 ID 和 IP 地址
- _Requirements: 1.1, 1.4_
- [ ] 8. 实现批量硬件信息导出功能(可选)
- [ ] 8.1 在设备列表添加批量选择功能
- 添加复选框列
- 管理选中设备列表
- _Requirements: 9.1_
- [ ] 8.2 添加批量导出按钮
- 显示"批量导出硬件信息"按钮
- 仅在有选中设备时启用
- _Requirements: 9.1_
- [ ] 8.3 实现批量导出对话框
- 选择导出格式CSV/JSON
- 显示导出进度
- 触发文件下载
- _Requirements: 9.2, 9.3, 9.4_
- [ ] 9. 添加样式和优化
- [ ] 9.1 设计硬件信息弹窗样式
- 使用卡片或分组布局
- 添加图标和颜色区分
- 确保响应式设计
- _Requirements: 8.1, 8.2_
- [ ] 9.2 优化加载和错误状态展示
- 添加骨架屏或加载动画
- 设计友好的错误提示样式
- _Requirements: 1.3, 1.5, 7.5_
- [ ] 9.3 优化表格和数据展示
- 使用合适的字体和间距
- 添加悬停效果
- 确保打印友好
- _Requirements: 8.1, 8.5_
- [ ] 10. 测试和验证
- [ ] 10.1 测试 HTTP 设备硬件信息查询
- 测试 192.168.8.111 设备
- 验证所有硬件信息正确显示
- _Requirements: 10.5_
- [ ] 10.2 测试 HTTPS 设备硬件信息查询
- 测试 192.168.8.112 设备
- 验证自签名证书处理正确
- _Requirements: 10.5_
- [ ] 10.3 测试缓存机制
- 验证首次查询后数据被缓存
- 验证 24 小时内返回缓存数据
- 验证强制刷新功能
- _Requirements: 6.1, 6.2, 6.3, 6.4_
- [ ] 10.4 测试批量查询功能
- 测试同时查询多个设备
- 验证并发控制正常工作
- 验证部分失败时的处理
- _Requirements: 9.2, 9.3, 9.5_
- [ ] 10.5 测试导出功能
- 测试 CSV 格式导出
- 测试 JSON 格式导出
- 验证文件内容正确
- _Requirements: 8.4, 9.4_
- [ ] 10.6 测试错误处理
- 测试设备离线时的处理
- 测试不支持某些 CIM 类的设备
- 测试查询超时的处理
- 验证错误消息友好且准确
- _Requirements: 7.1, 7.2, 7.3, 7.4, 7.5_
- [ ] 11. 文档和部署
- [ ] 11.1 更新 API 文档
- 添加硬件信息查询端点文档
- 添加请求/响应示例
- 添加错误代码说明
- [ ] 11.2 更新用户使用指南
- 添加硬件信息查看功能说明
- 添加截图和操作步骤
- 说明支持的硬件信息类型
- [ ] 11.3 创建数据库迁移脚本
- 生成 SQL 迁移脚本
- 测试迁移脚本
- 准备回滚脚本
## Notes
- 任务标记 "*" 的为可选任务,可以在 MVP 版本后实施
- 每个任务完成后应进行单元测试或集成测试
- 建议按顺序执行任务,确保依赖关系正确
- 批量导出功能(任务 8可以作为第二阶段功能
- 测试任务(任务 10应该在相关功能完成后立即执行