5.3 KiB
本机 XML 重放与按钮联调
2026-09-17。独立入口已实现并用准确原生XML实测。它重放已导入的完整文件,运行当前真实处理器、
独立验证、隔离PostgreSQL入库及月报worker;不调用OHIP,不构造Oracle成功响应。
arr_web.run的真实接口执行器仍未启用,API来源完整ARR里程碑仍待验收。
另有本机接口模拟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-,工作簿内容/内部文件身份不改。
按钮接口
沿用下载卡片契约,只替换独立实例的地址,不需要换页面流程。
现有服务端登录与X-ARR-CSRF仍必须有效,实例使用独立arr_xml_replay_session Cookie。
没有放开跨域;另一个界面的开发服务应通过受控同源后端对接,不把本机凭据写进前端代码。
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。POST /api/arr-downloads:{"report_date":"2026-09-15","request_id":"32位小写十六进制"}。 202表示排队;其他源日期409,既不改XML日期也不产生队列任务。GET /api/arr-downloads/{request_id}:查询queued/downloading/processing/succeeded等既有状态。POST /api/arr-downloads/{request_id}/retry:空对象;未知提交恢复沿用同一文件组和事务身份。GET /api/download/daily?job_id=...与GET /api/monthly-runs?month=2026-09, 再按实际report_id下载月报。日报成功与异步月报发布分别确认。
同编号重复提交不产生第二个版本;用户显式发起新的编号可重放同日并生成新版本,与现有卡片语义一致。 人工价格复核沿用真实处理规则;该基准文件不需要复核。普通XML上传、Booking写入、公司报表生成、 公共H5入口均不在此测试装配内。公司报表所需的独立Booking来源不会从本XML伪造。
创建与运行
必须使用项目虚拟环境入口,不能把Python符号链接解析成基础解释器后运行。
.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/浏览器位置后运行;
已有成功任务时只验证,不自动创建第二笔。