Files
railwaysystem/docs/api-v2/00_readme.md
T

186 lines
11 KiB
Markdown
Raw Normal View History

# RailwaySystem Phase 2:API Contract / DTO-VO / Service Boundary Design
> **阶段状态:** Phase 2 契约设计冻结稿 (Review Round 1 修订版)
> **业务最高基线:** [一期 PRD V1.0](../requirements/一期PRD-V1.0.md)
> **数据持久化基线:** [`RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0.md`](../archive/database-history/RailwaySystem%20数据库%20V2%20字段设计与%20Kingbase%20DDL%20规范%20V1.0.md) (21张表)
> **代码生成器基线:** `generator-v2-ready-20260914` (只读验证通过)
> **审查基线:** `docs/api-v2/12_contract_review_round1.md` (Review Round 1 判定通过: A)
> **设计原则:** 业务工作台驱动 / 业务流程闭环驱动,坚决抵制 21 张表单表 CRUD 堆砌。
---
## 1. 阶段目标与定位
本阶段处于数据库 V2 冻结与正式业务编码之间,目标为:
> **在不编写业务代码的前提下,把 PRD V1.0、Database V2 和业务流程正式转换成 API 契约、DTO/VO、Service 聚合边界和模块责任。**
本系统定位为**在职人员智慧培训业务系统**,其核心价值是支撑铁路培训基地开展“学员参训全生命周期”的培训管理,而不是 21 张表的后台增删改查。所有接口均紧密围绕**业务工作台**、**业务动作(Command)**与**业务查询(Resource)**展开。
---
## 2. 领域核心标识映射
数据库 V2 确立的三大业务领域主键在 API 与 DTO/VO 中全面沿用,禁止退化为旧式的多字段复合弱标识:
```text
1. enrollment_id (参训档案标识)
= 某个学员参加某个培训计划的唯一主线上下文。
考勤、报到、住宿、成绩、学习记录、画像全部挂接此 ID。
2. plan_course_id (计划课程标识)
= 某个公共课程被引入某个具体培训计划后的本期课程实例。
课次排课、成绩项目可选绑定、学习内容挂接此 ID。
3. lesson_id (课次教学活动标识)
= 本期某门课程在特定时间、特定场地、由特定教师开展的具体教学活动。
电子班牌联动、课次签到/签退考勤明细直接绑定此 ID。
```
---
## 3. 业务闭环与模块分布
系统一期紧扣 PRD V1.0 冻结的业务主流程,划分为四大业务模块:
```mermaid
flowchart LR
subgraph ModuleA["Module A: 人员与基础资源"]
A1[教师/学员主档]
A2[课程库/教学资源]
A3[教室/场地/班牌/宿舍房态]
end
subgraph ModuleB["Module B: 开班计划与排课 (核心业务)"]
B1[创建/编辑培训计划]
B2[配置本期课程]
B3[参训人员名单/导入]
B4[课次编排与冲突检测]
B5[学员报到确认]
B6[计划综合工作台]
end
subgraph ModuleC["Module C: 住宿/门禁/考勤"]
C1[批量住宿预分配/调整]
C2[门禁授权下发/重试]
C3[班牌考勤签到/签退]
C4[考勤人工修正/补录]
end
subgraph ModuleD["Module D: 成绩/学习/统计/画像"]
D1[成绩项目权重配置]
D2[成绩录入/导入/台账]
D3[外部学习记录接入]
D4[计划统计/成绩下钻]
D5[学员综合画像]
end
ModuleA --> ModuleB
ModuleB --> ModuleC
ModuleB --> ModuleD
ModuleC --> ModuleD
```
---
## 4. 文档目录导航 (docs/api-v2/)
本设计规范包含以下 13 篇核心文档,相互支撑,构成完整的开发契约:
| 序号 | 文档名称 | 核心内容 |
|:---|:---|:---|
| 00 | [`00_readme.md`](00_readme.md) | 阶段总纲、架构全景、领域标识映射、最小合约视图与文档索引 |
| 01 | [`01_api_design_principles.md`](01_api_design_principles.md) | API 架构原则、Resource vs Command、分页规范、返回包装与确定性/优先级定义 |
| 02 | [`02_module_a_base_resource_api.md`](02_module_a_base_resource_api.md) | Module A 基础主数据 API 契约(教师、学员、课程、资源、教室、场地、班牌、宿舍) |
| 03 | [`03_module_b_plan_enrollment_schedule_api.md`](03_module_b_plan_enrollment_schedule_api.md) | Module B 核心业务 API 契约(计划、工作台、本期课程、参训名单、排课冲突预检、课表、报到) |
| 04 | [`04_module_c_accommodation_attendance_api.md`](04_module_c_accommodation_attendance_api.md) | Module C 过程执行 API 契约(宿舍预分配、调整、门禁同步、班牌签到/签退、考勤修正) |
| 05 | [`05_module_d_score_learning_statistics_api.md`](05_module_d_score_learning_statistics_api.md) | Module D 业务成效 API 契约(成绩配置、打分台账、学习记录接入、统计下钻、学员画像) |
| 06 | [`06_dto_vo_catalog.md`](06_dto_vo_catalog.md) | DTO / VO 领域模型资产全集(明确字段、类型、校验规则与用例映射) |
| 07 | [`07_service_boundary.md`](07_service_boundary.md) | 业务编排 Application Service 与基础 CRUD Service 的职责与协作边界 |
| 08 | [`08_transaction_and_invariants.md`](08_transaction_and_invariants.md) | 事务控制边界、并发锁策略与 5 大跨表业务不变量 + 1 项报到生命周期策略落地规范 |
| 09 | [`09_external_adapter_contract.md`](09_external_adapter_contract.md) | 外部适配器契约(班牌/人脸考勤、智能门禁、VR/3D学习接入,Mock与轻量异步机制) |
| 10 | [`10_permission_and_error_codes.md`](10_permission_and_error_codes.md) | RuoYi RBAC 权限字符定义与全业务错误码模型规范 |
| 11 | [`11_open_questions.md`](11_open_questions.md) | PRD V-01 ~ V-14 现场验证问题映射、API 影响与隔离应对策略 |
| 12 | [`12_contract_review_round1.md`](12_contract_review_round1.md) | Contract Review Round 1 审查报告(越界修正、P0/P1/P2裁定、结论A) |
---
## 5. 一期规模与核心指标统计 (Review Round 1)
- **一期 API 总数:** 89 个 (以正文真实定义的 HTTP Method + Path 物理 Endpoint 为准)
- **P0 优先级 (核心闭环必须实现):** 53 个
- **P1 优先级 (辅助支撑能力):** 34 个
- **P2 优先级 (依赖现场确认/延后):** 2 个
- **模块分布统计:**
- **Module A (人员与基础资源):** 38 个 (P0: 20, P1: 18, P2: 0)
- **Module B (开班计划与排课):** 24 个 (P0: 17, P1: 6, P2: 1)
- **Module C (住宿/门禁/考勤):** 13 个 (P0: 9, P1: 4, P2: 0)
- **Module D (成绩/学习/统计/画像):** 14 个 (P0: 7, P1: 6, P2: 1)
- **外部 Adapter 接口数量:** 3 个 (`FaceAttendanceAdapter`, `DoorAccessAdapter`, `ExternalLearningAdapter`)
- **核心业务 Command API 数量:** 24 个 (包含 P0 核心 Command API 20 个 [19 个核心业务流程 Command + 1 个 P0 计划管理更新: `PUT /train/plans/{planId}`], P1 辅助 Command 4 个)
- **核心聚合 VO 数量:** 8 个
- **DTO / VO 定义总数:** 46 个 (P0 核心 DTO/VO: 26 个)
- **业务 Application Service:** 11 个 (包含 10 个 P0 Application Service + 1 个 P1 PortraitAppService)
- **标准事务控制边界:** 8 个
- **跨表业务强制不变量 (Cross-table Invariants):** 5 项
- **业务生命周期控制策略 (Lifecycle Policy):** 1 项 (Report Deadline)
---
## 6. Phase 1 Minimal Contract (P0 核心开发基线)
为确保后续 Issue 拆分与开发聚焦于最小可用的完整培训业务闭环,特设立 **Phase 1 Minimal Contract** 视图。后续开发阶段将首先按此基线开展编码与单元测试:
### 6.1 P0 API 规模概览 (共 53 个)
- **Module A (20个):** 教师列表/详情/增/改;学员列表/详情/录入;课程列表/详情/新增;教室列表/详情/新增;场地列表/详情/新增;宿舍列表/详情/新增/选项。
- **Module B (17个):** 计划列表/增/查/改/完成/工作台;本期课程列表/增;参训名单列表/单增/批量导入/详情;新增课次/修改课次/冲突预检/完整课表;报到确认。
- **Module C (9个):** 批量预分配宿舍/单人调房/走读设置/住宿列表;门禁同步重试;签到/签退/人工修正/课次考勤名单。
- **Module D (7个):** 成绩项目列表/权重配置;录入成绩;成绩台账大表/学员成绩单;学习记录接收;计划统计概览。
### 6.2 P0 核心 Command API 清单 (共 20 个:19 个核心业务流程 Command + 1 个 P0 计划管理更新)
```text
1. POST /train/plans (创建培训计划)
2. PUT /train/plans/{planId} (P0计划管理更新:编辑培训计划)
3. POST /train/plans/{planId}/complete (结束培训计划)
4. POST /train/plans/{planId}/courses (配置本期课程)
5. POST /train/plans/{planId}/enrollments (添加参训人员)
6. POST /train/plans/{planId}/enrollments/batch (Excel批量导入参训人员)
7. POST /train/plans/{planId}/lessons (新增课次)
8. PUT /train/lessons/{lessonId} (修改课次)
9. POST /train/lessons/check-conflict (课次冲突预检)
10. POST /train/enrollments/{enrollmentId}/report (学员报到确认)
11. POST /train/plans/{planId}/accommodations/preallocate (批量住宿预分配)
12. PUT /train/enrollments/{enrollmentId}/accommodation (单人调房)
13. PUT /train/enrollments/{enrollmentId}/accommodation/day-student (设置走读)
14. POST /train/accommodations/{id}/auth/sync (门禁授权手动同步)
15. POST /train/attendance/sign-in (课次签到)
16. POST /train/attendance/sign-out (课次签退)
17. PUT /train/attendance/{checkinId} (人工修正考勤)
18. POST /train/plans/{planId}/score-items (成绩项目与权重配置)
19. POST /train/scores/entry (录入学员成绩)
20. POST /train/study-records/receive (外部学习记录接入)
```
### 6.3 P0 核心聚合 VO 清单
```text
1. PlanWorkbenchVO (培训计划综合工作台 VO)
2. PlanTimetableVO (计划完整课程表 VO)
3. EnrollmentDetailVO (学员参训全景档案 VO)
4. LessonConflictVO (排课冲突预检结果 VO)
5. PlanScoreMatrixVO (全班成绩台账大表 VO,只包含加权综合得分,不硬编码及格线)
6. PlanStatisticsVO (计划综合统计概览 VO)
```
### 6.4 P0 Application Service 清单 (10 个 P0 业务编排 Service)
`PlanAppService`, `EnrollmentAppService`, `SchedulingAppService`, `AccommodationAppService`, `ReportAppService`, `AttendanceAppService`, `ScoreAppService`, `LearningAppService`, `StatisticsAppService`, `ExternalIntegrationAppService`。
---
## 7. 版本说明 (Version History)
### V1.0.2
1. 补录40008 CLASSROOM_NAME_DUPLICATED
2. 补录40009 SITE_NAME_DUPLICATED
3. 冻结ClassroomDetailVO.boards为0..N班牌摘要列表
4. 新增ClassroomBoardSummaryVO定义
5. Endpoint Method/Path/Priority/Permission/count均不变