267 lines
8.6 KiB
Markdown
267 lines
8.6 KiB
Markdown
# 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)应该在相关功能完成后立即执行
|
||
|