Bläddra i källkod

feat: 增加APP登录、设备绑定、指纹使用流程

- 新增7.1.1 APP登录与设备绑定流程
- 新增7.1.2 设备多用户绑定与共享机制
- 新增7.1.3 指纹绑定与设备使用控制
- 新增7.1.4 用户设备指纹流程图
- 新增7.1.5 数据库设计(账号设备用户关系)
- 新增7.1.6 关键API接口清单
caitianqi 5 månader sedan
förälder
incheckning
a051624794

+ 266 - 6
需求工作区/需求设计文档/智能穴位定位系统设计文档.md

@@ -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` | 检查是否允许使用 |
 
 ---