# RailwaySystem Final Candidate 综合测试验收报告
> **文档定位**:全方位记录当前交付候选版本在单元、契约、场景集成、物理数据库及清理门禁等方面的最终测试验收结果。
> **基线版本**:Final Candidate `5a49b2e2988bf23ca2a70568264c05b24dfda1b6` (`origin/feat/cicd-pipeline`)
> **报告生成时间**:2026-09-15
> **总体验收结论**:✅ **CORE BACKEND & INTEGRATION ACCEPTANCE PASS**
---
## 1. 测试执行概况
本轮测试在完全模拟生产的 KingbaseES 国产高安全数据库与真实 Spring Boot 容器环境下执行,涵盖了应用服务单元测试、API 契约测试、跨模块业务场景端到端集成测试及物理落库断言。
```mermaid
graph LR
T1["后端单元/契约测试
154/154 PASS"] --> T2["业务场景集成
6/6 PASS"]
T2 --> T3["HTTP API探测
110次 0次500 PASS"]
T3 --> T4["Kingbase物理断言
11/11 PASS"]
T4 --> T5["环境清理门禁
0残留 PASS"]
style T1 fill:#1a3a2a,stroke:#52c41a,stroke-width:2px;
style T2 fill:#1a3a2a,stroke:#52c41a,stroke-width:2px;
style T3 fill:#1a3a2a,stroke:#52c41a,stroke-width:2px;
style T4 fill:#1a3a2a,stroke:#52c41a,stroke-width:2px;
style T5 fill:#1a3a2a,stroke:#52c41a,stroke-width:2px;
```
| 测试大项 | 执行用例数 | 通过数 | 失败数 | 结论 |
| :--- | :---: | :---: | :---: | :---: |
| **1. 后端应用服务与契约测试 (Maven)** | 154 | 154 | 0 | ✅ **PASS** |
| **2. 核心业务主链场景套件 (Scenarios)** | 6 | 6 | 0 | ✅ **PASS** |
| **3. 真实网络 HTTP API 探测调用** | 110 | 110 | 0 | ✅ **PASS** |
| **4. 服务端 500 异常捕获率** | - | - | 0 | ✅ **PASS (0 异常)** |
| **5. Kingbase 物理表持久化断言** | 11 | 11 | 0 | ✅ **PASS** |
| **6. 数据物理清理与零残留门禁 (Cleanup)** | - | - | - | ✅ **PASS (Residue: 0)** |
---
## 2. 核心业务场景集成测试明细 (6/6 PASS)
| 编号 | 测试场景名称 | 涉及核心接口与操作 | 物理数据库断言与验证点 | 实测结果 |
| :---: | :--- | :--- | :--- | :---: |
| **SC-01** | **完整正向业务闭环全链 (Happy Path Full Business Chain)** | `POST /train/teacher`
`POST /train/course`
`POST /train/classroom`
`POST /train/plans`
`POST /train/plans/{id}/courses`
`POST /train/plans/{id}/enrollments`
`POST /train/plans/{id}/lessons`
`GET /train/plans/{id}/timetable`
`POST /train/plans/{id}/complete` | 基础资源就绪 → 拟定32位UUID计划 → 课程与师资绑定 → 学员报名入班(初始0) → 排课课次落库 → 课表聚合查询 → 计划结训联动在读学员状态流转至4且记录complete_time。 | **PASS** |
| **SC-02** | **学员报名异常规则与状态区分 (Enrollment Validation)** | `POST /train/plans/{id}/enrollments`
`PUT /train/enrollments/{id}/status` | 1. 同一计划重复报名触发唯一索引拦截 (`40030`);
2. 招生容量上限超限拦截 (`40031`);
3. 不存在学员与停用学员 (`status=0`) 拒绝入班;
4. 独立维护学员主档状态与班级参训状态。 | **PASS** |
| **SC-03** | **排课预检 Warning 与 Hard Block 硬阻断 (Scheduling)** | `POST /train/lessons/check-conflict`
`POST /train/plans/{id}/lessons` | 1. 教师冲突硬检,教室/场地/班级重叠 Warning 预警且不硬阻断保存;
2. 严格禁止 force/override 参数;
3. 非法起止时间倒挂拦截 (`40010`);
4. 场地 XOR 互斥硬阻断;
5. 已结束计划锁定排课 (`40012`)。 | **PASS** |
| **SC-04** | **电子班牌绑定与课表降级映射 (Electronic Board)** | `POST /train/board`
`GET /train/classroom/{id}`
`GET /train/plans/{id}/timetable`
`DELETE /train/board/{id}` | 1. 自动生成32位UUID主键,默认在线状态 `board_status=0`;
2. 教室详情返回绑定班牌数组 (0/1/N);
3. 课表 `boardSn` 降级规则:0块为null,1块为对应SN,>1块降级为null;
4. 逻辑删除置 `del_flag='2'`。 | **PASS** |
| **SC-05** | **结训生命周期与退训学员保护 (Plan Completion Lifecycle)** | `POST /train/plans/{id}/complete`
`GET /train/plans/{id}`
`GET /train/enrollments/{id}` | 1. 计划状态更新为 `2:已结束`;
2. 本班在读活动学员 (状态0/1) 自动联动更新为 `4:已完成` 且写入 `complete_time`;
3. 历史退训学员 (状态3) 保持不变,杜绝误覆盖。 | **PASS** |
| **SC-06** | **现场报到与课堂考勤完整闭环 (Report & Attendance Lifecycle)** | `POST /train/enrollments/{id}/report`
`POST /train/attendance/sign-in`
`POST /train/attendance/sign-out`
`PUT /train/attendance/{checkinId}` | 1. 报到确认返回 `reportId`,学员状态强事务流转为 `1:已报到` 且写入 `join_time`;
2. 重复报到拦截 (`40050`);
3. 签到签退幂等性防覆盖(保持初次时间);
4. 人工考勤调整自动留痕 `manual_flag=1`。 | **PASS** |
---
## 3. 数据库断言与环境清理验证
在场景集成套件执行期间与执行完毕后,执行了针对底层 Kingbase 物理库的直接核查:
1. **落库断言 (11/11 PASS)**:
- 验证了教师主键持久化、学员密文与哈希完整性、开班计划状态标记、参训档案唯一性、课次场地互斥、报到流水完整性、结训联动更新记录数等 11 项关键 SQL 校验,准确率 100%。
2. **物理清理门禁 (PASS, Residue: 0)**:
- 测试套件在验证完毕后,触发受控清理机制,物理删除全部测试生成的临时学员、课次与开班计划;
- 最终执行扫描确认:**测试产生的数据残留为 0,生产数据库保持完全纯净**。
---
## 4. 技术参考链接 (Technical References)
* 核心测试矩阵事实源:[docs/_meta/core-business-test-matrix.md](../_meta/core-business-test-matrix.md)
* 业务流程与状态机:[docs/handbook/02-business-process.md](../handbook/02-business-process.md)
* 浏览器端到端验收报告:[browser-acceptance-report.md](browser-acceptance-report.md)
* 发版说明:[release-notes.md](release-notes.md)