50 lines
7.1 KiB
Markdown
50 lines
7.1 KiB
Markdown
# 酒店后台办理与结果回显 CP3
|
||
|
||
2026-09-16。用户确认四类流程的产品行为;本地持久执行机制及页面已实现,真实酒店办理适配器仍关闭,不能把本地验证当作四流程联调通过。
|
||
|
||
## 员工看到的行为
|
||
|
||
2026-09-16页面位置更新:结果卡标题为“AI处理”,任务详情与预订记录详情均放在对应来源邮件下方。仅已确认New/Update展示;确认成功后等待卡片渲染再立即定位,确认失败或已经离开原页面均不定位。普通确认成功提示为“卡片已确认”。本次只改变前端位置及导航,不改变实际执行与查询契约。
|
||
|
||
新确认的投影 NEW_BOOKING / UPDATE_BOOKING 在同一个数据库事务保存本地确认和酒店办理记录。确认后留在任务详情,展示等待、处理中、处理失败或完成;预订记录可以再次查询。其他人工任务沿用既有返回行为。离开页面只停止本页查询,不停止后台处理。查询提示统一为“正在查询办理状态,页面会自动刷新”;首次及后续状态查询失败时也按4秒间隔自动重查,仅查询状态,终态或离开页面停止。
|
||
|
||
按检查条件、核对酒店现状、保存资料、更新房型房数、更新附件、最终核验展示真实步骤。每步独立记录结果,失败组合由记录组成,不穷举文案。接口受理不代表业务完成,查询失败也不能证明酒店没有保存。页面仅回显实际查询值和查询时间,提交快照不作为查询结果。
|
||
|
||
“继续处理”使用同一办理及页面版本,服务端先重新查询。已成功的写步骤须有核实证据;未知/失败写入只有证明已完成或确实未写入后才能推进。不会换编号或重新创建已成功预订。历史确认无办理记录时显示“没有自动办理记录”,不补办历史业务。
|
||
|
||
## 固定业务规则
|
||
|
||
- GROUP/FIT UPDATE都是完整的最终房型房数;未出现的旧GROUP单元归零,FIT必须完整绑定真实Reservation范围,不按本地记录ID或第一条搜索结果猜测。不存在自行取消多余Reservation的流程。
|
||
- Excel预订附件从本次来源邮件冻结引用。PDF、图片及邮件原件不上传,原资料展示不受影响。新建上传、更新替换对应旧版,名称及描述采用Tour Code;不删除同名无关附件。
|
||
- 本地选择识别`.xls/.xlsx/.xlsm/.xlsb`,大小1..9,999,999字节;上传前按受控原件服务下载并审计,核对酒店/消息/引用/大小和实际文件结构。ZIP总展开64MiB、10,000条目为技术保护上限。不会运行公式、宏或外部实体。加密/老BIFF/Strict OOXML和真实Excel保存的XLSB兼容性未验证,不宣称全格式支持。
|
||
- Rate/Account/Market/Source/Meal/Note取该次最终确认。当前Liantai/QBD的Reservation Type为GC,TEN/BTQR只在新建设置,加床不在本次接入范围。
|
||
|
||
## 持久执行与边界
|
||
|
||
V41在平台MySQL增加`workflow_hotel_booking_execution`及独立状态审计表。前者保存冻结确认、Excel引用、步骤、作用域、租约和并发版本;后者只保存登记/状态推进/重启恢复/人工续办的安全审计元数据。确认事务不下载文件、不调用酒店。Repository登记必须处于同一个平台事务,失败时连同员工确认回滚。
|
||
|
||
后台每次只领取一个环节,外呼前先提交RUNNING。短事务以执行ID、版本、租约token及到期时间拒绝迟到写入;租约2分钟。适配器每个环节必须有界执行,子调用使用固定且可查询的幂等身份。出现未知结果不得换键发送。重启将已开始写入的步骤保留为UNKNOWN,排入先查询路径。相同本地酒店/Tour Code串行;前序办理未完成会阻挡该范围后续办理,不绕过未决写入。
|
||
|
||
PREPARE/首次查询须核实并持久保存`HotelScope(localHotelId, environmentRef, externalHotelId)`。缺失绑定不允许进入写入,后续及续办不允许切换酒店或环境。Adapter发请求之前仍必须核对实际配置与该绑定一致;不能先发送再依靠回执发现错酒店。
|
||
|
||
最终成功要求该次最终查询不早于最后处理环节、非未来、核验项目齐全且有对应展示字段。具体字段与完整房量/档案/TA/附件等比较属于可信酒店Adapter职责;仅返回HTTP成功或人工填几个成功标签不满足端口契约。部分查询结果保留实际时间,不能覆盖较新的查询。
|
||
|
||
当前Spring默认接入`OhipPendingBookingExecutionAdapter`,返回`HOTEL_INTEGRATION_NOT_READY`,不读取Key、不发送酒店请求。没有一个“打开环境变量即可跳过未验证契约”的上线开关。独立线程可用`hotel.booking.worker-enabled=false`在测试禁用;测试直接驱动真实Repository及Worker。CP1、CP2 HTTP边界仍独立保留,尚未拼成可对真实酒店完成四流程的运行时Adapter。
|
||
|
||
## 前端接口
|
||
|
||
| 接口 | 权限与输入 | 行为 |
|
||
| --- | --- | --- |
|
||
| `GET /api/reservation/order-tasks/{taskId}/cards/{cardId}/hotel-execution?hotel_id=...` | `RESERVATION_TASK_READ`,酒店/任务/卡片均核验 | 读取持久办理摘要;不发酒店查询、不新建办理 |
|
||
| `POST .../hotel-execution/resume` | `RESERVATION_TASK_CONFIRM`;`hotel_id`、非负`revision` | 身份来自登录用户,比较版本后登记续办;状态已变返回409 |
|
||
|
||
返回`status/revision/updated_at/queried_at/can_resume/steps/values`,时间点为UTC ISO8601。页面每4秒查询进行中的记录,卸载/换酒店/换卡片取消本页查询并忽略旧响应;续办超时先查状态,不直接重发。三语组件沿用工作台布局。API不返回冻结原文、URL、字节、酒店Key、私有对象关联凭证、租约或幂等键。
|
||
|
||
## 验证与未完成
|
||
|
||
验证证据见`.project-docs/50-evidence/topics/2026-09-16-ohip-execution-cp3.md`。全部用隔离H2及合成HTTP/文件/页面夹具;没有操作真实业务数据、发布平台或启动新增服务替换现有运行实例。
|
||
|
||
线上目录复核仍为0.6.0/111项;可读测试酒店OHIPSB02的连接及营业日,新增附件接口尚未发布。平台CP2-B/C现为已推送的`integration/booking-release-codex`分支(`60e89b4`),目录0.8.0/118项/13组;真实独立PostgreSQL迁移、全量Go race及原生打包程序检查通过,尚未部署。平台发布已获授权,必须通过实际部署通道完成迁移与旧实例退出、真实附件linkType及名称覆盖行为、对应应用权限、FIT TA recorder准确写入和回读字段、多房实际Reservation行为以及实际酒店配置/餐食映射核实,才能接上真实运行时Adapter与四流程合成UAT。多Excel文件同Tour Code的命名/替换对应关系不能猜测,须在真实附件契约验证时明确。
|
||
|
||
用户允许本轮专用测试预订和合成附件创建/修改/替换,并已另行确认平台发布;原有酒店业务数据和对外消息不在范围。当前机器没有ACK、镜像仓库及部署数据库连接配置,仓库仅发现测试工作流,因此实际部署尚未执行;这是部署通道缺失,不再等待重复许可。发布交付位于工作区`.planning/ohip-interface-review-20260915/release-20260916/README.md`。
|