76 lines
5.3 KiB
Markdown
76 lines
5.3 KiB
Markdown
# 本机 XML 重放与按钮联调
|
||
|
||
2026-09-17。独立入口已实现并用准确原生XML实测。它重放已导入的完整文件,运行当前真实处理器、
|
||
独立验证、隔离PostgreSQL入库及月报worker;不调用OHIP,不构造Oracle成功响应。
|
||
`arr_web.run`的真实接口执行器仍未启用,API来源完整ARR里程碑仍待验收。
|
||
|
||
另有[本机接口模拟](LOCAL_API_SIMULATION.md)8874已完成前半段HTTP采集和生成XML;其数据、数据库及会话与本实例独立。
|
||
|
||
## 当前可用实例
|
||
|
||
- 页面:`http://127.0.0.1:8873/`,已在侧边浏览器登录打开。
|
||
- 私有实例:`/Users/chillishark/Downloads/arr-xml-replay-w79uhmzr`。
|
||
- 凭据仅在该目录`login.json`;原始XML、数据库、对象、队列、截图和验证材料均在该私有目录。
|
||
- 当前唯一可选源日期:`2026-09-15`。源酒店57106、72条;原件摘要为
|
||
`5c87ab6f2483b2244e98e47bb792080ef4aca9036568638842116b246ac97438`。
|
||
- 已验证:61保留、11费率排除、0重复、0待复核;一个Finance版本、一个已发布月报事件、一个月报版本。
|
||
- 日报/月报下载完整性校验通过,月报61个TOTAL PRICE公式符合原规则。原始文件逐字节不变。
|
||
- 页面及响应头标明`local-xml-replay`;浏览器下载文件名加`LOCAL-REPLAY-`,工作簿内容/内部文件身份不改。
|
||
|
||
## 按钮接口
|
||
|
||
沿用[下载卡片契约](ARR_DOWNLOAD_HANDOFF.md),只替换独立实例的地址,不需要换页面流程。
|
||
现有服务端登录与`X-ARR-CSRF`仍必须有效,实例使用独立`arr_xml_replay_session` Cookie。
|
||
没有放开跨域;另一个界面的开发服务应通过受控同源后端对接,不把本机凭据写进前端代码。
|
||
|
||
1. `GET /api/arr-downloads`:`ready=true`只表示**本机重放**就绪;同时返回
|
||
`environment=local-xml-replay`、`source_kind=native_xml_replay`、`oracle_connected=false`、
|
||
`default_date=2026-09-15`和`source_records=72`。
|
||
2. `POST /api/arr-downloads`:`{"report_date":"2026-09-15","request_id":"32位小写十六进制"}`。
|
||
202表示排队;其他源日期409,既不改XML日期也不产生队列任务。
|
||
3. `GET /api/arr-downloads/{request_id}`:查询queued/downloading/processing/succeeded等既有状态。
|
||
4. `POST /api/arr-downloads/{request_id}/retry`:空对象;未知提交恢复沿用同一文件组和事务身份。
|
||
5. `GET /api/download/daily?job_id=...`与`GET /api/monthly-runs?month=2026-09`,
|
||
再按实际`report_id`下载月报。日报成功与异步月报发布分别确认。
|
||
|
||
同编号重复提交不产生第二个版本;用户显式发起新的编号可重放同日并生成新版本,与现有卡片语义一致。
|
||
人工价格复核沿用真实处理规则;该基准文件不需要复核。普通XML上传、Booking写入、公司报表生成、
|
||
公共H5入口均不在此测试装配内。公司报表所需的独立Booking来源不会从本XML伪造。
|
||
|
||
## 创建与运行
|
||
|
||
必须使用项目虚拟环境入口,不能把Python符号链接解析成基础解释器后运行。
|
||
|
||
```sh
|
||
.venv/bin/python -m arr_web.local_replay init \
|
||
--parent /Users/chillishark/Downloads \
|
||
--xml /Users/chillishark/Downloads/res_detail_71054429.XML \
|
||
--expected-sha256 5c87ab6f2483b2244e98e47bb792080ef4aca9036568638842116b246ac97438 \
|
||
--report-date 2026-09-15
|
||
|
||
# 把 --root 指向 init 返回的目录;现有实例重启复用同一目录。
|
||
.venv/bin/python -m arr_web.local_replay serve \
|
||
--root /Users/chillishark/Downloads/arr-xml-replay-w79uhmzr --port 8873
|
||
```
|
||
|
||
当前实例已后台运行;不要再启动第二个同目录进程。需要停止时核对`server-process.json`中的PID及完整命令
|
||
确实指向该目录,再发送SIGTERM;服务会先停止任务/worker,再关闭自有数据库,保留数据供后续重启。
|
||
它不是开机自启服务;不能直接删除一个仍运行中的实例目录。发生非正常中断留下postmaster.pid时,
|
||
启动会拒绝自动接管,需核对所属进程;不自动清库或强制重建。
|
||
|
||
## 隔离与证据
|
||
|
||
- init总是创建新0700目录;原件和凭据0600。拒绝仓库内保存原始业务数据。
|
||
- 每个实例新建自有PostgreSQL集群,仅0700私有Unix socket,没有TCP监听。
|
||
为遵守现有008迁移保护,库名使用`booking_test`,**不连接现有同名库**;每次连接核对data_directory。
|
||
- 不读取ARR数据库/OSS/平台凭据;去除本进程的libpq环境默认值,退出时恢复。
|
||
- 目录、源清单摘要、XML摘要/日期/酒店、处理器规则、任务编号与文件组绑定;来源/规则变化拒绝旧任务。
|
||
- 重用通用冻结交付机制;其集成命名空间不代表发生平台采集,适配契约明确为`local-native-xml-replay/v1`。
|
||
`source_mapping_verified`/`report_equivalence_verified`保持false。
|
||
- 预订项目模拟酒店及现有业务服务未修改。后续接口模拟需另建来源,不覆盖本基准或反推“Oracle真实映射正确”。
|
||
|
||
验证:9项新测试(含真实SQL/完整停止重启)、75项相关回归通过;实际浏览器提交、刷新恢复、两种下载、
|
||
桌面及390px视口检查通过。私有`acceptance-summary.json`与`browser-verification.json`仅输出汇总证据。
|
||
脚本为`tests/browser/arr_local_xml_replay.cjs`,须明确设置私有实例路径及Playwright/浏览器位置后运行;
|
||
已有成功任务时只验证,不自动创建第二笔。
|