docs: 全面更新 SAAS 架构文档,反映服务层化 P0/P1 完成与 stats 双轨技术债

This commit is contained in:
TermiNexus committed 2026-08-07 21:14:09 +08:00
1 parent d92c163801
commit 222fae6fbe
4 files changed
+20 -17

No files matched your search

+3 -3
View File
@@ -91,13 +91,13 @@ d:\SMANAGE\
│ ├── payment/ # 支付
│ ├── commission/ # 分佣
│ └── stats/ # 统计
├── gvsdsdk/ # 分布式 SDK(薄封装 + 协议契约)
│ ├── auth/ # 认证(IsAdmin/IsSuperAdmin/IsTenantAdmin)
├── gvsdsdk/ # 分布式 SDK / 通用 SAAS 服务层
│ ├── auth/ # 认证与权限(RoleManager/AuthManager/AdminUserManager 等 17 个 Manager)
│ ├── msync/ # 服务注册/发现
│ ├── commission/ # 分佣引擎
│ ├── payment/ # 支付网关
│ ├── order/ # 订单
│ ├── minecraft/ # MC 业务
│ ├── stats/ # 统计引擎
│ └── management/ # 管理工具
├── ATestCServer/ # 子服务器示例(通过 SDK 接入主服务)
├── TempLate/ # 前端模板与静态资源
+10 -8
View File
@@ -55,12 +55,12 @@
- 7 库分库路由:`Users / GerpCore / Plans / Tasks / T4PC / Document / Minecraft`
- 6 个自定义中间件:IP 过滤、域名注入、当前角色注入、服务认证、攻击检测、错误日志
### 3.2 `gvsdsdk` — 分布式 SDK
### 3.2 `gvsdsdk` — 分布式 SDK / 通用 SAAS 服务层
- **薄封装层**:1:1 包装 `gvsds.apps.msync` 原生层,无运行时开销
- **惰性加载(PEP 562)**:90+ 符号按需 import
- **服务层**:从薄封装演进为**通用 SAAS 服务层**——`RoleManager / AuthManager / AdminUserManager / TenantManager / CompanyManager / DepartmentManager / MessageManager / MenuManager / WorkOrderManager / InventoryManager / AssetManager / AuditManager / OrderManager / StatsManager / UserService` 等,gvsds 视图层通过它们访问数据(裸 ORM 已基本消除)
- **惰性加载(PEP 562)**:130+ 符号按需 import
- **双类导出**:自有实现(无 Django 依赖,子服务器可用)+ 服务端转发(依赖 Django ORM)
- **三大引擎**:`CommissionEngine`(分佣)、`PaymentManager`(支付)、`TransactionManager`(分布式事务)
- **引擎**:`CommissionEngine`(分佣)、`PaymentManager`(支付)、`OrderManager`(订单状态机)、`StatsManager`(统计)、`TransactionManager`(分布式事务)
### 3.3 主从通信机制
@@ -207,18 +207,19 @@ HTTP Request
- ✅ MSYNC 分布式通信(注册/发现/OGM/Saga 事务)
- ✅ 文件分片上传 + 资产管理
- ✅ 操作审计日志 + 攻击检测
- ✅ **服务层化迁移(P0/P1 全部完成)**:role_scope 数据权限底座、form_service 角色/用户链路、菜单/工单/消息/物品/背包/文档/文件资产等视图层裸 ORM 全部委托 gvsdsdk(详见项目记忆「服务层化迁移进度」)
### 6.2 已知技术债
| 优先级 | 问题 | 影响 |
|---|---|---|
| 高 | Role/Permission 模型在 gvsds 与 gvsdsdk 双份定义 | 字段漂移风险 |
| 高 | Role/Permission 模型在 gvsds 与 gvsdsdk 双份定义 | 字段漂移风险(服务层化已缓解视图层裸访问,模型层残留) |
| 高 | 部分表(User/Dept/Workgroup/Shop)无 TenantUUID | 跨租户查询需 JOIN,删除租户困难 |
| 中 | ABAC 实现本质是 RBAC(字符串集合) | 名实不符,扩展受限 |
| 中 | 数据权限硬编码 `if table_name == 'X'` | 违反开闭原则 |
| 中 | 缺乏软删除机制 | 误删不可恢复 |
| 中 | stats 双轨:`StatEngine`(gvsds/apps/stats/manager.py,22 方法)与 gvsdsdk `StatsManager` 并存 | 需统一收敛 |
| 低 | UUID 主键无序导致索引膨胀 | 大数据量写入性能下降 |
| 低 | 根 README.md 仍为 Flask 时代文档 | 新人易误读 |
---
@@ -226,10 +227,11 @@ HTTP Request
### 7.1 短期(1-3 个月)
1. **统一 Role/Permission 模型**:让 gerp 直接复用 gvsdsdk 的模型定义,消除双份漂移
1. ~~统一 Role/Permission 模型~~:✅ 服务层化已让视图层统一经 gvsdsdk Manager 访问(模型层双份仍待收敛)
2. **补全 TenantUUID 字段**:所有租户语义表直接打 `TenantUUID`,简化跨租户查询与租户删除
3. **数据权限策略化**:用策略模式替代 `if table_name == 'X'`,每个模型注册自己的 `ScopeFilter`
4. **更新根 README.md**:反映当前 Django 架构
4. ~~更新根 README.md~~:✅ 已反映当前 Django 架构
5. **统一 stats 双轨实现**:`StatEngine` 方法收敛到 gvsdsdk `StatsManager`
### 7.2 中期(3-6 个月)
+2 -1
View File
@@ -380,4 +380,5 @@ engine.Decrement(
|------|------|
| `settings.py` | 新增 `'gvsds.apps.stats'` 到 `INSTALLED_APPS` |
| `db_router.py` | 新增 `'stats': 'default'` 到 `app_db_map` |
| `urls.py` | 新增 `path('api/stats/', include('gvsds.apps.stats.urls'))` |
| `urls.py` | 新增 `path('api/stats/', include('gvsds.apps.stats.urls'))` |
| `gvsds/apps/stats/engine.py` | **已删除(2026-08-07)**:8 个模块级函数并入 gvsdsdk `StatsManager`;`StatEngine`(gvsds/apps/stats/manager.py)与 Celery 任务底层统一走 `gvsdsdk.stats.manager.StatsManager`,签名 1:1 不变 |
+5 -5
View File
@@ -5,7 +5,7 @@
> **混合实现策略**:
> - **自有实现**(无 Django 依赖,子服务器开箱即用):`msync.auth`(HMAC 签名 + `ServiceTokenEncoder`)、`msync.client`(REST 客户端)、`msync.local_tx`(本地事务)、`fluent`(FluentQuery ORM)、`models`(SAAS 数据模型)、`form_service`(通用 CRUD 引擎)
> - **转发自主服务器**(依赖 Django ORM,仅主服务器可加载):`msync.auth` 中的 `AuthenticateService` / `RefreshServiceToken` / `ValidateAccessToken` / `IssueServiceToken`、`msync.registry`、`msync.ogm`、`msync.transaction`
> - **完整业务模块**:`auth`(用户认证/权限)、`commission`(分佣引擎)、`payment`(支付网关)、`order`(订单)、`minecraft`(MC 插件)
> - **完整业务模块**:`auth`(用户认证/权限)、`commission`(分佣引擎)、`payment`(支付网关)、`order`(订单)、`stats`(统计引擎)
>
> **版本兼容**:主从两端必须使用同一 SDK 版本(当前 `1.0.0`)。
@@ -17,13 +17,13 @@
**子服务器可独立使用**(不依赖 GVSDS 主服务器代码):
- **用户认证与权限**(`gvsdsdk.auth`):密码哈希、AES 加密、文件/字节摘要、CurrentRoleMiddleware、RBAC/ABAC 权限、RoleManager / ShopManager / PositionManager
- **用户认证与权限**(`gvsdsdk.auth`):密码哈希、AES 加密、文件/字节摘要、CurrentRoleMiddleware、RBAC/ABAC 权限、RoleManager / ShopManager / PositionManager / AuthManager / AdminUserManager / TenantManager / CompanyManager / DepartmentManager / MessageManager / MenuManager / WorkOrderManager / InventoryManager / AssetManager / AuditManager / UserService
- **MSYNC 认证**(`gvsdsdk.msync.auth`):HMAC-SHA256 签名 / 验签、`ServiceTokenEncoder` 为自有实现;`AuthenticateService` / `IssueServiceToken` / `ValidateAccessToken` / `RefreshServiceToken` 转发自主服务器
- **分布式通信**(`gvsdsdk.msync`):签名 / 客户端 / 本地事务为自有实现;服务注册 / OGM / Saga 事务转发自主服务器
- **数据模型**(`gvsdsdk.models`):User / Role / Permission / UserRole / Position 等 SAAS 核心表(managed=False)
- **数据模型**(`gvsdsdk.models`):User / Role / Permission / UserRole / Position / Menu / WorkOrder / AuditLog / ItemReference / Backpack / FileAsset 等 SAAS 核心表(managed=False)
- **ORM 查询层**(`gvsdsdk.fluent`):FluentQuery 链式查询
- **CRUD 引擎**(`gvsdsdk.form_service`):FormService 通用增改删查 API
- **业务模块**:`commission`(分佣)/ `payment`(支付)/ `order`(订单)/ `minecraft`(MC 插件)
- **业务模块**:`commission`(分佣)/ `payment`(支付)/ `order`(订单)/ `stats`(统计)
**主服务器**(`gvsds`):通过 `gvsdsdk` 与子服务器共享同一份 API 契约,同时直接 import `gvsds.apps.msync` 内部模块。
@@ -100,7 +100,7 @@ gvsdsdk/
├── commission/ # 分佣引擎
├── payment/ # 支付网关
├── order/ # 订单模板与订单
├── minecraft/ # MC 插件扩展
├── stats/ # 统计引擎
├── management/ # Django management 命令
└── migrations/ # Django 数据迁移(gvsdsdk 自身表的)
```