Files
railwaysystem/DEMO_RUNBOOK.md
T

154 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SYFJGYD学员管理系统(融合演示版)— Clean Demo Candidate 运行与演示说明书
## 一、系统概况
本工程为 **SYFJGYD学员管理系统** 的隔离融合演示候选版本(Clean Demo Candidate),集成了 **Java 21 + Spring Boot 4** 架构升级、培训管理业务(学员、班级、住宿全周期)与智能门锁 IoT 协同授权中枢。
### 核心演示原则
- **数据源隔离**:严格运行于独立研发 QA 数据库(`railwaysystem_fusion_qa_20261013`),采用最小权限应用账号连接,与共享试用库(`training`)及生产环境完全隔离。
- **仿真受控运行**:IoT 底层采用仿真受控模式,物理 MQTT 硬件与实体门锁处于安全隔离状态,防止误触发真实硬件动作。
- **真实完整业务闭环**:前端 UI、后端业务逻辑、Kingbase 事务状态流转均为 100% 真实执行。
---
## 二、系统访问与前置准备
### 1. 访问地址
- **前端 Web 控制台**:`http://127.0.0.1:8088`
- **默认演示账号**:`admin` / `admin123`
- **后端 API 服务**:`http://127.0.0.1:8096`(由前端通过 `/prod-api` 自动反向代理)
### 2. 演示前服务状态核验
在启动系统前,请确保研发数据库 SSH 隧道处于连通状态:
- **隧道端口**:`127.0.0.1:14321`
- **若隧道未连通**,请在终端执行:
```bash
ssh -N -L 127.0.0.1:14321:192.168.139.218:4321 -o ServerAliveInterval=15 wzbmatebook
```
- **安全凭据文件**:系统启动依赖受限目录下的环境变量配置(`~/.railwaysystem-qa.env`),密码由启动脚本安全注入,无需人工输入。
---
## 三、一键启停操作指南
系统提供了平滑、健壮的一键管理脚本,支持自动端口清理与就绪健康探测:
### 1. 启动系统
在工程根目录下执行:
```bash
./start_demo.sh
```
**启动脚本自动完成:**
1. 校验环境变量与凭据完整性;
2. 探测数据库 SSH 隧道连通性(未连通时给出明确操作指引并安全终止);
3. 自动释放 8096 与 8088 端口历史旧进程;
4. 启动 Spring Boot 4 后端,轮询 `/captchaImage` 验证就绪(约 4~6 秒);
5. 启动前端反向代理服务并验证 HTTP 200 就绪;
6. 打印就绪提示与访问入口。
### 2. 停止系统
在演示结束或需要重置时执行:
```bash
./stop_demo.sh
```
**停止脚本自动完成:**
1. 优雅停止前端反向代理进程(释放端口 8088);
2. 优雅停止后端 Spring Boot 进程(释放端口 8096);
3. 清理 Headless Chrome 测试残留进程;
4. 确认所有演示端口已完全释放。
---
## 四、建议的五分钟核心业务演示路线
建议按照培训学员入宿、门锁授权、调宿换锁、退宿撤权的标准业务生命周期进行演示:
```
[1. 管理员登录]
↓
[2. 住宿管理:查询预分配学员] ──> 点击【入住】办理 ──> 状态流转为【在住】
↓
[3. 智能门锁:授权管理] ──> 查看自动生成的人脸授权意图 (待下发/待回执)
↓
[4. 仿真回执确认] ──> 受控驱动网关与门锁回执 ──> 页面刷新为【已生效/下发成功】
↓
[5. 住宿管理:办理调房] ──> 选择新宿舍 (致远楼 102) 提交 ──> 触发新门锁建权与旧门锁撤权
↓
[6. 住宿管理:办理退宿] ──> 点击【退宿】确认 ──> 状态更新为【已退宿】,授权彻底清除
↓
[7. 履历与流水核查] ──> 查看【住宿履历】对话框 & 【命令记录】指令流水
```
### 步骤详解:
1. **登录系统**:
- 打开浏览器访问 `http://127.0.0.1:8088`,输入账号 `admin`,密码 `admin123`,点击登录,进入系统仪表盘首页。
2. **查询并办理入住**:
- 点击左侧菜单【培训管理】->【住宿安排】(或访问 `/train/accommodation`);
- 在学号输入框输入演示学员学号(例如 `S_DEMO_20261013`),点击【搜索】;
- 找到处于“预分配”状态的学员记录,点击操作列的【入住】按钮;
- 在弹出的确认对话框中点击【确定】;
- 页面提示“入住办理成功”,学员住宿状态实时刷新为绿色的【在住】标签。
3. **核查门锁授权意图**:
- 点击左侧菜单【门禁管理】->【授权管理】(或访问 `/iot/auth`);
- 看到系统已根据学员的人脸特征与所分配的宿舍房间(致远楼 101),自动建立门锁授权意图记录。
4. **演示仿真回执确认生效**:
- 在仿真环境下,系统调用受控 Mock 回执端点驱动状态;
- 在授权管理页面点击【搜索】刷新,授权同步状态变更为【已生效】(或【下发成功】),展示端到端联动效果。
5. **办理学员调房**:
- 返回【住宿安排】页面,点击学员右侧的【调房】按钮;
- 在弹出的【办理学员调房】对话框中,目标宿舍选择“致远楼 102”,输入床位号“2号床”,点击【确认调房】;
- 系统执行调房事务:原宿舍记录流转为“已退宿”,新宿舍记录建立并流转为“在住”;
- 后台自动向旧门锁下发撤权指令,向新门锁下发建权指令。
6. **办理退宿**:
- 在【住宿安排】页面中,点击学员所在行的【退宿】按钮,在确认框中点击【确定】;
- 提示“退宿办理成功”,住宿状态更新为红色的【已退宿】标签。
7. **查看历史履历与指令流水**:
- 点击该行操作列的【住宿履历】按钮,弹出【学员历史住宿记录】对话框,清晰展示从预分配、调房退宿到最终退宿的完整时间轴;
- 点击左侧菜单【门禁管理】->【命令记录】(或访问 `/iot/command`),查看全流程自动生成的授权下发(0011)与清除授权(0012)指令流水,证明全链路具备完整审计溯源能力。
---
## 五、真实业务流程 vs 仿真(Mock)环节说明
为了确保演示的真实性与合规性,系统严格区分业务逻辑与硬件模拟:
| 业务环节 | 实现方式 | 状态说明 |
| :--- | :--- | :--- |
| **管理员鉴权与 RBAC 权限** | 真实数据库与 Spring Security | 100% 真实执行 |
| **学员基本信息与班级档案** | 真实 Kingbase QA 数据库表 | 100% 真实执行 |
| **住宿全生命周期状态机** | 真实业务 Service 与事务 | 100% 真实执行(预分配/在住/退宿) |
| **住宿调房多阶段事务** | 真实业务 Service | 100% 真实执行(旧记退宿 + 新建在住) |
| **门锁授权意图关联生成** | 真实 IoT 业务桥接器 | 100% 真实执行(自动解析人脸与房间锁映射) |
| **指令流水与审计日志** | 真实 Kingbase `iot_command` 表 | 100% 真实执行,全链路持久化 |
| **前端交互与响应** | 真实 Vue SPA 页面与 Element UI | 100% 真实执行,无静态伪造 |
| **MQTT 指令双端回执** | Mock 仿真驱动(`iot.mqtt.mock=true`) | 仿真模拟网关与门锁硬件回执,隔绝物理设备 |
| **人脸识别特征提取** | 仿真服务 | 仿真特征向量映射,未连接物理人脸终端 |
| **实体门锁物理开锁/状态** | 物理隔离(未接入) | **BLOCKED / HARDWARE_PENDING** |
---
## 六、常见问题排查与快速恢复
### 1. 启动脚本提示 `[BLOCKED] 数据库 SSH 隧道未连接`
- **原因**:本地 14321 端口无法连接到 Kingbase 研发服务器。
- **排查方法**:
1. 检查 SSH 隧道进程:`ps aux | grep 14321`;
2. 重新建立隧道:`ssh -N -L 127.0.0.1:14321:192.168.139.218:4321 wzbmatebook`;
3. 验证端口连通:`nc -z 127.0.0.1 14321`。
### 2. 页面访问提示 502 Bad Gateway
- **原因**:后端 Spring Boot 正在启动中或由于数据库超时启动失败。
- **排查方法**:
1. 查看后端日志:`tail -n 50 backend.log`;
2. 检查是否有 Druid 数据源连接超时异常;
3. 确认后执行 `./stop_demo.sh && ./start_demo.sh` 重启。
### 3. 演示过程中需要重置测试数据
- **方法**:
可直接在工程根目录下执行演示数据预置脚本:
```bash
java -cp RuoYi-Vue-master/ruoyi-admin/target/test-classes:RuoYi-Vue-master/ruoyi-admin/target/ruoyi-admin.jar com.ruoyi.train.PrepareDemoData
```
该命令将自动重置学员 `S_DEMO_20261013` 为初始的“预分配”住宿状态,并清理门锁历史旧授权,无需重启系统即可开始下一轮完整演示。