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 业务范围
```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
subgraph Gateway[API Gateway<br/>统一网关]
B1[路由转发]
B2[认证鉴权]
B3[限流熔断]
B4[日志追踪]
end
subgraph BusinessLayer[业务层]
C1[会员服务<br/>Member Service]
C2[预约服务<br/>Booking Service]
C3[数据服务<br/>Data Service]
end
subgraph CommonLayer[公共服务层]
D1[认证服务]
D2[消息服务]
D3[文件服务]
D4[缓存服务]
end
subgraph InfraLayer[基础设施层]
E1[PostgreSQL]
E2[R2DBC]
E3[Caffeine]
E4[Redis可选]
end
subgraph ExternalLayer[外部服务]
F1[微信开放平台]
F2[短信服务]
F3[支付服务]
F4[OSS存储]
end
A1 --> Gateway
A2 --> Gateway
A3 --> Gateway
A4 --> Gateway
Gateway --> C1
Gateway --> C2
Gateway --> C3
C1 --> CommonLayer
C2 --> CommonLayer
C3 --> CommonLayer
CommonLayer --> InfraLayer
CommonLayer --> ExternalLayer
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 总体架构 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 客户端层 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 会员小程序 (uniapp+Vue3) │ │
│ │ • 教练端App (uniapp+Vue3) │ │
│ │ • 管理后台PC (Vue3+Vite) │ │
│ │ • 硬件设备 (人脸/NFC) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ API Gateway 统一网关 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 路由转发 • 认证鉴权 • 限流熔断 • 日志追踪 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 业务层 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 会员服务 (Member Service) │ │
│ │ • 预约服务 (Booking Service) │ │
│ │ • 数据服务 (Data Service) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 公共服务层 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 认证服务 • 消息服务 • 文件服务 • 缓存服务 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 基础设施层 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • PostgreSQL • R2DBC • Caffeine • Redis(可选) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 外部服务层 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 微信开放平台 • 短信服务 • 支付服务 • OSS存储 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
### 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
subgraph Gateway[网关层 Gateway]
B[Spring Cloud Gateway<br/>路由转发<br/>认证鉴权<br/>限流熔断<br/>日志追踪<br/>灰度发布]
end
subgraph Business[业务层 Business]
C[Spring Boot 3 + WebFlux + JDK 21]
C1[Controller<br/>API]
C2[Service<br/>业务逻辑]
C3[Repository<br/>数据访问]
C4[Model<br/>领域模型]
end
subgraph Data[数据层 Data]
D1[PostgreSQL<br/>R2DBC<br/>Flyway]
D2[Caffeine<br/>本地缓存<br/>热点数据]
D3[Redis可选<br/>分布式缓存<br/>分布式锁]
end
A1 --> B
A2 --> B
A3 --> B
B --> C
C --> C1
C1 --> C2
C2 --> C3
C3 --> C4
C4 --> D1
C4 --> D2
C4 --> D3
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 技术架构 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 表现层 Presentation │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 会员端 uniapp (Vue3 + TS + Pinia + uni-ui) │ │
│ │ • 教练端 uniapp (Vue3 + TS + Pinia + uni-ui) │ │
│ │ • 管理后台 Vue3 (Vue3 + TS + Pinia + Element Plus) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 网关层 Gateway │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ Spring Cloud Gateway (路由转发/认证鉴权/限流熔断/日志追踪/灰度发布) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 业务层 Business │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ Spring Boot 3 + WebFlux + JDK 21 │ │
│ │ • Controller (API) • Service (业务逻辑) │ │
│ │ • Repository (数据访问) • Model (领域模型) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 数据层 Data │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • PostgreSQL (R2DBC + Flyway) │ │
│ │ • Caffeine (本地缓存 + 热点数据) │ │
│ │ • Redis可选 (分布式缓存 + 分布式锁) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
### 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
```
└───────────────────┼───────────────────┘
│ │ │
┌──────────────────┼──────────────────┐
│ │ │
▼ ▼ ▼
────────────────┐ ┌────────────────┐ ┌────────────────
│ Application │ │ Application │ │ Application │
│ Server (Pod1) │ │ Server (Pod2) │ │ Server (PodN) │
───────────────┘ └───────────────┘ └
```
───────────────┘ │
│ │ │
└───────────────────┼───────────────────┘
┌───────────────────────────┼───────────────────────────┐
│ │ │
▼ ▼ ▼
──────────────┐ ┌──────────────┐ ┌──────────────
│ PostgreSQL │ │ Redis │ │ OSS │
│ (主从复制) │ │ (哨兵模式) │ │ (对象存储) │
└──────────────┘ └──────────────┘ └──────────────┘
│ │
┌─────────────────────────────────────────────────────────────────────────┐
部署架构
├─────────────────────────────────────────────────────────────────────────┤
┌─────────────────────────────────────────────────────────────────┐
│ 负载均衡器 (Nginx/ALB) │
─────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────┐ │
│ │ API Gateway 集群 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • API Gateway 实例1 • API Gateway 实例2 • API Gateway 实例N │ │
│ └─────────────────────────────────────────────────────────────────┘ │
┌─────────────────────────────────────────────────────────────────┐
│ 应用服务集群 │
├─────────────────────────────────────────────────────────────────┤
│ • 应用服务 实例1 • 应用服务 实例2 • 应用服务 实例N │
└─────────────────────────────────────────────────────────────────┘
┌───────────────┴───────────────┐
▼ ▼
┌─────────────────────────┐ ┌─────────────────────────┐
│ │ PostgreSQL 数据库层 │ │ Redis 缓存层 │ │
│ ├─────────────────────────┤ ├─────────────────────────┤ │
│ │ • 主库 │ │ • 主节点 │ │
│ │ • 从库1 (主从复制) │ │ • 从节点1 (主从复制) │ │
│ │ • 从库N (主从复制) │ │ • 从节点N (主从复制) │ │
│ └─────────────────────────┘ └─────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
---
@@ -325,59 +290,60 @@ graph TB
### 4.1 模块划分
````
---
## 四、模块设计
### 4.1 模块划分
```mermaid
graph TB
subgraph Parent[gym-manage-server 父工程]
subgraph Common[gym-common 公共模块]
C1[gym-common-core<br/>核心工具类、常量、枚举]
C2[gym-common-redis<br/>Redis配置可选]
C3[gym-common-security<br/>安全认证公共组件]
C4[gym-common-log<br/>日志公共组件]
end
subgraph API[gym-api API网关模块]
A1[controller<br/>HTTP接口]
A2[dto<br/>数据传输对象]
A3[vo<br/>视图对象]
A4[config<br/>API配置]
end
subgraph Service[gym-service 业务服务模块]
S1[gym-service-member<br/>会员服务]
S2[gym-service-booking<br/>预约服务]
S3[gym-service-checkin<br/>签到服务]
S4[gym-service-course<br/>课程服务]
S5[gym-service-coach<br/>教练服务]
S6[gym-service-finance<br/>财务服务]
S7[gym-service-data<br/>数据服务]
end
subgraph Domain[gym-domain 领域模型模块]
D1[model<br/>领域模型]
D2[event<br/>领域事件]
D3[service<br/>领域服务]
end
subgraph Infra[gym-infrastructure 基础设施模块]
I1[repository<br/>数据仓储]
I2[cache<br/>缓存配置]
I3[external<br/>外部服务集成]
I4[config<br/>基础配置]
end
subgraph Starter[gym-starter 启动模块]
ST[gym-admin<br/>管理后台启动器]
end
end
````
```
┌─────────────────────────────────────────────────────────────────────────┐
│ gym-manage-server 父工程 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ gym-common 公共模块 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • gym-common-core (核心工具类、常量、枚举) │ │
│ │ • gym-common-redis (Redis配置可选) │ │
│ │ • gym-common-security (安全认证公共组件) │ │
│ │ • gym-common-log (日志公共组件) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ gym-api API网关模块 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • controller (HTTP接口) • dto (数据传输对象) │ │
│ │ • vo (视图对象) • config (API配置) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ gym-service 业务服务模块 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • gym-service-member (会员服务) │ │
│ │ • gym-service-booking (预约服务) │ │
│ │ • gym-service-checkin (签到服务) │ │
│ │ • gym-service-course (课程服务) │ │
│ │ • gym-service-coach (教练服务) │ │
│ │ • gym-service-finance (财务服务) │ │
│ │ • gym-service-data (数据服务) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ gym-domain 领域模型模块 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • model (领域模型) • event (领域事件) • service (领域服务) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ gym-infrastructure 基础设施模块 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • repository (数据仓储) • cache (缓存配置) │ │
│ │ • external (外部服务集成) • config (基础配置) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ gym-starter 启动模块 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • gym-admin (管理后台启动器) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
### 4.2 模块职责
@@ -396,25 +362,54 @@ graph TB
### 4.3 模块交互
```mermaid
sequenceDiagram
participant Client as 客户端
participant API as API Layer
participant Service as Service Layer
participant Domain as Domain Layer
participant Repo as Repo Layer
participant Infra as Infrastructure
Client->>API: HTTP Request
API->>Service: 调用业务逻辑
Service->>Domain: 处理领域逻辑
Domain->>Repo: 访问数据
Repo->>Infra: 访问基础设施
Infra-->>Repo: 返回结果
Repo-->>Domain: 返回数据
Domain-->>Service: 返回领域对象
Service-->>API: 返回业务结果
API-->>Client: HTTP Response
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 模块交互流程 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ 客户端 (Client) │
│ │ │
│ │ 1. HTTP Request │
│ ▼ │
│ API Layer │
│ │ │
│ │ 2. 调用业务逻辑 │
│ ▼ │
│ Service Layer │
│ │ │
│ │ 3. 处理领域逻辑 │
│ ▼ │
│ Domain Layer │
│ │ │
│ │ 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 接口分组
```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/>微信登录]
end
subgraph Members[会员接口 /v1/members]
M1[GET /<br/>会员列表]
M2[GET /{id}<br/>会员详情]
M3[POST /<br/>创建会员]
M4[PUT /{id}<br/>更新会员]
M5[GET /{id}/cards<br/>会员卡列表]
M6[GET /{id}/benefits<br/>权益列表]
M7[GET /{id}/bookings<br/>预约记录]
end
subgraph Courses[课程接口 /v1/courses]
C1[GET /<br/>课程列表]
C2[GET /{id}<br/>课程详情]
C3[POST /<br/>创建课程]
C4[PUT /{id}<br/>更新课程]
C5[GET /{id}/slots<br/>可预约时段]
end
subgraph Bookings[预约接口 /v1/bookings]
B1[GET /<br/>预约列表]
B2[GET /{id}<br/>预约详情]
B3[POST /<br/>创建预约]
B4[POST /{id}/cancel<br/>取消预约]
B5[GET /my<br/>我的预约]
end
subgraph Checkins[签到接口 /v1/checkins]
CH1[GET /<br/>签到列表]
CH2[POST /scan<br/>扫码签到]
CH3[POST /manual<br/>手动签到]
CH4[GET /my<br/>我的签到]
end
subgraph Coaches[教练接口 /v1/coaches]
CO1[GET /<br/>教练列表]
CO2[GET /{id}<br/>教练详情]
CO3[GET /{id}/schedule<br/>教练排班]
CO4[GET /{id}/slots<br/>可预约时段]
end
subgraph Dashboard[数据看板 /v1/dashboard]
D1[GET /overview<br/>今日概览]
D2[GET /trends<br/>趋势数据]
D3[GET /rankings<br/>排行数据]
end
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 接口分组 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 认证接口 /v1/auth │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • POST /login (登录) • POST /logout (登出) │ │
│ │ • POST /refresh (刷新Token) • POST /wechat-login (微信登录) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 会员接口 /v1/members │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • GET / (会员列表) • GET /{id} (会员详情) │ │
│ │ • POST / (创建会员) • PUT /{id} (更新会员) │ │
│ │ • GET /{id}/cards (会员卡列表) • GET /{id}/benefits (权益列表)│ │
│ │ • GET /{id}/bookings (预约记录) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 课程接口 /v1/courses │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • GET / (课程列表) • GET /{id} (课程详情) │ │
│ │ • POST / (创建课程) • PUT /{id} (更新课程) │ │
│ │ • GET /{id}/slots (可预约时段) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 预约接口 /v1/bookings │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • GET / (预约列表) • GET /{id} (预约详情) │ │
│ │ • POST / (创建预约) • POST /{id}/cancel (取消预约) │ │
│ │ • GET /my (我的预约) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 签到接口 /v1/checkins │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • GET / (签到列表) • POST /scan (扫码签到) │ │
│ │ • POST /manual (手动签到) • GET /my (我的签到) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 教练接口 /v1/coaches │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • GET / (教练列表) • GET /{id} (教练详情) │ │
│ │ • GET /{id}/schedule (教练排班) • GET /{id}/slots (可预约时段)│ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 数据看板 /v1/dashboard │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • GET /overview (今日概览) • GET /trends (趋势数据) │ │
│ │ • GET /rankings (排行数据) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
### 5.3 接口版本管理
+84 -107
View File
@@ -39,28 +39,36 @@
### 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 实体关系图
```mermaid
erDiagram
tenant ||--o{ store : has
tenant ||--o{ member : has
store ||--o{ member : belongs
member ||--o{ member_card : has
member ||--o{ member_benefit : has
member_card }o--|| card_type : type
member_benefit }o--|| card_type : card
card_type }o--|| level_rule : has
tenant {
bigint id PK
varchar name
varchar code
smallint status
}
store {
bigint id PK
bigint tenant_id FK
varchar name
varchar address
smallint status
}
member {
bigint id PK
bigint tenant_id FK
bigint store_id FK
varchar member_no
varchar name
varchar phone
smallint gender
smallint level
int exp
smallint status
}
member_card {
bigint id PK
bigint member_id FK
bigint card_type_id FK
varchar card_no
smallint status
date start_date
date end_date
}
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
}
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 实体关系图 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ │
│ │ tenant │ │
│ │ (租户表) │ │
│ └──────┬───────┘ │
│ │ 1:N │
│ ┌────┴────┐ │
│ ▼ ▼ │
│ ┌──────┐ ┌──────┐ │
│ │store │ │member│ │
│ │(门店)│ │(会员)│ │
│ └──┬───┘ └──┬───┘ │
│ │ 1:N │ 1:N │
│ │ │ │
│ │ └─────────────┐ │
│ │ │ │
│ │ ▼ │
│ │ ┌──────────────────┐ │
│ │ │ member_card │ │
│ │ │ (会员卡) │ │
│ │ └────────┬─────────┘ │
│ │ │ N:1 │
│ │ ▼ │
│ │ ┌──────────────────┐ │
│ │ │ card_type │ │
│ │ │ (卡类型) │ │
│ │ └────────┬─────────┘ │
│ │ │ 1:N │
│ │ ▼ │
│ │ ┌──────────────────┐ │
│ │ │ level_rule │ │
│ │ │ (等级规则) │ │
│ │ └──────────────────┘ │
│ │ │
│ │ ┌──────────────────┐ │
│ └───────────────────────┤ member_benefit │ │
│ │ (会员权益) │ │
│ └──────────────────┘ │
│ │
│ 关系说明: │
│ • tenant (1) ─── (N) store : 一个租户有多个门店 │
│ • tenant (1) ─── (N) member : 一个租户有多个会员 │
│ • store (1) ─── (N) member : 一个门店有多个会员 │
│ • member (1) ─── (N) member_card : 一个会员有多张卡 │
│ • member (1) ─── (N) member_benefit : 一个会员有多个权益 │
│ • member_card (N) ─── (1) card_type : 卡属于一种类型 │
│ • member_benefit (N) ─── (1) card_type : 权益属于一种卡类型 │
│ • card_type (1) ─── (N) level_rule : 卡类型有多个等级规则 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
### 2.2 数据表设计
+67 -73
View File
@@ -39,28 +39,36 @@
### 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[被依赖]
U1[财务模块<br/>签到消费记录]
U2[数据模块<br/>签到数据分析、会员活跃度统计]
U3[考勤模块<br/>教练考勤统计]
end
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 签到模块边界 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 签到模块内部 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 签到网关 • 签到验证 • 签到记录 • 签到统计 │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 外部依赖 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 会员模块 (查询会员信息、验证会员状态) │ │
│ │ • 权益模块 (验证权益有效性、扣减权益) │ │
│ │ • 预约模块 (查询预约信息、验证签到资格) │ │
│ │ • 设备模块 (人脸识别设备、NFC读卡器) │ │
│ │ • 消息模块 (发送签到通知) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ 被依赖 │ │
│ ├─────────────────────────────────────────────────────────────────┤ │
│ │ • 财务模块 (签到消费记录) │ │
│ │ • 数据模块 (签到数据分析、会员活跃度统计) │ │
│ │ • 考勤模块 (教练考勤统计) │ │
│ └─────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
### 1.3 签到类型
@@ -78,57 +86,43 @@ graph TB
### 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 {
bigint id PK
varchar name
varchar phone
smallint status
}
booking_record {
bigint id PK
bigint member_id FK
bigint slot_id FK
smallint status
smallint checkin_status
}
device {
bigint id PK
varchar name
smallint type
varchar location
smallint status
}
checkin_record {
bigint id PK
bigint tenant_id FK
bigint store_id FK
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
}
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 实体关系图 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────────┐ ┌──────────────┐ │
│ │ member │ │ booking_record │ │ device │ │
│ │ (会员) │ │ (预约记录) │ │ (设备) │ │
│ └──────┬───────┘ └────────┬─────────┘ └──────┬───────┘ │
│ │ 1:N │ 1:N │ 1:N │
│ │ │ │ │
│ └───────────────────┴─────────────────────┘ │
│ │ 1:N │
│ ▼ │
│ ┌──────────────────┐ │
│ │ checkin_record │ │
│ │ (签到记录) │ │
│ └──────────────────┘ │
│ │
│ ┌──────────────┐ │
│ │ member │ │
│ │ (会员) │ │
│ └──────┬───────┘ │
│ │ 1:N │
│ ▼ │
│ ┌──────────────────┐ │
│ │ member_face │ │
│ │ (会员人脸) │ │
│ └──────────────────┘ │
│ │
│ 关系说明: │
│ • member (1) ─── (N) checkin_record : 一个会员有多个签到记录 │
│ • booking_record (1) ─── (N) checkin_record : 一个预约有多个签到记录 │
│ • device (1) ─── (N) checkin_record : 一个设备有多个签到记录 │
│ • member (1) ─── (N) member_face : 一个会员有多个人脸特征 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
### 2.2 数据表设计
+61 -82
View File
@@ -39,27 +39,35 @@
### 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 实体关系图
```mermaid
erDiagram
coach ||--o{ booking_slot : coaches
course ||--o{ booking_slot : courses
venue ||--o{ booking_slot : venues
booking_slot ||--o{ booking_record : slots
coach {
bigint id PK
varchar name
varchar specialty
smallint status
}
course {
bigint id PK
bigint tenant_id FK
varchar name
smallint type
varchar category
int duration
int capacity
smallint status
}
venue {
bigint id PK
bigint tenant_id FK
varchar name
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
}
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 实体关系图 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ coach │ │ course │ │ venue │ │
│ │ (教练) │ │ (课程) │ │ (场地) │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ 1:N │ 1:N │ 1:N │
│ │ │ │ │
│ └──────────────┴──────────────┘ │
│ │ 1:N │
│ ▼ │
│ ┌──────────────────┐ │
│ │ booking_slot │ │
│ │ (预约时段) │ │
│ └────────┬─────────┘ │
│ │ 1:N │
│ ▼ │
│ ┌──────────────────┐ │
│ │ booking_record │ │
│ │ (预约记录) │ │
│ └──────────────────┘ │
│ │
│ 关系说明: │
│ • coach (1) ─── (N) booking_slot : 一个教练有多个时段 │
│ • course (1) ─── (N) booking_slot : 一个课程有多个时段 │
│ • venue (1) ─── (N) booking_slot : 一个场地有多个时段 │
│ • booking_slot (1) ─── (N) booking_record : 一个时段有多个预约记录 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
### 2.2 数据表设计