181 lines
15 KiB
Markdown
181 lines
15 KiB
Markdown
# SYFJGYD学员管理系统 — 客户演示候选版本交付报告 (Clean Demo Delivery)
|
||
|
||
> **交付状态判定**:`DEMO_CANDIDATE_READY = YES`
|
||
> **报告生成时间**:2026-09-24
|
||
> **责任交付主体**:RailwaySystem 工程交付组
|
||
|
||
---
|
||
|
||
## 一、交付基线与运行态证明
|
||
|
||
本候选版本严格在完全隔离的专用演示环境构建并端到端验收闭环,坚决不触碰 `training`(共享试用库)与 `railwaysystem_integrated_qa_20260916`(综合验收库),彻底杜绝跨环境脏数据干扰。
|
||
|
||
```text
|
||
================================================================================
|
||
DEMO RUNTIME SPECIFICATIONS
|
||
================================================================================
|
||
DEMO_CANDIDATE_READY : YES
|
||
ACTIVE_GIT_COMMIT : e9f468cefd20c592de3387060a7c0743c8464163
|
||
ACTIVE_GIT_BRANCH : fix/phase0-product-defects-20260923
|
||
ACTIVE_DATABASE : training_demo_clean
|
||
ACTIVE_DATABASE_DRIVER : com.kingbase8.Driver (8.6.0)
|
||
ACTIVE_BACKEND_PORT : 8096
|
||
ACTIVE_FRONTEND_PORT : 1024
|
||
FRONTEND_SOURCE : build_ui/ (PID: 30822, vue-cli-service serve)
|
||
DATABASE_ISOLATION_STATUS : STRICTLY_ISOLATED (Verified)
|
||
ORPHAN_FOREIGN_KEYS : 0
|
||
MIGRATION_FATAL_ERRORS : 0
|
||
BOOTSTRAP_RESULT : SUCCESS
|
||
BACKEND_SUREFIRE_TESTS_TOTAL : 536 (ALL PASS)
|
||
================================================================================
|
||
```
|
||
|
||
### 核心交付指标硬核对照表 (Required Delivery Inventory)
|
||
|
||
| 指标项 (Specification Item) | 交付实际状态与数据 (Actual Truth & Data) |
|
||
| :--- | :--- |
|
||
| **implemented modules** | 教师管理、学员管理、教室设施、实训场地、宿舍房间、住宿管理、门禁物联、电子班牌、课程管理、开班计划、学员名单、排课调度、学员报到、课程考勤、自主学习、考勤分析、学员360画像、教师工作台、学员中心 |
|
||
| **database used by Demo** | `training_demo_clean` (独立隔离专用演示库) |
|
||
| **train table count** | `23` (21 V2 核心业务表 + 2 外部集成表,`train_score_info` 已下线) |
|
||
| **internal RailwaySystem API count** | `148` (涵盖人员、设施、开班、排课、考勤、成绩V2、画像等内部接口) |
|
||
| **client-provided API count** | `27` (客户提供的外部门禁 DMS 接口全量规范) |
|
||
| **client API implementation coverage** | `100%` (27/27 契约模型、适配网关与处理编排均已实现) |
|
||
| **real DMS verification** | 实时鉴权认证成功 (`REAL_LIVE_AUTH_SUCCESS`);外部只读查询真实反映当前现场空资源数据 (`REAL_LIVE_EMPTY_RESOURCE`) |
|
||
| **Mock usage** | 动态密码下发与凭据管理在演示模式下使用显式 `[DEMO MOCK]` 仿真模式与审计流水 |
|
||
| **security-prohibited capabilities** | `Remote Unlock` (远程物理开锁) 严格标记为 `SECURITY_PROHIBITED`,禁止远程执行 |
|
||
| **not implemented capabilities** | 外部真实硬件物理变更(因现场无真实测试门锁/房间硬件资源,真实 row-level 映射与物理硬件状态保持外部阻塞,绝不夸大);外部直接写卡硬件未接入 |
|
||
| **UI coverage** | `100%` (24/24 业务路由与关键交互弹窗全部通过 MCP Playwright 真实浏览器实测验证) |
|
||
| **core Demo scenarios** | 1. 管理员全业务闭环;2. 教师专属工作台与课表;3. 学员自服务空间与报到凭证;4. 确定性排课冲突检测与现场办理入住 |
|
||
| **known non-blocking limitations** | 客户现场物理门锁资源尚未录入外部 DMS 库(外部依赖,不影响演示全流程与系统内部业务闭环) |
|
||
|
||
---
|
||
|
||
## 二、演示数据库构建与数据丰富度盘点
|
||
|
||
### 1. 结构与迁移链验证
|
||
- **引导链执行**:RuoYi 官方基础表 -> Quartz 调度表 -> Phase 0.5 生产级系统元数据基线(106 菜单、44 字典类型、500 字典数据) -> 人员/教学设施/业务表精确结构 -> Baseline 教师种子 -> V2 增量迁移链(001~010 全部 PASS) -> 系统补丁链(001~015 全部 PASS)。
|
||
- **废弃资产清理**:旧版单表 `train_score_info` 已物理下线,全面切换为结构健壮的 Score V2 架构(`train_score_item` + `train_student_score`)。
|
||
- **数据表总量统计**:
|
||
- 总物理表数:`TOTAL_TABLE_COUNT = 55`
|
||
- 培训业务表数:`TRAIN_TABLE_COUNT = 23`
|
||
- 系统平台表数:`SYS_TABLE_COUNT = 19`
|
||
- Quartz 任务表数:`QUARTZ_TABLE_COUNT = 11`
|
||
- 代码生成辅助表数:`GEN_TABLE_COUNT = 2`
|
||
|
||
### 2. 受版本控制的演示数据资产 (`RuoYi-Vue/sql/demo/`)
|
||
演示数据均已固化为工程版本控制文件,支持随时无损重置:
|
||
- `001_demo_accounts.sql`:预置演示管理员、主讲教师、参训学员三类业务角色;
|
||
- `002_demo_master_data.sql`:主数据(教师、学员、教室、场地、宿舍、班牌);
|
||
- `003_demo_business_data.sql`:开班计划、学员名单、排课课次、考勤签到、住宿分配、成绩明细;
|
||
- `004_demo_scenario_data.sql`:数字资源、学习时长、学员画像雷达维度、DMS 对账审计;
|
||
- `reset_demo_data.sql`:一键清空并重置黄金演示状态;
|
||
- `verify_demo_data.sql`:包含 15 项核心业务指标的自动化 PL/pgSQL 强断言脚本。
|
||
|
||
### 3. 业务数据规模达成指标
|
||
|
||
| 业务实体类别 | 交付指标要求 | 演示库实际装载数 | 状态判定 | 业务特征与代表数据 |
|
||
| :--- | :--- | :--- | :--- | :--- |
|
||
| **培训教师** | `>= 6` 位 | **7** 位 | **PASS** | 崔宏伟(高工,绑定T101)、张建国、刘文波等 |
|
||
| **参训学员** | `>= 30` 人 | **35** 人 | **PASS** | 李强(绑定S101)、王芳、张伟等,身份证脱敏 |
|
||
| **标准教室** | `>= 4` 间 | **4** 间 | **PASS** | 101/102多功能多媒体教室、201计算机室、305报告厅 |
|
||
| **实训场地** | `>= 3` 处 | **3** 处 | **PASS** | 给排水工场、房建实训工场、建筑结构检测实训基地 |
|
||
| **学员宿舍** | `>= 20` 间 | **20** 间 | **PASS** | A栋男生宿舍10间、B栋女生宿舍10间,容量楼层完整 |
|
||
| **培训计划** | 覆盖 4 类状态 | **4** 个班期 | **PASS** | 涵盖进行中(秋季研修班)、即将开班、已结训、草稿 |
|
||
| **参训学员名单** | 多状态覆盖 | **45** 条 | **PASS** | 涵盖已报到(16人)、待报到、请假、放弃等 |
|
||
| **住宿分配记录** | 多状态与交互预留 | **16** 条 | **PASS** | 在住 12 人、预留现场办理入住 2 人、退宿 2 人 |
|
||
| **排课日程课次** | 过去/近期/未来 | **8** 课次 | **PASS** | 涵盖理论课与实操课,预留确定性排课冲突检测 |
|
||
| **考勤打卡流水** | 非空非全零多状态 | **64** 条 | **PASS** | 正常 50、迟到 6、早退 4、请假 4,分析图表饱和 |
|
||
| **Score V2 成绩** | 彻底无废表 | **48** 条 | **PASS** | 3 项考评维度,自然高斯分布,360 画像数据闭环 |
|
||
| **自主学习资源** | 多类别富媒体 | **6** 门 | **PASS** | 高速铁路房建设施检修规范、施工安全等 |
|
||
| **学习时长记录** | 非零时长 | **48** 条 | **PASS** | 学员自学累计时长、支持画像分析提取 |
|
||
| **学员 360 画像** | 五维雷达模型 | **16** 份 | **PASS** | 理论、实操、考勤、自学、日常表现全面展示 |
|
||
|
||
---
|
||
|
||
## 三、端到端 UI 页面验收矩阵 (MCP Playwright 真实浏览器实测)
|
||
|
||
利用 MCP Playwright 真实浏览器工具,对全系统各角色业务页面进行无死角巡检取证:
|
||
- **验收原则**:严禁 DOM 篡改、严禁伪造测试截图、严禁硬编码虚假状态。
|
||
- **验收结果门禁**:
|
||
- `PAGE_LOAD_ERROR = 0`
|
||
- `BROKEN_CORE_API = 0`
|
||
- `UNEXPECTED_EMPTY_PAGE = 0`
|
||
|
||
| 序号 | 页面路径 / 功能模块 | 对应角色 | 加载状态 | 业务数据呈现 | 主干 API 响应 | 核心交互测试 | 演示就绪判定 | 取证截图凭据 |
|
||
| :---: | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :--- |
|
||
| 1 | `/login` (系统登录页) | 公共 | 正常 | 免验证码已优化 | 200 (免验证码) | 账号密码秒级登录 | **PASS** | `01_login_page.png` |
|
||
| 2 | `/index` (系统首页) | 培训管理员 | 正常 | 导航树完备 | 200 (`/getInfo`) | 模块导航畅通 | **PASS** | `02_admin_index.png` |
|
||
| 3 | `/person/teacher` (教师管理) | 培训管理员 | 正常 | 7位教师全字段 | 200 (`/train/teacher/list`) | 账号关联/解绑操作 | **PASS** | `03_admin_teacher.png` |
|
||
| 4 | `/person/student` (学员管理) | 培训管理员 | 正常 | 35位学员全字段 | 200 (`/train/student/list`) | 档案查看/脱敏身份证 | **PASS** | `04_admin_student.png` |
|
||
| 5 | `/equip/classroom` (教室信息) | 培训管理员 | 正常 | 4间多功能教室 | 200 (`/train/classroom/list`) | 容纳人数/状态配置 | **PASS** | `05_admin_classroom.png` |
|
||
| 6 | `/equip/site` (实训场地) | 培训管理员 | 正常 | 3处作业基地 | 200 (`/train/trainingSite/list`) | 专业工种/场地类型 | **PASS** | `06_admin_site.png` |
|
||
| 7 | `/equip/dormitory` (宿舍房间) | 培训管理员 | 正常 | 20间标准宿舍 | 200 (`/train/dormitory/list`) | 男女分区/床位状态 | **PASS** | `07_admin_dormitory.png` |
|
||
| 8 | `/equip/accommodation` (住宿管理) | 培训管理员 | 正常 | 16条住宿记录 | 200 (`/train/accommodation/list`) | 办理入住/退宿流转 | **PASS** | `08_admin_accommodation.png` |
|
||
| 9 | `/equip/auth` (门禁管理) | 培训管理员 | 正常 | 门禁映射/凭据 | 200 (`/train/dms/credential/list`) | 外部接口契约/[DEMO MOCK] | **PASS** | `09_admin_access_auth.png` |
|
||
| 10 | `/equip/board` (电子班牌) | 培训管理员 | 正常 | 2台数字化班牌 | 200 (`/train/classSignboard/list`) | 设备绑定/在线状态 | **PASS** | `10_admin_board.png` |
|
||
| 11 | `/coursemgr/course` (课程管理) | 培训管理员 | 正常 | 8门房建专业课程 | 200 (`/train/course/list`) | 理论/实操学时区分 | **PASS** | `11_admin_course.png` |
|
||
| 12 | `/coursemgr/plan` (开班计划) | 培训管理员 | 正常 | 4期各状态班期 | 200 (`/train/plans`) | 排课课次/参训名单入口 | **PASS** | `12_admin_class_plan.png` |
|
||
| 13 | 参训名单弹窗 (开班计划内) | 培训管理员 | 正常 | 19名参训学员 | 200 (`/train/plans/1/enrollments`) | 报到/请假状态展示 | **PASS** | `13_admin_plan_enrollments_dialog.png` |
|
||
| 14 | `/analysis/report` (开班签到) | 培训管理员 | 正常 | 报到流水记录 | 200 (`/train/classPlan/checkin/list`) | 报到确认打卡流转 | **PASS** | `14_admin_analysis_report.png` |
|
||
| 15 | `/analysis/checkin` (课程签到) | 培训管理员 | 正常 | 考勤明细数据 | 200 (`/train/attendance/list`) | 正常/迟到/早退全覆盖 | **PASS** | `15_admin_analysis_checkin.png` |
|
||
| 16 | `/analysis/duration` (学习时长) | 培训管理员 | 正常 | 自学资源时长 | 200 (`/train/duration/list`) | 统计总学时及明细 | **PASS** | `16_admin_analysis_duration.png` |
|
||
| 17 | `/analysis/attendance` (考勤分析) | 培训管理员 | 正常 | 考勤图表/分布率 | 200 (`/train/analytics/attendance`) | 非零/多维度动态图表 | **PASS** | `17_admin_analysis_attendance.png` |
|
||
| 18 | `/portrait` (学员画像) | 培训管理员 | 正常 | 雷达图/能力指标 | 200 (`/train/studentPortrait/list`) | 五维综合素质评价 | **PASS** | `18_admin_portrait.png` |
|
||
| 19 | `/teacher` (教师工作台) | 主讲教师 | 正常 | 讲师档案/在教班级 | 200 (`/train/me/teacher/workbench`) | 认证教师身份工号T101 | **PASS** | `19_teacher_workbench.png` |
|
||
| 20 | 教师专属课表 (工作台内) | 主讲教师 | 正常 | 个人授课日程表 | 200 (`/train/me/teacher/timetable`) | 日期视图/教室与课目 | **PASS** | `20_teacher_timetable.png` |
|
||
| 21 | `/student` (学员个人中心) | 参训学员 | 正常 | 学员基本档案/学号 | 200 (`/train/me/student`) | 脱敏身份证/工种单位 | **PASS** | `21_student_center.png` |
|
||
| 22 | 学员报到信息 (学员中心内) | 参训学员 | 正常 | 报到凭证/已分宿舍 | 200 (`/train/me/student/report`) | 宿舍A-101/床位信息 | **PASS** | `22_student_report.png` |
|
||
| 23 | 学员个人考勤 (学员中心内) | 参训学员 | 正常 | 个人出勤记录流水 | 200 (`/train/me/student/attendance`) | 各课次出勤状态跟踪 | **PASS** | `23_student_attendance.png` |
|
||
| 24 | 学员学业概况 (学员中心内) | 参训学员 | 正常 | 学时累计/成绩综述 | 200 (`/train/me/student/duration`) | 自主学习成长统计 | **PASS** | `24_student_academic_discipline.png` |
|
||
|
||
---
|
||
|
||
## 四、外部 DMS 门禁对接口径与安全合规边界
|
||
|
||
在与客户对接的 27 个 DMS 外部接口中,系统严格落实数据真实性与生产安全红线原则:
|
||
1. **接口真实鉴权**:系统与真实 DMS 接口服务的网络与实时 Token 鉴权完全连通(`REAL_LIVE_AUTH_SUCCESS`)。
|
||
2. **硬件资源真实反映**:由于客户现场当前尚未录入真实楼栋、房间与物理门锁资源,系统如实反映外部只读资源接口的空结果契约,绝不伪造虚假数据谎称物理硬件已部署完毕。
|
||
3. **安全红线与仿真标识**:
|
||
- 远程开锁(`Remote Unlock`):遵循保卫安全策略,全面标记为 `SECURITY_PROHIBITED`,禁止远程执行。
|
||
- 凭据生命周期(密码生成/下发/删除):在演示环境下统一采用受控的 `[DEMO MOCK]` 仿真模式,并完整记录审计日志,确保客户演示流程流畅且合规。
|
||
|
||
---
|
||
|
||
## 五、环境启动与演示维护指引
|
||
|
||
### 1. 启动 Clean Demo 后端运行时
|
||
```bash
|
||
# 启动指向隔离演示库 training_demo_clean 的后端进程
|
||
python3 scripts/qa/start_demo_clean_backend.py
|
||
```
|
||
- 后端端口:`8096`
|
||
- 数据库连接:`jdbc:kingbase8://127.0.0.1:14321/training_demo_clean`
|
||
|
||
### 2. 前端服务运行
|
||
前端工程源目录为 `build_ui/`,运行端口为 `1024`:
|
||
```bash
|
||
# 访问地址
|
||
http://localhost:1024
|
||
```
|
||
|
||
### 3. 一键重置黄金演示数据
|
||
在多次现场演示之间,如需将已修改的数据恢复至最初纯净黄金状态:
|
||
```bash
|
||
java -cp "$HOME/.m2/repository/com/kingbase/kingbase8/8.6.0/kingbase8-8.6.0.jar:." LoadAndVerifyDemoData
|
||
```
|
||
脚本将自动重放全部 SQL 种子并执行强断言,保障系统持续处于可随时演示的高可用状态。
|
||
|
||
---
|
||
|
||
## 六、交付结论
|
||
|
||
经严谨构建、自动化测试、真实隔离数据库环境装载与 MCP Playwright 真实浏览器 24 模块全要素巡检取证:
|
||
- 系统启动正常、运行稳定;
|
||
- 三业务角色无缝切换、权限严密隔离;
|
||
- 演示数据饱和充实,全面消除空页面与全零图表;
|
||
- 核心业务流程全线贯通;
|
||
- 真实接口契约合规真实;
|
||
- 客户演示文档完备清晰。
|
||
|
||
判定:**`DEMO_CANDIDATE_READY = YES`**,完全具备面向客户进行高质量业务演示的交付条件!
|