refactor: 将设计文档中的Mermaid图表转换为ASCII格式

为提高兼容性,避免Mermaid版本兼容问题,将所有设计文档中的
Mermaid图表转换为ASCII格式。

修改文件:
- HLD-系统概要设计.md
  • 业务范围图 (mindmap → ASCII)
  • 总体架构图 (graph → ASCII)
  • 技术架构图 (graph → ASCII)
  • 部署架构图 (graph → ASCII)
  • 模块划分图 (graph → ASCII)
  • 模块交互图 (sequenceDiagram → ASCII)
  • 接口分组图 (graph → ASCII)

- LLD-会员模块详细设计.md
  • 模块边界图 (graph → ASCII)
  • 实体关系图 (erDiagram → ASCII)

- LLD-预约模块详细设计.md
  • 模块边界图 (graph → ASCII)
  • 实体关系图 (erDiagram → ASCII)

- LLD-签到模块详细设计.md
  • 模块边界图 (graph → ASCII)
  • 实体关系图 (erDiagram → ASCII)

所有ASCII图表采用统一的边框样式,左右两侧对齐,提高可读性。~
This commit is contained in:
张翔
2026-03-04 10:20:11 +08:00
parent 9f8fdd9368
commit 97c5c08513
4 changed files with 556 additions and 606 deletions
+344 -344
View File
@@ -79,54 +79,66 @@
### 2.3 业务范围 ### 2.3 业务范围
```mermaid ```
mindmap ┌─────────────────────────────────────────────────────────────────────────┐
root((业务范围)) │ 业务范围 │
会员管理 ├─────────────────────────────────────────────────────────────────────────┤
会员注册 │ │
会员卡管理 │ ┌─────────────────────────────────────────────────────────────────┐ │
权益管理 │ │ 会员管理 │ │
等级管理 │ ├─────────────────────────────────────────────────────────────────┤ │
预约管理 │ │ • 会员注册 • 会员卡管理 • 权益管理 • 等级管理 │ │
团课预约 │ └─────────────────────────────────────────────────────────────────┘ │
私教预约 │ │
场地预约 │ ┌─────────────────────────────────────────────────────────────────┐ │
线上课程 │ │ 预约管理 │ │
签到管理 │ ├─────────────────────────────────────────────────────────────────┤ │
扫码签到 │ │ • 团课预约 • 私教预约 • 场地预约 • 线上课程 │ │
刷脸签到 │ └─────────────────────────────────────────────────────────────────┘ │
NFC签到 │ │
教练代签 │ ┌─────────────────────────────────────────────────────────────────┐ │
课程管理 │ │ 签到管理 │ │
课程类型 │ ├─────────────────────────────────────────────────────────────────┤ │
课程排期 │ │ • 扫码签到 • 刷脸签到 • NFC签到 • 教练代签 │ │
场地管理 │ └─────────────────────────────────────────────────────────────────┘ │
价格配置 │ │
教练管理 │ ┌─────────────────────────────────────────────────────────────────┐ │
教练信息 │ │ 课程管理 │ │
排班管理 │ ├─────────────────────────────────────────────────────────────────┤ │
课时统计 │ │ • 课程类型 • 课程排期 • 场地管理 • 价格配置 │ │
评价管理 │ └─────────────────────────────────────────────────────────────────┘ │
财务管理 │ │
营收统计 │ ┌─────────────────────────────────────────────────────────────────┐ │
账单管理 │ │ 教练管理 │ │
退款管理 │ ├─────────────────────────────────────────────────────────────────┤ │
对账管理 │ │ • 教练信息 • 排班管理 • 课时统计 • 评价管理 │ │
计划中心 │ └─────────────────────────────────────────────────────────────────┘ │
训练计划 │ │
课程排期 │ ┌─────────────────────────────────────────────────────────────────┐ │
会员目标 │ │ 财务管理 │ │
教练排班 │ ├─────────────────────────────────────────────────────────────────┤ │
数据分析 │ │ • 营收统计 • 账单管理 • 退款管理 • 对账管理 │ │
会员分析 │ └─────────────────────────────────────────────────────────────────┘ │
课程分析 │ │
财务分析 │ ┌─────────────────────────────────────────────────────────────────┐ │
运营分析 │ │ 计划中心 │ │
系统管理 │ ├─────────────────────────────────────────────────────────────────┤ │
租户管理 │ │ • 训练计划 • 课程排期 • 会员目标 • 教练排班 │ │
门店管理 │ └─────────────────────────────────────────────────────────────────┘ │
权限管理 │ │
系统配置 │ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 数据分析 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 会员分析 • 课程分析 • 财务分析 • 运营分析 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 系统管理 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 租户管理 • 门店管理 • 权限管理 • 系统配置 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
``` ```
--- ---
@@ -137,186 +149,139 @@ mindmap
采用分层架构 + 微服务思想的模块化设计: 采用分层架构 + 微服务思想的模块化设计:
```mermaid ```
graph TB ┌─────────────────────────────────────────────────────────────────────────┐
subgraph ClientLayer[客户端层] │ 总体架构 │
A1[会员小程序<br/>uniapp+Vue3] ├─────────────────────────────────────────────────────────────────────────┤
A2[教练端App<br/>uniapp+Vue3] │ │
A3[管理后台PC<br/>Vue3+Vite] │ ┌─────────────────────────────────────────────────────────────────┐ │
A4[硬件设备<br/>人脸/NFC] │ │ 客户端层 │ │
end │ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 会员小程序 (uniapp+Vue3) │ │
subgraph Gateway[API Gateway<br/>统一网关] │ │ • 教练端App (uniapp+Vue3) │ │
B1[路由转发] │ │ • 管理后台PC (Vue3+Vite) │ │
B2[认证鉴权] │ │ • 硬件设备 (人脸/NFC) │ │
B3[限流熔断] │ └─────────────────────────────────────────────────────────────────┘ │
B4[日志追踪] │ │ │
end │ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
subgraph BusinessLayer[业务层] │ │ API Gateway 统一网关 │ │
C1[会员服务<br/>Member Service] │ ├─────────────────────────────────────────────────────────────────┤ │
C2[预约服务<br/>Booking Service] │ │ • 路由转发 • 认证鉴权 • 限流熔断 • 日志追踪 │ │
C3[数据服务<br/>Data Service] │ └─────────────────────────────────────────────────────────────────┘ │
end │ │ │
│ ▼ │
subgraph CommonLayer[公共服务层] │ ┌─────────────────────────────────────────────────────────────────┐ │
D1[认证服务] │ │ 业务层 │ │
D2[消息服务] │ ├─────────────────────────────────────────────────────────────────┤ │
D3[文件服务] │ │ • 会员服务 (Member Service) │ │
D4[缓存服务] │ │ • 预约服务 (Booking Service) │ │
end │ │ • 数据服务 (Data Service) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
subgraph InfraLayer[基础设施层] │ │ │
E1[PostgreSQL] │ ▼ │
E2[R2DBC] │ ┌─────────────────────────────────────────────────────────────────┐ │
E3[Caffeine] │ │ 公共服务层 │ │
E4[Redis可选] │ ├─────────────────────────────────────────────────────────────────┤ │
end │ │ • 认证服务 • 消息服务 • 文件服务 • 缓存服务 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
subgraph ExternalLayer[外部服务] │ │ │
F1[微信开放平台] │ ▼ │
F2[短信服务] │ ┌─────────────────────────────────────────────────────────────────┐ │
F3[支付服务] │ │ 基础设施层 │ │
F4[OSS存储] │ ├─────────────────────────────────────────────────────────────────┤ │
end │ │ • PostgreSQL • R2DBC • Caffeine • Redis(可选) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
A1 --> Gateway │ │ │
A2 --> Gateway │ ▼ │
A3 --> Gateway │ ┌─────────────────────────────────────────────────────────────────┐ │
A4 --> Gateway │ │ 外部服务层 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
Gateway --> C1 │ │ • 微信开放平台 • 短信服务 • 支付服务 • OSS存储 │ │
Gateway --> C2 │ └─────────────────────────────────────────────────────────────────┘ │
Gateway --> C3 │ │
└─────────────────────────────────────────────────────────────────────────┘
C1 --> CommonLayer
C2 --> CommonLayer
C3 --> CommonLayer
CommonLayer --> InfraLayer
CommonLayer --> ExternalLayer
``` ```
### 3.2 技术架构 ### 3.2 技术架构
```mermaid ```
graph TB ┌─────────────────────────────────────────────────────────────────────────┐
subgraph Presentation[表现层 Presentation] │ 技术架构 │
A1[会员端 uniapp<br/>Vue3 + TS<br/>Pinia<br/>uni-ui] ├─────────────────────────────────────────────────────────────────────────┤
A2[教练端 uniapp<br/>Vue3 + TS<br/>Pinia<br/>uni-ui] │ │
A3[管理后台 Vue3<br/>Vue3 + TS<br/>Pinia<br/>Element Plus] │ ┌─────────────────────────────────────────────────────────────────┐ │
end │ │ 表现层 Presentation │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
subgraph Gateway[网关层 Gateway] │ │ • 会员端 uniapp (Vue3 + TS + Pinia + uni-ui) │ │
B[Spring Cloud Gateway<br/>路由转发<br/>认证鉴权<br/>限流熔断<br/>日志追踪<br/>灰度发布] │ │ • 教练端 uniapp (Vue3 + TS + Pinia + uni-ui) │ │
end │ │ • 管理后台 Vue3 (Vue3 + TS + Pinia + Element Plus) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
subgraph Business[业务层 Business] │ │ │
C[Spring Boot 3 + WebFlux + JDK 21] │ ▼ │
C1[Controller<br/>API] │ ┌─────────────────────────────────────────────────────────────────┐ │
C2[Service<br/>业务逻辑] │ │ 网关层 Gateway │ │
C3[Repository<br/>数据访问] │ ├─────────────────────────────────────────────────────────────────┤ │
C4[Model<br/>领域模型] │ │ Spring Cloud Gateway (路由转发/认证鉴权/限流熔断/日志追踪/灰度发布) │ │
end │ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
subgraph Data[数据层 Data] │ ▼ │
D1[PostgreSQL<br/>R2DBC<br/>Flyway] │ ┌─────────────────────────────────────────────────────────────────┐ │
D2[Caffeine<br/>本地缓存<br/>热点数据] │ │ 业务层 Business │ │
D3[Redis可选<br/>分布式缓存<br/>分布式锁] │ ├─────────────────────────────────────────────────────────────────┤ │
end │ │ Spring Boot 3 + WebFlux + JDK 21 │ │
│ │ • Controller (API) • Service (业务逻辑) │ │
A1 --> B │ │ • Repository (数据访问) • Model (领域模型) │ │
A2 --> B │ └─────────────────────────────────────────────────────────────────┘ │
A3 --> B │ │ │
B --> C │ ▼ │
C --> C1 │ ┌─────────────────────────────────────────────────────────────────┐ │
C1 --> C2 │ │ 数据层 Data │ │
C2 --> C3 │ ├─────────────────────────────────────────────────────────────────┤ │
C3 --> C4 │ │ • PostgreSQL (R2DBC + Flyway) │ │
C4 --> D1 │ │ • Caffeine (本地缓存 + 热点数据) │ │
C4 --> D2 │ │ • Redis可选 (分布式缓存 + 分布式锁) │ │
C4 --> D3 │ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
``` ```
### 3.3 部署架构 ### 3.3 部署架构
```mermaid
graph TB
LB[负载均衡器<br/>Nginx/ALB]
subgraph GatewayInstances[API Gateway集群]
GW1[API Gateway<br/>实例1]
GW2[API Gateway<br/>实例2]
GW3[API Gateway<br/>实例N]
end
subgraph AppInstances[应用服务集群]
APP1[应用服务<br/>实例1]
APP2[应用服务<br/>实例2]
APP3[应用服务<br/>实例N]
end
subgraph DBLayer[数据库层]
PG1[PostgreSQL<br/>主库]
PG2[PostgreSQL<br/>从库1]
PG3[PostgreSQL<br/>从库N]
end
subgraph CacheLayer[缓存层]
REDIS1[Redis<br/>主节点]
REDIS2[Redis<br/>从节点1]
REDIS3[Redis<br/>从节点N]
end
LB --> GW1
LB --> GW2
LB --> GW3
GW1 --> APP1
GW2 --> APP2
GW3 --> APP3
APP1 --> PG1
APP2 --> PG1
APP3 --> PG1
PG1 -.->|主从复制| PG2
PG1 -.->|主从复制| PG3
APP1 --> REDIS1
APP2 --> REDIS1
APP3 --> REDIS1
REDIS1 -.->|主从复制| REDIS2
REDIS1 -.->|主从复制| REDIS3
``` ```
┌─────────────────────────────────────────────────────────────────────────┐
└───────────────────┼───────────────────┘ 部署架构
│ │ │ ├─────────────────────────────────────────────────────────────────────────┤
┌──────────────────┼──────────────────┐
│ │ │ ┌─────────────────────────────────────────────────────────────────┐
▼ ▼ ▼ │ 负载均衡器 (Nginx/ALB) │
────────────────┐ ┌────────────────┐ ┌──────────────── ─────────────────────────────────────────────────────────────────┘
│ Application │ │ Application │ │ Application │
│ Server (Pod1) │ │ Server (Pod2) │ │ Server (PodN) │
───────────────┘ └───────────────┘ └ ┌────────────────────────────────────────────────────────────────┐ │
│ │ API Gateway 集群 │ │
``` │ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • API Gateway 实例1 • API Gateway 实例2 • API Gateway 实例N │ │
───────────────┘ │ │ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
└───────────────────┼───────────────────┘
┌─────────────────────────────────────────────────────────────────┐
┌───────────────────────────┼───────────────────────────┐ │ 应用服务集群 │
│ │ │ ├─────────────────────────────────────────────────────────────────┤
▼ ▼ ▼ │ • 应用服务 实例1 • 应用服务 实例2 • 应用服务 实例N │
──────────────┐ ┌──────────────┐ ┌────────────── └─────────────────────────────────────────────────────────────────┘
│ PostgreSQL │ │ Redis │ │ OSS │
│ (主从复制) │ │ (哨兵模式) │ │ (对象存储) │ ┌───────────────┴───────────────┐
└──────────────┘ └──────────────┘ └──────────────┘ ▼ ▼
│ │ ┌─────────────────────────┐ ┌─────────────────────────┐
│ │ PostgreSQL 数据库层 │ │ Redis 缓存层 │ │
│ ├─────────────────────────┤ ├─────────────────────────┤ │
│ │ • 主库 │ │ • 主节点 │ │
│ │ • 从库1 (主从复制) │ │ • 从节点1 (主从复制) │ │
│ │ • 从库N (主从复制) │ │ • 从节点N (主从复制) │ │
│ └─────────────────────────┘ └─────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘ └─────────────────────────────────────────────────────────────────────────┘
``` ```
--- ---
@@ -325,59 +290,60 @@ graph TB
### 4.1 模块划分 ### 4.1 模块划分
```` ```
┌─────────────────────────────────────────────────────────────────────────┐
--- │ gym-manage-server 父工程 │
├─────────────────────────────────────────────────────────────────────────┤
## 四、模块设计 │ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
### 4.1 模块划分 │ │ gym-common 公共模块 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
```mermaid │ │ • gym-common-core (核心工具类、常量、枚举) │ │
graph TB │ │ • gym-common-redis (Redis配置可选) │ │
subgraph Parent[gym-manage-server 父工程] │ │ • gym-common-security (安全认证公共组件) │ │
subgraph Common[gym-common 公共模块] │ │ • gym-common-log (日志公共组件) │ │
C1[gym-common-core<br/>核心工具类、常量、枚举] │ └─────────────────────────────────────────────────────────────────┘ │
C2[gym-common-redis<br/>Redis配置可选] │ │
C3[gym-common-security<br/>安全认证公共组件] │ ┌─────────────────────────────────────────────────────────────────┐ │
C4[gym-common-log<br/>日志公共组件] │ │ gym-api API网关模块 │ │
end │ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • controller (HTTP接口) • dto (数据传输对象) │ │
subgraph API[gym-api API网关模块] │ │ • vo (视图对象) • config (API配置) │ │
A1[controller<br/>HTTP接口] │ └─────────────────────────────────────────────────────────────────┘ │
A2[dto<br/>数据传输对象] │ │
A3[vo<br/>视图对象] │ ┌─────────────────────────────────────────────────────────────────┐ │
A4[config<br/>API配置] │ │ gym-service 业务服务模块 │ │
end │ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • gym-service-member (会员服务) │ │
subgraph Service[gym-service 业务服务模块] │ │ • gym-service-booking (预约服务) │ │
S1[gym-service-member<br/>会员服务] │ │ • gym-service-checkin (签到服务) │ │
S2[gym-service-booking<br/>预约服务] │ │ • gym-service-course (课程服务) │ │
S3[gym-service-checkin<br/>签到服务] │ │ • gym-service-coach (教练服务) │ │
S4[gym-service-course<br/>课程服务] │ │ • gym-service-finance (财务服务) │ │
S5[gym-service-coach<br/>教练服务] │ │ • gym-service-data (数据服务) │ │
S6[gym-service-finance<br/>财务服务] │ └─────────────────────────────────────────────────────────────────┘ │
S7[gym-service-data<br/>数据服务] │ │
end │ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ gym-domain 领域模型模块 │ │
subgraph Domain[gym-domain 领域模型模块] │ ├─────────────────────────────────────────────────────────────────┤ │
D1[model<br/>领域模型] │ │ • model (领域模型) • event (领域事件) • service (领域服务) │ │
D2[event<br/>领域事件] │ └─────────────────────────────────────────────────────────────────┘ │
D3[service<br/>领域服务] │ │
end │ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ gym-infrastructure 基础设施模块 │ │
subgraph Infra[gym-infrastructure 基础设施模块] │ ├─────────────────────────────────────────────────────────────────┤ │
I1[repository<br/>数据仓储] │ │ • repository (数据仓储) • cache (缓存配置) │ │
I2[cache<br/>缓存配置] │ │ • external (外部服务集成) • config (基础配置) │ │
I3[external<br/>外部服务集成] │ └─────────────────────────────────────────────────────────────────┘ │
I4[config<br/>基础配置] │ │
end │ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ gym-starter 启动模块 │ │
subgraph Starter[gym-starter 启动模块] │ ├─────────────────────────────────────────────────────────────────┤ │
ST[gym-admin<br/>管理后台启动器] │ │ • gym-admin (管理后台启动器) │ │
end │ └─────────────────────────────────────────────────────────────────┘ │
end │ │
```` └─────────────────────────────────────────────────────────────────────────┘
```
### 4.2 模块职责 ### 4.2 模块职责
@@ -396,25 +362,54 @@ graph TB
### 4.3 模块交互 ### 4.3 模块交互
```mermaid ```
sequenceDiagram ┌─────────────────────────────────────────────────────────────────────────┐
participant Client as 客户端 │ 模块交互流程 │
participant API as API Layer ├─────────────────────────────────────────────────────────────────────────┤
participant Service as Service Layer │ │
participant Domain as Domain Layer │ 客户端 (Client) │
participant Repo as Repo Layer │ │ │
participant Infra as Infrastructure │ │ 1. HTTP Request │
│ ▼ │
Client->>API: HTTP Request │ API Layer │
API->>Service: 调用业务逻辑 │ │ │
Service->>Domain: 处理领域逻辑 │ │ 2. 调用业务逻辑 │
Domain->>Repo: 访问数据 │ ▼ │
Repo->>Infra: 访问基础设施 │ Service Layer │
Infra-->>Repo: 返回结果 │ │ │
Repo-->>Domain: 返回数据 │ │ 3. 处理领域逻辑 │
Domain-->>Service: 返回领域对象 │ ▼ │
Service-->>API: 返回业务结果 │ Domain Layer │
API-->>Client: HTTP Response │ │ │
│ │ 4. 访问数据 │
│ ▼ │
│ Repo Layer │
│ │ │
│ │ 5. 访问基础设施 │
│ ▼ │
│ Infrastructure │
│ │ │
│ │ 6. 返回结果 │
│ ▼ │
│ Repo Layer ──────────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 7. 返回数据 │ │
│ ▼ │ │
│ Domain Layer ────────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ 8. 返回领域对象 │ │
│ ▼ │ │
│ Service Layer ──────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ 9. 返回业务结果 │ │
│ ▼ │ │
│ API Layer ──────────────────────────────────────────────────────────┤ │
│ │ │ │
│ │ 10. HTTP Response │ │
│ ▼ │ │
│ 客户端 (Client) ◀────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
``` ```
--- ---
@@ -499,60 +494,65 @@ HTTP方法语义:
### 5.2 接口分组 ### 5.2 接口分组
```mermaid ```
graph LR ┌─────────────────────────────────────────────────────────────────────────┐
subgraph Auth[认证接口 /v1/auth] │ 接口分组 │
A1[POST /login<br/>登录] ├─────────────────────────────────────────────────────────────────────────┤
A2[POST /logout<br/>登出] │ │
A3[POST /refresh<br/>刷新Token] │ ┌─────────────────────────────────────────────────────────────────┐ │
A4[POST /wechat-login<br/>微信登录] │ │ 认证接口 /v1/auth │ │
end │ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • POST /login (登录) • POST /logout (登出) │ │
subgraph Members[会员接口 /v1/members] │ │ • POST /refresh (刷新Token) • POST /wechat-login (微信登录) │ │
M1[GET /<br/>会员列表] │ └─────────────────────────────────────────────────────────────────┘ │
M2[GET /{id}<br/>会员详情] │ │
M3[POST /<br/>创建会员] │ ┌─────────────────────────────────────────────────────────────────┐ │
M4[PUT /{id}<br/>更新会员] │ │ 会员接口 /v1/members │ │
M5[GET /{id}/cards<br/>会员卡列表] │ ├─────────────────────────────────────────────────────────────────┤ │
M6[GET /{id}/benefits<br/>权益列表] │ │ • GET / (会员列表) • GET /{id} (会员详情) │ │
M7[GET /{id}/bookings<br/>预约记录] │ │ • POST / (创建会员) • PUT /{id} (更新会员) │ │
end │ │ • GET /{id}/cards (会员卡列表) • GET /{id}/benefits (权益列表)│ │
│ │ • GET /{id}/bookings (预约记录) │ │
subgraph Courses[课程接口 /v1/courses] │ └─────────────────────────────────────────────────────────────────┘ │
C1[GET /<br/>课程列表] │ │
C2[GET /{id}<br/>课程详情] │ ┌─────────────────────────────────────────────────────────────────┐ │
C3[POST /<br/>创建课程] │ │ 课程接口 /v1/courses │ │
C4[PUT /{id}<br/>更新课程] │ ├─────────────────────────────────────────────────────────────────┤ │
C5[GET /{id}/slots<br/>可预约时段] │ │ • GET / (课程列表) • GET /{id} (课程详情) │ │
end │ │ • POST / (创建课程) • PUT /{id} (更新课程) │ │
│ │ • GET /{id}/slots (可预约时段) │ │
subgraph Bookings[预约接口 /v1/bookings] │ └─────────────────────────────────────────────────────────────────┘ │
B1[GET /<br/>预约列表] │ │
B2[GET /{id}<br/>预约详情] │ ┌─────────────────────────────────────────────────────────────────┐ │
B3[POST /<br/>创建预约] │ │ 预约接口 /v1/bookings │ │
B4[POST /{id}/cancel<br/>取消预约] │ ├─────────────────────────────────────────────────────────────────┤ │
B5[GET /my<br/>我的预约] │ │ • GET / (预约列表) • GET /{id} (预约详情) │ │
end │ │ • POST / (创建预约) • POST /{id}/cancel (取消预约) │ │
│ │ • GET /my (我的预约) │ │
subgraph Checkins[签到接口 /v1/checkins] │ └─────────────────────────────────────────────────────────────────┘ │
CH1[GET /<br/>签到列表] │ │
CH2[POST /scan<br/>扫码签到] │ ┌─────────────────────────────────────────────────────────────────┐ │
CH3[POST /manual<br/>手动签到] │ │ 签到接口 /v1/checkins │ │
CH4[GET /my<br/>我的签到] │ ├─────────────────────────────────────────────────────────────────┤ │
end │ │ • GET / (签到列表) • POST /scan (扫码签到) │ │
│ │ • POST /manual (手动签到) • GET /my (我的签到) │ │
subgraph Coaches[教练接口 /v1/coaches] │ └─────────────────────────────────────────────────────────────────┘ │
CO1[GET /<br/>教练列表] │ │
CO2[GET /{id}<br/>教练详情] │ ┌─────────────────────────────────────────────────────────────────┐ │
CO3[GET /{id}/schedule<br/>教练排班] │ │ 教练接口 /v1/coaches │ │
CO4[GET /{id}/slots<br/>可预约时段] │ ├─────────────────────────────────────────────────────────────────┤ │
end │ │ • GET / (教练列表) • GET /{id} (教练详情) │ │
│ │ • GET /{id}/schedule (教练排班) • GET /{id}/slots (可预约时段)│ │
subgraph Dashboard[数据看板 /v1/dashboard] │ └─────────────────────────────────────────────────────────────────┘ │
D1[GET /overview<br/>今日概览] │ │
D2[GET /trends<br/>趋势数据] │ ┌─────────────────────────────────────────────────────────────────┐ │
D3[GET /rankings<br/>排行数据] │ │ 数据看板 /v1/dashboard │ │
end │ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • GET /overview (今日概览) • GET /trends (趋势数据) │ │
│ │ • GET /rankings (排行数据) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
``` ```
### 5.3 接口版本管理 ### 5.3 接口版本管理
+84 -107
View File
@@ -39,28 +39,36 @@
### 1.2 模块边界 ### 1.2 模块边界
```mermaid ```
graph TB ┌─────────────────────────────────────────────────────────────────────────┐
subgraph Internal[会员模块内部] │ 会员模块边界 │
M1[会员管理] ├─────────────────────────────────────────────────────────────────────────┤
M2[会员卡管理] │ │
M3[权益管理] │ ┌─────────────────────────────────────────────────────────────────┐ │
M4[等级管理] │ │ 会员模块内部 │ │
end │ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 会员管理 • 会员卡管理 • 权益管理 • 等级管理 │ │
subgraph ExternalDeps[外部依赖] │ └─────────────────────────────────────────────────────────────────┘ │
D1[租户模块<br/>获取租户信息] │ │
D2[门店模块<br/>获取门店信息] │ ┌─────────────────────────────────────────────────────────────────┐ │
D3[认证模块<br/>用户登录认证] │ │ 外部依赖 │ │
D4[消息模块<br/>发送短信验证码] │ ├─────────────────────────────────────────────────────────────────┤ │
end │ │ • 租户模块 (获取租户信息) │ │
│ │ • 门店模块 (获取门店信息) │ │
subgraph Deps[被依赖] │ │ • 认证模块 (用户登录认证) │ │
U1[预约模块<br/>查询会员权益、扣减权益] │ │ • 消息模块 (发送短信验证码) │ │
U2[签到模块<br/>查询会员信息、扣减权益] │ └─────────────────────────────────────────────────────────────────┘ │
U3[财务模块<br/>查询会员消费记录] │ │
U4[数据模块<br/>会员数据分析] │ ┌─────────────────────────────────────────────────────────────────┐ │
end │ │ 被依赖 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 预约模块 (查询会员权益、扣减权益) │ │
│ │ • 签到模块 (查询会员信息、扣减权益) │ │
│ │ • 财务模块 (查询会员消费记录) │ │
│ │ • 数据模块 (会员数据分析) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
``` ```
--- ---
@@ -69,91 +77,60 @@ graph TB
### 2.1 实体关系图 ### 2.1 实体关系图
```mermaid ```
erDiagram ┌─────────────────────────────────────────────────────────────────────────┐
tenant ||--o{ store : has │ 实体关系图 │
tenant ||--o{ member : has ├─────────────────────────────────────────────────────────────────────────┤
store ||--o{ member : belongs │ │
│ ┌──────────────┐ │
member ||--o{ member_card : has │ │ tenant │ │
member ||--o{ member_benefit : has │ │ (租户表) │ │
│ └──────┬───────┘ │
member_card }o--|| card_type : type │ │ 1:N │
member_benefit }o--|| card_type : card │ ┌────┴────┐ │
│ ▼ ▼ │
card_type }o--|| level_rule : has │ ┌──────┐ ┌──────┐ │
│ │store │ │member│ │
tenant { │ │(门店)│ │(会员)│ │
bigint id PK │ └──┬───┘ └──┬───┘ │
varchar name │ │ 1:N │ 1:N │
varchar code │ │ │ │
smallint status │ │ └─────────────┐ │
} │ │ │ │
│ │ ▼ │
store { │ │ ┌──────────────────┐ │
bigint id PK │ │ │ member_card │ │
bigint tenant_id FK │ │ │ (会员卡) │ │
varchar name │ │ └────────┬─────────┘ │
varchar address │ │ │ N:1 │
smallint status │ │ ▼ │
} │ │ ┌──────────────────┐ │
│ │ │ card_type │ │
member { │ │ │ (卡类型) │ │
bigint id PK │ │ └────────┬─────────┘ │
bigint tenant_id FK │ │ │ 1:N │
bigint store_id FK │ │ ▼ │
varchar member_no │ │ ┌──────────────────┐ │
varchar name │ │ │ level_rule │ │
varchar phone │ │ │ (等级规则) │ │
smallint gender │ │ └──────────────────┘ │
smallint level │ │ │
int exp │ │ ┌──────────────────┐ │
smallint status │ └───────────────────────┤ member_benefit │ │
} │ │ (会员权益) │ │
│ └──────────────────┘ │
member_card { │ │
bigint id PK │ 关系说明: │
bigint member_id FK │ • tenant (1) ─── (N) store : 一个租户有多个门店 │
bigint card_type_id FK │ • tenant (1) ─── (N) member : 一个租户有多个会员 │
varchar card_no │ • store (1) ─── (N) member : 一个门店有多个会员 │
smallint status │ • member (1) ─── (N) member_card : 一个会员有多张卡 │
date start_date │ • member (1) ─── (N) member_benefit : 一个会员有多个权益 │
date end_date │ • member_card (N) ─── (1) card_type : 卡属于一种类型 │
} │ • member_benefit (N) ─── (1) card_type : 权益属于一种卡类型 │
│ • card_type (1) ─── (N) level_rule : 卡类型有多个等级规则 │
member_benefit { │ │
bigint id PK └─────────────────────────────────────────────────────────────────────────┘
bigint member_id FK
bigint card_id FK
smallint type
decimal value
decimal used_value
date expire_date
}
card_type {
bigint id PK
bigint tenant_id FK
varchar name
varchar code
smallint type
decimal price
int duration_days
int total_times
decimal stored_value
smallint level
decimal discount
}
level_rule {
bigint id PK
bigint tenant_id FK
smallint level
varchar name
int min_exp
int max_exp
decimal discount
}
``` ```
### 2.2 数据表设计 ### 2.2 数据表设计
+67 -73
View File
@@ -39,28 +39,36 @@
### 1.2 模块边界 ### 1.2 模块边界
```mermaid ```
graph TB ┌─────────────────────────────────────────────────────────────────────────┐
subgraph Internal[签到模块内部] │ 签到模块边界 │
C1[签到网关] ├─────────────────────────────────────────────────────────────────────────┤
C2[签到验证] │ │
C3[签到记录] │ ┌─────────────────────────────────────────────────────────────────┐ │
C4[签到统计] │ │ 签到模块内部 │ │
end │ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 签到网关 • 签到验证 • 签到记录 • 签到统计 │ │
subgraph ExternalDeps[外部依赖] │ └─────────────────────────────────────────────────────────────────┘ │
D1[会员模块<br/>查询会员信息、验证会员状态] │ │
D2[权益模块<br/>验证权益有效性、扣减权益] │ ┌─────────────────────────────────────────────────────────────────┐ │
D3[预约模块<br/>查询预约信息、验证签到资格] │ │ 外部依赖 │ │
D4[设备模块<br/>人脸识别设备、NFC读卡器] │ ├─────────────────────────────────────────────────────────────────┤ │
D5[消息模块<br/>发送签到通知] │ │ • 会员模块 (查询会员信息、验证会员状态) │ │
end │ │ • 权益模块 (验证权益有效性、扣减权益) │ │
│ │ • 预约模块 (查询预约信息、验证签到资格) │ │
subgraph Deps[被依赖] │ │ • 设备模块 (人脸识别设备、NFC读卡器) │ │
U1[财务模块<br/>签到消费记录] │ │ • 消息模块 (发送签到通知) │ │
U2[数据模块<br/>签到数据分析、会员活跃度统计] │ └─────────────────────────────────────────────────────────────────┘ │
U3[考勤模块<br/>教练考勤统计] │ │
end │ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 被依赖 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 财务模块 (签到消费记录) │ │
│ │ • 数据模块 (签到数据分析、会员活跃度统计) │ │
│ │ • 考勤模块 (教练考勤统计) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
``` ```
### 1.3 签到类型 ### 1.3 签到类型
@@ -78,57 +86,43 @@ graph TB
### 2.1 实体关系图 ### 2.1 实体关系图
```mermaid ```
erDiagram ┌─────────────────────────────────────────────────────────────────────────┐
member ||--o{ checkin_record : makes │ 实体关系图 │
booking_record ||--o{ checkin_record : for ├─────────────────────────────────────────────────────────────────────────┤
device ||--o{ checkin_record : used │ │
│ ┌──────────────┐ ┌──────────────────┐ ┌──────────────┐ │
member ||--o{ member_face : has │ │ member │ │ booking_record │ │ device │ │
│ │ (会员) │ │ (预约记录) │ │ (设备) │ │
member { │ └──────┬───────┘ └────────┬─────────┘ └──────┬───────┘ │
bigint id PK │ │ 1:N │ 1:N │ 1:N │
varchar name │ │ │ │ │
varchar phone │ └───────────────────┴─────────────────────┘ │
smallint status │ │ 1:N │
} │ ▼ │
│ ┌──────────────────┐ │
booking_record { │ │ checkin_record │ │
bigint id PK │ │ (签到记录) │ │
bigint member_id FK │ └──────────────────┘ │
bigint slot_id FK │ │
smallint status │ ┌──────────────┐ │
smallint checkin_status │ │ member │ │
} │ │ (会员) │ │
│ └──────┬───────┘ │
device { │ │ 1:N │
bigint id PK │ ▼ │
varchar name │ ┌──────────────────┐ │
smallint type │ │ member_face │ │
varchar location │ │ (会员人脸) │ │
smallint status │ └──────────────────┘ │
} │ │
│ 关系说明: │
checkin_record { │ • member (1) ─── (N) checkin_record : 一个会员有多个签到记录 │
bigint id PK │ • booking_record (1) ─── (N) checkin_record : 一个预约有多个签到记录 │
bigint tenant_id FK │ • device (1) ─── (N) checkin_record : 一个设备有多个签到记录 │
bigint store_id FK │ • member (1) ─── (N) member_face : 一个会员有多个人脸特征 │
bigint member_id FK │ │
bigint booking_id FK └─────────────────────────────────────────────────────────────────────────┘
bigint device_id FK
smallint type
smallint method
smallint status
timestamp checkin_at
date checkin_date
}
member_face {
bigint id PK
bigint member_id FK
bytea face_feature
smallint status
}
``` ```
### 2.2 数据表设计 ### 2.2 数据表设计
+61 -82
View File
@@ -39,27 +39,35 @@
### 1.2 模块边界 ### 1.2 模块边界
```mermaid ```
graph TB ┌─────────────────────────────────────────────────────────────────────────┐
subgraph Internal[预约模块内部] │ 预约模块边界 │
B1[课程管理] ├─────────────────────────────────────────────────────────────────────────┤
B2[时段管理] │ │
B3[预约管理] │ ┌─────────────────────────────────────────────────────────────────┐ │
B4[库存管理] │ │ 预约模块内部 │ │
end │ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 课程管理 • 时段管理 • 预约管理 • 库存管理 │ │
subgraph ExternalDeps[外部依赖] │ └─────────────────────────────────────────────────────────────────┘ │
D1[会员模块<br/>查询会员权益、扣减权益] │ │
D2[教练模块<br/>查询教练信息、排班] │ ┌─────────────────────────────────────────────────────────────────┐ │
D3[场地模块<br/>查询场地信息、可用性] │ │ 外部依赖 │ │
D4[消息模块<br/>发送预约通知] │ ├─────────────────────────────────────────────────────────────────┤ │
end │ │ • 会员模块 (查询会员权益、扣减权益) │ │
│ │ • 教练模块 (查询教练信息、排班) │ │
subgraph Deps[被依赖] │ │ • 场地模块 (查询场地信息、可用性) │ │
U1[签到模块<br/>查询预约信息、验证签到资格] │ │ • 消息模块 (发送预约通知) │ │
U2[财务模块<br/>查询预约消费记录] │ └─────────────────────────────────────────────────────────────────┘ │
U3[数据模块<br/>预约数据分析] │ │
end │ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 被依赖 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 签到模块 (查询预约信息、验证签到资格) │ │
│ │ • 财务模块 (查询预约消费记录) │ │
│ │ • 数据模块 (预约数据分析) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
``` ```
--- ---
@@ -68,67 +76,38 @@ graph TB
### 2.1 实体关系图 ### 2.1 实体关系图
```mermaid ```
erDiagram ┌─────────────────────────────────────────────────────────────────────────┐
coach ||--o{ booking_slot : coaches │ 实体关系图 │
course ||--o{ booking_slot : courses ├─────────────────────────────────────────────────────────────────────────┤
venue ||--o{ booking_slot : venues │ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
booking_slot ||--o{ booking_record : slots │ │ coach │ │ course │ │ venue │ │
│ │ (教练) │ │ (课程) │ │ (场地) │ │
coach { │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
bigint id PK │ │ 1:N │ 1:N │ 1:N │
varchar name │ │ │ │ │
varchar specialty │ └──────────────┴──────────────┘ │
smallint status │ │ 1:N │
} │ ▼ │
│ ┌──────────────────┐ │
course { │ │ booking_slot │ │
bigint id PK │ │ (预约时段) │ │
bigint tenant_id FK │ └────────┬─────────┘ │
varchar name │ │ 1:N │
smallint type │ ▼ │
varchar category │ ┌──────────────────┐ │
int duration │ │ booking_record │ │
int capacity │ │ (预约记录) │ │
smallint status │ └──────────────────┘ │
} │ │
│ 关系说明: │
venue { │ • coach (1) ─── (N) booking_slot : 一个教练有多个时段 │
bigint id PK │ • course (1) ─── (N) booking_slot : 一个课程有多个时段 │
bigint tenant_id FK │ • venue (1) ─── (N) booking_slot : 一个场地有多个时段 │
varchar name │ • booking_slot (1) ─── (N) booking_record : 一个时段有多个预约记录 │
smallint type │ │
int capacity └─────────────────────────────────────────────────────────────────────────┘
smallint status
}
booking_slot {
bigint id PK
bigint tenant_id FK
smallint resource_type
bigint resource_id FK
bigint coach_id FK
bigint venue_id FK
timestamp start_time
timestamp end_time
int capacity
int booked_count
smallint status
}
booking_record {
bigint id PK
bigint tenant_id FK
bigint member_id FK
bigint slot_id FK
bigint coach_id FK
smallint status
decimal price
smallint price_type
decimal price_value
smallint checkin_status
}
``` ```
### 2.2 数据表设计 ### 2.2 数据表设计