|
|
@@ -0,0 +1,1305 @@
|
|
|
+# 智能穴位定位系统设计文档
|
|
|
+
|
|
|
+## 一、项目概述
|
|
|
+
|
|
|
+### 1.1 项目背景
|
|
|
+
|
|
|
+艾灸椅智能穴位定位系统是艾灸椅项目的核心子系统,负责根据用户体型数据计算穴位位置,并通过APP推送给艾灸椅设备,实现精准穴位定位和艾灸理疗。
|
|
|
+
|
|
|
+### 1.2 三方协作架构
|
|
|
+
|
|
|
+```
|
|
|
+┌─────────────────────────────────────────────────────────────────┐
|
|
|
+│ 项目协作架构 │
|
|
|
+├─────────────────────────────────────────────────────────────────┤
|
|
|
+│ │
|
|
|
+│ 单位A(硬件) 单位B(APP) 我们(算法+后台)│
|
|
|
+│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
|
|
|
+│ │ 艾灸椅 │ │ APP │ │ 后台管理│ │
|
|
|
+│ │ 设备 │◀─────────│ 功能 │◀──────────│ 系统 │ │
|
|
|
+│ └─────────┘ 推送 └─────────┘ 推送 └─────────┘ │
|
|
|
+│ ▲ │ │ │
|
|
|
+│ │ 传感器数据 │ 用户数据 │ │
|
|
|
+│ │ 设备状态 │ 穴位坐标 │ │
|
|
|
+│ │ │ 艾灸工艺 │ │
|
|
|
+│ └───────────────────────────┴───────────────┘ │
|
|
|
+│ │
|
|
|
+└─────────────────────────────────────────────────────────────────┘
|
|
|
+```
|
|
|
+
|
|
|
+### 1.3 我们的核心职责
|
|
|
+
|
|
|
+| 职责 | 说明 | 交付物 |
|
|
|
+|------|------|--------|
|
|
|
+| **后台管理系统** | 从零搭建,全新开发 | 管理后台 |
|
|
|
+| **穴位坐标算法** | 用户体型数据 → 穴位相对偏移 | 算法服务 |
|
|
|
+| **艾灸工艺生成** | 专家方案 → 设备可执行工艺语言 | 工艺数据 |
|
|
|
+| **后台-APP接口** | RESTful API供APP调用 | API接口 |
|
|
|
+
|
|
|
+### 1.4 数据流向
|
|
|
+
|
|
|
+```
|
|
|
+我们后台 → APP → 艾灸椅设备(单向推送)
|
|
|
+
|
|
|
+推送内容:
|
|
|
+├── 用户信息(用户档案、体型数据)
|
|
|
+├── 艾灸模式(一键艾灸、专业模式、自定义模式、延年圣手模式)
|
|
|
+├── 艾灸工艺(步骤、穴位相对偏移、艾灸手法)
|
|
|
+└── 其他数据
|
|
|
+
|
|
|
+设备存储:
|
|
|
+├── 用户档案
|
|
|
+├── 穴位对照表(相对偏移)
|
|
|
+└── 艾灸方案
|
|
|
+
|
|
|
+设备执行:
|
|
|
+├── 传感器检测大椎穴位置
|
|
|
+├── 计算实际穴位坐标 = 大椎穴位置 + 相对偏移
|
|
|
+└── 控制灸头移动,进行艾灸
|
|
|
+
|
|
|
+数据关系:
|
|
|
+穴位管理(基础表 + 艾灸手法)
|
|
|
+ ↓ 引用
|
|
|
+方案管理(四种模式)
|
|
|
+ ↓ 关联
|
|
|
+用户管理(用户表)
|
|
|
+ ↓ 生成
|
|
|
+用户穴位坐标数据(穴位对照表)
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 二、用户角色定义
|
|
|
+
|
|
|
+### 2.1 四大用户角色
|
|
|
+
|
|
|
+| 角色 | 描述 | 核心需求 | 入口方式 |
|
|
|
+|------|------|----------|----------|
|
|
|
+| **家庭用户** | 个人购买艾灸椅在家使用 | 便捷、安全、个性化穴位定位 | APP |
|
|
|
+| **专业理疗师** | 门店/诊所理疗师,服务多个客户 | 效率、准确性、多用户管理 | APP |
|
|
|
+| **系统管理员** | 平台管理,维护系统运营 | 用户管理、设备管理、数据监控 | 后台管理系统 |
|
|
|
+| **专家** | 中医专家,发布专业艾灸方案 | 方案发布、方案管理、效果追踪 | 小程序/公众号 |
|
|
|
+
|
|
|
+### 2.2 专家角色详细说明
|
|
|
+
|
|
|
+**专家工作流程**:
|
|
|
+```
|
|
|
+专家登录(小程序/公众号)
|
|
|
+ ↓
|
|
|
+创建艾灸理疗方案
|
|
|
+ ↓
|
|
|
+输入方案描述:
|
|
|
+- 症状/功效(如:驱寒、祛湿、活血)
|
|
|
+- 穴位组合(如:大椎穴、风门穴、肺俞穴)
|
|
|
+- 治疗步骤(温度、时间、顺序)
|
|
|
+- 适用人群(性别、年龄范围)
|
|
|
+ ↓
|
|
|
+系统解析 → 生成工艺语言
|
|
|
+ ↓
|
|
|
+包含穴位相对偏移(基于标准穴位数据)
|
|
|
+ ↓
|
|
|
+发布方案(指定用户/公开发布)
|
|
|
+ ↓
|
|
|
+用户在APP中看到并选择专家方案
|
|
|
+```
|
|
|
+
|
|
|
+### 2.3 8种专业模式
|
|
|
+
|
|
|
+| 模式 | 功效 | 适用症状 |
|
|
|
+|------|------|----------|
|
|
|
+| 驱寒模式 | 温阳散寒 | 怕冷、手脚冰凉 |
|
|
|
+| 祛湿模式 | 健脾祛湿 | 身体困重、大便黏腻 |
|
|
|
+| 祛风模式 | 祛风解表 | 感冒、头痛 |
|
|
|
+| 化瘀模式 | 活血化瘀 | 疼痛、淤青 |
|
|
|
+| 活血模式 | 活血通络 | 血液循环不畅 |
|
|
|
+| 化痰模式 | 化痰止咳 | 咳嗽、痰多 |
|
|
|
+| 养颜模式 | 美容养颜 | 皮肤暗沉 |
|
|
|
+| 扶阳模式 | 温补肾阳 | 腰膝酸软 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 三、核心功能模块
|
|
|
+
|
|
|
+### 3.1 功能模块清单
|
|
|
+
|
|
|
+```
|
|
|
+艾灸取穴智能穴位识别功能
|
|
|
+├── 1. 后台管理系统
|
|
|
+│ ├── 用户管理
|
|
|
+│ │ ├── 用户列表
|
|
|
+│ │ ├── 用户档案(基本信息、体型数据)
|
|
|
+│ │ └── 该用户的穴位坐标数据(穴位对照表)
|
|
|
+│ │
|
|
|
+│ ├── 穴位管理(独立表)
|
|
|
+│ │ ├── 基础穴位信息(名称、经络、功效)
|
|
|
+│ │ └── 艾灸手法(一键艾灸[默认]、温和灸、雀啄灸、回旋灸等)
|
|
|
+│ │
|
|
|
+│ ├── 方案管理(每个用户独立存储)
|
|
|
+│ │ ├── 一键艾灸(默认艾灸工艺,系统预置)
|
|
|
+│ │ ├── 专业模式(8种功效选择)
|
|
|
+│ │ ├── 自定义模式(用户自选穴位)
|
|
|
+│ │ └── 延年圣手模式(专家方案,最新8个同步至设备,设备快捷键1-8)
|
|
|
+│ │
|
|
|
+│ ├── 艾灸工艺生成
|
|
|
+│ │ ├── 输入:专家方案(使用系统模板输入)
|
|
|
+│ │ ├── 处理:解析→验证→生成工艺语言
|
|
|
+│ │ └── 输出:系统工艺语言(设备可执行)
|
|
|
+│ │
|
|
|
+│ └── 系统管理
|
|
|
+│ ├── 管理员管理
|
|
|
+│ └── 操作日志
|
|
|
+│
|
|
|
+├── 2. 核心算法模块
|
|
|
+│ ├── 指寸估算算法
|
|
|
+│ ├── 穴位对照表生成算法
|
|
|
+│ ├── 数据验证算法
|
|
|
+│ ├── 置信度计算算法
|
|
|
+│ └── 工艺语言生成算法
|
|
|
+│
|
|
|
+├── 3. 数据接口模块
|
|
|
+│ ├── APP-后台RESTful API
|
|
|
+│ ├── 推送数据格式定义
|
|
|
+│ ├── 四种艾灸模式接口
|
|
|
+│ └── 设备同步接口(圣手模式8方案同步)
|
|
|
+│
|
|
|
+└── 4. 专家端对接(独立项目,预留接口)
|
|
|
+ ├── 专家端接口规范(对外提供)
|
|
|
+ ├── 方案接收接口(接收专家方案数据)
|
|
|
+ └── 方案发布接口(发布至指定用户/公开)
|
|
|
+```
|
|
|
+艾灸取穴智能穴位识别功能
|
|
|
+├── 1. 后台管理系统
|
|
|
+│ ├── 用户管理
|
|
|
+│ │ ├── 用户列表
|
|
|
+│ │ ├── 用户档案(基本信息、体型数据)
|
|
|
+│ │ └── 该用户的穴位坐标数据(穴位对照表)
|
|
|
+│ │
|
|
|
+│ ├── 穴位管理(独立表)
|
|
|
+│ │ ├── 基础穴位信息(名称、经络、功效)
|
|
|
+│ │ └── 艾灸手法(温和灸、雀啄灸、回旋灸等)
|
|
|
+│ │
|
|
|
+│ ├── 方案管理
|
|
|
+│ │ ├── 一键艾灸(默认方案)
|
|
|
+│ │ ├── 专业模式(8种功效选择)
|
|
|
+│ │ ├── 自定义模式(用户自选穴位)
|
|
|
+│ │ └── 延年圣手模式(专家方案)
|
|
|
+│ │
|
|
|
+│ └── 系统管理
|
|
|
+│ ├── 管理员管理
|
|
|
+│ └── 操作日志
|
|
|
+│
|
|
|
+├── 2. 核心算法模块
|
|
|
+│ ├── 指寸估算算法
|
|
|
+│ ├── 穴位对照表生成算法
|
|
|
+│ ├── 数据验证算法
|
|
|
+│ └── 置信度计算算法
|
|
|
+│
|
|
|
+├── 3. 数据接口模块
|
|
|
+│ ├── APP-后台RESTful API
|
|
|
+│ ├── 推送数据格式定义
|
|
|
+│ └── 四种艾灸模式接口
|
|
|
+│
|
|
|
+└── 4. 专家端(小程序/公众号)
|
|
|
+ ├── 专家登录
|
|
|
+ ├── 方案创建(使用系统模板)
|
|
|
+ ├── 工艺语言生成
|
|
|
+ └── 方案发布(指定用户/公开)
|
|
|
+
|
|
|
+### 3.5 专家方案模板设计
|
|
|
+
|
|
|
+**核心原则**:专家必须使用系统提供的模板输入方案,确保数据标准化。
|
|
|
+
|
|
|
+#### 模板类型
|
|
|
+
|
|
|
+| 模板类型 | 适用场景 | 说明 |
|
|
|
+|----------|----------|------|
|
|
|
+| **专业模式模板** | 8种功效方案 | 驱寒、祛湿、祛风、化瘀、活血、化痰、养颜、扶阳 |
|
|
|
+| **自定义模板** | 专家自由组合 | 不限功效,自由选择穴位 |
|
|
|
+| **症状推荐模板** | 按症状推荐 | 系统根据症状推荐穴位组合,专家调整 |
|
|
|
+
|
|
|
+#### 模板结构
|
|
|
+
|
|
|
+**基本信息模板**:
|
|
|
+- 方案名称(必填)
|
|
|
+- 功效类型(必填,8选1)
|
|
|
+- 适用症状(必填,多选)
|
|
|
+- 适用人群(必填,不限/仅男/仅女)
|
|
|
+- 适用年龄(必填,范围)
|
|
|
+- 方案描述(选填,200字以内)
|
|
|
+
|
|
|
+**治疗步骤模板**:
|
|
|
+- 穴位选择(必填,从穴位库选择)
|
|
|
+- 侧别(必填,单侧/双侧/左侧/右侧)
|
|
|
+- 温度设置(必填,35-50°C)
|
|
|
+- 时间设置(必填,1-30分钟)
|
|
|
+- 艾灸手法(必填,4选1)
|
|
|
+- 备注(选填)
|
|
|
+
|
|
|
+#### 8种专业模式预设
|
|
|
+
|
|
|
+| 模式 | 必选穴位 | 可选穴位 | 默认温度 | 默认时间 | 默认手法 |
|
|
|
+|------|----------|----------|----------|----------|----------|
|
|
|
+| **驱寒模式** | 大椎穴、命门穴 | 关元穴、气海穴 | 45-48°C | 8-10分钟 | 温和灸 |
|
|
|
+| **祛湿模式** | 大椎穴、脾俞穴(双)、肾俞穴(双) | 足三里(双)、阴陵泉(双) | 42-45°C | 5-8分钟 | 温和灸 |
|
|
|
+| **祛风模式** | 大椎穴、风门穴(双)、秉风穴(双) | 肺俞穴(双) | 40-42°C | 5-6分钟 | 雀啄灸 |
|
|
|
+| **化瘀模式** | 大椎穴、膈俞穴(双)、八髎穴 | 血海穴(双) | 43-45°C | 6-8分钟 | 回旋灸 |
|
|
|
+| **活血模式** | 大椎穴、膈俞穴(双)、命门穴 | 足三里(双) | 42-45°C | 6-8分钟 | 温和灸 |
|
|
|
+| **化痰模式** | 大椎穴、肺俞穴(双)、脾俞穴(双) | 丰隆穴(双) | 40-43°C | 5-7分钟 | 温和灸 |
|
|
|
+| **养颜模式** | 大椎穴、肺俞穴(双)、脾俞穴(双)、肾俞穴(双) | 血海穴(双) | 40-42°C | 5-6分钟 | 温和灸 |
|
|
|
+| **扶阳模式** | 大椎穴、命门穴、至阳穴 | 关元穴、气海穴 | 45-48°C | 8-10分钟 | 温和灸 |
|
|
|
+
|
|
|
+#### 模板验证规则
|
|
|
+
|
|
|
+```typescript
|
|
|
+interface TemplateValidation {
|
|
|
+ // 基本信息验证
|
|
|
+ name: { required: true; maxLength: 50 };
|
|
|
+ efficacyType: { required: true; options: ['驱寒','祛湿','祛风','化瘀','活血','化痰','养颜','扶阳'] };
|
|
|
+ symptoms: { required: true; minSelect: 1 };
|
|
|
+ targetGender: { required: true; options: ['all','male','female'] };
|
|
|
+ ageRange: { required: true; min: 1; max: 120 };
|
|
|
+
|
|
|
+ // 步骤验证
|
|
|
+ minSteps: 1;
|
|
|
+ maxSteps: 10;
|
|
|
+ temperature: { min: 35; max: 50; unit: '°C' };
|
|
|
+ duration: { min: 1; max: 30; unit: '分钟' };
|
|
|
+ totalDurationLimit: 60; // 总时长限制(分钟)
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 模板使用流程
|
|
|
+
|
|
|
+```
|
|
|
+专家登录
|
|
|
+ ↓
|
|
|
+选择模板类型(专业模式/自定义/症状推荐)
|
|
|
+ ↓
|
|
|
+填写方案基本信息
|
|
|
+ ↓
|
|
|
+配置治疗步骤(从模板预设或穴位库选择)
|
|
|
+ ↓
|
|
|
+系统验证(必填项、参数范围、总时长)
|
|
|
+ ↓
|
|
|
+预览方案
|
|
|
+ ↓
|
|
|
+发布方案
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 3.6 用户模式数据存储与同步机制
|
|
|
+
|
|
|
+**核心原则**:每个用户拥有独立的四种模式数据存储,设备端同步最新方案。
|
|
|
+
|
|
|
+#### 3.6.1 四种模式存储
|
|
|
+
|
|
|
+| 模式 | 存储位置 | 说明 |
|
|
|
+|------|----------|------|
|
|
|
+| **一键艾灸** | 用户级存储 | 默认艾灸工艺,系统预置,每个用户独立存储 |
|
|
|
+| **专业模式** | 用户级存储 | 8种功效方案,每个用户独立存储 |
|
|
|
+| **自定义模式** | 用户级存储 | 用户自选穴位组合,个人方案 |
|
|
|
+| **延年圣手模式** | 用户级存储 | 专家方案,最新8个同步至设备 |
|
|
|
+
|
|
|
+#### 3.6.2 延年圣手模式同步机制
|
|
|
+
|
|
|
+**关键需求**:用户接收的圣手模式方案,每次要有最新的8个方案同步到设备里,设备有快捷键1-8分别对应圣手模式的艾灸方案。
|
|
|
+
|
|
|
+**同步数据结构**:
|
|
|
+
|
|
|
+```typescript
|
|
|
+// 延年圣手模式 - 用户级存储
|
|
|
+interface ExpertModeStorage {
|
|
|
+ userId: string;
|
|
|
+ schemes: ExpertScheme[]; // 用户接收的专家方案列表(可超过8个)
|
|
|
+ syncedSchemes: SyncedScheme[]; // 同步到设备的最新8个方案
|
|
|
+ updatedAt: Date;
|
|
|
+}
|
|
|
+
|
|
|
+// 同步到设备的方案(最新8个)
|
|
|
+interface SyncedScheme {
|
|
|
+ slot: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; // 快捷键槽位(1-8)
|
|
|
+ schemeId: string;
|
|
|
+ schemeName: string;
|
|
|
+ processId: string; // 对应工艺语言ID
|
|
|
+ syncedAt: Date;
|
|
|
+}
|
|
|
+
|
|
|
+// 设备快捷键映射
|
|
|
+interface DeviceHotkeyMap {
|
|
|
+ userId: string;
|
|
|
+ deviceId: string;
|
|
|
+ hotkeys: {
|
|
|
+ '1': { schemeId: string; schemeName: string }; // 快捷键1
|
|
|
+ '2': { schemeId: string; schemeName: string }; // 快捷键2
|
|
|
+ '3': { schemeId: string; schemeName: string }; // 快捷键3
|
|
|
+ '4': { schemeId: string; schemeName: string }; // 快捷键4
|
|
|
+ '5': { schemeId: string; schemeName: string }; // 快捷键5
|
|
|
+ '6': { schemeId: string; schemeName: string }; // 快捷键6
|
|
|
+ '7': { schemeId: string; schemeName: string }; // 快捷键7
|
|
|
+ '8': { schemeId: string; schemeName: string }; // 快捷键8
|
|
|
+ };
|
|
|
+ updatedAt: Date;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**同步流程**:
|
|
|
+
|
|
|
+```
|
|
|
+专家发布方案 → 用户接收方案
|
|
|
+ ↓
|
|
|
+系统检查用户已接收的专家方案数量
|
|
|
+ ↓
|
|
|
+按发布时间排序,取最新8个方案
|
|
|
+ ↓
|
|
|
+生成同步数据(slot 1-8对应最新8个方案)
|
|
|
+ ↓
|
|
|
+推送至APP → 推送至设备存储
|
|
|
+ ↓
|
|
|
+设备更新快捷键映射(1-8对应方案)
|
|
|
+ ↓
|
|
|
+用户按下快捷键1-8 → 执行对应圣手方案
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 3.7 艾灸工艺生成需求描述
|
|
|
+
|
|
|
+**功能定位**:将专家描述的艾灸步骤转化为系统工艺语言,使设备可执行。
|
|
|
+
|
|
|
+#### 3.7.1 输入要求
|
|
|
+
|
|
|
+| 输入项 | 来源 | 说明 |
|
|
|
+|--------|------|------|
|
|
|
+| 专家方案 | 专家端(模板输入) | 方案名称、症状、穴位组合、参数 |
|
|
|
+| 模板类型 | 系统预设 | 专业模式/自定义/症状推荐 |
|
|
|
+| 用户体型数据 | 用户档案 | 肩宽、身长、指寸 |
|
|
|
+| 穴位坐标数据 | 穴位对照表 | 用户专属的穴位相对偏移 |
|
|
|
+
|
|
|
+#### 3.7.2 输出要求
|
|
|
+
|
|
|
+**输出内容**:系统工艺语言(MoxaProcess),包含:
|
|
|
+- 方案元数据(名称、症状、适用人群、总时长)
|
|
|
+- 治疗步骤列表(穴位、温度、时间、手法、侧别)
|
|
|
+- 设备可执行指令(移动指令、加热指令、手法指令)
|
|
|
+
|
|
|
+**输出格式**:
|
|
|
+```json
|
|
|
+{
|
|
|
+ "processId": "工艺ID",
|
|
|
+ "schemeId": "方案ID",
|
|
|
+ "metadata": {
|
|
|
+ "name": "方案名称",
|
|
|
+ "symptoms": ["症状列表"],
|
|
|
+ "totalDuration": 1560
|
|
|
+ },
|
|
|
+ "steps": [
|
|
|
+ {
|
|
|
+ "stepOrder": 1,
|
|
|
+ "acupointId": "dazhui",
|
|
|
+ "acupointName": "大椎穴",
|
|
|
+ "temperature": 45,
|
|
|
+ "duration": 480,
|
|
|
+ "techniqueId": "oneclick",
|
|
|
+ "techniqueName": "一键艾灸",
|
|
|
+ "deviceInstruction": {
|
|
|
+ "command": "HEAT",
|
|
|
+ "target": { "acupointId": "dazhui", "offsetX": 0, "offsetY": 0 },
|
|
|
+ "heat": { "mode": "constant", "targetTemp": 45, "duration": 480 }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 3.7.3 验证规则
|
|
|
+
|
|
|
+| 验证项 | 规则 | 处理 |
|
|
|
+|--------|------|------|
|
|
|
+| 穴位有效性 | 穴位必须存在于穴位库 | 自动新增或报错 |
|
|
|
+| 温度范围 | 35-50°C | 超出范围拒绝 |
|
|
|
+| 时间范围 | 1-30分钟/穴位 | 超出范围拒绝 |
|
|
|
+| 总时长 | 不超过60分钟 | 超出警告 |
|
|
|
+| 手法兼容 | 穴位支持该手法 | 验证通过 |
|
|
|
+
|
|
|
+#### 3.7.4 一键艾灸(默认工艺)
|
|
|
+
|
|
|
+**定义**:一键艾灸是系统预置的默认艾灸工艺,每个用户独立存储。
|
|
|
+
|
|
|
+**工艺参数**:
|
|
|
+| 参数 | 默认值 | 说明 |
|
|
|
+|------|--------|------|
|
|
|
+| 穴位组合 | 大椎穴、身柱穴、至阳穴、命门穴、腰阳关穴 | 督脉5穴 |
|
|
|
+| 温度 | 42-45°C | 由低到高渐进 |
|
|
|
+| 时间 | 每穴5-8分钟 | 总时长约30分钟 |
|
|
|
+| 手法 | 温和灸 | 固定不动 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 3.8 专家端对接接口预留
|
|
|
+
|
|
|
+**重要说明**:专家端是另外一个独立项目,本次项目不做研发,只预留对接接口。
|
|
|
+
|
|
|
+#### 3.8.1 对接接口清单
|
|
|
+
|
|
|
+| 接口 | 方法 | 路径 | 说明 | 状态 |
|
|
|
+|------|------|------|------|------|
|
|
|
+| 方案接收 | POST | `/api/expert/schemes/receive` | 接收专家端创建的方案 | 预留 |
|
|
|
+| 方案更新 | PUT | `/api/expert/schemes/{schemeId}` | 接收专家端更新的方案 | 预留 |
|
|
|
+| 方案列表 | GET | `/api/expert/schemes` | 获取已接收的专家方案 | 预留 |
|
|
|
+| 模板获取 | GET | `/api/expert/templates` | 提供系统模板给专家端 | 预留 |
|
|
|
+| 穴位库获取 | GET | `/api/expert/acupoints` | 提供穴位库给专家端 | 预留 |
|
|
|
+| 手法库获取 | GET | `/api/expert/techniques` | 提供手法库给专家端 | 预留 |
|
|
|
+
|
|
|
+#### 3.8.2 对接数据格式
|
|
|
+
|
|
|
+```typescript
|
|
|
+// 专家端方案推送格式
|
|
|
+interface ExpertSchemePush {
|
|
|
+ expertId: string; // 专家ID(由专家端系统分配)
|
|
|
+ expertName: string; // 专家名称
|
|
|
+ schemeName: string; // 方案名称
|
|
|
+ efficacyType: string; // 功效类型
|
|
|
+ symptoms: string[]; // 适用症状
|
|
|
+ targetGender: 'male' | 'female' | 'all';
|
|
|
+ ageRange: { min: number; max: number };
|
|
|
+ steps: ExpertStep[]; // 治疗步骤
|
|
|
+ publishType: 'public' | 'private';
|
|
|
+ targetUserIds?: string[]; // 指定用户(私有发布时)
|
|
|
+}
|
|
|
+
|
|
|
+// 专家端治疗步骤
|
|
|
+interface ExpertStep {
|
|
|
+ stepOrder: number;
|
|
|
+ acupointName: string; // 穴位名称
|
|
|
+ temperature: number; // 温度
|
|
|
+ duration: number; // 时间(分钟)
|
|
|
+ techniqueName: string; // 手法名称
|
|
|
+ side: 'single' | 'both' | 'left' | 'right';
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 3.8.3 对接说明
|
|
|
+
|
|
|
+- 本项目不开发专家端应用(小程序/公众号)
|
|
|
+- 本项目只提供上述接口规范,供专家端项目对接
|
|
|
+- 专家端项目完成后,通过上述接口推送方案数据
|
|
|
+- 本项目接收方案后,自动生成工艺语言并存储
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### 3.2 支持的穴位(基础库12个)
|
|
|
+
|
|
|
+| 序号 | 穴位名称 | 所属经络 | 相对大椎穴位置 | 功效 |
|
|
|
+|------|----------|----------|----------------|------|
|
|
|
+| 1 | 大椎穴 | 督脉 | 基准点 (0, 0) | 驱寒、祛湿、解表 |
|
|
|
+| 2 | 身柱穴 | 督脉 | 下3寸 | 止咳平喘、安神 |
|
|
|
+| 3 | 至阳穴 | 督脉 | 下7寸 | 宽胸理气 |
|
|
|
+| 4 | 命门穴 | 督脉 | 下14寸 | 补肾壮阳 |
|
|
|
+| 5 | 腰阳关穴 | 督脉 | 下17寸 | 强腰健肾 |
|
|
|
+| 6 | 风门穴(双) | 足太阳膀胱经 | 下1.5寸,旁开1.5寸 | 祛风解表 |
|
|
|
+| 7 | 秉风穴(双) | 手太阳小肠经 | 下3寸,旁开3寸 | 祛风散寒 |
|
|
|
+| 8 | 肺俞穴(双) | 足太阳膀胱经 | 下3寸,旁开1.5寸 | 化痰止咳 |
|
|
|
+| 9 | 膈俞穴(双) | 足太阳膀胱经 | 下7寸,旁开1.5寸 | 活血化瘀 |
|
|
|
+| 10 | 脾俞穴(双) | 足太阳膀胱经 | 下11寸,旁开1.5寸 | 健脾养血 |
|
|
|
+| 11 | 肾俞穴(双) | 足太阳膀胱经 | 下14寸,旁开1.5寸 | 补肾益气 |
|
|
|
+| 12 | 八髎穴 | 足太阳膀胱经 | 下16寸 | 调理下焦 |
|
|
|
+
|
|
|
+### 3.3 艾灸手法(独立表)
|
|
|
+
|
|
|
+| 手法ID | 手法名称 | 运动模式 | 适用场景 |
|
|
|
+|--------|----------|----------|----------|
|
|
|
+| gentle | 温和灸 | 固定不动 | 常规艾灸,温补 |
|
|
|
+| pecking | 雀啄灸 | 上下移动 | 强刺激,祛邪 |
|
|
|
+| circular | 回旋灸 | 圆周运动 | 温经散寒 |
|
|
|
+| sparrow | 麻雀灸 | 点状移动 | 局部强刺激 |
|
|
|
+
|
|
|
+### 3.4 穴位库动态扩展机制
|
|
|
+
|
|
|
+**两种方式**:
|
|
|
+| 方式 | 触发场景 | 说明 |
|
|
|
+|------|----------|------|
|
|
|
+| **预置维护** | 管理员主动录入 | 提前维护完整穴位库 |
|
|
|
+| **自动新增** | 专家发布方案时 | 方案中出现新穴位,系统自动创建 |
|
|
|
+
|
|
|
+**自动新增流程**:
|
|
|
+```
|
|
|
+专家创建方案 → 输入穴位名称(如:委中穴)
|
|
|
+ ↓
|
|
|
+系统检查穴位库
|
|
|
+ ├─ 已存在 → 直接引用
|
|
|
+ └─ 不存在 → 触发自动新增流程
|
|
|
+ ↓
|
|
|
+ 系统自动处理:
|
|
|
+ 1. 创建穴位记录(名称、经络待补全)
|
|
|
+ 2. 标记为"待完善"状态
|
|
|
+ 3. 提示专家补充穴位信息(功效、定位方式等)
|
|
|
+ ↓
|
|
|
+ 穴位入库,方案可正常发布
|
|
|
+ ↓
|
|
|
+ 管理员可在后台完善穴位详情
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 四、核心算法设计
|
|
|
+
|
|
|
+### 4.1 指寸估算算法
|
|
|
+
|
|
|
+当用户未提供指寸数据时,根据肩宽和身长估算:
|
|
|
+- **男性**:肩宽权重 0.6,身长权重 0.4
|
|
|
+- **女性**:肩宽权重 0.4,身长权重 0.6
|
|
|
+
|
|
|
+```typescript
|
|
|
+function estimateFingerWidth(
|
|
|
+ shoulderWidth: number,
|
|
|
+ bodyLength: number,
|
|
|
+ gender: 'male' | 'female'
|
|
|
+): FingerWidth {
|
|
|
+ const STANDARD = {
|
|
|
+ male: {
|
|
|
+ shoulderWidth: 42, // 男性平均肩宽(厘米)
|
|
|
+ bodyLength: 85, // 男性平均坐高(厘米)
|
|
|
+ cun1: 2.2, // 男性一寸约2.2cm
|
|
|
+ cun1_5: 3.3, // 男性1.5寸约3.3cm
|
|
|
+ cun3: 6.5, // 男性三寸约6.5cm
|
|
|
+ shoulderWeight: 0.6, // 肩宽权重
|
|
|
+ lengthWeight: 0.4 // 身长权重
|
|
|
+ },
|
|
|
+ female: {
|
|
|
+ shoulderWidth: 36, // 女性平均肩宽(厘米)
|
|
|
+ bodyLength: 78, // 女性平均坐高(厘米)
|
|
|
+ cun1: 1.9, // 女性一寸约1.9cm
|
|
|
+ cun1_5: 2.8, // 女性1.5寸约2.8cm
|
|
|
+ cun3: 5.6, // 女性三寸约5.6cm
|
|
|
+ shoulderWeight: 0.4, // 肩宽权重
|
|
|
+ lengthWeight: 0.6 // 身长权重
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ const ref = STANDARD[gender];
|
|
|
+ const widthScale = shoulderWidth / ref.shoulderWidth;
|
|
|
+ const lengthScale = bodyLength / ref.bodyLength;
|
|
|
+
|
|
|
+ const weightedScale =
|
|
|
+ widthScale * ref.shoulderWeight +
|
|
|
+ lengthScale * ref.lengthWeight;
|
|
|
+
|
|
|
+ const estimatedCun1 = ref.cun1 * weightedScale;
|
|
|
+
|
|
|
+ return {
|
|
|
+ cun1: estimatedCun1,
|
|
|
+ cun1_5: estimatedCun1 * 1.5,
|
|
|
+ cun3: estimatedCun1 * 3
|
|
|
+ };
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 4.2 穴位对照表生成算法
|
|
|
+
|
|
|
+```typescript
|
|
|
+function generateAcupointReferenceTable(
|
|
|
+ bodyData: UserBodyData,
|
|
|
+ gender: 'male' | 'female'
|
|
|
+): AcupointReferenceTable {
|
|
|
+ const { shoulderWidth, bodyLength, fingerWidth } = bodyData;
|
|
|
+
|
|
|
+ // 获取或估算指寸
|
|
|
+ const cun: FingerWidth = fingerWidth
|
|
|
+ ? fingerWidth
|
|
|
+ : estimateFingerWidth(shoulderWidth, bodyLength, gender);
|
|
|
+
|
|
|
+ // 计算各穴位位置
|
|
|
+ const acupoints: CalculatedAcupoint[] = ACUPOINT_OFFSETS.map(ap => {
|
|
|
+ // Y方向偏移:指寸数 × 对应指寸值
|
|
|
+ const distanceY = ap.cun * cun[ap.cunType];
|
|
|
+
|
|
|
+ // X方向偏移:横向指寸 × 一寸值
|
|
|
+ const distanceX = ap.side === 'center'
|
|
|
+ ? 0
|
|
|
+ : (ap.side === 'left' ? -1 : 1) * (ap.lateralOffset || 0) * cun.cun1;
|
|
|
+
|
|
|
+ return {
|
|
|
+ id: ap.id + (ap.side !== 'center' ? '_' + ap.side : ''),
|
|
|
+ name: ap.name,
|
|
|
+ side: ap.side,
|
|
|
+ offsetFromDazhui: {
|
|
|
+ x: distanceX,
|
|
|
+ y: -distanceY // 负值表示向下
|
|
|
+ },
|
|
|
+ offsetInCun: ap.cun,
|
|
|
+ cunType: ap.cunType
|
|
|
+ };
|
|
|
+ });
|
|
|
+
|
|
|
+ return {
|
|
|
+ bodyData,
|
|
|
+ fingerWidthUsed: cun,
|
|
|
+ acupoints,
|
|
|
+ createdAt: new Date()
|
|
|
+ };
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 4.3 数据验证算法
|
|
|
+
|
|
|
+**输入验证范围**:
|
|
|
+| 字段 | 男性范围 | 女性范围 | 单位 |
|
|
|
+|------|---------|---------|------|
|
|
|
+| 肩宽 | 36-52 | 32-46 | cm |
|
|
|
+| 身长(坐高) | 75-95 | 70-88 | cm |
|
|
|
+| 一寸 | 1.5-2.8 | 1.3-2.4 | cm |
|
|
|
+| 1.5寸 | 2.2-4.0 | 2.0-3.5 | cm |
|
|
|
+| 三寸 | 4.5-8.0 | 4.0-7.0 | cm |
|
|
|
+
|
|
|
+### 4.4 置信度计算
|
|
|
+
|
|
|
+| 数据完整度 | 综合置信度 | 预估精度 |
|
|
|
+|-----------|-----------|---------|
|
|
|
+| 仅肩宽+身长 | 50% | ±5cm |
|
|
|
+| + 一寸数据 | 65% | ±4cm |
|
|
|
+| + 一寸+1.5寸 | 80% | ±3cm |
|
|
|
+| + 完整指寸 | 95% | ±2cm |
|
|
|
+
|
|
|
+### 4.5 坐标转换算法
|
|
|
+
|
|
|
+**核心问题**:将穴位相对偏移(相对大椎穴)转换为艾灸椅设备坐标系。
|
|
|
+
|
|
|
+**数据流向**:
|
|
|
+```
|
|
|
+用户穴位坐标数据(相对偏移,存储在后台)
|
|
|
+ ↓
|
|
|
+推送到APP
|
|
|
+ ↓
|
|
|
+推送到设备存储
|
|
|
+ ↓
|
|
|
+设备传感器检测大椎穴位置(设备坐标系)
|
|
|
+ ↓
|
|
|
+设备计算:穴位实际坐标 = 大椎穴位置 + 相对偏移
|
|
|
+ ↓
|
|
|
+设备执行:灸头移动到实际坐标
|
|
|
+```
|
|
|
+
|
|
|
+**坐标转换公式**:
|
|
|
+```typescript
|
|
|
+/**
|
|
|
+ * 设备坐标系定义(假设):
|
|
|
+ * X轴:横向(左负右正),单位mm
|
|
|
+ * Y轴:纵向(上正下负),单位mm
|
|
|
+ * Z轴:深度(前正后负),单位mm
|
|
|
+ */
|
|
|
+
|
|
|
+interface DeviceCoordinate {
|
|
|
+ x: number; // 横向偏移(mm)
|
|
|
+ y: number; // 纵向偏移(mm)
|
|
|
+ z: number; // 深度偏移(mm)
|
|
|
+}
|
|
|
+
|
|
|
+interface AcupointOffset {
|
|
|
+ x: number; // 相对大椎穴横向偏移(cm)
|
|
|
+ y: number; // 相对大椎穴纵向偏移(cm)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 将穴位相对偏移转换为设备坐标
|
|
|
+ * 注意:此算法在设备端执行
|
|
|
+ *
|
|
|
+ * @param dazhuiPosition 设备传感器检测的大椎穴位置(设备坐标系,mm)
|
|
|
+ * @param acupointOffset 穴位相对偏移(相对大椎穴,cm)
|
|
|
+ * @param userBodyData 用户体型数据(用于精度修正)
|
|
|
+ * @returns 穴位在设备坐标系中的位置(mm)
|
|
|
+ */
|
|
|
+function convertToDeviceCoordinate(
|
|
|
+ dazhuiPosition: DeviceCoordinate,
|
|
|
+ acupointOffset: AcupointOffset,
|
|
|
+ userBodyData: UserBodyData
|
|
|
+): DeviceCoordinate {
|
|
|
+ // 将厘米转换为毫米
|
|
|
+ const offsetXmm = acupointOffset.x * 10;
|
|
|
+ const offsetYmm = acupointOffset.y * 10;
|
|
|
+
|
|
|
+ // 坐标转换
|
|
|
+ // 注意:人体坐标系Y轴向下为负,设备坐标系Y轴向下为正
|
|
|
+ return {
|
|
|
+ x: dazhuiPosition.x + offsetXmm,
|
|
|
+ y: dazhuiPosition.y - offsetYmm, // 转换方向
|
|
|
+ z: dazhuiPosition.z // 深度通常不变
|
|
|
+ };
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 批量转换所有穴位坐标
|
|
|
+ *
|
|
|
+ * @param dazhuiPosition 设备传感器检测的大椎穴位置
|
|
|
+ * @param acupointTable 用户穴位对照表(相对偏移)
|
|
|
+ * @returns 所有穴位在设备坐标系中的位置
|
|
|
+ */
|
|
|
+function convertAllAcupoints(
|
|
|
+ dazhuiPosition: DeviceCoordinate,
|
|
|
+ acupointTable: AcupointReferenceTable
|
|
|
+): Map<string, DeviceCoordinate> {
|
|
|
+ const positions = new Map<string, DeviceCoordinate>();
|
|
|
+
|
|
|
+ for (const acupoint of acupointTable.acupoints) {
|
|
|
+ const deviceCoord = convertToDeviceCoordinate(
|
|
|
+ dazhuiPosition,
|
|
|
+ acupoint.offsetFromDazhui,
|
|
|
+ acupointTable.bodyData
|
|
|
+ );
|
|
|
+ positions.set(acupoint.id, deviceCoord);
|
|
|
+ }
|
|
|
+
|
|
|
+ return positions;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**坐标转换示例**:
|
|
|
+```
|
|
|
+假设:
|
|
|
+- 大椎穴检测位置:{ x: 0, y: 150mm, z: 50mm }
|
|
|
+- 身柱穴相对偏移:{ x: 0cm, y: -6.3cm }
|
|
|
+
|
|
|
+转换:
|
|
|
+- X坐标:0 + 0*10 = 0mm
|
|
|
+- Y坐标:150 - (-6.3)*10 = 150 + 63 = 213mm
|
|
|
+- Z坐标:50mm
|
|
|
+
|
|
|
+结果:身柱穴设备坐标 = { x: 0, y: 213mm, z: 50mm }
|
|
|
+```
|
|
|
+
|
|
|
+**推送给设备的数据格式**:
|
|
|
+```json
|
|
|
+{
|
|
|
+ "userId": "user_001",
|
|
|
+ "dazhuiPosition": {
|
|
|
+ "x": 0,
|
|
|
+ "y": 150,
|
|
|
+ "z": 50
|
|
|
+ },
|
|
|
+ "acupointTable": [
|
|
|
+ {
|
|
|
+ "id": "dazhui",
|
|
|
+ "name": "大椎穴",
|
|
|
+ "offsetX": 0,
|
|
|
+ "offsetY": 0
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "id": "shenzhu",
|
|
|
+ "name": "身柱穴",
|
|
|
+ "offsetX": 0,
|
|
|
+ "offsetY": -63
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "id": "fengmen_left",
|
|
|
+ "name": "风门穴",
|
|
|
+ "offsetX": -31.5,
|
|
|
+ "offsetY": -48
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 五、数据模型设计
|
|
|
+
|
|
|
+### 5.1 用户档案
|
|
|
+
|
|
|
+```typescript
|
|
|
+interface UserProfile {
|
|
|
+ id: string;
|
|
|
+ name: string;
|
|
|
+ gender: 'male' | 'female';
|
|
|
+ age: number;
|
|
|
+ phone: string;
|
|
|
+ bodyData: {
|
|
|
+ shoulderWidth: number; // 肩宽(厘米)
|
|
|
+ bodyLength: number; // 身长(厘米)
|
|
|
+ fingerWidth?: {
|
|
|
+ cun1: number; // 一寸
|
|
|
+ cun1_5: number; // 1.5寸
|
|
|
+ cun3: number; // 三寸
|
|
|
+ };
|
|
|
+ };
|
|
|
+ fingerprints: string[]; // 指纹ID列表
|
|
|
+ createdAt: Date;
|
|
|
+ updatedAt: Date;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 5.2 穴位数据(独立表)
|
|
|
+
|
|
|
+```typescript
|
|
|
+// 穴位基础信息
|
|
|
+interface Acupoint {
|
|
|
+ id: string;
|
|
|
+ name: string;
|
|
|
+ meridian: string; // 所属经络
|
|
|
+ efficacy: string[]; // 功效列表
|
|
|
+ positioning: 'relative' | 'absolute'; // 定位方式
|
|
|
+ offset?: { // 相对定位偏移
|
|
|
+ cun: number;
|
|
|
+ cunType: 'cun1' | 'cun1_5' | 'cun3';
|
|
|
+ side: 'center' | 'left' | 'right';
|
|
|
+ lateralOffset?: number;
|
|
|
+ };
|
|
|
+ absolutePosition?: { // 绝对定位坐标
|
|
|
+ x: number;
|
|
|
+ y: number;
|
|
|
+ z: number;
|
|
|
+ };
|
|
|
+ status: 'active' | 'pending'; // 状态
|
|
|
+ source: 'preset' | 'expert'; // 数据来源
|
|
|
+ createdAt: Date;
|
|
|
+ updatedAt: Date;
|
|
|
+}
|
|
|
+
|
|
|
+// 艾灸手法
|
|
|
+interface MoxaTechnique {
|
|
|
+ id: string;
|
|
|
+ name: string; // 手法名称(一键艾灸[默认]、温和灸、雀啄灸、回旋灸)
|
|
|
+ isDefault: boolean; // 是否为默认手法(一键艾灸为默认)
|
|
|
+ description: string; // 手法描述
|
|
|
+ parameters: {
|
|
|
+ temperatureRange: { min: number; max: number }; // 温度范围
|
|
|
+ durationRange: { min: number; max: number }; // 时间范围(秒)
|
|
|
+ movementPattern: 'fixed' | 'vertical' | 'circular' | 'oneclick'; // 运动模式
|
|
|
+ };
|
|
|
+ createdAt: Date;
|
|
|
+ updatedAt: Date;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 5.3 穴位对照表(相对偏移)
|
|
|
+
|
|
|
+```typescript
|
|
|
+interface AcupointReferenceTable {
|
|
|
+ userId: string;
|
|
|
+ bodyData: UserBodyData;
|
|
|
+ fingerWidthUsed: FingerWidth;
|
|
|
+ acupoints: CalculatedAcupoint[];
|
|
|
+ createdAt: Date;
|
|
|
+}
|
|
|
+
|
|
|
+interface CalculatedAcupoint {
|
|
|
+ id: string;
|
|
|
+ name: string;
|
|
|
+ side: 'center' | 'left' | 'right';
|
|
|
+ offsetFromDazhui: {
|
|
|
+ x: number; // 相对大椎穴的横向偏移(厘米)
|
|
|
+ y: number; // 相对大椎穴的纵向偏移(厘米)
|
|
|
+ };
|
|
|
+ offsetInCun: number;
|
|
|
+ cunType: 'cun1' | 'cun1_5' | 'cun3';
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+### 5.4 方案管理(四种模式)
|
|
|
+
|
|
|
+```typescript
|
|
|
+// 方案模式枚举
|
|
|
+enum SchemeMode {
|
|
|
+ ONE_CLICK = '一键艾灸',
|
|
|
+ PROFESSIONAL = '专业模式',
|
|
|
+ CUSTOM = '自定义模式',
|
|
|
+ EXPERT = '延年圣手模式'
|
|
|
+}
|
|
|
+
|
|
|
+// 用户模式存储(每个用户独立存储四种模式数据)
|
|
|
+interface UserModeStorage {
|
|
|
+ userId: string;
|
|
|
+ oneClickMode: OneClickScheme; // 一键艾灸(默认工艺)
|
|
|
+ professionalMode: ProfessionalScheme[]; // 专业模式(8种功效)
|
|
|
+ customMode: CustomScheme[]; // 自定义模式
|
|
|
+ expertMode: ExpertModeStorage; // 延年圣手模式(含8个同步方案)
|
|
|
+ updatedAt: Date;
|
|
|
+}
|
|
|
+
|
|
|
+// 方案基础结构
|
|
|
+interface Scheme {
|
|
|
+ id: string;
|
|
|
+ schemeName: string;
|
|
|
+ mode: SchemeMode;
|
|
|
+ symptoms: string[]; // 适用症状
|
|
|
+ targetGender: 'male' | 'female' | 'all';
|
|
|
+ ageRange: { min: number; max: number };
|
|
|
+ steps: SchemeStep[];
|
|
|
+ status: 'draft' | 'published' | 'archived';
|
|
|
+ createdAt: Date;
|
|
|
+ updatedAt: Date;
|
|
|
+}
|
|
|
+
|
|
|
+// 一键艾灸方案(默认艾灸工艺)
|
|
|
+interface OneClickScheme extends Scheme {
|
|
|
+ mode: SchemeMode.ONE_CLICK;
|
|
|
+ isDefault: true; // 始终为true,是默认工艺
|
|
|
+ processId: string; // 关联的工艺语言ID
|
|
|
+}
|
|
|
+
|
|
|
+// 专业模式方案
|
|
|
+interface ProfessionalScheme extends Scheme {
|
|
|
+ mode: SchemeMode.PROFESSIONAL;
|
|
|
+ efficacyType: '驱寒' | '祛湿' | '祛风' | '化瘀' | '活血' | '化痰' | '养颜' | '扶阳';
|
|
|
+}
|
|
|
+
|
|
|
+// 自定义模式方案
|
|
|
+interface CustomScheme extends Scheme {
|
|
|
+ mode: SchemeMode.CUSTOM;
|
|
|
+ userId: string; // 用户ID
|
|
|
+ isPersonal: boolean; // 是否个人方案
|
|
|
+}
|
|
|
+
|
|
|
+// 延年圣手模式方案(专家)
|
|
|
+interface ExpertScheme extends Scheme {
|
|
|
+ mode: SchemeMode.EXPERT;
|
|
|
+ expertId: string; // 专家ID(来自专家端系统)
|
|
|
+ expertName: string; // 专家名称
|
|
|
+ publishType: 'public' | 'private'; // 公开/指定
|
|
|
+ targetUsers?: string[]; // 指定用户ID列表
|
|
|
+}
|
|
|
+
|
|
|
+// 延年圣手模式存储(含8个同步方案到设备)
|
|
|
+interface ExpertModeStorage {
|
|
|
+ userId: string;
|
|
|
+ schemes: ExpertScheme[]; // 用户接收的所有专家方案
|
|
|
+ syncedSchemes: SyncedScheme[]; // 同步到设备的最新8个方案
|
|
|
+ updatedAt: Date;
|
|
|
+}
|
|
|
+
|
|
|
+// 同步到设备的方案(最新8个,对应设备快捷键1-8)
|
|
|
+interface SyncedScheme {
|
|
|
+ slot: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8; // 快捷键槽位(1-8)
|
|
|
+ schemeId: string; // 方案ID
|
|
|
+ schemeName: string; // 方案名称
|
|
|
+ processId: string; // 关联工艺语言ID
|
|
|
+ syncedAt: Date; // 同步时间
|
|
|
+}
|
|
|
+
|
|
|
+// 设备快捷键映射(推送到设备的数据结构)
|
|
|
+interface DeviceHotkeyMap {
|
|
|
+ userId: string;
|
|
|
+ deviceId: string;
|
|
|
+ hotkeys: {
|
|
|
+ '1': { schemeId: string; schemeName: string; processId: string };
|
|
|
+ '2': { schemeId: string; schemeName: string; processId: string };
|
|
|
+ '3': { schemeId: string; schemeName: string; processId: string };
|
|
|
+ '4': { schemeId: string; schemeName: string; processId: string };
|
|
|
+ '5': { schemeId: string; schemeName: string; processId: string };
|
|
|
+ '6': { schemeId: string; schemeName: string; processId: string };
|
|
|
+ '7': { schemeId: string; schemeName: string; processId: string };
|
|
|
+ '8': { schemeId: string; schemeName: string; processId: string };
|
|
|
+ };
|
|
|
+ updatedAt: Date;
|
|
|
+}
|
|
|
+
|
|
|
+// 方案步骤
|
|
|
+interface SchemeStep {
|
|
|
+ stepOrder: number;
|
|
|
+ acupointId: string;
|
|
|
+ acupointName: string;
|
|
|
+ sides?: ('left' | 'right')[]; // 双侧穴位
|
|
|
+ temperature: number;
|
|
|
+ duration: number; // 秒
|
|
|
+ techniqueId: string; // 艾灸手法ID(含 oneclick)
|
|
|
+ techniqueName: string; // 手法名称(一键艾灸、温和灸、雀啄灸、回旋灸)
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 六、API接口设计
|
|
|
+
|
|
|
+### 6.1 用户管理接口
|
|
|
+
|
|
|
+| 接口 | 方法 | 路径 | 说明 |
|
|
|
+|------|------|------|------|
|
|
|
+| 用户登录 | POST | `/api/auth/login` | 手机号+验证码 |
|
|
|
+| 获取用户列表 | GET | `/api/users` | 返回用户列表 |
|
|
|
+| 获取用户详情 | GET | `/api/users/{userId}` | 返回用户信息和体型数据 |
|
|
|
+| 更新用户档案 | PUT | `/api/users/{userId}` | 更新体型数据 |
|
|
|
+| 获取用户穴位坐标 | GET | `/api/users/{userId}/acupoint-coordinates` | 返回该用户的穴位坐标数据 |
|
|
|
+| 生成穴位坐标 | POST | `/api/users/{userId}/acupoint-coordinates` | 根据体型数据生成穴位坐标 |
|
|
|
+
|
|
|
+### 6.2 方案管理接口(四种模式)
|
|
|
+
|
|
|
+| 接口 | 方法 | 路径 | 说明 |
|
|
|
+|------|------|------|------|
|
|
|
+| 获取方案列表 | GET | `/api/schemes` | 获取所有方案(支持按模式筛选) |
|
|
|
+| 获取方案详情 | GET | `/api/schemes/{schemeId}` | 返回方案步骤和工艺 |
|
|
|
+| 创建方案 | POST | `/api/schemes` | 创建方案(需指定模式) |
|
|
|
+| 更新方案 | PUT | `/api/schemes/{schemeId}` | 编辑方案 |
|
|
|
+| 发布方案 | POST | `/api/schemes/{schemeId}/publish` | 发布方案 |
|
|
|
+| 选择方案 | POST | `/api/users/{userId}/schemes/{schemeId}` | 用户选择方案 |
|
|
|
+| 获取一键艾灸 | GET | `/api/schemes/one-click` | 获取一键艾灸默认方案 |
|
|
|
+| 获取专业模式 | GET | `/api/schemes/professional` | 获取专业模式方案列表 |
|
|
|
+| 获取自定义模式 | GET | `/api/users/{userId}/custom-schemes` | 获取用户自定义方案 |
|
|
|
+| 获取专家方案 | GET | `/api/schemes/expert` | 获取专家方案列表 |
|
|
|
+| 获取用户模式存储 | GET | `/api/users/{userId}/mode-storage` | 获取用户四种模式完整数据 |
|
|
|
+| 同步圣手方案到设备 | POST | `/api/users/{userId}/devices/{deviceId}/expert-sync` | 同步最新8个圣手方案到设备(快捷键1-8) |
|
|
|
+
|
|
|
+### 6.3 设备同步接口(延年圣手模式)
|
|
|
+
|
|
|
+| 接口 | 方法 | 路径 | 说明 |
|
|
|
+|------|------|------|------|
|
|
|
+| 获取快捷键映射 | GET | `/api/users/{userId}/devices/{deviceId}/hotkeys` | 获取设备快捷键1-8映射 |
|
|
|
+| 更新快捷键映射 | PUT | `/api/users/{userId}/devices/{deviceId}/hotkeys` | 更新设备快捷键映射 |
|
|
|
+| 触发快捷键方案 | POST | `/api/users/{userId}/devices/{deviceId}/hotkeys/{slot}/trigger` | 触发快捷键1-8对应方案 |
|
|
|
+
|
|
|
+### 6.4 专家端对接接口(预留)
|
|
|
+
|
|
|
+**说明**:专家端是独立项目,本次不研发,只预留对接接口。
|
|
|
+
|
|
|
+| 接口 | 方法 | 路径 | 说明 | 状态 |
|
|
|
+|------|------|------|------|------|
|
|
|
+| 方案接收 | POST | `/api/expert/schemes/receive` | 接收专家端创建的方案 | 预留 |
|
|
|
+| 方案更新 | PUT | `/api/expert/schemes/{schemeId}` | 接收专家端更新的方案 | 预留 |
|
|
|
+| 方案列表 | GET | `/api/expert/schemes` | 获取已接收的专家方案 | 预留 |
|
|
|
+| 模板获取 | GET | `/api/expert/templates` | 提供系统模板给专家端 | 预留 |
|
|
|
+| 穴位库获取 | GET | `/api/expert/acupoints` | 提供穴位库给专家端 | 预留 |
|
|
|
+| 手法库获取 | GET | `/api/expert/techniques` | 提供手法库给专家端 | 预留 |
|
|
|
+
|
|
|
+### 6.5 推送给设备的数据格式
|
|
|
+
|
|
|
+### 6.3 穴位管理接口(独立表)
|
|
|
+
|
|
|
+| 接口 | 方法 | 路径 | 说明 |
|
|
|
+|------|------|------|------|
|
|
|
+| 获取穴位列表 | GET | `/api/acupoints` | 返回穴位库(基础穴位信息) |
|
|
|
+| 获取穴位详情 | GET | `/api/acupoints/{acupointId}` | 返回穴位详情 |
|
|
|
+| 新增穴位 | POST | `/api/acupoints` | 新增穴位 |
|
|
|
+| 更新穴位 | PUT | `/api/acupoints/{acupointId}` | 更新穴位信息 |
|
|
|
+| 获取艾灸手法 | GET | `/api/moxa-techniques` | 返回艾灸手法列表 |
|
|
|
+| 获取手法详情 | GET | `/api/moxa-techniques/{techniqueId}` | 返回手法详情 |
|
|
|
+
|
|
|
+### 6.4 推送给设备的数据格式
|
|
|
+
|
|
|
+```json
|
|
|
+{
|
|
|
+ "userId": "user_001",
|
|
|
+ "userName": "张三",
|
|
|
+ "bodyData": {
|
|
|
+ "shoulderWidth": 42,
|
|
|
+ "bodyLength": 85,
|
|
|
+ "fingerWidth": {
|
|
|
+ "cun1": 2.1,
|
|
|
+ "cun1_5": 3.2,
|
|
|
+ "cun3": 6.3
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "mode": "专业模式",
|
|
|
+ "scheme": {
|
|
|
+ "schemeId": "expert_001",
|
|
|
+ "schemeName": "春季祛湿方案",
|
|
|
+ "steps": [
|
|
|
+ {
|
|
|
+ "stepOrder": 1,
|
|
|
+ "acupointId": "dazhui",
|
|
|
+ "acupointName": "大椎穴",
|
|
|
+ "offsetX": 0,
|
|
|
+ "offsetY": 0,
|
|
|
+ "temperature": 45,
|
|
|
+ "duration": 480,
|
|
|
+ "techniqueId": "gentle",
|
|
|
+ "techniqueName": "温和灸"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ "stepOrder": 2,
|
|
|
+ "acupointId": "fengmen_left",
|
|
|
+ "acupointName": "风门穴",
|
|
|
+ "offsetX": -31.5,
|
|
|
+ "offsetY": -48,
|
|
|
+ "temperature": 42,
|
|
|
+ "duration": 360,
|
|
|
+ "techniqueId": "pecking",
|
|
|
+ "techniqueName": "雀啄灸"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 七、后台管理系统
|
|
|
+
|
|
|
+### 7.1 功能模块结构
|
|
|
+
|
|
|
+```
|
|
|
+后台管理系统
|
|
|
+├── 用户管理
|
|
|
+│ ├── 用户列表(搜索、筛选、分页)
|
|
|
+│ ├── 用户档案(基本信息、体型数据)
|
|
|
+│ └── 该用户的穴位坐标数据(穴位对照表)
|
|
|
+│ ├── 穴位ID
|
|
|
+│ ├── 穴位名称
|
|
|
+│ ├── 相对偏移(X, Y)
|
|
|
+│ └── 置信度
|
|
|
+│
|
|
|
+├── 穴位管理(独立表)
|
|
|
+│ ├── 基础穴位信息
|
|
|
+│ │ ├── 穴位ID
|
|
|
+│ │ ├── 穴位名称
|
|
|
+│ │ ├── 所属经络
|
|
|
+│ │ ├── 功效描述
|
|
|
+│ │ └── 定位方式(相对/绝对)
|
|
|
+│ └── 艾灸手法
|
|
|
+│ ├── 温和灸(固定温度,持续施灸)
|
|
|
+│ ├── 雀啄灸(上下移动,模拟鸟啄)
|
|
|
+│ ├── 回旋灸(圆周运动)
|
|
|
+│ └── 其他手法...
|
|
|
+│
|
|
|
+├── 方案管理
|
|
|
+│ ├── 一键艾灸(默认方案)
|
|
|
+│ │ ├── 预设穴位组合
|
|
|
+│ │ ├── 默认参数(温度、时间)
|
|
|
+│ │ └── 适用人群
|
|
|
+│ ├── 专业模式(8种功效选择)
|
|
|
+│ │ ├── 驱寒模式
|
|
|
+│ │ ├── 祛湿模式
|
|
|
+│ │ ├── 祛风模式
|
|
|
+│ │ ├── 化瘀模式
|
|
|
+│ │ ├── 活血模式
|
|
|
+│ │ ├── 化痰模式
|
|
|
+│ │ ├── 养颜模式
|
|
|
+│ │ └── 扶阳模式
|
|
|
+│ ├── 自定义模式(用户自选穴位)
|
|
|
+│ │ ├── 用户自选穴位
|
|
|
+│ │ ├── 自定义参数
|
|
|
+│ │ └── 保存为个人方案
|
|
|
+│ └── 延年圣手模式(专家方案)
|
|
|
+│ ├── 专家创建方案
|
|
|
+│ ├── 方案发布(指定/公开)
|
|
|
+│ └── 用户选择专家方案
|
|
|
+│
|
|
|
+└── 系统管理
|
|
|
+ ├── 管理员管理
|
|
|
+ └── 操作日志
|
|
|
+```
|
|
|
+
|
|
|
+### 7.2 界面设计
|
|
|
+
|
|
|
+#### 7.2.1 用户管理页面
|
|
|
+
|
|
|
+```
|
|
|
+┌─────────────────────────────────────────────────────────────────┐
|
|
|
+│ 用户管理 [+ 新增用户] │
|
|
|
+├─────────────────────────────────────────────────────────────────┤
|
|
|
+│ 搜索: [________________] 性别: [全部 ▼] 状态: [全部 ▼] [搜索] │
|
|
|
+├─────────────────────────────────────────────────────────────────┤
|
|
|
+│ 用户ID │ 姓名 │ 性别 │ 年龄 │ 肩宽 │ 身长 │ 穴位表 │ 操作 │
|
|
|
+├─────────┼───────┼──────┼──────┼───────┼───────┼────────┼───────┤
|
|
|
+│ 001 │ 张三 │ 男 │ 35 │ 42cm │ 85cm │ ✓ │ 编辑 │
|
|
|
+│ 002 │ 李四 │ 女 │ 33 │ 36cm │ 78cm │ ✓ │ 编辑 │
|
|
|
+│ 003 │ 王五 │ 男 │ 62 │ 40cm │ 82cm │ ✓ │ 编辑 │
|
|
|
+└─────────┴───────┴──────┴──────┴───────┴───────┴────────┴───────┘
|
|
|
+```
|
|
|
+
|
|
|
+#### 7.2.2 穴位管理页面
|
|
|
+
|
|
|
+```
|
|
|
+┌─────────────────────────────────────────────────────────────────┐
|
|
|
+│ 穴位管理 [+ 新增穴位] │
|
|
|
+├─────────────────────────────────────────────────────────────────┤
|
|
|
+│ 搜索: [________________] 经络: [全部 ▼] 状态: [全部 ▼] [搜索] │
|
|
|
+├─────────────────────────────────────────────────────────────────┤
|
|
|
+│ 穴位ID │ 名称 │ 经络 │ 定位方式 │ 状态 │ 操作 │
|
|
|
+├───────────┼─────────┼───────────┼──────────┼───────┼───────────┤
|
|
|
+│ dazhui │ 大椎穴 │ 督脉 │ 相对定位 │ 活跃 │ 编辑 │
|
|
|
+│ shenzhu │ 身柱穴 │ 督脉 │ 相对定位 │ 活跃 │ 编辑 │
|
|
|
+│ fengmen │ 风门穴 │ 膀胱经 │ 相对定位 │ 活跃 │ 编辑 │
|
|
|
+│ weizhong │ 委中穴 │ 待完善 │ 待完善 │ 待完善│ 完善 │
|
|
|
+└───────────┴─────────┴───────────┴──────────┴───────┴───────────┘
|
|
|
+```
|
|
|
+
|
|
|
+#### 7.2.3 方案管理页面
|
|
|
+
|
|
|
+```
|
|
|
+┌─────────────────────────────────────────────────────────────────┐
|
|
|
+│ 方案管理 [+ 新增方案] │
|
|
|
+├─────────────────────────────────────────────────────────────────┤
|
|
|
+│ 搜索: [________________] 状态: [全部 ▼] 发布类型: [全部 ▼] │
|
|
|
+├─────────────────────────────────────────────────────────────────┤
|
|
|
+│ 方案ID │ 名称 │ 专家 │ 症状 │ 状态 │ 操作 │
|
|
|
+├───────────┼───────────────┼─────────┼─────────┼───────┼───────┤
|
|
|
+│ 001 │ 春季祛湿方案 │ 张专家 │ 祛湿 │ 已发布│ 编辑 │
|
|
|
+│ 002 │ 冬季驱寒方案 │ 李专家 │ 驱寒 │ 已发布│ 编辑 │
|
|
|
+│ 003 │ 活血化瘀方案 │ 王专家 │ 化瘀 │ 草稿 │ 编辑 │
|
|
|
+└───────────┴───────────────┴─────────┴─────────┴───────┴───────┘
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 八、验收标准
|
|
|
+
|
|
|
+### 8.1 功能验收
|
|
|
+
|
|
|
+| 功能 | 验收标准 | 优先级 |
|
|
|
+|------|----------|--------|
|
|
|
+| 穴位定位精度 | ≤ 2cm(指寸数据完整时) | 🔴 高 |
|
|
|
+| 穴位库扩展 | 支持动态新增穴位 | 🔴 高 |
|
|
|
+| 专家方案 | 支持创建、发布8种专业模式 | 🔴 高 |
|
|
|
+| 工艺生成 | 系统自动生成工艺语言 | 🔴 高 |
|
|
|
+| 数据接口 | API响应时间 < 200ms | 🔴 高 |
|
|
|
+| 经络图 | 支持点击、缩放交互 | 🟡 中 |
|
|
|
+| 症状推荐 | 覆盖率 80%+ | 🟡 中 |
|
|
|
+
|
|
|
+### 8.2 数据验证
|
|
|
+
|
|
|
+| 验证项 | 验证规则 |
|
|
|
+|--------|----------|
|
|
|
+| 肩宽 | 男性 36-52cm,女性 32-46cm |
|
|
|
+| 身长 | 男性 75-95cm,女性 70-88cm |
|
|
|
+| 一寸 | 男性 1.5-2.8cm,女性 1.3-2.4cm |
|
|
|
+| 1.5寸 | 男性 2.2-4.0cm,女性 2.0-3.5cm |
|
|
|
+| 三寸 | 男性 4.5-8.0cm,女性 4.0-7.0cm |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 九、技术选型
|
|
|
+
|
|
|
+| 层级 | 技术 | 理由 |
|
|
|
+|------|------|------|
|
|
|
+| 后端框架 | Spring Boot | 与现有后端项目一致 |
|
|
|
+| 数据库 | MySQL | 与现有数据库一致 |
|
|
|
+| API风格 | RESTful | 标准化、易维护 |
|
|
|
+| 前端管理 | Vue.js + Element UI | 快速开发管理后台 |
|
|
|
+| 专家端 | 微信小程序 | 用户基数大、易推广 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 十、实施阶段
|
|
|
+
|
|
|
+### Phase 1: 基础功能(2周)
|
|
|
+- 用户管理模块
|
|
|
+- 穴位管理模块
|
|
|
+- 核心算法实现
|
|
|
+- 数据验证算法
|
|
|
+
|
|
|
+### Phase 2: 方案管理(2周)
|
|
|
+- 专家方案模块
|
|
|
+- 工艺语言生成
|
|
|
+- 8种专业模式
|
|
|
+
|
|
|
+### Phase 3: 接口对接(1周)
|
|
|
+- APP-后台接口
|
|
|
+- 推送数据格式
|
|
|
+- 四种艾灸模式接口
|
|
|
+
|
|
|
+### Phase 4: 后台管理(2周)
|
|
|
+- 管理后台开发
|
|
|
+- 用户管理界面
|
|
|
+- 穴位管理界面
|
|
|
+- 方案管理界面
|
|
|
+
|
|
|
+### Phase 5: 测试验收(1周)
|
|
|
+- 功能测试
|
|
|
+- 性能测试
|
|
|
+- 验收测试
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+## 十一、参考标准
|
|
|
+
|
|
|
+- **GB/T 12346-2006**《腧穴名称与定位》
|
|
|
+- **GB/T 10000-1988**《中国成年人人体尺寸》
|
|
|
+- 《针灸学》教材(穴位定位方法)
|