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:
+344
-344
@@ -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
@@ -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
@@ -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
@@ -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 数据表设计
|
||||
|
||||
Reference in New Issue
Block a user