# 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 组件 - 创建组件基本结构 - 定义 props(deviceId, deviceIp) - 定义 emits(close) - _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)应该在相关功能完成后立即执行