Fix production ARR reads and add audited source field review

This commit is contained in:
Wyndham ARR committed 2026-10-08 17:01:54 +08:00
1 parent 2417b1a41c
commit fe8735aac2
26 files changed
+2417 -157

No files matched your search

+60 -16
View File
@@ -1,29 +1,73 @@
# 按日期获取接口数据并生成 ARR
2026-09-18:新增入口已连接页面、日报、缺价复核和原有月报流程。人工 XML 上传保留。
用户已确认页面交互,并授权配置OHIP连接;当前8875为本机OHIP沙箱入口,实际沙箱取数未验证。
接口数据直接进入共用筛选、去重、定价和报表规则,不生成中间 XML。
开发已收尾;生产启用条件、部署模板现有边界和首次数据验收见[交付说明](../deploy/OHIP_RELEASE_HANDOVER.md)。
2026-10-08:直接数据入口增加处理前的人工字段完善,完成后继续共用日报、缺价复核与原有月报流程。人工XML上传保留。
已在本机离线重放2026-10-07到店日的真实生产捕获:176次读取、58条预订,字段识别和来源顺序与捕获一致。
这次核对未发起新OHIP请求。10月7日正式日报仍待业务字段值确认,尚未通过生产报表验收。
接口数据沿用共用筛选、去重、定价、独立校验和Finance提交规则,不生成中间XML。
本文描述当前代码;部署与服务状态以[交付说明](../deploy/OHIP_RELEASE_HANDOVER.md)和对应部署记录为准。
## 使用流程
选择报表日期 → 点击“下载并处理” → 获取该日数据 → 处理并核对 → 日报进入历史,月报自动更新。
选择报表日期 → 点击“下载并处理” → 完整获取该日数据 → 如有阻塞字段则人工完善并确认 → 原规则处理与独立核对 → 如缺价则沿用价格复核 → Finance日报进入历史,月报自动更新。
点击日期文字或右侧日历图标,再点击日历中的某一天即可选择。任务进行中仍可预选下一日期;
当前任务结束后需再次点击下载,预选不会自动提交或修改原任务。页面进度始终显示原任务的日期。
任务结果待确认时,先检查或继续按钮上标明日期的原任务,避免重复提交。
只有缺少价格时进入原有价格复核;确认后从保存的原始数据重新处理。缺字段或多个候选会报错,不会当成零价。
完整采集中的缺字段、多个候选或不满足原规则的字段先进入“待完善数据”(`needs_data_review`)。
全部阻塞字段通过并确认后,原任务自动继续处理;随后只有缺少pureprice时进入原有价格复核(`needs_review`)。
字段完善和价格复核是前后两步,不会用补零或未经确认的空值跳过前一步。
任务中断后“继续原任务”复用原始数据和结果,同一请求不会重复入库。历史来源显示“接口获取”。
备注使用清理表情后的第一条非空预订备注;套餐按原顺序显示套餐代码(逗号分隔,保留重复)。
完整备注、套餐明细和查询出处保留在原始数据中。Trace 不获取,旧报表对应列留空。
这是一套明确的新入口显示规则,不声明与 Oracle 原生报表的文字格式完全一致。
## 当前本机 OHIP 沙箱入口
## 字段完善的保存与继续处理
[打开原地址](http://127.0.0.1:8875/),沿用原账号密码。酒店OHIPSB02、平台地址、应用凭据路径已配置;
`DataFieldReviews`只接受`collection_complete=true`的完整采集,以当前冻结处理器的费率白名单和字段验证识别阻塞项。
预订列表仍保留全部取得的记录及原顺序;非白名单记录按原规则处理,不因Cancelled/NoShow等状态在取数阶段被丢弃。
费率本身未确定时先完善费率,再重新识别该记录的其余问题。查询失败或采集不完整仍走原重试流程。
人工仅能完善任务列出的异常字段。团队代码、预订备注、套餐和房型允许明确“确认无此项”;
公司、房号及其他必填字段必须填写有效值。`reservationBlock`、`reservationPackages`或关联档案省略不自动成为空值,
套餐金额为零不能证明无套餐,`roomCalendar={}`也不能证明目标日期没有房号。
每次保存核对当前`revision`,记录操作者、原值、新值和事件版本;旧版本提交会返回冲突,须重新查看。
所有阻塞项通过后,确认操作冻结`reviewed-source.json`及审计绑定,并将同一请求重新排队。
后续从已保存来源继续,不重新获取订单、不改写原始捕获。冻结后不能再修改字段,重复确认或恢复不会重复提交日报。
正常完整输入无需人工步骤,直接进入原处理链路。
字段完善后端接口归属于ARR自身,沿用网页登录权限与POST的CSRF保护;它们不向Oracle写入业务资料:
| 操作 | ARR接口 | 正文 |
|---|---|---|
| 读取待完善清单 | `GET /api/arr-downloads/{request_id}/data-review` | 无 |
| 保存一项字段 | `POST /api/arr-downloads/{request_id}/data-review/items/{item_id}` | `{"revision":0,"value":"<有效值>"}`;套餐值为有序代码数组 |
| 确认并继续生成 | `POST /api/arr-downloads/{request_id}/data-review/finalize` | `{"revision":1}`;使用最近返回版本 |
字段完善期间尚未生成处理job或写入Finance。确认后才执行原筛选、去重、定价、独立校验与处理交付;
如果进入后续价格复核,Finance日报仍等待价格确认。最终提交继续触发原月报更新。
缺少Opera有效房价属于前面的来源字段问题;缺少pureprice属于后面的定价复核,不能相互替代。
## 生产请求兼容与当前验收边界
结构化到店查询只发送`arrivalStartDate`、`arrivalEndDate`、`limit`、`offset`,省略生产拒绝的可选排序。
生产默认排序规则尚未证实,因此保留接口返回顺序,并在完整分页及补查后逐项比较首尾两次完整列表。
每轮验证重复预订ID、总数、页数和末页完整性;首尾一致仍不是原子快照的证明。
姓名摘要使用`GET /api/v1/profiles?profileIds=P&summaryInfo=true&limit=1&offset=0`,只查已关联唯一主客的精确档案ID。
严格核对`operation_id=getProfiles`、酒店、Oracle请求编号、唯一档案结果和姓名组成;不再使用生产不可用的`searchProfiles` POST。
历史候选捕获及POST探针保留原请求,详细参数见[传参确认单](../ARR_OHIP_REQUEST_PARAMETERS.md)。
58条原始采集中保留团队代码36项、套餐16项、公司2项、房号1项缺口。字段完善清单只列出原规则判定会阻塞候选记录的问题,
与全部原始缺口数量可以不同。离线重放及本机流程验证不替代真实业务值确认,亦不表示10月7日正式日报已生成或验收。
## 历史本机 OHIP 沙箱入口(2026-09-18)
以下保留2026-09-18的沙箱配置与运行方式,不代表当前生产服务状态。
历史[本机地址](http://127.0.0.1:8875/)沿用当时账号密码。酒店OHIPSB02、平台地址、应用凭据路径已配置;
本机数据库和报表单独保存,人工XML上传保留。平台同事已补齐团队资料读取权限`blocks.read`,
2026-09-18 06:00Z核对所需权限齐全,下载按钮已启用;见[补权记录](../integrations/ohip/PLATFORM_ACCESS_REQUEST.md)。
本轮只检查权限和页面就绪状态,没有提交真实下载任务;用户选日期并点击后才会查询。
当轮只检查权限和页面就绪状态,没有提交真实下载任务;用户选日期并点击后才会查询。
实例使用`arr_web.local_ohip`,启动只核对本机配置和凭据,不调用酒店接口。
`check-access`只读取平台开发身份、应用列表和密钥状态,不改权限、不签发密钥、不查询订单;
@@ -65,7 +109,7 @@ LC_ALL=C LANG=C .venv/bin/python -m arr_web.local_ohip serve \
## 正常运行配置
数据库须已应用019迁移;本轮只在独立本机测试库应用,未修改既有数据库。
数据库须已应用019迁移;2026-09-18首次验证只在独立本机测试库应用,未修改当时既有数据库。
该迁移允许真实的 `ohip_json` 源制品和5.0结果进入已有复核流程。
启动会先检查迁移,未具备条件时不开放下载服务。原来的月报后台程序仍须正常运行。
@@ -85,20 +129,20 @@ LC_ALL=C LANG=C .venv/bin/python -m arr_web.local_ohip serve \
它不再是新数据入口的前置条件。不得把模拟传输当成实际平台传输。
取数字段和八项只读操作见[数据入口说明](../integrations/ohip/DATA_SOURCE.md)。
沙箱所需权限已按上述记录核对齐全;正式环境权限和实际返回字段覆盖率仍待上线配置及有数据后的验收。
每个运行实例仍须核对其实际环境权限。当前生产捕获已用于字段识别,正式日报验收仍须完成业务字段值确认。
`getBlock` 等补查如无权限会明确失败,不补造空值。
## 检查
```sh
ARR_TEST_LOCAL_POSTGRES=1 .venv/bin/python -m unittest tests.test_arr_direct_data -v
ARR_TEST_LOCAL_POSTGRES=1 .venv/bin/python -m unittest tests.test_arr_direct_data tests.test_arr_data_review -v
```
检查覆盖6笔正常订单总额18200、缺价复核、缺字段、去重、原始数据保留、独立报表核对、
页面请求、月报公式、提交后断线恢复、来源版本隔离,以及019迁移检查和回退保护。
检查覆盖6笔正常订单总额18200、字段完善后继续处理、既有缺价复核、必填及可空字段验证、去重、原始数据保留、独立报表核对、
字段修订冲突与冻结恢复、页面请求、月报公式、提交后断线恢复、来源版本隔离,以及019迁移检查和回退保护。
浏览器检查:`tests/browser/arr_direct_data.cjs`,只接受明确指定的本机模拟实例。
当前8875已交给用户会话后台服务运行,避免对话结束后登录页无法连接。仅在当前用户会话运行;
当前OHIP沙箱的停止命令为 `launchctl bootout gui/$(id -u)/com.arr.local-ohip.8875`。服务配置位于私有实例的
历史8875沙箱曾交给用户会话后台服务运行,避免对话结束后登录页无法连接。仅在用户会话运行;
该历史OHIP沙箱的停止命令为 `launchctl bootout gui/$(id -u)/com.arr.local-ohip.8875`。服务配置位于私有实例的
`service.plist`;重新加载使用 `launchctl bootstrap gui/$(id -u) /absolute/private/instance/service.plist`。
后台环境已设 `LC_ALL=C`、`LANG=C`。先停后台服务再使用前台serve命令,不同时启动两份。