3.9 KiB
3.9 KiB
酒店实际预订目标识别 CP6
2026-09-16。本地实现、100项相关测试通过;后端整体验证结果见本轮证据。默认真实办理端口仍为Pending,未加载服务或操作酒店预订。
本轮交付
OhipBookingTargetReadAdapter复用已有HTTP客户端,执行完整搜索、逐目标详情、第二轮完整搜索并比较成员。OhipBookingTargetConverter解析固定Oracle26.3响应。workflow内部HotelBookingTargetLookup保存仅身份用途的结果,不携带旅客资料或原生正文。
| 场景 | 请求与实际核对 | 成功识别的含义 |
|---|---|---|
| GROUP | searchBlocks.blockName=TourCode,精确比较返回名称,取得唯一type=Block编号;详情再次比对编号、酒店、名称 |
IDENTIFIED / EXACT_BLOCK_NAME,只证明目标身份 |
| FIT | taRecordLocatorList=[TourCode]、searchType=Any、similaritySearch=false;取完全部页,再逐笔核对type=Reservation编号和酒店 |
IDENTIFIED / TA_SEARCH_FILTER,仅有TA筛选关联,TA字段读回仍未验证 |
| 完整搜索无目标且二次搜索一致 | 两次有效空集合 | NOT_FOUND,不等于授权自动创建 |
| GROUP多个精确目标 | 不取第一条 | AMBIGUOUS,不返回部分可用ID |
| 查询/详情失败、分页矛盾、目标变动 | 保留固定原因码 | UNRESOLVED,不返回部分可用ID |
没有按新日期、新房型、TEN或预订状态过滤旧对象,也不按姓名猜FIT关联。不会把接口的tourCode(系列团代码)、Confirmation编号、本地记录ID或Guest Locator代替上述字段。未静默排除已取消等FIT候选;后续办理前仍须独立核对各对象状态是否可修改。
完整性与安全
- 固定每页50条、最多20页、最多100个详情目标;每次外呼前核对剩余总预算覆盖单次HTTP预算,数据库事务内不发送请求。
- 自管offset,从0按原始返回行数推进;不跟随响应链接。响应offset只作非负整数检查,当前/下一页位置语义仍待原生UAT,不沿用其他配置接口经验。
- 官方明确hasMore缺省表示取完;null/非布尔拒绝。count必须匹配页内条数;totalResults/totalPages存在时跨页保持一致并与结束位置吻合。
- hasMore=true空页、重复ID、页数上限、提前结束、缺集合结构、未知warning、错酒店/ID等均拒绝。可选数组缺省仅在明确count=0且未声明更多时接受。
- 详情只接受唯一目标,且以Oracle实际行内hotelId验证;Edge外层酒店是平台配置回填,不能替代内层检查。type=Reservation/Block的内部ID只允许一个;idContext缺省可接受,显式外部context拒绝。
- 详情之后第二轮完整搜索检查成员是否改变。这是有限的一致性检查,不是Oracle事务快照,也不保证核对结束后无人修改;实际写入前仍需结合持久执行和最新状态处理。
- 原生204会由平台转404
ohip_resource_not_found;当前保守返回UNRESOLVED,不将一般HTTP错误或空文档当作完整零结果。
读取输入来自可信确认,范围与构造时配置酒店一致。该普通Java适配器没有Spring注册、Controller或自动调用入口;没有凭据文件加载。运行调用方仍须核对库内确认/租约及已冻结环境,CP6本身不替代权限控制。
后续接线
识别结果不构造ExistingBooking.complete=true:旧住期、全量房格、Note ID、客档、附件范围等尚须实际读取和核验。businessComplete()恒为false,不能把目标识别完成投影成整单成功。FIT TA写入/最终读回仍待确认,当前原因码明确保留该限制。
CP6下一步与CP3持久执行/CP5逐次写台账整合时,应先冻结已识别ID,再取得完整旧范围,并对逐项修改和最终查询做业务核验。新房量/附件平台发布、测试配置/权限和原生多房/分页验证继续保留。