Files
ARR-2.0-0918/arr_web/LOCAL_XML_REPLAY.md
T

76 lines
5.3 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.
# 本机 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/浏览器位置后运行;
已有成功任务时只验证,不自动创建第二笔。