enterprise-saa-s-dashboard-.../ARCHITECTURE.md

222 lines
8.2 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.

# 设备管理平台Demo — 系统架构文档
> 本文档描述【设备管理平台Demo】的整体架构涵盖设备管理、APP获取授权文件、设备主机激活三大核心功能。
>
> 设计目标:**轻量级、本地可运行、新手友好**
---
## 一、整体架构图
```mermaid
graph TB
subgraph 客户端层 ["📱 客户端层"]
A[管理后台 Web端<br/>Next.js 14 + React + Tailwind CSS]
B[手机 APP<br/>HTTP 调用获取授权文件]
end
subgraph API层 ["🔗 API 层 (Next.js API Routes)"]
C1["设备 API<br/>/api/devices"]
C2["授权 API<br/>/api/licenses"]
C3["APP 授权下载<br/>/api/licenses/download"]
C4["配置 API<br/>/api/config-files"]
C5["维修/固件/报废 API"]
C6["物料/型号/BOM API"]
end
subgraph 核心业务层 ["⚙️ 核心业务层"]
D1["设备注册与生命周期管理"]
D2["授权文件生成引擎<br/>激活项 + 配置文件 → JSON + SHA256 数字签名"]
D3["双重授权匹配机制<br/>设备级优先 > 型号级"]
D4["设备技术参数配置管理"]
D5["维修工单 / 固件版本 / 报废流程"]
D6["物料管理 / BOM 清单 / 板卡类型"]
end
subgraph 数据层 ["🗄️ 数据层"]
E1[("SQLite<br/>本地文件数据库<br/>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<br/>更新 deviceSN 字段
API->>LOG: INSERT 下载日志<br/>(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*