# 设备管理平台Demo — 系统架构文档 > 本文档描述【设备管理平台Demo】的整体架构,涵盖设备管理、APP获取授权文件、设备主机激活三大核心功能。 > > 设计目标:**轻量级、本地可运行、新手友好** --- ## 一、整体架构图 ```mermaid graph TB subgraph 客户端层 ["📱 客户端层"] A[管理后台 Web端
Next.js 14 + React + Tailwind CSS] B[手机 APP
HTTP 调用获取授权文件] end subgraph API层 ["🔗 API 层 (Next.js API Routes)"] C1["设备 API
/api/devices"] C2["授权 API
/api/licenses"] C3["APP 授权下载
/api/licenses/download"] C4["配置 API
/api/config-files"] C5["维修/固件/报废 API"] C6["物料/型号/BOM API"] end subgraph 核心业务层 ["⚙️ 核心业务层"] D1["设备注册与生命周期管理"] D2["授权文件生成引擎
激活项 + 配置文件 → JSON + SHA256 数字签名"] D3["双重授权匹配机制
设备级优先 > 型号级"] D4["设备技术参数配置管理"] D5["维修工单 / 固件版本 / 报废流程"] D6["物料管理 / BOM 清单 / 板卡类型"] end subgraph 数据层 ["🗄️ 数据层"] E1[("SQLite
本地文件数据库
better-sqlite3")] end A -->|CRUD 操作| C1 & C2 & C4 & C5 & C6 B -->|GET ?sn=xxx| C3 C1 --> D1 C2 --> D2 C3 --> D3 C4 --> D4 C5 --> D5 C6 --> D6 D1 & D2 & D3 & D4 & D5 & D6 -->|SQL 读写| E1 ``` --- ## 二、各模块职责说明 ### 1. 客户端层 | 模块 | 技术栈 | 职责 | |------|--------|------| | **管理后台 Web端** | Next.js 14 (App Router) + React + Tailwind CSS + lucide-react | 提供设备注册、授权配置、维修工单等全功能可视化管理界面。轻量级、单页应用体验,无需额外前端服务。 | | **手机 APP** | 外部客户端(JavaScript 示例已提供) | 通过 `/api/licenses/download?sn=xxx` 接口,凭设备 SN 拉取授权文件 JSON,解析后启用对应功能模块。 | ### 2. API 层 | 接口路由 | 方法 | 核心职责 | |----------|------|----------| | `/api/devices` | GET / POST / PUT / DELETE | 设备全生命周期 CRUD:注册、列表、状态更新、删除。 | | `/api/licenses` | GET / POST / PUT | 授权记录管理:创建授权时**自动生成带 SHA256 签名的 JSON 文件**,支持设备级/型号级双重模式。 | | `/api/licenses/download` | GET | **APP 专用接口**:根据 SN 查询设备 → 优先匹配设备级授权 → fallback 型号级授权 → 返回 JSON 并记录下载日志。 | | `/api/config-files` | GET / POST / PUT / DELETE | 设备技术参数模板管理,供授权文件关联引用。 | | `/api/repair` `/firmware` `/scrap` | GET / POST / ... | 维修工单跟踪、固件版本发布、设备报废流程。 | | `/api/models` `/materials` `/bom` | GET / POST / ... | 设备型号定义、物料入库/出库、BOM 清单与板卡版本兼容管理。 | ### 3. 核心业务层 | 模块 | 职责说明 | |------|----------| | **设备注册与生命周期** | 支持 SN 扫码/手动录入、生产批次选择、BOM 装配清单记录。状态流转:装配中 → 调试中 → 已激活 → 维修中 → 已报废。 | | **授权文件生成引擎** | 保存授权时,将**激活项**(授权模块列表,如 1D/2D/3D/水上/跨孔/电流场法)与**配置文件**(发射参数、采集参数、网络参数)合并组装为 JSON,附加设备型号/SN/有效期后,计算 SHA256 数字签名防止篡改。 | | **双重授权匹配机制** | APP 请求时先查 `device_sn` 精确匹配,无结果再按 `model` 匹配有效期内的型号级授权,确保灵活性。 | | **配置管理** | 按设备型号维护技术参数配置,授权文件可关联具体配置 ID,实现不同批次设备的差异化参数下发。 | | **维修/固件/报废** | 完整的售后支持流程:创建维修工单 → 记录故障与更换物料 → 固件升级 → 最终报废归档。 | | **物料与 BOM** | 管理采集板、发射板、主板、电缆等物料的型号/版本/库存,BOM 支持多版本兼容(如两块采集板版本需一致)。 | ### 4. 数据层 | 组件 | 说明 | |------|------| | **SQLite (better-sqlite3)** | 轻量级本地文件数据库,零配置、开箱即用。数据库文件位于 `./data/app.db`,支持 WAL 模式提升并发性能。 | | **自动迁移 (migrateDatabase)** | 启动时自动检测表结构变更,新增字段/新表无需手动执行 SQL。 | | **Seed 数据 (seedIfEmpty)** | 首次运行时自动填充演示数据,新手可立即体验完整功能。 | --- ## 三、核心数据流:APP 获取授权文件 ```mermaid sequenceDiagram autonumber participant APP as 手机APP participant API as /api/licenses/download participant DB as SQLite participant LOG as 下载日志 APP->>API: GET ?sn=GD30-20260430-001 API->>DB: 查询 devices 表 DB-->>API: 返回设备信息 alt 存在设备级授权 API->>DB: SELECT * FROM licenses WHERE device_sn = ? AND status = '生效' DB-->>API: 返回授权记录 else 无设备级授权 API->>DB: SELECT * FROM licenses WHERE model = ? AND status = '生效' AND expiry >= now DB-->>API: 返回型号级授权 end API->>API: 解析 license_file JSON
更新 deviceSN 字段 API->>LOG: INSERT 下载日志
(IP, UA, 时间) API-->>APP: 返回授权 JSON ``` --- ## 四、授权文件生成机制 授权文件由两大核心部分组合生成: ### 4.1 激活项(authModules) 来源于 `licenses.modules` 字段,表示该设备被授权启用的功能模块: | 模块 ID | 模块名称 | |---------|----------| | `1D` | 一维自电/电阻率/激电测试模块 | | `2D` | 二维自电/电阻率/激电测试模块 | | `3D` | 三维自电/电阻率/激电测试模块 | | `WATER` | 水上 | | `CROSS` | 跨孔 | | `CF` | 电流场法 | 每个模块在生成的 JSON 中以 `{ id, name, category, enabled: true }` 形式呈现。 ### 4.2 配置文件(config) 来源于 `config_files` 表,包含设备运行的技术参数: ```json { "name": "GD30 标准配置", "version": "v2.1", "emissionParams": { "maxVoltage": "1000V", "maxCurrent": "5A", "waveform": "50%", "pulseWidth": "2s" }, "acquisitionParams": { "channels": 16, "sampleRate": "1kHz", "voltageRange": "±10V", "fullWaveform": true }, "networkParams": { "wifiSSIDPrefix": "GD30-" } } ``` ### 4.3 最终授权文件结构 ```json { "version": "1.0", "generatedAt": "2026-05-07T10:00:00.000Z", "deviceModel": "GD-30 Supreme", "deviceSN": "GD30-20260430-001", "validUntil": "2027-04-30", "status": "active", "authModules": [ { "id": "1D", "name": "一维自电/电阻率/激电测试模块", "category": "一维", "enabled": true }, { "id": "2D", "name": "二维自电/电阻率/激电测试模块", "category": "二维", "enabled": true } ], "config": { ... }, "signature": { "algorithm": "SHA256", "value": "a1b2c3d4...", "publicKey": "platform-public-key-placeholder" } } ``` --- ## 五、数据库核心表结构 | 表名 | 说明 | |------|------| | `devices` | 设备基本信息(SN、型号、状态、固件版本、生产批次等) | | `licenses` | 授权记录(模块列表、有效期、状态、关联配置 ID、自动生成的 `license_file` JSON) | | `config_files` | 设备技术参数配置模板 | | `license_download_logs` | 授权下载审计日志 | | `device_models` | 设备型号定义 | | `repair_orders` | 维修工单 | | `firmware` | 固件版本信息 | | `scrap_records` | 报废记录 | --- ## 六、架构亮点 | 特性 | 说明 | |------|------| | **轻量本地运行** | 整个系统只需 `npm i && npm run dev`,SQLite 零配置,无需 Docker / 外接数据库。 | | **新手友好** | 自动 Seed 数据 + 自动迁移,clone 下来即可看到完整功能的 Demo。 | | **安全设计** | 授权文件含 SHA256 签名;下载日志完整审计(IP、UA、时间)。 | | **APP 集成极简** | 一个 HTTP GET 请求即可获取授权 JSON,示例代码已在 README 中提供。 | --- *文档生成时间:2026-05-07*