106 lines
6.5 KiB
Markdown
106 lines
6.5 KiB
Markdown
# 按日期取得 ARR 业务数据
|
||
|
||
2026-09-18。字段接口连接已实现,输入一个到店日期,输出完整预订的 15 个业务字段及关联资料。
|
||
自动入口不取 Trace,不生成 XML,不提前执行白名单、去重、定价或入库。
|
||
|
||
当前8接口的实际路径、参数、来源与条件见[传参确认单](../../ARR_OHIP_REQUEST_PARAMETERS.md),供用户逐项确认。
|
||
|
||
本次按用户要求跳过实际沙箱订单验证。41 项新增本机检查及相关回归共 150 项通过,
|
||
其中包括真实的本机 HTTP 通信;没有读取平台凭据、查询沙箱订单、修改应用权限或运行实例。
|
||
6 笔模拟订单直接交给既有定价函数,结果符合原有预期,总额为 18200。这不是酒店营收或真实接口验收。
|
||
|
||
## 提供了什么
|
||
|
||
- 按用户明确选择的日期,分页取得到店预订,逐笔补齐需要的资料,完成后再次核对预订列表。
|
||
- 公司、客人、房价、团队、套餐和房间历史按预订或档案身份关联,原始响应单独保存。
|
||
- 备注保留原文、内部备注、多条内容及顺序;套餐保留每一项及其适用日期等资料。
|
||
- 正常为空、资料缺失、存在多个候选和查询失败分别记录。
|
||
- 相同任务编号完成后直接复用原结果;查询失败后,同编号重试会建立新的取数尝试并保留之前的记录。
|
||
- 不读取凭据或访问网络直到调用方明确发起一次尚未完成的取数。
|
||
|
||
## 可调用入口
|
||
|
||
实现:[arr_data.py](arr_data.py) 的 `ARRDataSource.fetch(report_date, request_id)`。
|
||
查询封装:[data_client.py](data_client.py)。对外地址仍固定为既有 OHIP 平台,酒店参数只用于核对服务端已配置的酒店。
|
||
|
||
```python
|
||
from pathlib import Path
|
||
from integrations.ohip.arr_data import ARRDataSource
|
||
|
||
source = ARRDataSource(
|
||
root=Path("/absolute/private/arr-data"),
|
||
hotel_id="OHIPSB02",
|
||
credential_file=Path("/absolute/private/application-credential.json"),
|
||
)
|
||
result = source.fetch(report_date="2026-09-15", request_id="0123456789abcdef0123456789abcdef")
|
||
```
|
||
|
||
也可从项目根目录调用(以下为使用示例,本次没有执行):
|
||
|
||
```sh
|
||
.venv/bin/python -m integrations.ohip.arr_data \
|
||
--report-date 2026-09-15 \
|
||
--request-id 0123456789abcdef0123456789abcdef \
|
||
--hotel-id OHIPSB02 \
|
||
--credential-file /absolute/private/application-credential.json \
|
||
--output-root /absolute/private/arr-data
|
||
```
|
||
|
||
输出目录位于仓库外,父目录须已经存在,目录权限 0700、文件 0600。
|
||
沿用现有应用凭据格式和身份检查。不同日期或取数范围不能复用同一个任务编号。
|
||
需要重新获取已完成任务的最新数据时,使用新编号;缺字段的已完成快照也不会被静默覆盖。
|
||
命令只打印状态、数量和文件位置,不打印客人、订单、备注、房号或金额。
|
||
|
||
## 已连接的查询
|
||
|
||
| 用途 | 平台操作 | 调用时机 |
|
||
|---|---|---|
|
||
| 当日预订列表 | `searchHotelReservations` | 分页查询,取完后再次核对 |
|
||
| 预订详情 | `getReservation` | 每笔预订;明确排除 Traces 请求 |
|
||
| 指定日有效价 | `searchRateInfo` | 每笔预订、用户所选日期 |
|
||
| 主客完整姓名 | `searchProfiles` | 已关联主客的精确档案编号,重复档案复用 |
|
||
| 档案详情 | `getProfile` | 关联公司名称或主客姓名组成资料未嵌入预订时补查 |
|
||
| 团队代码 | `getBlock` | 已有关联团队编号,但未返回代码时补查 |
|
||
| 房号及换房资料 | `getRoomCalendar` | 预订资料不能确定房号时,分页查找同一笔预订 |
|
||
| 套餐资料 | `getPackage` | 预订已提供套餐代码,但未提供完整适用资料时补查 |
|
||
|
||
上述均为只读操作。已有预订和档案授权覆盖多数查询;团队详情查询另需 `blocks.read`。
|
||
本次未修改现有应用授权;若该补查无权限,结果保留为查询失败,不伪装成没有团队。
|
||
现有 `integration.json` 的历史授权记录没有被自动扩大。
|
||
|
||
查询依据是平台 0.11.0 接口目录和完整接口说明;`getProfile` 返回的 `profileIdList/profileDetails`,
|
||
以及 `getBlock` 返回的 `blocks.blockInfo[].block`,另按 Oracle 固定版本接口说明核对,
|
||
没有从模拟服务反推实际接口结构。
|
||
|
||
## 返回的数据
|
||
|
||
`result` 包含 `status`、`collection_complete`、`input_complete`、记录数、各字段状态数量、
|
||
`data_path` 和摘要。对应的私有 `arr-data.json` 使用 `arr-ohip-data/v1`,每笔记录包含:
|
||
|
||
- 原始顺序、预订身份。
|
||
- 字段名到 `{state, value, reason?}` 的对应关系,恰好包含字段清单中除 Trace 外的 15 项。
|
||
- 各关联公司及角色、币种、套餐资料、必要时的房间历史。
|
||
- 此记录所用原始响应的文件引用。
|
||
|
||
`state` 为 `available`(有值)、`empty`(明确为空)、`missing`(未取得)、
|
||
`ambiguous`(多个候选)、`failed`(查询失败)。金额保留精确十进制文字,人数和房间数为整数;
|
||
备注是有序文字列表,套餐是有序资料列表,不在取数时拼成一个显示字符串。
|
||
`source_kind` 区分固定平台连接和注入的测试连接,并固定到任务身份;本机样本不能按同一任务编号改称平台数据。
|
||
|
||
`collected` 表示本入口已取得完整字段;`collected_with_gaps` 表示预订列表已取完,但存在空必填字段、
|
||
缺资料或多个候选;`failed` 表示查询或完整性检查失败。命令退出码分别为 0、2、1。
|
||
这些状态均不是日报生成或财务入库成功;`finance_ready` 固定为 false。
|
||
|
||
公司/旅行社有多个不同名称时保留候选,不擅自定优先级;Group 或 Source 不自动当作公司。
|
||
房号只有在既有来源一致,或所选日期的已完整取得历史中只有一个明确房号时才提供单值。
|
||
换房存在冲突、历史日期不完整、房间历史只返回页数信息时保留问题。
|
||
隐藏价格、缺失价格、错误币种不会转成零或以基础价替换。
|
||
|
||
## 与页面及后续处理的关系
|
||
|
||
已新增 `DirectARRExecutor` / `DirectARRSource`,直接消费本页的数据并衔接固定处理、独立核对、
|
||
缺价复核、Finance原子提交和既有月报。原始数据以 `source_data/ohip_json/source.json` 保存,
|
||
结果为5.0;原XML结果仍为4.0。`CapturedARRExecutor`继续保留给历史XML模式。
|
||
页面及启用说明见[直接数据入口](../../arr_web/DIRECT_DATA_ENTRY.md)。
|
||
开发与本机模拟检查已完成,本轮未查询实际沙箱订单、未读取平台凭据、未扩大权限或启用正式环境。
|