Переглянути джерело

docs: 更新技术文档并补充Word版

jiapu 4 місяців тому
батько
коміт
1882e94239
3 змінених файлів з 729 додано та 1292 видалено
  1. 0 1292
      code/开发设计文档.md
  2. BIN
      code/技术文档-Word版.docx
  3. 729 0
      code/技术文档.md

+ 0 - 1292
code/开发设计文档.md

@@ -1,1292 +0,0 @@
-# 艾灸椅管理后台系统 开发设计文档
-
-## 目录
-
-1. [项目概述](#1-项目概述)
-2. [技术架构](#2-技术架构)
-3. [项目结构](#3-项目结构)
-4. [数据库设计](#4-数据库设计)
-5. [核心模块与接口设计](#5-核心模块与接口设计)
-6. [核心算法设计(穴位定位算法3.0)](#6-核心算法设计穴位定位算法30)
-7. [前端架构设计](#7-前端架构设计)
-8. [安全机制](#8-安全机制)
-9. [部署说明](#9-部署说明)
-
----
-
-## 1. 项目概述
-
-### 1.1 项目简介
-
-艾灸椅管理后台系统(aijiuyi-admin)是一套用于管理艾灸椅设备的Web后台管理系统,提供用户管理、穴位管理、方案管理、设备管理、艾灸手法管理等功能,并通过智能穴位定位算法为用户提供个性化的艾灸方案。
-
-### 1.2 项目背景
-
-本项目针对艾灸椅产品设计,通过采集用户体型数据(肩宽、脊柱长度、身高体重等),结合作者体数据(手指宽度),运用智能穴位定位算法,为每个用户计算个性化的穴位坐标,实现精准艾灸理疗。
-
-### 1.3 核心功能模块
-
-| 模块 | 功能描述 |
-|------|----------|
-| 认证管理 | 用户登录、退出、Token管理 |
-| 账号管理 | 应用用户(管理员/专家/普通用户)的增删改查 |
-| 用户管理 | 子用户档案管理(含体型数据) |
-| 穴位管理 | 穴位信息CRUD、批量导入 |
-| 方案管理 | 艾灸方案的创建、编辑、发布、下架 |
-| 设备管理 | 艾灸椅设备管理及用户绑定 |
-| 手法管理 | 艾灸手法(温和灸、雀啄灸等)管理 |
-| 用户穴位 | 用户个性化穴位坐标生成与查询 |
-| 用户方案 | 用户订阅的方案管理 |
-| 模拟测试 | 方案模拟推送数据组装 |
-| 系统日志 | 操作日志记录与查询 |
-
----
-
-## 2. 技术架构
-
-### 2.1 技术栈总览
-
-```
-┌─────────────────────────────────────────────────────────────┐
-│                        前端 (Frontend)                       │
-├─────────────────────────────────────────────────────────────┤
-│  Vue 3 + Composition API + Element Plus + Pinia + Vue Router │
-│                         Vite 4.0                            │
-└─────────────────────────────────────────────────────────────┘
-                              │
-                              │ HTTP/REST
-                              ▼
-┌─────────────────────────────────────────────────────────────┐
-│                        后端 (Backend)                       │
-├─────────────────────────────────────────────────────────────┤
-│                  Spring Boot 2.7.18                        │
-│  ┌──────────────┬──────────────┬──────────────┐            │
-│  │   Web MVC    │    Redis     │  MyBatis Plus│            │
-│  │   + AOP      │  + Lettuce   │   + MySQL    │            │
-│  └──────────────┴──────────────┴──────────────┘            │
-│                                                              │
-│  ┌──────────────┬──────────────┬──────────────┐            │
-│  │     JWT      │   Validation │    Log AOP   │            │
-│  │  Token鉴权   │   参数校验    │   操作日志   │            │
-│  └──────────────┴──────────────┴──────────────┘            │
-└─────────────────────────────────────────────────────────────┘
-```
-
-### 2.2 后端技术栈
-
-| 技术 | 版本 | 说明 |
-|------|------|------|
-| Spring Boot | 2.7.18 | 核心框架 |
-| Spring MVC | 5.3.31 | Web层 |
-| Spring AOP | 5.3.31 | 切面编程 |
-| Spring Data Redis | 2.7.18 | Redis集成 |
-| MyBatis Plus | 3.5.3.1 | ORM框架 |
-| MySQL Connector | 8.0.33 | 数据库驱动 |
-| JWT | 0.9.1 | Token生成与解析 |
-| FastJSON | 1.2.83 | JSON处理 |
-| Lombok | - | 简化代码 |
-| Apache Commons Lang3 | 3.12.0 | 工具类 |
-
-### 2.3 前端技术栈
-
-| 技术 | 版本 | 说明 |
-|------|------|------|
-| Vue | 3.5.32 | 核心框架 |
-| Vue Router | 4.6.4 | 路由管理 |
-| Pinia | 3.0.4 | 状态管理 |
-| Element Plus | 2.13.6 | UI组件库 |
-| Axios | 1.14.0 | HTTP客户端 |
-| Vite | 8.0.4 | 构建工具 |
-| @element-plus/icons-vue | 2.3.2 | 图标库 |
-| xlsx | 0.18.5 | Excel处理 |
-| sass | 1.99.0 | CSS预处理器 |
-
-### 2.4 中间件与基础设施
-
-| 组件 | 说明 |
-|------|------|
-| MySQL 8.0 | 关系型数据库 |
-| Redis | Token存储、缓存 |
-| JDK | 1.8+ |
-| Node.js | 16.0+ |
-
----
-
-## 3. 项目结构
-
-### 3.1 后端项目结构
-
-```
-code/backend/
-├── src/main/
-│   ├── java/com/aijiuyi/admin/
-│   │   ├── AijiuyiAdminApplication.java    # 启动类
-│   │   │
-│   │   ├── common/                         # 公共模块
-│   │   │   ├── annotation/                  # 自定义注解
-│   │   │   │   ├── Log.java                 # 操作日志注解
-│   │   │   │   └── NoAuth.java              # 免鉴权注解
-│   │   │   ├── aspect/                      # 切面
-│   │   │   │   └── LogAspect.java           # 日志切面
-│   │   │   ├── config/                      # 配置类
-│   │   │   │   ├── AuthProperties.java     # 鉴权配置
-│   │   │   │   ├── MybatisPlusConfig.java  # MyBatis配置
-│   │   │   │   ├── RedisConfig.java        # Redis配置
-│   │   │   │   └── WebMvcConfig.java       # Web MVC配置
-│   │   │   ├── constant/                    # 常量定义
-│   │   │   │   └── ResultCode.java         # 响应码枚举
-│   │   │   ├── context/                     # 上下文
-│   │   │   │   └── RequestContext.java    # 请求上下文(ThreadLocal)
-│   │   │   ├── entity/                      # 公共实体
-│   │   │   │   ├── Result.java             # 统一响应
-│   │   │   │   └── SysLog.java             # 系统日志
-│   │   │   ├── enums/                       # 枚举类
-│   │   │   │   └── OperationType.java     # 操作类型枚举
-│   │   │   ├── exception/                   # 异常处理
-│   │   │   │   ├── BusinessException.java # 业务异常
-│   │   │   │   └── GlobalExceptionHandler.java # 全局异常处理
-│   │   │   ├── handler/                     # 处理器
-│   │   │   │   └── MyMetaObjectHandler.java # MyBatis自动填充
-│   │   │   ├── interceptor/                  # 拦截器
-│   │   │   │   └── TokenInterceptor.java   # Token拦截器
-│   │   │   ├── service/                      # 公共服务接口
-│   │   │   │   └── SysLogService.java
-│   │   │   └── util/                         # 工具类
-│   │   │       ├── AcupointLocationParser.java  # 穴位定位解析器
-│   │   │       ├── AcupointYReference.java     # Y轴医学定位
-│   │   │       ├── IpUtil.java                # IP工具
-│   │   │       ├── LogUtil.java                # 日志工具
-│   │   │       ├── RedisUtil.java              # Redis工具
-│   │   │       └── TokenUtil.java              # Token工具
-│   │   │
-│   │   ├── controller/                       # 控制层
-│   │   │   ├── AcupointController.java       # 穴位管理
-│   │   │   ├── AdminController.java          # 管理员管理
-│   │   │   ├── AppUserController.java        # 应用用户管理
-│   │   │   ├── AuthController.java           # 认证管理
-│   │   │   ├── DeviceController.java         # 设备管理
-│   │   │   ├── MoxibustionTechniqueController.java  # 手法管理
-│   │   │   ├── PlanController.java           # 方案管理
-│   │   │   ├── SimulationController.java     # 模拟测试
-│   │   │   ├── SysLogController.java         # 日志管理
-│   │   │   ├── UserAcupointController.java    # 用户穴位管理
-│   │   │   ├── UserDeviceController.java     # 用户设备管理
-│   │   │   ├── UserPlanController.java       # 用户方案管理
-│   │   │   └── UserProfileController.java     # 用户档案管理
-│   │   │
-│   │   ├── service/                          # 业务层接口
-│   │   │   ├── AcupointService.java
-│   │   │   ├── AdminService.java
-│   │   │   ├── AppUserService.java
-│   │   │   ├── DeviceService.java
-│   │   │   ├── MoxibustionTechniqueService.java
-│   │   │   ├── PlanService.java
-│   │   │   ├── SimulationService.java
-│   │   │   ├── SysUserService.java
-│   │   │   ├── UserAcupointService.java
-│   │   │   ├── UserDeviceService.java
-│   │   │   ├── UserPlanService.java
-│   │   │   └── UserProfileService.java
-│   │   │
-│   │   ├── service/impl/                     # 业务层实现
-│   │   │   ├── AcupointServiceImpl.java      # 穴位服务实现
-│   │   │   ├── AdminServiceImpl.java
-│   │   │   ├── AppUserServiceImpl.java
-│   │   │   ├── DeviceServiceImpl.java
-│   │   │   ├── MoxibustionTechniqueServiceImpl.java
-│   │   │   ├── PlanServiceImpl.java
-│   │   │   ├── SimulationServiceImpl.java     # 模拟测试实现
-│   │   │   ├── SysUserServiceImpl.java
-│   │   │   ├── UserAcupointServiceImpl.java   # 穴位算法实现
-│   │   │   ├── UserDeviceServiceImpl.java
-│   │   │   ├── UserPlanServiceImpl.java
-│   │   │   └── UserProfileServiceImpl.java
-│   │   │
-│   │   ├── mapper/                           # 数据访问层
-│   │   │   ├── AcupointMapper.java
-│   │   │   ├── AdminPermissionMapper.java
-│   │   │   ├── AppUserMapper.java
-│   │   │   ├── DeviceMapper.java
-│   │   │   ├── MoxibustionTechniqueMapper.java
-│   │   │   ├── PlanMapper.java
-│   │   │   ├── PlanStepMapper.java
-│   │   │   ├── SysLogMapper.java
-│   │   │   ├── SysUserMapper.java
-│   │   │   ├── UserAcupointMapper.java
-│   │   │   ├── UserDeviceMapper.java
-│   │   │   ├── UserPlanMapper.java
-│   │   │   └── UserProfileMapper.java
-│   │   │
-│   │   ├── entity/                           # 实体类
-│   │   │   ├── Acupoint.java
-│   │   │   ├── AdminPermission.java
-│   │   │   ├── AppUser.java
-│   │   │   ├── Device.java
-│   │   │   ├── DeviceUserVO.java
-│   │   │   ├── MoxibustionTechnique.java
-│   │   │   ├── Plan.java
-│   │   │   ├── PlanStep.java
-│   │   │   ├── SysUser.java
-│   │   │   ├── UserAcupoint.java
-│   │   │   ├── UserDevice.java
-│   │   │   ├── UserPlan.java
-│   │   │   └── UserProfile.java
-│   │   │
-│   │   └── controller/dto/                     # 数据传输对象
-│   │       ├── AcupointQueryDTO.java
-│   │       ├── AppUserQueryDTO.java
-│   │       ├── DeviceQueryDTO.java
-│   │       ├── DeviceSaveDTO.java
-│   │       ├── LoginDTO.java
-│   │       ├── MoxibustionTechniqueQueryDTO.java
-│   │       ├── PlanQueryDTO.java
-│   │       ├── PlanSaveDTO.java
-│   │       ├── SimulationResponse.java
-│   │       ├── UserDeviceQueryDTO.java
-│   │       ├── UserProfileDTO.java
-│   │       ├── UserProfileQueryDTO.java
-│   │       └── YReferenceOptionDTO.java
-│   │
-│   └── resources/
-│       ├── mapper/                           # MyBatis XML映射文件
-│       │   ├── AcupointMapper.xml
-│       │   ├── AppUserMapper.xml
-│       │   ├── DeviceMapper.xml
-│       │   ├── MoxibustionTechniqueMapper.xml
-│       │   ├── PlanMapper.xml
-│       │   ├── PlanStepMapper.xml
-│       │   ├── SysLogMapper.xml
-│       │   ├── SysUserMapper.xml
-│       │   ├── UserAcupointMapper.xml
-│       │   ├── UserDeviceMapper.xml
-│       │   ├── UserPlanMapper.xml
-│       │   └── UserProfileMapper.xml
-│       │
-│       ├── sql/                              # SQL脚本
-│       │   ├── acupoint_full_data_import.sql # 穴位数据导入
-│       │   ├── init.sql                     # 初始化脚本
-│       │   ├── migration_acupoint_auto_parse.sql
-│       │   └── migration_algorithm_v3.sql   # 算法v3迁移
-│       │
-│       ├── application.yml                  # 主配置
-│       ├── application-dev.yml              # 开发环境配置
-│       ├── application-prod.yml             # 生产环境配置
-│       ├── application-test.yml             # 测试环境配置
-│       └── rebel.xml                        # 热加载配置
-│
-└── pom.xml                                  # Maven配置
-```
-
-### 3.2 前端项目结构
-
-```
-code/frontend/
-├── public/                                  # 静态资源
-│   ├── favicon.svg
-│   ├── icons.svg
-│   └── logo.svg
-│
-├── src/
-│   ├── api/                                 # API接口模块化
-│   │   ├── acupoint.js                     # 穴位管理接口
-│   │   ├── admin.js                        # 管理员接口
-│   │   ├── auth.js                          # 认证接口
-│   │   ├── device.js                        # 设备接口
-│   │   ├── index.js                        # API统一导出
-│   │   ├── log.js                          # 日志接口
-│   │   ├── moxibustion.js                  # 手法接口
-│   │   ├── plan.js                         # 方案接口
-│   │   ├── simulation.js                   # 模拟测试接口
-│   │   └── user.js                         # 用户接口
-│   │
-│   ├── assets/                              # 资源文件
-│   │   ├── acupoint-back-realistic.jpg
-│   │   ├── hero.png
-│   │   ├── vite.svg
-│   │   └── vue.svg
-│   │
-│   ├── components/                          # 公共组件
-│   │   ├── ExcelExport.vue                # Excel导出组件
-│   │   ├── ExcelImport.vue                # Excel导入组件
-│   │   └── HelloWorld.vue
-│   │
-│   ├── layout/                             # 布局组件
-│   │   └── index.vue                       # 后台管理布局
-│   │
-│   ├── router/                             # 路由配置
-│   │   └── index.js                        # 路由定义与守卫
-│   │
-│   ├── store/                              # 状态管理
-│   │   └── user.js                         # 用户状态
-│   │
-│   ├── utils/                              # 工具函数
-│   │   ├── excel.js                        # Excel处理工具
-│   │   ├── request.js                      # Axios封装
-│   │   └── storage.js                      # 本地存储工具
-│   │
-│   ├── views/                              # 页面视图
-│   │   ├── acupoint/                       # 穴位管理页面
-│   │   │   └── index.vue
-│   │   ├── admin/                          # 管理员页面
-│   │   │   └── index.vue
-│   │   ├── dashboard/                      # 仪表盘
-│   │   │   └── index.vue
-│   │   ├── device/                         # 设备管理页面
-│   │   │   ├── index.vue                   # 设备列表
-│   │   │   └── users.vue                   # 设备用户管理
-│   │   ├── log/                            # 日志页面
-│   │   │   └── index.vue
-│   │   ├── login/                          # 登录页面
-│   │   │   └── index.vue
-│   │   ├── moxibustion/                    # 手法管理页面
-│   │   │   └── index.vue
-│   │   ├── plan/                           # 方案管理页面
-│   │   │   └── index.vue
-│   │   ├── simulation/                     # 模拟测试页面
-│   │   │   └── index.vue
-│   │   ├── user/                           # 用户管理模块
-│   │   │   ├── app-user/                   # 应用用户
-│   │   │   │   └── index.vue
-│   │   │   ├── device/                     # 用户设备
-│   │   │   │   └── index.vue
-│   │   │   ├── plan/                       # 用户方案
-│   │   │   │   └── index.vue
-│   │   │   └── profile/                    # 用户档案
-│   │   │       └── index.vue
-│   │   └── 404.vue                         # 404页面
-│   │
-│   ├── App.vue                             # 根组件
-│   ├── main.js                             # 入口文件
-│   └── style.css                           # 全局样式
-│
-├── index.html                              # HTML模板
-├── package.json                            # NPM配置
-├── vite.config.js                          # Vite配置
-└── README.md
-```
-
----
-
-## 4. 数据库设计
-
-### 4.1 ER图概述
-
-```
-┌─────────────────┐      ┌─────────────────┐      ┌─────────────────┐
-│    app_user     │      │  user_profile   │      │  user_acupoint  │
-│  应用用户表      │──────│  子用户档案表   │──────│  用户穴位坐标表  │
-└─────────────────┘      └─────────────────┘      └─────────────────┘
-        │                        │
-        │                        │
-        ▼                        ▼
-┌─────────────────┐      ┌─────────────────┐      ┌─────────────────┐
-│ admin_permission│      │   user_device   │      │     acupoint    │
-│  管理员权限表    │      │  用户设备绑定表  │◄─────│     穴位表      │
-└─────────────────┘      └─────────────────┘      └─────────────────┘
-                                 │
-                                 ▼
-┌─────────────────┐      ┌─────────────────┐      ┌─────────────────┐
-│     device      │      │    user_plan    │      │   moxibustion   │
-│   艾灸椅设备表   │      │   用户方案表     │◄─────│   艾灸手法表     │
-└─────────────────┘      └─────────────────┘      └─────────────────┘
-                                 ▲
-                                 │
-                        ┌─────────────────┐
-                        │    plan_step    │
-                        │   方案步骤表    │◄───── plan (方案主表)
-                        └─────────────────┘
-```
-
-### 4.2 数据表详细设计
-
-#### 4.2.1 应用用户表 (app_user)
-
-| 字段名 | 类型 | 说明 |
-|--------|------|------|
-| id | BIGINT | 主键ID |
-| phone | VARCHAR(20) | 手机号(唯一) |
-| username | VARCHAR(64) | 用户名(管理员登录用,唯一) |
-| password | VARCHAR(64) | 密码(MD5加密) |
-| nickname | VARCHAR(100) | 昵称 |
-| avatar | VARCHAR(500) | 头像URL |
-| user_type | TINYINT | 用户类型:1=普通用户,2=专家,3=管理员 |
-| admin_role | TINYINT | 管理员角色:1=超级管理员,2=运营人员,3=只读用户 |
-| status | TINYINT | 状态:1=正常,0=禁用 |
-| last_login_time | DATETIME | 最后登录时间 |
-| deleted | TINYINT | 逻辑删除:0=未删除,1=已删除 |
-| create_time | DATETIME | 创建时间 |
-| update_time | DATETIME | 更新时间 |
-
-#### 4.2.2 子用户信息表 (user_profile)
-
-| 字段名 | 类型 | 说明 |
-|--------|------|------|
-| id | BIGINT | 主键ID |
-| user_id | BIGINT | 所属应用用户ID |
-| name | VARCHAR(50) | 姓名 |
-| gender | TINYINT | 性别:1=男,2=女 |
-| age | INT | 年龄 |
-| phone | VARCHAR(20) | 手机号 |
-| 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 | 逻辑删除 |
-| create_time | DATETIME | 创建时间 |
-| update_time | DATETIME | 更新时间 |
-
-#### 4.2.3 穴位信息表 (acupoint)
-
-| 字段名 | 类型 | 说明 |
-|--------|------|------|
-| id | BIGINT | 主键ID |
-| acupoint_code | VARCHAR(100) | 穴位编码(唯一标识) |
-| excel_serial_no | VARCHAR(20) | Excel原始序号 |
-| name | VARCHAR(50) | 穴位名称 |
-| single_double | VARCHAR(20) | 单/双穴 |
-| meridian | VARCHAR(100) | 所属经络 |
-| body_part | VARCHAR(50) | 身体部位 |
-| body_region | VARCHAR(50) | 部位分区 |
-| location_description | VARCHAR(500) | 穴位定位原文 |
-| relative_position | VARCHAR(200) | 相对位置原文 |
-| indications | VARCHAR(1000) | 主管疾病/主治 |
-| product_symptoms | VARCHAR(500) | 产品症状覆盖 |
-| acupoint_method | VARCHAR(500) | 取穴说明 |
-| product_acupoint | TINYINT | 是否艾灸椅产品穴位: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 | 适用性别:0=不限,1=仅男,2=仅女 |
-| status | TINYINT | 状态:1=活跃,0=待完善 |
-| deleted | TINYINT | 逻辑删除 |
-| create_time | DATETIME | 创建时间 |
-| update_time | DATETIME | 更新时间 |
-
-#### 4.2.4 用户穴位坐标表 (user_acupoint)
-
-| 字段名 | 类型 | 说明 |
-|--------|------|------|
-| id | BIGINT | 主键ID |
-| user_id | BIGINT | 子用户ID |
-| acupoint_id | BIGINT | 穴位ID |
-| acupoint_name | VARCHAR(50) | 穴位名称(冗余) |
-| acupoint_side | VARCHAR(10) | 侧别:center/left/right |
-| cun_value | DECIMAL(6,2) | 相对大椎穴纵向偏移(寸) |
-| cun_type | VARCHAR(10) | 指寸类型 |
-| 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 | 更新时间 |
-
-#### 4.2.5 方案表 (plan)
-
-| 字段名 | 类型 | 说明 |
-|--------|------|------|
-| id | BIGINT | 主键ID |
-| plan_code | VARCHAR(50) | 方案编码(唯一) |
-| name | VARCHAR(100) | 方案名称 |
-| mode_type | TINYINT | 模式类型:1=一键艾灸,2=专业模式,3=自定义模式,4=延年圣手 |
-| effect_type | VARCHAR(20) | 功效类型:驱寒/祛湿/祛风/化瘀/活血/化痰/养颜/扶阳 |
-| symptoms | VARCHAR(500) | 适用症状 |
-| applicable_gender | TINYINT | 适用人群:0=不限,1=仅男,2=仅女 |
-| age_min | INT | 适用年龄最小值 |
-| age_max | INT | 适用年龄最大值 |
-| description | VARCHAR(200) | 方案描述 |
-| author_type | TINYINT | 创作人类型:1=管理员,2=普通用户,3=专家 |
-| author_id | BIGINT | 创作人ID |
-| author_name | VARCHAR(100) | 创作人名称 |
-| status | TINYINT | 状态:0=草稿,1=已发布,2=已下架 |
-| use_count | INT | 使用人数 |
-| avg_rating | DECIMAL(3,1) | 平均评分 |
-| last_use_time | DATETIME | 最后使用时间 |
-| deleted | TINYINT | 逻辑删除 |
-| create_time | DATETIME | 创建时间 |
-| update_time | DATETIME | 更新时间 |
-
-#### 4.2.6 方案步骤表 (plan_step)
-
-| 字段名 | 类型 | 说明 |
-|--------|------|------|
-| id | BIGINT | 主键ID |
-| plan_id | BIGINT | 方案ID |
-| step_order | INT | 步骤序号 |
-| acupoint_id | BIGINT | 穴位ID |
-| acupoint_name | VARCHAR(50) | 穴位名称 |
-| side | TINYINT | 侧别:1=中心,2=左侧,3=右侧,4=双侧 |
-| temperature | DECIMAL(4,1) | 温度(°C,35-50) |
-| duration | INT | 时间(分钟,1-30) |
-| technique_id | BIGINT | 艾灸手法ID |
-| technique_name | VARCHAR(50) | 手法名称 |
-| remark | VARCHAR(100) | 备注 |
-| deleted | TINYINT | 逻辑删除 |
-| create_time | DATETIME | 创建时间 |
-| update_time | DATETIME | 更新时间 |
-
-#### 4.2.7 艾灸手法表 (moxibustion_technique)
-
-| 字段名 | 类型 | 说明 |
-|--------|------|------|
-| id | BIGINT | 主键ID |
-| technique_code | VARCHAR(50) | 手法编码(唯一) |
-| name | VARCHAR(50) | 手法名称 |
-| motion_mode | VARCHAR(20) | 运动模式:default/fixed/updown/circular/dotted |
-| temp_min | DECIMAL(4,1) | 温度范围最小值 |
-| temp_max | DECIMAL(4,1) | 温度范围最大值 |
-| time_min | INT | 时间范围最小值 |
-| time_max | INT | 时间范围最大值 |
-| motion_amplitude | DECIMAL(4,1) | 运动幅度(mm) |
-| motion_speed | DECIMAL(4,1) | 运动速度(mm/s) |
-| status | TINYINT | 状态:1=启用,0=禁用 |
-| remark | VARCHAR(200) | 备注 |
-| deleted | TINYINT | 逻辑删除 |
-| create_time | DATETIME | 创建时间 |
-| update_time | DATETIME | 更新时间 |
-
-#### 4.2.8 设备表 (device)
-
-| 字段名 | 类型 | 说明 |
-|--------|------|------|
-| id | BIGINT | 主键ID |
-| device_code | VARCHAR(50) | 设备编号(唯一) |
-| device_name | VARCHAR(100) | 设备名称 |
-| device_model | VARCHAR(50) | 设备型号 |
-| serial_no | VARCHAR(50) | 设备序列号(唯一) |
-| firmware_version | VARCHAR(20) | 固件版本 |
-| online_status | TINYINT | 在线状态:1=在线,0=离线 |
-| last_online_time | DATETIME | 最后在线时间 |
-| remark | VARCHAR(200) | 备注 |
-| deleted | TINYINT | 逻辑删除 |
-| create_time | DATETIME | 创建时间 |
-| update_time | DATETIME | 更新时间 |
-
-#### 4.2.9 系统操作日志表 (sys_log)
-
-| 字段名 | 类型 | 说明 |
-|--------|------|------|
-| id | BIGINT | 主键ID |
-| user_id | BIGINT | 请求用户ID |
-| user_name | VARCHAR(100) | 请求用户名 |
-| user_type | TINYINT | 操作者类型 |
-| request_url | VARCHAR(500) | 请求接口路径 |
-| request_params | TEXT | 请求参数(JSON) |
-| request_result | TEXT | 请求结果(JSON) |
-| api_desc | VARCHAR(200) | 接口说明 |
-| operation_type | VARCHAR(20) | 操作方式 |
-| request_ip | VARCHAR(50) | 请求客户端IP |
-| operation_module | VARCHAR(100) | 操作模块 |
-| request_id | VARCHAR(50) | 请求唯一ID |
-| create_time | DATETIME | 创建时间 |
-
----
-
-## 5. 核心模块与接口设计
-
-### 5.1 认证模块 (AuthController)
-
-**接口基础路径**: `/api/auth`
-
-| 接口 | 方法 | 路径 | 说明 | 鉴权 |
-|------|------|------|------|------|
-| 登录 | POST | /auth/login | 用户登录,返回Token | 否 |
-| 退出 | POST | /auth/logout | 删除Redis中的Token | 是 |
-| 当前用户信息 | GET | /auth/info | 获取当前登录用户信息 | 是 |
-
-**登录请求示例**:
-```json
-POST /api/auth/login
-{
-  "username": "admin",
-  "password": "admin123"
-}
-```
-
-**登录响应示例**:
-```json
-{
-  "code": 200,
-  "message": "操作成功",
-  "data": {
-    "token": "eyJhbGciOiJIUzI1NiJ9...",
-    "userId": 1,
-    "username": "admin",
-    "nickname": "超级管理员"
-  }
-}
-```
-
-### 5.2 穴位管理模块 (AcupointController)
-
-**接口基础路径**: `/api/acupoint`
-
-| 接口 | 方法 | 路径 | 说明 |
-|------|------|------|------|
-| 穴位选项列表 | GET | /acupoint/list | 获取所有启用穴位(选择框用) |
-| Y轴定位术语选项 | GET | /acupoint/y-reference-options | 获取Y轴定位术语选项 |
-| 穴位分页列表 | GET | /acupoint/page | 分页查询穴位 |
-| 穴位详情 | GET | /acupoint/{id} | 查询单个穴位详情 |
-| 新增穴位 | POST | /acupoint | 新增穴位 |
-| 修改穴位 | PUT | /acupoint | 修改穴位 |
-| 删除穴位 | DELETE | /acupoint/{id} | 删除穴位(逻辑删除) |
-| 批量删除穴位 | DELETE | /acupoint/batch | 批量删除穴位 |
-| 批量导入穴位 | POST | /acupoint/import | 批量导入穴位 |
-
-**查询参数 (AcupointQueryDTO)**:
-| 参数 | 类型 | 说明 |
-|------|------|------|
-| name | String | 穴位名称(模糊查询) |
-| meridian | String | 经络 |
-| status | Integer | 状态 |
-| parseStatus | String | 解析状态 |
-| pageNum | Integer | 页码(默认1) |
-| pageSize | Integer | 每页条数(默认10) |
-
-### 5.3 方案管理模块 (PlanController)
-
-**接口基础路径**: `/api/plan`
-
-| 接口 | 方法 | 路径 | 说明 |
-|------|------|------|------|
-| 方案分页列表 | GET | /plan/page | 分页查询方案 |
-| 方案详情 | GET | /plan/{id} | 查询方案详情(含步骤) |
-| 新增方案 | POST | /plan | 新增方案(草稿) |
-| 修改方案 | PUT | /plan | 修改方案 |
-| 删除方案 | DELETE | /plan/{id} | 删除方案(仅草稿) |
-| 批量删除方案 | DELETE | /plan/batch | 批量删除(仅草稿) |
-| 发布方案 | PUT | /plan/{id}/publish | 发布方案 |
-| 批量发布方案 | PUT | /plan/batch/publish | 批量发布 |
-| 下架方案 | PUT | /plan/{id}/offshelf | 下架方案 |
-| 批量下架方案 | PUT | /plan/batch/offshelf | 批量下架 |
-
-### 5.4 设备管理模块 (DeviceController)
-
-**接口基础路径**: `/api/device`
-
-| 接口 | 方法 | 路径 | 说明 |
-|------|------|------|------|
-| 设备分页列表 | GET | /device/page | 分页查询设备 |
-| 设备详情 | GET | /device/{id} | 查询设备详情 |
-| 新增设备 | POST | /device | 新增设备 |
-| 修改设备 | PUT | /device | 修改设备 |
-| 删除设备 | DELETE | /device/{id} | 删除设备 |
-| 批量删除设备 | DELETE | /device/batch | 批量删除 |
-| 批量导入设备 | POST | /device/import | 批量导入 |
-| 设备绑定用户列表 | GET | /device/{deviceId}/users | 查询设备绑定的用户 |
-| 添加绑定用户 | POST | /device/{deviceId}/users/{profileId} | 为设备添加用户 |
-| 解绑用户 | DELETE | /device/{deviceId}/users/{profileId} | 解绑设备用户 |
-| 设为主用户 | PUT | /device/{deviceId}/users/{profileId}/primary | 设为主用户 |
-| 批量解绑 | DELETE | /device/{deviceId}/users/batch | 批量解绑 |
-
-### 5.5 用户管理模块 (UserProfileController)
-
-**接口基础路径**: `/api/user/profile`
-
-| 接口 | 方法 | 路径 | 说明 |
-|------|------|------|------|
-| 用户分页列表 | GET | /user/profile/page | 分页查询用户 |
-| 用户详情 | GET | /user/profile/{id} | 查询用户详情 |
-| 新增用户 | POST | /user/profile | 新增用户 |
-| 修改用户 | PUT | /user/profile | 修改用户 |
-| 删除用户 | DELETE | /user/profile/{id} | 删除用户 |
-| 批量删除用户 | DELETE | /user/profile/batch | 批量删除 |
-| 批量导入用户 | POST | /user/profile/import | 批量导入 |
-| 用户选项列表 | GET | /user/profile/options | 设备绑定用户下拉 |
-| 所有用户列表 | GET | /user/profile/list-all | 获取所有用户 |
-
-### 5.6 艾灸手法管理模块 (MoxibustionTechniqueController)
-
-**接口基础路径**: `/api/moxibustion-technique`
-
-| 接口 | 方法 | 路径 | 说明 |
-|------|------|------|------|
-| 手法选项列表 | GET | /moxibustion-technique/list | 获取启用手法(选择框) |
-| 手法分页列表 | GET | /moxibustion-technique/page | 分页查询手法 |
-| 手法详情 | GET | /moxibustion-technique/{id} | 查询手法详情 |
-| 新增手法 | POST | /moxibustion-technique | 新增手法 |
-| 修改手法 | PUT | /moxibustion-technique | 修改手法 |
-| 删除手法 | DELETE | /moxibustion-technique/{id} | 删除手法 |
-| 批量删除手法 | DELETE | /moxibustion-technique/batch | 批量删除 |
-
-### 5.7 用户穴位模块 (UserAcupointController)
-
-**接口基础路径**: `/api/user/acupoint`
-
-| 接口 | 方法 | 路径 | 说明 |
-|------|------|------|------|
-| 生成穴位坐标 | POST | /user/acupoint/{profileId}/generate | 触发生成用户穴位坐标 |
-| 穴位坐标列表 | GET | /user/acupoint/{profileId}/list | 查询用户穴位坐标列表 |
-
-### 5.8 方案模拟测试模块 (SimulationController)
-
-**接口基础路径**: `/api/simulation`
-
-| 接口 | 方法 | 路径 | 说明 |
-|------|------|------|------|
-| 组装模拟推送数据 | GET | /simulation/push-data/{profileId}/{planId} | 方案模拟推送数据 |
-
-### 5.9 用户方案模块 (UserPlanController)
-
-**接口基础路径**: `/api/user-plan`
-
-| 接口 | 方法 | 路径 | 说明 |
-|------|------|------|------|
-| 用户方案分页列表 | GET | /user-plan/page | 查询用户方案分页列表 |
-| 用户方案详情 | GET | /user-plan/{id} | 查询用户方案详情 |
-
----
-
-## 6. 核心算法设计(穴位定位算法3.0)
-
-### 6.1 算法概述
-
-穴位定位算法3.0是一套基于用户体型数据的智能穴位坐标计算系统,通过多源数据融合和解剖分区策略,实现高精度的个性化穴位定位。
-
-### 6.2 核心输入参数
-
-| 参数 | 是否必填 | 说明 | 校验规则 |
-|------|---------|------|----------|
-| 脊柱长度(C7-S4) | **必填** | C7棘突至S4棘突实测距离 | 范围:30-60cm |
-| 肩宽 | **必填** | 两侧肩峰间距 | 范围:30-50cm |
-| 实测1寸值 | 可选 | 用户中指中节长度 | 范围:1.5-3.5cm |
-| 实测1.5寸值 | 可选 | 1.5倍中指长度 | 范围:2.3-5.3cm |
-| 实测3寸值 | 可选 | 3倍中指长度 | 范围:4.5-10.5cm |
-| 身高 | 条件必填 | 未填指寸时必填 | 用于BMI推算 |
-| 体重 | 条件必填 | 未填指寸时必填 | 用于BMI推算 |
-
-### 6.3 算法流程
-
-```
-┌─────────────────────────────────────────────────────────────────┐
-│                    穴位坐标计算流程                               │
-├─────────────────────────────────────────────────────────────────┤
-│                                                                  │
-│  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐       │
-│  │  第一步      │    │  第二步      │    │  第三步      │       │
-│  │  三路指寸融合 │───▶│  背部一寸宽度 │───▶│  置信度确定  │       │
-│  │  A路+B路     │    │  肩宽+指寸   │    │  高/中/低   │       │
-│  └──────────────┘    └──────────────┘    └──────────────┘       │
-│         │                   │                   │              │
-│         ▼                   ▼                   ▼              │
-│  ┌──────────────┐    ┌──────────────┐    ┌──────────────┐       │
-│  │  第四步      │    │  第五步      │    │  第六步      │       │
-│  │  Y轴坐标计算 │    │  X轴坐标计算 │    │  Z轴坐标=0   │       │
-│  │  Panjabi归一化│   │  分区域策略  │    │  体表定位   │       │
-│  └──────────────┘    └──────────────┘    └──────────────┘       │
-│                                                                  │
-└─────────────────────────────────────────────────────────────────┘
-```
-
-### 6.4 三路指寸融合策略
-
-#### 6.4.1 A路:实测融合值
-
-当用户填写任意指寸值时:
-- 1寸值:权重50%
-- 1.5寸值(折算为1寸):权重25%
-- 3寸值(折算为1寸):权重25%
-
-**计算公式**:
-```
-A路值 = Σ(折算值 × 权重) / Σ权重
-```
-
-#### 6.4.2 B路:BMI换算法
-
-当提供身高体重时:
-```python
-标准人BMI = 65 / (1.70)^2 ≈ 22.49
-用户BMI = 体重(kg) / (身高(m))^2
-B路指寸(mm) = 24.0 × (用户BMI / 标准人BMI)
-```
-
-#### 6.4.3 最终指寸确定
-
-| 条件 | 最终指寸 | 置信度 |
-|------|----------|--------|
-| A路存在且B路存在 | (A路 + B路) / 2 | 高 |
-| 仅A路存在 | A路 | 中 |
-| 仅B路存在 | B路 | 中 |
-| 两者都不存在 | 24.0mm(标准人) | 低 |
-
-### 6.5 背部一寸宽度计算
-
-#### 6.5.1 双源计算
-
-**来源一:肩宽推算法**
-```
-肩胛骨内缘间距 = 肩宽(mm) × 0.420
-背部一寸宽度_肩宽 = 肩胛骨内缘间距 / 6
-```
-
-**来源二:指寸验证法**
-```
-背部一寸宽度_指寸 = 最终指寸(mm)
-```
-
-#### 6.5.2 融合策略
-
-```python
-差异率 = |肩宽推算值 - 指寸验证值| / 肩宽推算值
-
-if 差异率 <= 0.15:
-    背部一寸宽度 = (肩宽推算值 + 指寸验证值) / 2
-elif 有实测指寸值(A路存在):
-    背部一寸宽度 = 指寸验证值
-else:
-    背部一寸宽度 = 肩宽推算值
-```
-
-### 6.6 Y轴坐标计算
-
-#### 6.6.1 Panjabi归一化位置系数
-
-基于Panjabi椎骨归一化位置系数,以C7为原点(0),S4为终点(1):
-
-| 椎骨 | 归一化位置 | 对应穴位 |
-|------|-----------|---------|
-| C7 | 0.000 | 大椎、肩中俞 |
-| T2 | 0.078 | 风门 |
-| T3 | 0.120 | 肺俞、身柱 |
-| T5 | 0.203 | 心俞 |
-| T7 | 0.283 | 膈俞 |
-| T9 | 0.361 | 肝俞 |
-| T11 | 0.438 | 脾俞 |
-| T12 | 0.476 | 胃俞 |
-| L2 | 0.552 | 肾俞、命门 |
-| L4 | 0.628 | 大肠俞、腰阳关 |
-| S1 | 0.750 | 上髎 |
-| S2 | 0.834 | 次髎 |
-| S3 | 0.917 | 中髎 |
-| S4 | 1.000 | 下髎 |
-
-#### 6.6.2 Y轴计算公式
-
-```
-Y坐标(mm) = 脊柱长度(mm) × 归一化位置系数
-```
-
-**回退策略**:若无脊柱长度,则使用寸制计算
-```
-Y坐标(mm) = 纵向偏移(寸) × 最终指寸(mm)
-```
-
-### 6.7 X轴坐标计算
-
-#### 6.7.1 分策略计算
-
-| 穴位类型 | 计算策略 | 公式 |
-|----------|----------|------|
-| 督脉穴位 | X = 0 | 后正中线 |
-| 膀胱经第一侧线(1.5寸) | 区域系数 | X = 1.5 × 背部一寸宽度 × 区域系数 |
-| 膀胱经第二侧线(3寸) | 无区域系数 | X = 3.0 × 背部一寸宽度 |
-| 八髎穴 | 骶后孔解剖基准 | 基准偏移 × 身高缩放比例 |
-
-#### 6.7.2 区域系数
-
-骶段(normalizedY ≥ 0.750)应用收窄系数:
-```
-区域系数 = 0.85
-```
-
-#### 6.7.3 八髎穴特殊处理
-
-| 穴位 | 基准偏移(mm) |
-|------|-------------|
-| 上髎 | 15 |
-| 次髎 | 17 |
-| 中髎 | 16 |
-| 下髎 | 11 |
-
-**计算公式**:
-```
-X坐标 = 基准偏移(mm) × (用户身高(cm) / 160cm标准身高)
-```
-
-### 6.8 Z轴坐标
-
-所有背部/颈部穴位均位于体表:
-```
-Z坐标 = 0 mm
-```
-
-### 6.9 置信度等级
-
-| 等级 | 条件 | 说明 |
-|------|------|------|
-| high | A路存在且B路存在 | 双源数据,高可信度 |
-| medium | 仅A路存在或仅B路存在 | 单源数据,中可信度 |
-| low | 两者都不存在 | 使用标准参数,低可信度 |
-
-### 6.10 算法核心代码路径
-
-算法实现位于:`com.aijiuyi.admin.service.impl.UserAcupointServiceImpl`
-
-关键方法:
-- `calculateRouteA()` - A路实测融合
-- `calculateRouteB()` - B路BMI换算
-- `calculateFinalCunMm()` - 最终指寸
-- `calculateBackOneCunWidth()` - 背部一寸宽度
-- `calculateY()` - Y轴坐标
-- `calculateLateralMm()` - X轴坐标
-- `calculateBaliaoX()` - 八髎穴X坐标
-
----
-
-## 7. 前端架构设计
-
-### 7.1 技术架构
-
-前端采用Vue 3 + Composition API + Vite构建后台管理系统。
-
-```
-┌────────────────────────────────────────────────────────────┐
-│                        App.vue (根组件)                     │
-└────────────────────────────────────────────────────────────┘
-                              │
-                              ▼
-┌────────────────────────────────────────────────────────────┐
-│                    layout/index.vue                        │
-│                    (后台管理布局)                           │
-│  ┌─────────────┬─────────────────────────┬─────────────┐  │
-│  │             │                         │             │  │
-│  │  侧边导航    │      内容区域            │  顶部导航   │  │
-│  │  Sidebar    │      <router-view />     │  Header     │  │
-│  │             │                         │             │  │
-│  └─────────────┴─────────────────────────┴─────────────┘  │
-└────────────────────────────────────────────────────────────┘
-                              │
-                              ▼
-┌────────────────────────────────────────────────────────────┐
-│                    Views (页面视图)                          │
-│  ├── acupoint/index.vue        (穴位管理)                   │
-│  ├── admin/index.vue           (管理员管理)                 │
-│  ├── device/index.vue          (设备管理)                   │
-│  ├── moxibustion/index.vue     (手法管理)                  │
-│  ├── plan/index.vue            (方案管理)                  │
-│  ├── simulation/index.vue      (模拟测试)                   │
-│  ├── user/app-user/index.vue   (应用用户)                   │
-│  ├── user/device/index.vue     (用户设备)                   │
-│  ├── user/plan/index.vue       (用户方案)                   │
-│  ├── user/profile/index.vue   (用户档案)                   │
-│  ├── log/index.vue             (系统日志)                   │
-│  └── login/index.vue           (登录页)                     │
-└────────────────────────────────────────────────────────────┘
-```
-
-### 7.2 路由设计
-
-**路由配置**: `src/router/index.js`
-
-| 路径 | 组件 | 说明 | 鉴权 |
-|------|------|------|------|
-| /login | login/index.vue | 登录页 | 否 |
-| / | layout/index.vue | 主布局 | 是 |
-| /user/app | user/app-user/index.vue | 账号管理 | 是 |
-| /user/profile | user/profile/index.vue | 用户列表 | 是 |
-| /user/plan | user/plan/index.vue | 用户方案管理 | 是 |
-| /user/device | user/device/index.vue | 用户设备管理 | 是 |
-| /acupoint | acupoint/index.vue | 穴位管理 | 是 |
-| /device | device/index.vue | 设备管理 | 是 |
-| /device/users | device/users.vue | 设备用户管理 | 是 |
-| /moxibustion | moxibustion/index.vue | 手法管理 | 是 |
-| /plan | plan/index.vue | 方案管理 | 是 |
-| /simulation | simulation/index.vue | 模拟测试 | 是 |
-| /system/admin | admin/index.vue | 管理员 | 是 |
-| /system/log | log/index.vue | 系统日志 | 是 |
-
-### 7.3 状态管理
-
-**用户状态**: `src/store/user.js` (Pinia)
-
-```javascript
-// 状态结构
-{
-  token: string,      // JWT Token
-  userId: number,     // 用户ID
-  username: string,   // 用户名
-  nickname: string,   // 昵称
-  userType: number,   // 用户类型
-  adminRole: number,  // 管理员角色
-  permissions: array  // 权限路由列表
-}
-
-// Actions
-- setToken(token)
-- setUserInfo(userInfo)
-- logout()
-```
-
-### 7.4 HTTP请求封装
-
-**封装文件**: `src/utils/request.js`
-
-特性:
-- 基于Axios封装
-- 自动携带Token (`Authorization: Bearer {token}`)
-- 统一错误处理(401跳转登录、500服务器错误等)
-- 请求超时30秒
-- 业务状态码200视为成功
-
-### 7.5 API模块化
-
-**统一导出**: `src/api/index.js`
-
-每个业务模块对应一个API文件:
-- `acupoint.js` - 穴位管理
-- `admin.js` - 管理员管理
-- `auth.js` - 认证管理
-- `device.js` - 设备管理
-- `log.js` - 日志管理
-- `moxibustion.js` - 手法管理
-- `plan.js` - 方案管理
-- `simulation.js` - 模拟测试
-- `user.js` - 用户管理
-
----
-
-## 8. 安全机制
-
-### 8.1 认证机制
-
-#### 8.1.1 JWT Token认证
-
-- 采用JWT RS256算法
-- Token存储于Redis,设置过期时间
-- 请求头格式:`Authorization: Bearer {token}`
-
-#### 8.1.2 Token拦截器
-
-位置:`com.aijiuyi.admin.common.interceptor.TokenInterceptor`
-
-功能:
-- 验证Token有效性
-- 解析用户ID存入ThreadLocal
-- 白名单路径跳过验证
-
-#### 8.1.3 白名单配置
-
-```yaml
-auth:
-  white-list:
-    - /api/auth/login
-    - /api/auth/register
-    - /api/actuator/**
-    - /api/doc.html
-    - /api/swagger-ui.html
-    - /api/v2/api-docs
-    - /api/swagger-resources/**
-    - /api/webjars/**
-```
-
-### 8.2 权限控制
-
-#### 8.2.1 管理员角色
-
-| 角色值 | 角色名称 | 说明 |
-|--------|----------|------|
-| 1 | 超级管理员 | 全部权限 |
-| 2 | 运营人员 | 部分管理权限 |
-| 3 | 只读用户 | 仅查看权限 |
-
-#### 8.2.2 路由权限
-
-管理员权限通过`admin_permission`表配置,可访问的路由路径以JSON数组形式存储。
-
-### 8.3 操作日志
-
-#### 8.3.1 日志记录
-
-使用`@Log`注解标记需要记录日志的接口:
-```java
-@Log(value = "新增穴位", module = "穴位管理", operationType = OperationType.INSERT)
-public Result<Void> add(@RequestBody Acupoint acupoint) {
-    // ...
-}
-```
-
-#### 8.3.2 日志切面
-
-位置:`com.aijiuyi.admin.common.aspect.LogAspect`
-
-记录内容:
-- 请求用户ID、用户名
-- 请求URL、参数、结果
-- 请求IP、操作模块、操作类型
-- 请求唯一ID(串联同一请求的所有日志)
-
-### 8.4 数据安全
-
-#### 8.4.1 逻辑删除
-
-所有数据表使用`deleted`字段实现逻辑删除:
-- 0 = 未删除
-- 1 = 已删除
-
-#### 8.4.2 敏感数据处理
-
-- 用户密码使用MD5加密存储
-- 密码字段在返回给前端前被置空
-
----
-
-## 9. 部署说明
-
-### 9.1 环境要求
-
-| 组件 | 版本要求 |
-|------|----------|
-| JDK | 1.8+ |
-| MySQL | 8.0+ |
-| Redis | 6.0+ |
-| Node.js | 16.0+ |
-| Maven | 3.6+ |
-
-### 9.2 后端部署
-
-#### 9.2.1 数据库初始化
-
-```bash
-# 登录MySQL
-mysql -u root -p
-
-# 创建数据库
-CREATE DATABASE aijiuyi_admin DEFAULT CHARACTER SET utf8mb4;
-
-# 执行初始化脚本
-USE aijiuyi_admin;
-SOURCE /path/to/init.sql;
-```
-
-#### 9.2.2 配置文件
-
-修改`application-dev.yml`中的数据库和Redis连接信息:
-
-```yaml
-spring:
-  datasource:
-    url: jdbc:mysql://localhost:3306/aijiuyi_admin?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
-    username: root
-    password: your_password
-  redis:
-    host: localhost
-    port: 6379
-    password: your_redis_password
-```
-
-#### 9.2.3 构建部署
-
-```bash
-# 进入后端目录
-cd code/backend
-
-# 打包
-mvn clean package -DskipTests
-
-# 运行
-java -jar target/aijiuyi-admin-1.0.0.jar
-```
-
-### 9.3 前端部署
-
-#### 9.3.1 安装依赖
-
-```bash
-cd code/frontend
-npm install
-```
-
-#### 9.3.2 开发环境运行
-
-```bash
-npm run dev
-```
-
-#### 9.3.3 生产环境构建
-
-```bash
-npm run build
-```
-
-构建产物位于`dist`目录,可部署至Nginx等Web服务器。
-
-### 9.4 Nginx配置示例
-
-```nginx
-server {
-    listen 80;
-    server_name your-domain.com;
-
-    # 前端静态资源
-    location / {
-        root /path/to/frontend/dist;
-        try_files $uri $uri/ /index.html;
-    }
-
-    # 后端API代理
-    location /api {
-        proxy_pass http://localhost:18888;
-        proxy_set_header Host $host;
-        proxy_set_header X-Real-IP $remote_addr;
-    }
-}
-```
-
-### 9.5 初始化账号
-
-系统初始化管理员账号:
-- 用户名:`admin`
-- 密码:`admin123`
-
----
-
-## 附录
-
-### A. 常用端口
-
-| 服务 | 端口 |
-|------|------|
-| MySQL | 3306 |
-| Redis | 6379 |
-| 后端API | 18888 |
-| 前端开发服务器 | 5173 |
-
-### B. 默认数据
-
-系统初始化包含:
-- 1个超级管理员账号
-- 12个常用穴位
-- 5种艾灸手法
-- 9个默认艾灸方案
-
-### C. 相关文档
-
-- [智能穴位定位系统设计文档](./智能穴位定位系统设计文档.md)
-- [算法3.0说明](./算法3.0.md)
-- [穴位管理说明](./穴位管理.md)
-- [方案管理和用户方案管理](./方案管理和用户方案管理.md)
-- [用户管理说明](./用户管理.md)
-- [设备管理和用户设备管理](./设备管理和用户设备管理.md)
-- [用户穴位管理](./用户穴位管理.md)
-- [艾灸手法管理](./艾灸手法管理.md)
-- [管理员管理](./管理员管理.md)
-- [日志管理](./日志管理.md)
-- [规范说明](./规范说明.md)
-
----
-
-*文档版本:v1.0*
-*最后更新:2026-04-28*

BIN
code/技术文档-Word版.docx


+ 729 - 0
code/技术文档.md

@@ -0,0 +1,729 @@
+# 艾灸椅管理后台系统 交接验收设计文档
+
+> 本文面向系统验收、运维交接和二次开发交接。内容以当前代码仓库为准,详细业务说明可结合附录中的专项文档查看。
+
+## 目录
+
+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*