|
|
@@ -1161,14 +1161,274 @@ interface SchemeStep {
|
|
|
|
|
|
管理员通过用户管理系统,对艾灸椅APP注册用户进行统一管理。支持查看用户基本信息、体型数据、穴位坐标数据(穴位对照表)、关联设备信息,支持用户档案的新增、编辑、删除操作,以及数据的导入导出功能。支持一个用户绑定多个设备。
|
|
|
|
|
|
+**重要概念澄清**:
|
|
|
+| 概念 | 说明 |
|
|
|
+|------|------|
|
|
|
+| 手机号账户 | 用户在APP注册登录的账号,一个手机号对应一个APP账户 |
|
|
|
+| 设备用户 | 绑定到艾灸椅设备的用户档案,一个设备下可创建多个用户 |
|
|
|
+| 关系 | 手机号A登录APP → 绑定设备 → 在设备上创建用户AA、BB、CC |
|
|
|
+
|
|
|
**使用角色**:系统管理员
|
|
|
|
|
|
-**使用场景**:
|
|
|
-- 管理员审核新注册用户,确认体型数据有效性
|
|
|
-- 管理员查看/修改用户体型数据,重新生成穴位坐标
|
|
|
-- 管理员查看/管理用户绑定的设备列表
|
|
|
-- 管理员导出用户数据用于统计分析
|
|
|
-- 管理员批量导入用户信息(门店场景)
|
|
|
+---
|
|
|
+
|
|
|
+#### 7.1.1 APP登录与设备绑定流程
|
|
|
+
|
|
|
+**功能说明**:用户通过手机号注册并登录APP,登录后可绑定艾灸椅设备,并在设备上创建多个用户档案。
|
|
|
+
|
|
|
+**核心流程**:
|
|
|
+
|
|
|
+```
|
|
|
+手机号注册/登录APP
|
|
|
+ ↓
|
|
|
+绑定艾灸椅设备(扫描设备编号)
|
|
|
+ ↓
|
|
|
+在设备上创建用户(AA、BB、CC...)
|
|
|
+ ↓
|
|
|
+每个用户独立体型数据+指纹绑定
|
|
|
+ ↓
|
|
|
+完成初始化
|
|
|
+```
|
|
|
+
|
|
|
+**手机号注册/登录**:
|
|
|
+| 字段 | 类型 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| 手机号 | 文本 | 11位手机号,作为APP登录账号 |
|
|
|
+| 验证码 | 数字 | 6位短信验证码 |
|
|
|
+| 密码 | 文本 | 首次注册时设置,用于APP登录 |
|
|
|
+
|
|
|
+**设备绑定**:
|
|
|
+- 用户首次登录APP后,扫描艾灸椅设备编号进行绑定
|
|
|
+- 绑定成功后,该手机号账户与设备建立关联
|
|
|
+- 多个手机号可以绑定同一台艾灸椅设备
|
|
|
+
|
|
|
+**用户创建**:
|
|
|
+- 绑定设备后,用户可在APP中创建多个用户档案
|
|
|
+- 例如:手机号A创建用户AA、BB、CC
|
|
|
+- 用户之间共享同一设备,但各自的体型数据和指纹独立绑定
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+#### 7.1.2 设备多用户绑定与共享机制
|
|
|
+
|
|
|
+**功能说明**:同一艾灸椅设备可以绑定多个手机号账户,每个手机号账户可以在设备上创建多个用户。
|
|
|
+
|
|
|
+**多对多关系**:
|
|
|
+
|
|
|
+```
|
|
|
+设备A ←——绑定——→ 手机号账户1(创建用户A1、A2)
|
|
|
+ ↙ ↘
|
|
|
+ 绑定 绑定
|
|
|
+ ↘ ↙
|
|
|
+ 手机号账户2(创建用户B1)
|
|
|
+ ↙
|
|
|
+ 绑定
|
|
|
+ ↘
|
|
|
+ 手机号账户3(创建用户C1、C2、C3)
|
|
|
+```
|
|
|
+
|
|
|
+**共享规则**:
|
|
|
+| 场景 | 处理方式 |
|
|
|
+|------|----------|
|
|
|
+| 同一设备多用户 | 设备下所有用户共享设备使用权限 |
|
|
|
+| 用户切换 | 用户在APP中选择自己的用户名称切换 |
|
|
|
+| 设备数据 | 所有用户共享同一设备的穴位坐标数据(以各自用户档案为准) |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+#### 7.1.3 指纹绑定与设备使用控制
|
|
|
+
|
|
|
+**功能说明**:每个用户的指纹数据独立绑定。通过指纹打开艾灸椅时,APP自动选择当前用户。设备同一时间只允许一个用户使用。
|
|
|
+
|
|
|
+**指纹绑定流程**:
|
|
|
+
|
|
|
+```
|
|
|
+创建用户档案
|
|
|
+ ↓
|
|
|
+录入指纹(指纹识别模块)
|
|
|
+ ↓
|
|
|
+指纹与用户ID绑定
|
|
|
+ ↓
|
|
|
+完成绑定
|
|
|
+```
|
|
|
+
|
|
|
+**指纹使用场景**:
|
|
|
+
|
|
|
+```
|
|
|
+用户在艾灸椅设备上按下指纹
|
|
|
+ ↓
|
|
|
+设备读取指纹信息
|
|
|
+ ↓
|
|
|
+发送指纹到APP/后台验证
|
|
|
+ ↓
|
|
|
+├─ 指纹匹配 → 自动选择对应用户 → 允许使用设备
|
|
|
+└─ 指纹不匹配 → 提示"未匹配用户"
|
|
|
+ ↓
|
|
|
+设备使用判断
|
|
|
+ ↓
|
|
|
+├─ 当前无用户使用 → 允许启动,开始艾灸
|
|
|
+└─ 当前有用户使用 → 提示"XX用户正在使用,不允许同时多用户"
|
|
|
+```
|
|
|
+
|
|
|
+**设备独占控制**:
|
|
|
+
|
|
|
+| 场景 | 处理方式 |
|
|
|
+|------|----------|
|
|
|
+| 用户A正在使用设备 | 用户B打开APP时提示:"用户A正在使用艾灸椅,请等待" |
|
|
|
+| 用户A通过指纹打开设备 | 设备自动选择用户A,启动艾灸流程 |
|
|
|
+| 用户A正在使用时指纹解锁 | 设备提示"用户A当前正在使用",拒绝其他用户 |
|
|
|
+
|
|
|
+**使用状态同步**:
|
|
|
+- APP实时获取设备使用状态
|
|
|
+- 后台记录当前使用用户ID
|
|
|
+- 设备断开连接时自动释放使用权限
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+#### 7.1.4 用户设备指纹流程图
|
|
|
+
|
|
|
+```
|
|
|
+┌─────────────────────────────────────────────────────────────────────────────┐
|
|
|
+│ 用户登录、设备绑定、指纹使用流程 │
|
|
|
+├─────────────────────────────────────────────────────────────────────────────┤
|
|
|
+│ │
|
|
|
+│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
|
|
|
+│ │ 手机号 │ │ 绑定设备 │ │ 创建用户 │ │ 录入指纹 │ │
|
|
|
+│ │ 注册登录 │───▶│ │───▶│ │───▶│ │ │
|
|
|
+│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
|
|
|
+│ │ │ │
|
|
|
+│ ▼ ▼ │
|
|
|
+│ ┌──────────┐ ┌──────────┐ │
|
|
|
+│ │ 验证码 │ │ 指纹与 │ │
|
|
|
+│ │ 验证通过 │ │ 用户ID绑定│ │
|
|
|
+│ └──────────┘ └──────────┘ │
|
|
|
+│ │ │
|
|
|
+│ ▼ │
|
|
|
+│ ┌────────────────────────────────────────────────────────────────────┐ │
|
|
|
+│ │ 设备使用流程 │ │
|
|
|
+│ ├────────────────────────────────────────────────────────────────────┤ │
|
|
|
+│ │ │ │
|
|
|
+│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
|
|
|
+│ │ │ 按下指纹 │ ────▶│ 指纹验证 │ ────▶│ 用户匹配 │ │ │
|
|
|
+│ │ └─────────┘ └─────────┘ └─────────┘ │ │
|
|
|
+│ │ │ │ │
|
|
|
+│ │ ┌──────────────────────┴───────────────────┐ │ │
|
|
|
+│ │ ▼ ▼ │ │
|
|
|
+│ │ ┌─────────────┐ ┌─────────────┐│
|
|
|
+│ │ │ 匹配成功 │ │ 匹配失败 ││
|
|
|
+│ │ │ │ │ ││
|
|
|
+│ │ └──────┬──────┘ └─────────────┘│
|
|
|
+│ │ │ │
|
|
|
+│ │ ▼ │
|
|
|
+│ │ ┌─────────────┐ │
|
|
|
+│ │ │ 检查设备使用状态│ │
|
|
|
+│ │ └──────┬──────┘ │
|
|
|
+│ │ │ │
|
|
|
+│ │ ┌─────────────┴─────────────┐ │
|
|
|
+│ │ ▼ ▼ │
|
|
|
+│ │ ┌─────────────┐ ┌─────────────┐ │
|
|
|
+│ │ │ 设备空闲 │ │ 设备使用中 │ │
|
|
|
+│ │ │ 允许启动 │ │ 拒绝并提示 │ │
|
|
|
+│ │ └─────────────┘ └─────────────┘ │
|
|
|
+│ │ │
|
|
|
+│ └────────────────────────────────────────────────────────────────────┘ │
|
|
|
+│ │
|
|
|
+└─────────────────────────────────────────────────────────────────────────────┘
|
|
|
+```
|
|
|
+
|
|
|
+**流程说明**:
|
|
|
+1. **注册登录**:用户通过手机号+验证码注册/登录APP
|
|
|
+2. **设备绑定**:扫描设备编号,将手机号账户与设备绑定
|
|
|
+3. **创建用户**:在设备上创建用户档案(可创建多个)
|
|
|
+4. **录入指纹**:为每个用户录入指纹并绑定
|
|
|
+5. **指纹使用**:用户按下指纹 → 验证 → 匹配用户 → 检查设备状态 → 允许/拒绝使用
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+#### 7.1.5 数据库设计(账号、设备、用户关系)
|
|
|
+
|
|
|
+```typescript
|
|
|
+// 手机号账户(APP登录账号)
|
|
|
+interface PhoneAccount {
|
|
|
+ id: string; // 主键
|
|
|
+ phoneNumber: string; // 手机号(唯一)
|
|
|
+ password: string; // 登录密码(加密存储)
|
|
|
+ createdAt: Date; // 注册时间
|
|
|
+ updatedAt: Date; // 更新时间
|
|
|
+}
|
|
|
+
|
|
|
+// 设备绑定关系(手机号账户 ↔ 设备)
|
|
|
+interface DeviceBinding {
|
|
|
+ id: string; // 主键
|
|
|
+ phoneAccountId: string; // 手机号账户ID
|
|
|
+ deviceId: string; // 设备编号
|
|
|
+ boundAt: Date; // 绑定时间
|
|
|
+ isActive: boolean; // 绑定是否生效
|
|
|
+}
|
|
|
+
|
|
|
+// 设备用户(在设备上创建的用户档案)
|
|
|
+interface DeviceUser {
|
|
|
+ id: string; // 主键(设备内唯一用户ID)
|
|
|
+ deviceId: string; // 设备编号
|
|
|
+ name: string; // 用户名称
|
|
|
+ gender: 'male' | 'female'; // 性别
|
|
|
+ age: number; // 年龄
|
|
|
+ shoulderWidth: number; // 肩宽(cm)
|
|
|
+ bodyLength: number; // 身长(cm)
|
|
|
+ cun1?: number; // 一寸(cm)
|
|
|
+ cun1_5?: number; // 1.5寸(cm)
|
|
|
+ cun3?: number; // 三寸(cm)
|
|
|
+ fingerEnabled: boolean; // 是否启用指纹
|
|
|
+ createdBy: string; // 创建者手机号账户ID
|
|
|
+ createdAt: Date; // 创建时间
|
|
|
+ updatedAt: Date; // 更新时间
|
|
|
+}
|
|
|
+
|
|
|
+// 指纹绑定
|
|
|
+interface FingerprintBinding {
|
|
|
+ id: string; // 主键
|
|
|
+ deviceUserId: string; // 设备用户ID
|
|
|
+ fingerprintData: string; // 指纹特征数据(加密存储)
|
|
|
+ fingerPosition: number; // 指纹序号(1-5)
|
|
|
+ boundAt: Date; // 绑定时间
|
|
|
+ isActive: boolean; // 是否启用
|
|
|
+}
|
|
|
+
|
|
|
+// 设备使用状态
|
|
|
+interface DeviceUsageStatus {
|
|
|
+ deviceId: string; // 设备编号
|
|
|
+ currentUserId: string | null; // 当前使用用户ID(null表示空闲)
|
|
|
+ usageStartedAt: Date | null; // 使用开始时间
|
|
|
+ status: 'idle' | 'in_use'; // 设备状态
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**关系说明**:
|
|
|
+- 1个手机号账户可以绑定多个设备
|
|
|
+- 1个设备可以被多个手机号账户绑定
|
|
|
+- 1个手机号账户在1个设备上可以创建多个用户
|
|
|
+- 1个用户对应1个指纹(可选启用)
|
|
|
+- 设备同一时间只能有1个用户使用
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+#### 7.1.6 关键API接口
|
|
|
+
|
|
|
+| 接口 | 方法 | 路径 | 说明 |
|
|
|
+|------|------|------|------|
|
|
|
+| 手机号验证码发送 | POST | `/api/auth/send-code` | 发送短信验证码 |
|
|
|
+| 手机号注册 | POST | `/api/auth/register` | 手机号+验证码注册 |
|
|
|
+| 手机号登录 | POST | `/api/auth/login` | 手机号+密码登录 |
|
|
|
+| 绑定设备 | POST | `/api/devices/bind` | 账户绑定设备 |
|
|
|
+| 解绑设备 | POST | `/api/devices/unbind` | 解除设备绑定 |
|
|
|
+| 获取设备用户列表 | GET | `/api/devices/{deviceId}/users` | 获取设备下所有用户 |
|
|
|
+| 创建设备用户 | POST | `/api/device-users` | 在设备上创建用户 |
|
|
|
+| 更新设备用户 | PUT | `/api/device-users/{userId}` | 更新用户信息 |
|
|
|
+| 删除设备用户 | DELETE | `/api/device-users/{userId}` | 删除用户 |
|
|
|
+| 录入指纹 | POST | `/api/device-users/{userId}/fingerprint` | 录入指纹 |
|
|
|
+| 验证指纹 | POST | `/api/auth/fingerprint-verify` | 验证指纹获取用户 |
|
|
|
+| 获取设备使用状态 | GET | `/api/devices/{deviceId}/status` | 获取设备当前状态 |
|
|
|
+| 检查设备可用 | GET | `/api/devices/{deviceId}/available` | 检查是否允许使用 |
|
|
|
|
|
|
---
|
|
|
|