-
业务 API (emu-business)
PID: -
-
管理 API (emu-admin)
PID: -
-
健康检查 (crontab)
检查间隔:2 分钟
API 服务控制
API 监控配置
| 业务 API 服务: | emu-business.service |
| 健康检查: | healthcheck.sh (crontab 每 2 分钟) |
| 自动重启: | systemd Restart=always (RestartSec=10) |
| 日志查看: | journalctl -u emu-business -f |
| 开机自启: | ✅ 已启用 (systemd) |
API 请求日志查询
最近请求日志
| 时间 |
IP 地址 |
方法 |
端点 |
状态码 |
响应时间 (ms) |
级别 |
清除缓存
选择要清除的缓存范围:
缓存策略说明
后端: SimpleCache(内存缓存)
默认超时: 5 分钟
最大条目数: 500 条
淘汰策略: 达到上限时自动淘汰最旧条目,过期条目在下次访问时懒惰删除
交路进度管理 (emu_trip_progress)
| 动车组编号 | 通过码 | 局 | 段 | 所 |
标准组 | 车次 | 更新时间 | 操作 |
| 点击查询按钮加载数据 |
车站大屏数据 (station_bigscreen)
| 车站 | 展示车次 | 本站车次 | 始发站 | 终到站 |
到达时刻 | 开车时刻 | 状态 | 晚点(分) | 合并类型 |
站台 | 检票口 | 候车区 | 出站口 | 通道 |
接续车次 | 全局车次号 | 更新时间 |
| 点击查询按钮加载数据 |
车次详细数据
说明:查看外部服务器上报的车次详细数据,支持搜索和分页。
| train_no |
车次号 |
始发站 |
终到站 |
日期 |
车型 |
客运段 |
站点数 |
更新时间 |
操作 |
| 加载中... |
列车时刻数据
说明:查看从12306获取的列车时刻数据,支持搜索和分页。
| train_no |
车次号 |
完整车次 |
始发站 |
终到站 |
发时 |
到时 |
里程(km) |
隔日 |
类型 |
查询日期 |
操作 |
| 加载中... |
车次停站计价里程
说明:数据来自 12306 逐站查询的累计计价里程(distance = 自本次车次始发站起算),相邻两站之差即区间计价里程。表按 (train_no, station_telecode) 主键原地覆盖,无历史快照:「查询日期」是最后一次刷到该停站的日期,调图改停的站最长残留 30 天(下方灰标)。停站数偏少属正常——采集范围随每晚 02:30 的车站扫描逐日增长。「速度」「站台」为逐站取值:始发站那一行的速度接口回 0,已按空处理。
| 车次号 |
train_no |
始发站 |
终到站 |
已采集停站 |
累计里程区间(km) |
全程历时 |
最后刷新 |
操作 |
| 点击搜索按钮加载数据 |
逐站里程阶梯
| 站序 |
车站 |
电报码 |
到达 |
开出 |
停留(分) |
速度(km/h) |
站台 |
累计里程(km) |
区间里程(km) |
最后刷新 |
| 加载中... |
季度数据管理
说明:查看季度调整数据,支持按车次、季度、日期搜索。
| 列车编号 |
车次号 |
季度 |
查询日期 |
站点数 |
更新时间 |
操作 |
| 加载中... |
V93 修正数据查看
说明:查看 V93 修正交路数据,支持搜索和分页。
| ID |
原交路 ID |
原始序列 |
车次数 |
周期 |
修正类型 |
服务类型 |
置信度 |
查询日期 |
操作 |
| 修正序列 |
铁路局 |
客运段 |
担当段 |
动车所 |
| 加载中... |
清理交路数据
说明:清理指定天数前的旧交路数据(emu_trip 表),可用于释放数据库空间。
建议:先导出 CSV 备份再清理,以防数据丢失。
清理日志文件
说明:清理指定天数前的旧日志文件(.log 文件),可用于释放磁盘空间。
天前
手动修改配属
通过三级下拉框手动修改动车组配属信息。修改所时会自动执行四步操作:更新 former_bureau、更新 source_info、更新 station、清理重复内容。
当前配属信息
动车组编号:
型号:
当前局:
当前段:
当前所:
来源信息:
修改配属
即将执行的操作预览:
- 更新 former_bureau:从 source_info 提取历史配属信息
- 更新 source_info:生成新的来源信息()
- 更新 station:将配属所修改为
- 清理重复内容:清除 former_bureau 中与 station 重复的内容
最近 20 条交路数据(来自 emu_trip 表)
| 车次 |
始发站 |
终到站 |
发车时间 |
到达时间 |
局代码 |
客运段 |
配属段 |
当时局 |
当时段 |
当时所 |
| 加载中... |
LLT 交路数据管理
历史版本保留,支持查询比对
| ID |
版本 |
车型 |
日期范围 |
原始交路 |
| 点击查询按钮加载数据 |
| 序号 |
线路代码 |
线路名称 |
车站序号 |
车站名 |
电报码 |
里程 (km) |
| 点击查询按钮加载数据 |
| 序号 |
车次名 |
终到站 |
线路代码 |
线路名称 |
途经站 |
操作 |
| 点击查询按钮加载数据 |
| 序号 |
前缀 |
最小数字 |
最大数字 |
关键词数 |
操作 |
| 点击刷新按钮加载配置 |
说明:前缀 + 数字范围生成如 C1~C99 的关键词;最小/最大数字留空则只生成前缀本身(如 L);无前缀的纯数字规则前缀留空并填写数字范围。
路网图模型总览 (rail schema)
节点 = rail.endpoint(线路接入某站某端口);边 = rail.section(区间,权=gap_km)∪ rail.cross_permission(站内通行,权=0)。旧 railway schema 已于 2026-10-18 下线(SERVER_OVERVIEW §342),rail 图模型为唯一真源。
线路声明全长对账 (v_line_length_check)
数据质量提示 (v_data_quality)
区间边质检 (rail.section) GET /rail/sections/list | POST/PUT/DELETE /rail/sections[/by-name]
补边 / 删边会先预演再确认;改权值保存即写。只有相邻两站才允许手插边,非相邻区间应由改站序 +「重建派生层」生成;人工权值与里程差不符时下一次重建会覆盖回里程差。
| section_id | 线路 | 前站(序) | 后站(序) | gap_km | 声明 km | 一致 | 备注 | 操作 |
| 点击查询按钮加载数据 |
线路声明全长逐条质检 (rail.v_line_length_check) GET /rail/quality/line-length
| line_id | 线路 | 声明全长km | Σ区间km | 差值km | 状态 |
| 点击查询按钮加载数据 |
业务侧图缓存版本戳 GET /rail/cache/version
加载中……
每次 rail 写提交后 bump() 递增此戳;emu-business 的两个 sync worker 各自每 2s 节流懒校验,落后即重建进程内图单例并清 _rail_sp_cache / _rail_special_sib_memo。Redis 不可用时 fail-open,退回 worker 自然回收(max_requests=1000)。
线路管理 (rail.line)
| 线路名称 | 代码 | 起点站 | 终点站 | 声明里程 | 计算里程 | 站点数 | 区间数 | 端点数 | 接算站 | 操作 |
| 点击查询按钮加载数据 |
线名别名 (rail.line_name_alias) GET /rail/aliases/list | POST/PUT/DELETE /rail/aliases[/<id>]
别名 CRUD 后端 default=False ⇒ 弹窗内保存即写;同名别名已存在=更新,改挂他线需 force,别名不得撞真实线名。
| alias_id | 别名 | 所属线路 | 已确认 | 备注 | 更新时间 | 操作 |
| 点击查询按钮加载数据 |
车站管理 (rail.station)
| 车站名称 | 电报码 | TMIS | 路局 | 行政区 | 类型 | 接算站 | 线路数 | 端点数 | 许可数 | 操作 |
| 点击查询按钮加载数据 |
节点端点 (rail.endpoint) GET /rail/endpoints/list(派生层,只读;由重建派生层生成)
端口是线路接入车站的方向口,端点=(车站, 端口, 线路)三元组,全部由站序 + 里程派生;零引用的 START-B / END-A 口属建线既有语义,不是脏数据。
| endpoint_id | 站名 | 端口 | 线路 | 站序 | 角色 | 里程km | 来源 | 备注 |
| 点击查询按钮加载数据 |
站序出现登记 (rail.logical_station) GET /rail/line-stations/list(只读;移序 / 删站 / 插站请到该线的拓扑弹窗内做)
逻辑站 = 「某线在某站的这一次停靠」,是站序 / 里程 / 区间边的载体;同名站可在一条线上出现多次(occurrence)。此表用来跨线查一个站被哪些线以什么里程挂过。
| ls_id | 线路 | 站序 | 出现号 | 站名 | 里程km | 角色 | 接算线路 | 操作 |
| 点击查询按钮加载数据 |
站内通行许可 (rail.cross_permission)
跨线连通必须由本表显式枚举,不得由端口字母反推。导入默认产生大量 trans_type=UNKNOWN 的候选,需在此核定直通 / 折角。修改后 source 自动置为 MANUAL。
| 车站 | 来自线路 | 端口 | 里程 | 前往线路 | 端口 | 里程 | 通行类型 | 允许 | 来源 | 备注 | 操作 |
| 点击查询按钮加载数据 |
未决数据 (rail.unmatched_record)
| ID | 类别 | 工作表 | 行号 | 原始数据 | 备注 | 状态 | 操作 |
| 点击查询按钮加载数据 |
线路添加 / 导入(rail 图模型)
告诫:运价里程表 xlsx 全量重导(import_rail_mileage.py)会 TRUNCATE 全部 rail 表,本页添加/导入的线路将随之丢失,重导前请先导出补录。批量导入遇到同名线路直接跳过(不覆盖);缺失车站将自动建档。
手工添加一条线路
| 站序 | 站名 * | 电报码 | 里程km * | 区间km | 接算站 | 接算线路(分号分隔) | 备注 | |
操作审计 (rail.op_log) GET /rail/ops/list | GET /rail/ops/<id> | POST /rail/ops/<id>/undo
| op_id | 时间 | 操作人 | 动作 | 目标 | 行数 | 快照 | 重放 | 状态 | 操作 |
| 点击查询按钮加载数据 |
撤销白名单:RENAME / MERGE / DELETE_LINE / REBUILD / INSERT·DELETE·MOVE·BATCH_LINE_STATION。撤销按「清范围现值 + 原像插回」实现,自增 id 也回到原值,代价是丢弃该 op 之后对同一批行的改动 ⇒ 只应紧跟在误操作之后使用。
单行快照动作(改线属性 / 改区间边 / 别名 / 通行许可)不在白名单内,只能点「详情」看原像后手工回滚。