# 艾灸椅管理后台系统 交接验收设计文档 > 本文面向系统验收、运维交接和二次开发交接。内容以当前代码仓库为准,详细业务说明可结合附录中的专项文档查看。 ## 目录 1. [文档说明](#1-文档说明) 2. [项目概述](#2-项目概述) 3. [交付范围](#3-交付范围) 4. [系统架构](#4-系统架构) 5. [功能模块验收清单](#5-功能模块验收清单) 6. [核心业务流程](#6-核心业务流程) 7. [数据设计与初始化](#7-数据设计与初始化) 8. [核心算法说明](#8-核心算法说明) 9. [接口与页面索引](#9-接口与页面索引) 10. [安全与审计](#10-安全与审计) 11. [部署运行说明](#11-部署运行说明) 12. [验收建议](#12-验收建议) 13. [交接资料](#13-交接资料) --- ## 1. 文档说明 | 项目 | 内容 | |------|------| | 系统名称 | 艾灸椅管理后台系统 | | 后端工程 | `code/backend` | | 前端工程 | `code/frontend` | | 后端服务名 | `aijiuyi-admin` | | 文档用途 | 验收交接、部署说明、后续维护参考 | | 文档版本 | v1.1 | | 最后更新 | 2026-05-11 | --- ## 2. 项目概述 ### 2.1 系统定位 艾灸椅管理后台系统是一套用于艾灸椅业务运营管理的 Web 后台,覆盖账号、用户档案、穴位、艾灸方案、设备、手法、用户穴位坐标、模拟测试和系统日志等管理能力。 系统通过采集用户体型数据,结合穴位定位算法 3.0,为用户生成个性化穴位坐标,并支持将用户、设备、方案和穴位数据组织为可验收、可维护的后台业务闭环。 ### 2.2 使用角色 | 角色 | 说明 | |------|------| | 超级管理员 | 拥有全部后台管理权限 | | 运营人员 | 负责日常数据维护、方案维护、设备与用户管理 | | 只读用户 | 查看业务数据和日志,原则上不做写入操作 | | 专家/普通用户 | 作为应用用户数据被后台管理,可参与方案归属和用户档案关联 | --- ## 3. 交付范围 ### 3.1 本次交付内容 | 类型 | 交付物 | 说明 | |------|--------|------| | 后端源码 | `code/backend` | Spring Boot 后端服务,提供 REST API | | 前端源码 | `code/frontend` | Vue 3 后台管理页面 | | 数据库脚本 | `code/backend/src/main/resources/sql` | 初始化脚本、穴位导入脚本、算法迁移脚本 | | 配置文件 | `application.yml`、环境配置 | 服务端口、数据源、Redis、鉴权白名单等配置 | | 业务文档 | `code/*.md` | 各模块设计说明、算法说明、规范说明 | | 静态资源 | `code/frontend/src/assets` | 前端图片资源和页面展示素材 | ### 3.2 范围说明 本文重点说明当前仓库已实现的后台管理能力。设备固件、真实设备通信协议、外部系统联调细节,以对应交付物或联调文档为准。 --- ## 4. 系统架构 ### 4.1 总体架构 | 层级 | 组成 | 职责 | |------|------|------| | 前端层 | Vue 3、Vue Router、Pinia、Element Plus、Axios、Vite | 后台页面、表单交互、权限路由、接口调用 | | 后端层 | Spring Boot、Spring MVC、MyBatis Plus、Redis、AOP | 业务接口、鉴权拦截、数据处理、日志审计 | | 数据层 | MySQL、Redis | 业务数据存储、Token 状态管理 | | 部署层 | JDK、Maven、Node.js、Nginx | 后端运行、前端构建、静态资源和接口代理 | ### 4.2 业务架构图 ![业务架构图](./业务架构图.png) ### 4.3 技术栈 | 分类 | 技术 | |------|------| | 后端 | JDK 1.8、Spring Boot 2.7.18、MyBatis Plus 3.5.3.1、JWT、FastJSON、Lombok | | 前端 | Vue 3.5、Vue Router 4.6、Pinia 3.0、Element Plus 2.13、Axios 1.14、Vite 8 | | 数据库 | MySQL 8.0+ | | 缓存 | Redis 6.0+ | | 构建工具 | Maven 3.6+、Node.js 20+、npm | ### 4.4 项目结构摘要 ```text code/ ├── backend/ 后端工程 │ ├── src/main/java/com/aijiuyi/admin │ │ ├── common/ 通用配置、鉴权、异常、日志、工具 │ │ ├── controller/ REST 接口控制器 │ │ ├── service/ 业务服务接口与实现 │ │ ├── mapper/ MyBatis 数据访问层 │ │ ├── entity/ 数据实体 │ │ └── controller/dto/ 请求和响应 DTO │ ├── src/main/resources │ │ ├── mapper/ MyBatis XML │ │ ├── sql/ 初始化与迁移 SQL │ │ └── application*.yml 环境配置 │ └── pom.xml │ ├── frontend/ 前端工程 │ ├── src/api/ 接口封装 │ ├── src/views/ 业务页面 │ ├── src/router/ 路由与登录守卫 │ ├── src/store/ 用户状态 │ ├── src/utils/ 请求、存储、Excel 工具 │ └── package.json │ └── *.md 模块说明文档 ``` --- ## 5. 功能模块验收清单 | 模块 | 已实现能力 | 验收关注点 | |------|------------|------------| | 认证登录 | 登录、退出、当前用户信息、Token 校验 | 正确登录;退出后 Token 失效;未登录访问受限页面跳转登录 | | 账号管理 | 应用用户列表、详情、新增、编辑、删除、启停 | 管理员、专家、普通用户数据可维护;禁用账号不可正常使用 | | 管理员管理 | 管理员维护、角色维护、路由权限配置 | 超级管理员、运营人员、只读用户权限区分明确 | | 用户档案 | 子用户档案维护、批量导入、用户选项 | 肩宽、脊柱长度、身高、体重、指寸等数据校验正常 | | 穴位管理 | 穴位列表、详情、新增、编辑、删除、导入、导出 | 穴位名称、经络、定位描述、解析状态、坐标参数可维护 | | 用户穴位 | 根据用户档案生成个性化穴位坐标、查询坐标 | 输入体型数据后可生成 X/Y/Z 坐标和置信度 | | 方案管理 | 方案维护、步骤维护、发布、下架、批量操作 | 方案步骤可关联穴位和手法;发布/下架状态流转正确 | | 用户方案 | 用户方案分页、详情查询 | 能查看用户关联方案及方案明细 | | 设备管理 | 设备维护、批量导入、绑定用户、解绑用户、主用户设置 | 设备编号唯一;设备与用户绑定关系正确 | | 用户设备 | 从用户维度查看和维护设备绑定关系 | 绑定、解绑、主设备状态展示一致 | | 艾灸手法 | 手法维护、启停、温度/时间/运动参数管理 | 手法参数可被方案步骤引用 | | 模拟测试 | 按用户和方案组装模拟推送数据 | 能验证方案、穴位坐标、温度、时长、手法等输出数据 | | 系统日志 | 操作日志分页、导出、用户筛选 | 关键接口写操作可追踪操作人、时间、模块、请求结果 | --- ## 6. 核心业务流程 ### 6.1 登录与权限流程 1. 用户提交用户名和密码。 2. 后端校验账号状态和密码,生成 JWT Token。 3. Token 写入 Redis,前端保存 Token 并进入后台。 4. 前端路由守卫检查登录态;后端拦截器校验 Token 和白名单。 5. 退出登录时,后端删除 Redis 中的 Token,使当前登录态失效。 ### 6.2 用户穴位生成流程 1. 维护应用用户和子用户档案。 2. 子用户档案录入肩宽、脊柱长度、身高、体重、指寸等体型数据。 3. 后端根据穴位基础表和算法 3.0 计算用户个性化穴位坐标。 4. 坐标结果写入 `user_acupoint`,包含 X/Y/Z 坐标、侧别、置信度。 5. 方案模拟测试或后续设备联调可读取用户穴位坐标。 ### 6.3 方案维护流程 1. 创建方案基础信息,设置模式、功效、适用人群和描述。 2. 为方案添加步骤,步骤关联穴位、侧别、温度、时长和艾灸手法。 3. 草稿方案确认无误后发布。 4. 已发布方案可用于用户方案查询和模拟测试。 5. 不再使用的方案可下架,保留历史数据兼容性。 ### 6.4 设备与用户绑定流程 1. 录入或导入艾灸椅设备。 2. 在设备详情中绑定一个或多个子用户。 3. 可设置其中一个子用户为主用户。 4. 支持单个解绑、批量解绑,并保持绑定关系状态可追踪。 --- ## 7. 数据设计与初始化 ### 7.1 核心数据表清单 | 表名 | 作用 | 关键数据 | |------|------|----------| | `app_user` | 应用用户与后台账号 | 用户名、手机号、密码、用户类型、管理员角色、状态 | | `admin_permission` | 管理员路由权限 | 管理员 ID、可访问路由 JSON | | `user_profile` | 子用户档案 | 姓名、性别、年龄、肩宽、脊柱长度、身高、体重、指寸 | | `acupoint` | 穴位基础数据 | 穴位编码、名称、经络、定位描述、偏移量、归一化 Y 系数 | | `user_acupoint` | 用户个性化穴位坐标 | 用户 ID、穴位 ID、侧别、X/Y/Z 坐标、置信度 | | `plan` | 艾灸方案主表 | 方案编码、名称、模式、功效、适用人群、状态 | | `plan_step` | 方案步骤 | 方案 ID、穴位、侧别、温度、时长、手法 | | `moxibustion_technique` | 艾灸手法 | 手法编码、运动模式、温度范围、时间范围、运动参数 | | `device` | 艾灸椅设备 | 设备编号、型号、序列号、固件版本、在线状态 | | `user_device` | 用户设备绑定关系 | 用户 ID、设备编码、绑定状态、主设备标记 | | `user_plan` | 用户方案 | 用户 ID、方案 ID、步骤 JSON、使用次数 | | `sys_log` | 系统操作日志 | 操作人、接口、参数、结果、模块、请求 ID | ### 7.2 数据表结构明细 #### 7.2.1 `sys_log` 系统操作日志表 | 字段 | 类型 | 约束/默认值 | 索引 | 备注 | |------|------|-------------|------|------| | `id` | BIGINT | NOT NULL, AUTO_INCREMENT | PRIMARY KEY | 主键 ID | | `user_id` | BIGINT | - | idx_user_id | 请求用户 ID | | `user_name` | VARCHAR(100) | - | - | 请求用户名 | | `user_type` | TINYINT | - | - | 操作者类型:1=普通用户,2=专家,3=管理员 | | `request_url` | VARCHAR(500) | - | - | 请求接口路径 | | `request_params` | TEXT | - | - | 请求参数,JSON 格式 | | `request_result` | TEXT | - | - | 请求结果,JSON 格式,超长时截断 | | `api_desc` | VARCHAR(200) | - | - | 接口说明,来自 `@Log` 注解 | | `operation_type` | VARCHAR(20) | - | - | 操作方式:查询、新增、更新、删除、其他 | | `request_ip` | VARCHAR(50) | - | - | 请求客户端 IP | | `operation_module` | VARCHAR(100) | - | - | 操作模块,来自 `@Log` 注解 | | `request_id` | VARCHAR(50) | - | idx_request_id | 请求唯一 ID | | `create_time` | DATETIME | - | idx_create_time | 创建时间 | #### 7.2.2 `app_user` 应用用户表 | 字段 | 类型 | 约束/默认值 | 索引 | 备注 | |------|------|-------------|------|------| | `id` | BIGINT | NOT NULL, AUTO_INCREMENT | PRIMARY KEY | 主键 ID | | `phone` | VARCHAR(20) | - | UNIQUE `uk_phone` | 手机号,用于登录 | | `username` | VARCHAR(64) | - | UNIQUE `uk_username` | 用户名,管理员登录用 | | `password` | VARCHAR(64) | - | - | 密码,MD5 加密,管理员用 | | `nickname` | VARCHAR(100) | - | - | 昵称 | | `avatar` | VARCHAR(500) | - | - | 头像 URL | | `user_type` | TINYINT | NOT NULL, DEFAULT 1 | - | 用户类型:1=普通用户,2=专家,3=管理员 | | `status` | TINYINT | NOT NULL, DEFAULT 1 | - | 状态:1=正常,0=禁用 | | `deleted` | TINYINT | NOT NULL, DEFAULT 0 | - | 逻辑删除:0=未删除,1=已删除 | | `create_time` | DATETIME | - | - | 创建时间 | | `update_time` | DATETIME | - | - | 更新时间 | | `admin_role` | TINYINT | DEFAULT NULL | - | 管理员角色:1=超级管理员,2=运营人员,3=只读用户 | | `last_login_time` | DATETIME | DEFAULT NULL | - | 最后登录时间 | #### 7.2.3 `admin_permission` 管理员权限配置表 | 字段 | 类型 | 约束/默认值 | 索引 | 备注 | |------|------|-------------|------|------| | `id` | BIGINT | NOT NULL, AUTO_INCREMENT | PRIMARY KEY | 主键 ID | | `admin_id` | BIGINT | NOT NULL | UNIQUE `uk_admin_id` | 管理员 ID,关联 `app_user.id` | | `route_paths` | TEXT | - | - | 可访问路由路径,JSON 数组 | | `deleted` | TINYINT | NOT NULL, DEFAULT 0 | - | 逻辑删除:0=未删除,1=已删除 | | `create_time` | DATETIME | - | - | 创建时间 | | `update_time` | DATETIME | - | - | 更新时间 | #### 7.2.4 `user_profile` 子用户信息表 | 字段 | 类型 | 约束/默认值 | 索引 | 备注 | |------|------|-------------|------|------| | `id` | BIGINT | NOT NULL, AUTO_INCREMENT | PRIMARY KEY | 主键 ID | | `user_id` | BIGINT | - | idx_user_id | 所属应用用户 ID,关联 `app_user.id` | | `name` | VARCHAR(50) | NOT NULL | - | 姓名 | | `gender` | TINYINT | - | - | 性别:1=男,2=女 | | `age` | INT | - | - | 年龄 | | `phone` | VARCHAR(20) | - | idx_phone | 手机号 | | `shoulder_width` | DECIMAL(5,1) | - | - | 肩宽,单位 cm | | `body_height` | DECIMAL(5,1) | - | - | 身长/坐高,单位 cm | | `spine_length` | DECIMAL(5,1) | - | - | 脊柱长度 C7-S4,单位 cm,建议范围 30-60 | | `height` | DECIMAL(5,1) | - | - | 身高,单位 cm | | `weight` | DECIMAL(5,1) | - | - | 体重,单位 kg | | `finger_width_1` | DECIMAL(4,2) | - | - | 1 寸指宽,单位 cm | | `finger_width_15` | DECIMAL(4,2) | - | - | 1.5 寸指宽,单位 cm | | `finger_width_3` | DECIMAL(4,2) | - | - | 3 寸指宽,单位 cm | | `acupoint_table_id` | BIGINT | - | - | 用户穴位表 ID | | `deleted` | TINYINT | NOT NULL, DEFAULT 0 | - | 逻辑删除:0=未删除,1=已删除 | | `create_time` | DATETIME | - | - | 创建时间 | | `update_time` | DATETIME | - | - | 更新时间 | #### 7.2.5 `device` 艾灸椅设备表 | 字段 | 类型 | 约束/默认值 | 索引 | 备注 | |------|------|-------------|------|------| | `id` | BIGINT | NOT NULL, AUTO_INCREMENT | PRIMARY KEY | 主键 ID | | `device_code` | VARCHAR(50) | NOT NULL | UNIQUE `uk_device_code` | 设备编号 | | `device_name` | VARCHAR(100) | NOT NULL | - | 设备名称 | | `device_model` | VARCHAR(50) | - | - | 设备型号 | | `serial_no` | VARCHAR(50) | - | UNIQUE `uk_serial_no` | 设备序列号 | | `firmware_version` | VARCHAR(20) | - | - | 固件版本 | | `online_status` | TINYINT | NOT NULL, DEFAULT 0 | - | 在线状态:1=在线,0=离线 | | `last_online_time` | DATETIME | - | - | 最后在线时间 | | `remark` | VARCHAR(200) | - | - | 备注 | | `deleted` | TINYINT | NOT NULL, DEFAULT 0 | - | 逻辑删除:0=未删除,1=已删除 | | `create_time` | DATETIME | - | - | 创建时间 | | `update_time` | DATETIME | - | - | 更新时间 | #### 7.2.6 `user_device` 用户设备绑定表 | 字段 | 类型 | 约束/默认值 | 索引 | 备注 | |------|------|-------------|------|------| | `id` | BIGINT | NOT NULL, AUTO_INCREMENT | PRIMARY KEY | 主键 ID | | `user_id` | BIGINT | NOT NULL | idx_user_id | 所属子用户 ID,关联 `user_profile.id` | | `device_code` | VARCHAR(100) | NOT NULL | idx_device_code | 设备唯一编码 | | `device_name` | VARCHAR(100) | - | - | 设备名称 | | `device_model` | VARCHAR(100) | - | - | 设备型号 | | `is_primary` | TINYINT | NOT NULL, DEFAULT 0 | - | 是否主设备:1=是,0=否 | | `online_status` | TINYINT | NOT NULL, DEFAULT 0 | - | 在线状态:1=在线,0=离线 | | `status` | TINYINT | NOT NULL, DEFAULT 1 | - | 绑定状态:1=已绑定,0=已解绑 | | `bind_time` | DATETIME | - | - | 绑定时间 | | `deleted` | TINYINT | NOT NULL, DEFAULT 0 | - | 逻辑删除:0=未删除,1=已删除 | | `create_time` | DATETIME | - | - | 创建时间 | | `update_time` | DATETIME | - | - | 更新时间 | #### 7.2.7 `acupoint` 穴位信息表 | 字段 | 类型 | 约束/默认值 | 索引 | 备注 | |------|------|-------------|------|------| | `id` | BIGINT | NOT NULL, AUTO_INCREMENT | PRIMARY KEY | 主键 ID | | `acupoint_code` | VARCHAR(100) | NOT NULL | UNIQUE `uk_acupoint_code` | 穴位编码,唯一标识 | | `excel_serial_no` | VARCHAR(20) | - | - | Excel 原始序号 | | `name` | VARCHAR(50) | NOT NULL | - | 穴位名称 | | `single_double` | VARCHAR(20) | - | - | 单/双穴,Excel 原始字段 | | `meridian` | VARCHAR(100) | - | - | 所属经络 | | `body_part` | VARCHAR(50) | - | - | 身体部位,Excel 原始字段 | | `body_region` | VARCHAR(50) | - | - | 部位分区,Excel 原始字段 | | `location_description` | VARCHAR(500) | - | - | 穴位定位原文 | | `relative_position` | VARCHAR(200) | - | - | 相对位置原文 | | `indications` | VARCHAR(1000) | - | - | 主管疾病/主治 | | `product_symptoms` | VARCHAR(500) | - | - | 产品症状覆盖 | | `acupoint_method` | VARCHAR(500) | - | - | 取穴说明 | | `product_acupoint` | TINYINT | NOT NULL, DEFAULT 0 | - | 是否艾灸椅产品穴位:1=是,0=否 | | `effects` | VARCHAR(500) | - | - | 功效描述,逗号分隔 | | `location_type` | TINYINT | - | - | 定位方式,当前固定为 1=相对定位 | | `longitude_offset` | DECIMAL(6,2) | - | - | 相对大椎穴纵向偏移,单位寸 | | `lateral_offset` | DECIMAL(6,2) | - | - | 相对大椎穴横向偏移,单位寸 | | `normalized_y` | DECIMAL(6,4) | - | - | Panjabi 归一化 Y 位置系数,范围 0-1 | | `y_reference_term` | VARCHAR(100) | - | - | Y 轴医学定位术语 | | `parse_status` | VARCHAR(20) | - | - | 定位描述解析状态:已解析、待复核、暂不支持 | | `parse_confidence` | VARCHAR(10) | - | - | 定位描述解析置信度:高、中、低 | | `parse_message` | VARCHAR(500) | - | - | 定位描述解析说明 | | `side` | TINYINT | - | - | 侧别:1=中心,2=左侧,3=右侧,4=双侧 | | `finger_width_type` | TINYINT | - | - | 指寸类型:1=一寸,2=1.5寸,3=三寸 | | `gender` | TINYINT | NOT NULL, DEFAULT 0 | - | 适用性别:0=不限,1=仅男,2=仅女 | | `status` | TINYINT | NOT NULL, DEFAULT 1 | - | 状态:1=活跃,0=待完善 | | `deleted` | TINYINT | NOT NULL, DEFAULT 0 | - | 逻辑删除:0=未删除,1=已删除 | | `create_time` | DATETIME | - | - | 创建时间 | | `update_time` | DATETIME | - | - | 更新时间 | #### 7.2.8 `user_acupoint` 用户穴位坐标表 | 字段 | 类型 | 约束/默认值 | 索引 | 备注 | |------|------|-------------|------|------| | `id` | BIGINT | NOT NULL, AUTO_INCREMENT | PRIMARY KEY | 主键 ID | | `user_id` | BIGINT | NOT NULL | idx_user_id | 子用户 ID,关联 `user_profile.id` | | `acupoint_id` | BIGINT | NOT NULL | idx_acupoint_id | 穴位 ID,关联 `acupoint.id` | | `acupoint_name` | VARCHAR(50) | NOT NULL | - | 穴位名称,冗余存储 | | `acupoint_side` | VARCHAR(10) | NOT NULL, DEFAULT `center` | - | 侧别:center=中心,left=左侧,right=右侧 | | `cun_value` | DECIMAL(6,2) | - | - | 相对大椎穴纵向偏移,单位寸 | | `cun_type` | VARCHAR(10) | - | - | 指寸类型:1寸、1.5寸、3寸 | | `coordinate_x` | DECIMAL(8,2) | - | - | X 坐标,单位 mm,向右为正 | | `coordinate_y` | DECIMAL(8,2) | - | - | Y 坐标,单位 mm,向下为正 | | `coordinate_z` | DECIMAL(8,2) | - | - | Z 坐标,单位 mm,体表为 0 | | `confidence` | VARCHAR(10) | - | - | 置信度:high=高,medium=中,low=低 | | `create_time` | DATETIME | - | - | 首次生成时间 | | `update_time` | DATETIME | - | - | 最后更新时间 | #### 7.2.9 `moxibustion_technique` 艾灸手法表 | 字段 | 类型 | 约束/默认值 | 索引 | 备注 | |------|------|-------------|------|------| | `id` | BIGINT | NOT NULL, AUTO_INCREMENT | PRIMARY KEY | 主键 ID | | `technique_code` | VARCHAR(50) | NOT NULL | UNIQUE `uk_technique_code` | 手法编码,唯一标识 | | `name` | VARCHAR(50) | NOT NULL | - | 手法名称 | | `motion_mode` | VARCHAR(20) | NOT NULL | - | 运动模式:default、fixed、updown、circular、dotted | | `temp_min` | DECIMAL(4,1) | NOT NULL | - | 温度范围最小值,单位摄氏度 | | `temp_max` | DECIMAL(4,1) | NOT NULL | - | 温度范围最大值,单位摄氏度 | | `time_min` | INT | NOT NULL | - | 时间范围最小值,单位分钟 | | `time_max` | INT | NOT NULL | - | 时间范围最大值,单位分钟 | | `motion_amplitude` | DECIMAL(4,1) | - | - | 运动幅度,单位 mm | | `motion_speed` | DECIMAL(4,1) | - | - | 运动速度,单位 mm/s | | `status` | TINYINT | NOT NULL, DEFAULT 1 | - | 状态:1=启用,0=禁用 | | `remark` | VARCHAR(200) | - | - | 备注 | | `deleted` | TINYINT | NOT NULL, DEFAULT 0 | - | 逻辑删除:0=未删除,1=已删除 | | `create_time` | DATETIME | - | - | 创建时间 | | `update_time` | DATETIME | - | - | 更新时间 | #### 7.2.10 `plan` 方案表 | 字段 | 类型 | 约束/默认值 | 索引 | 备注 | |------|------|-------------|------|------| | `id` | BIGINT | NOT NULL, AUTO_INCREMENT | PRIMARY KEY | 主键 ID | | `plan_code` | VARCHAR(50) | NOT NULL | UNIQUE `uk_plan_code` | 方案编码 | | `name` | VARCHAR(100) | NOT NULL | - | 方案名称 | | `mode_type` | TINYINT | NOT NULL | - | 模式类型:1=一键艾灸,2=专业模式,3=自定义模式,4=延年圣手 | | `effect_type` | VARCHAR(20) | - | - | 功效类型:驱寒、祛湿、祛风、化瘀、活血、化痰、养颜、扶阳 | | `symptoms` | VARCHAR(500) | - | - | 适用症状,逗号分隔 | | `applicable_gender` | TINYINT | NOT NULL, DEFAULT 0 | - | 适用人群:0=不限,1=仅男,2=仅女 | | `age_min` | INT | NOT NULL, DEFAULT 1 | - | 适用年龄最小值 | | `age_max` | INT | NOT NULL, DEFAULT 120 | - | 适用年龄最大值 | | `description` | VARCHAR(200) | - | - | 方案描述 | | `author_type` | TINYINT | NOT NULL, DEFAULT 1 | - | 创作人类型:1=管理员,2=普通用户,3=专家 | | `author_id` | BIGINT | - | - | 创作人 ID,关联 `app_user.id` | | `author_name` | VARCHAR(100) | - | - | 创作人名称,冗余存储 | | `status` | TINYINT | NOT NULL, DEFAULT 0 | - | 状态:0=草稿,1=已发布,2=已下架 | | `use_count` | INT | NOT NULL, DEFAULT 0 | - | 使用人数 | | `avg_rating` | DECIMAL(3,1) | - | - | 平均评分 | | `last_use_time` | DATETIME | - | - | 最后使用时间 | | `deleted` | TINYINT | NOT NULL, DEFAULT 0 | - | 逻辑删除:0=未删除,1=已删除 | | `create_time` | DATETIME | - | - | 创建时间 | | `update_time` | DATETIME | - | - | 更新时间 | #### 7.2.11 `plan_step` 方案步骤表 | 字段 | 类型 | 约束/默认值 | 索引 | 备注 | |------|------|-------------|------|------| | `id` | BIGINT | NOT NULL, AUTO_INCREMENT | PRIMARY KEY | 主键 ID | | `plan_id` | BIGINT | NOT NULL | idx_plan_id | 方案 ID,关联 `plan.id` | | `step_order` | INT | NOT NULL | - | 步骤序号,从 1 开始 | | `acupoint_id` | BIGINT | - | - | 穴位 ID,关联 `acupoint.id` | | `acupoint_name` | VARCHAR(50) | NOT NULL | - | 穴位名称,冗余存储 | | `side` | TINYINT | NOT NULL | - | 侧别:1=中心,2=左侧,3=右侧,4=双侧 | | `temperature` | DECIMAL(4,1) | NOT NULL | - | 温度,单位摄氏度,建议范围 35-50 | | `duration` | INT | NOT NULL | - | 时间,单位分钟,建议范围 1-30 | | `technique_id` | BIGINT | - | - | 艾灸手法 ID,关联 `moxibustion_technique.id` | | `technique_name` | VARCHAR(50) | - | - | 艾灸手法名称,冗余存储 | | `remark` | VARCHAR(100) | - | - | 备注 | | `deleted` | TINYINT | NOT NULL, DEFAULT 0 | - | 逻辑删除:0=未删除,1=已删除 | | `create_time` | DATETIME | - | - | 创建时间 | | `update_time` | DATETIME | - | - | 更新时间 | #### 7.2.12 `user_plan` 用户方案表 | 字段 | 类型 | 约束/默认值 | 索引 | 备注 | |------|------|-------------|------|------| | `id` | BIGINT | NOT NULL, AUTO_INCREMENT | PRIMARY KEY | 主键 ID | | `user_id` | BIGINT | NOT NULL | idx_user_id | 子用户 ID,关联 `user_profile.id` | | `plan_id` | BIGINT | NOT NULL | idx_plan_id | 方案 ID,关联 `plan.id` | | `plan_code` | VARCHAR(50) | NOT NULL | - | 方案编码,冗余存储 | | `plan_name` | VARCHAR(100) | NOT NULL | - | 方案名称,冗余存储 | | `mode_type` | TINYINT | NOT NULL | - | 模式类型:1=一键艾灸,2=专业模式,3=自定义模式,4=延年圣手 | | `author_name` | VARCHAR(100) | - | - | 创作人名称,冗余存储 | | `step_count` | INT | NOT NULL, DEFAULT 0 | - | 步骤数量 | | `use_count` | INT | NOT NULL, DEFAULT 0 | - | 使用次数 | | `steps_json` | TEXT | - | - | 个性化工艺步骤,JSON 格式,含坐标、温度、时间等 | | `deleted` | TINYINT | NOT NULL, DEFAULT 0 | - | 逻辑删除:0=未删除,1=已删除 | | `create_time` | DATETIME | - | - | 订阅/生成时间 | | `update_time` | DATETIME | - | - | 更新时间 | ### 7.3 数据兼容原则 - 业务表使用 `deleted` 字段进行逻辑删除,避免物理删除影响历史数据。 - 方案、穴位、手法、设备均使用编码或唯一编号辅助识别,便于导入和后续联调。 - 穴位和方案数据涉及既有业务规则,维护时应保持字段含义和历史数据兼容。 - 用户穴位坐标为计算结果数据,可按用户档案重新生成,但应避免无确认地覆盖生产验证数据。 ### 7.4 初始化与迁移脚本 | 脚本 | 说明 | |------|------| | `init.sql` | 创建核心表并初始化管理员、穴位、手法、默认方案等基础数据 | | `acupoint_full_data_import.sql` | 完整穴位数据导入脚本 | | `migration_acupoint_auto_parse.sql` | 穴位定位解析相关字段迁移 | | `migration_algorithm_v3.sql` | 穴位定位算法 3.0 相关字段迁移 | 默认初始化账号: | 用户名 | 密码 | 角色 | |--------|------|------| | `admin` | `admin123` | 超级管理员 | --- ## 8. 核心算法说明 ### 8.1 算法定位 穴位定位算法 3.0 用于根据用户体型数据计算背部/颈部相关穴位的个性化坐标。该算法服务于艾灸椅定位和方案模拟,属于辅助定位能力,不替代医学诊断。 ### 8.2 输入参数 | 参数 | 要求 | 用途 | |------|------|------| | 脊柱长度 C7-S4 | 必填,建议 30-60cm | 计算 Y 轴位置 | | 肩宽 | 必填,建议 30-50cm | 推算背部横向一寸宽度 | | 1 寸、1.5 寸、3 寸指宽 | 可选 | 提高指寸换算精度 | | 身高、体重 | 条件必填 | 未填指寸时用于 BMI 推算 | ### 8.3 计算流程 1. 根据实测指寸计算 A 路指寸值。 2. 根据 BMI 计算 B 路指寸值。 3. 融合 A/B 路结果,得到最终指寸和置信度。 4. 结合肩宽和指寸计算背部一寸宽度。 5. 根据 Panjabi 归一化 Y 系数计算纵向坐标。 6. 根据经络侧线、区域系数和八髎穴规则计算横向坐标。 7. 背部/颈部体表穴位 Z 坐标统一为 `0`。 ### 8.4 输出结果 | 输出 | 说明 | |------|------| | `coordinate_x` | 横向坐标,单位 mm,右侧为正 | | `coordinate_y` | 纵向坐标,单位 mm,自 C7 向下 | | `coordinate_z` | 体表坐标,当前为 0 | | `confidence` | 坐标置信度:`high`、`medium`、`low` | ### 8.5 代码位置 | 内容 | 位置 | |------|------| | 用户穴位生成接口 | `UserAcupointController` | | 算法主实现 | `UserAcupointServiceImpl` | | 穴位定位解析 | `AcupointLocationParser` | | Y 轴参考项 | `AcupointYReference` | --- ## 9. 接口与页面索引 ### 9.1 接口基础信息 后端服务配置: | 配置 | 值 | |------|----| | 服务端口 | `18888` | | 接口前缀 | `/api` | | 前端请求方式 | Axios 统一封装 | | Token 请求头 | `Authorization: Bearer {token}` | ### 9.2 主要接口模块 | 模块 | 后端路径 | 主要能力 | |------|----------|----------| | 认证 | `/api/auth` | 登录、退出、当前用户信息 | | 账号 | `/api/user/app` | 应用用户列表、详情、新增、编辑、删除、启停 | | 管理员 | `/api/admin` | 管理员维护、权限配置、状态管理 | | 用户档案 | `/api/user/profile` | 用户档案维护、导入、选项列表 | | 穴位 | `/api/acupoint` | 穴位维护、导入、导出、Y 轴参考项 | | 用户穴位 | `/api/user/acupoint` | 用户穴位坐标生成与查询 | | 方案 | `/api/plan` | 方案维护、发布、下架、批量操作 | | 用户方案 | `/api/user-plan` | 用户方案分页和详情 | | 设备 | `/api/device` | 设备维护、导入、设备绑定用户 | | 用户设备 | `/api/user/device` | 用户维度设备绑定管理 | | 艾灸手法 | `/api/moxibustion-technique` | 手法维护、启停、参数管理 | | 模拟测试 | `/api/simulation` | 方案模拟推送数据组装 | | 系统日志 | `/api/log` | 操作日志分页、导出、用户选项 | ### 9.3 前端页面路由 | 页面 | 路由 | 说明 | |------|------|------| | 登录 | `/login` | 后台登录页 | | 账号管理 | `/user/app` | 应用用户维护 | | 用户档案 | `/user/profile` | 子用户档案维护 | | 用户方案 | `/user/plan` | 用户方案查看 | | 用户设备 | `/user/device` | 用户设备绑定关系 | | 穴位管理 | `/acupoint` | 穴位数据维护 | | 设备管理 | `/device` | 设备数据维护 | | 设备用户 | `/device/users` | 设备绑定用户维护 | | 艾灸手法 | `/moxibustion` | 手法参数维护 | | 方案管理 | `/plan` | 艾灸方案维护 | | 模拟测试 | `/simulation` | 用户方案推送数据模拟 | | 管理员 | `/system/admin` | 管理员和权限维护 | | 系统日志 | `/system/log` | 操作日志查看 | --- ## 10. 安全与审计 ### 10.1 鉴权机制 - 登录成功后生成 JWT Token,签名算法为 HS256。 - Token 存入 Redis,用于控制登录态有效性和退出失效。 - 前端请求统一携带 `Authorization: Bearer {token}`。 - 后端 `TokenInterceptor` 校验 Token,并将用户信息写入请求上下文。 - 白名单接口包括登录、注册、Actuator 和接口文档相关路径。 ### 10.2 权限控制 | 权限项 | 说明 | |--------|------| | 用户类型 | 普通用户、专家、管理员 | | 管理员角色 | 超级管理员、运营人员、只读用户 | | 路由权限 | 通过 `admin_permission.route_paths` 控制可访问页面 | | 前端守卫 | 未登录时跳转登录页,已登录时加载用户权限 | ### 10.3 操作审计 - 使用 `@Log` 注解标记需要记录日志的业务接口。 - `LogAspect` 统一记录操作人、接口、参数、结果、IP、模块和请求 ID。 - 日志可在系统日志页面分页查看并导出。 ### 10.4 数据安全 - 用户密码使用 MD5 存储。 - 返回前端的用户信息不应返回明文密码。 - 业务删除默认采用逻辑删除。 - 生产环境应修改 JWT 密钥、数据库密码、Redis 密码等敏感配置。 --- ## 11. 部署运行说明 ### 11.1 环境要求 | 组件 | 版本 | |------|------| | JDK | 1.8+ | | Maven | 3.6+ | | MySQL | 8.0+ | | Redis | 6.0+ | | Node.js | 20+,当前验证环境为 v22.22.2 | | npm | 与 Node.js 版本匹配,当前验证环境为 10.9.7 | ### 11.2 后端部署 1. 创建数据库。 ```sql CREATE DATABASE aijiuyi_admin DEFAULT CHARACTER SET utf8mb4; ``` 2. 执行初始化脚本。 ```bash mysql -u root -p aijiuyi_admin < code/backend/src/main/resources/sql/init.sql ``` 3. 按环境修改数据库和 Redis 配置。 ```text code/backend/src/main/resources/application-dev.yml code/backend/src/main/resources/application-prod.yml ``` 4. 打包并运行后端。 ```bash cd code/backend mvn clean package -DskipTests java -jar target/aijiuyi-admin-1.0.0.jar ``` ### 11.3 前端部署 ```bash cd code/frontend npm install npm run build ``` 构建产物位于 `code/frontend/dist`,可部署至 Nginx 等静态资源服务。 ### 11.4 Nginx 代理示例 ```nginx server { listen 80; server_name your-domain.com; location / { root /path/to/frontend/dist; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://localhost:18888; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` ### 11.5 常用端口 | 服务 | 端口 | |------|------| | MySQL | `3306` | | Redis | `6379` | | 后端 API | `18888` | | 前端开发服务 | `5173` | --- ## 12. 验收建议 ### 12.1 基础验收 - 使用初始化账号登录后台,确认菜单、路由和退出登录正常。 - 新增、编辑、删除一条用户档案,确认表单校验和列表刷新正常。 - 新增或编辑穴位、手法、设备,确认基础 CRUD 正常。 - 创建方案并维护方案步骤,确认发布、下架、批量操作正常。 - 绑定设备与用户,确认主用户设置、解绑、批量解绑正常。 - 查看系统日志,确认关键操作产生审计记录。 ### 12.2 算法验收 - 录入包含肩宽、脊柱长度、身高、体重和指寸的用户档案。 - 触发用户穴位生成,确认用户穴位列表存在坐标数据。 - 检查生成结果包含穴位名称、侧别、X/Y/Z 坐标和置信度。 - 使用同一用户和方案执行模拟测试,确认输出数据包含方案步骤和穴位坐标。 ### 12.3 部署验收 - 后端服务启动后可访问 `/api/auth/login`。 - 前端构建成功,部署后页面可正常刷新和路由跳转。 - MySQL、Redis 连接正常。 - 生产环境配置与本地开发配置分离,敏感配置不提交到 Git。 --- ## 13. 交接资料 | 文档 | 说明 | |------|------| | `智能穴位定位系统设计文档.md` | 穴位定位整体设计 | | `算法3.0.md` | 算法 3.0 详细说明 | | `穴位管理.md` | 穴位管理模块说明 | | `用户管理.md` | 用户档案模块说明 | | `用户穴位管理.md` | 用户穴位坐标模块说明 | | `方案管理和用户方案管理.md` | 方案与用户方案说明 | | `设备管理和用户设备管理.md` | 设备及绑定关系说明 | | `艾灸手法管理.md` | 艾灸手法模块说明 | | `管理员管理.md` | 管理员与权限说明 | | `日志管理.md` | 操作日志说明 | | `规范说明.md` | 开发与协作规范 | --- *文档版本:v1.1* *最后更新:2026-05-11*