3.8 KiB
UPDATE实际预订绑定与恢复 CP7
2026-09-16。本地实现、33项新增/105项相关测试及完整后端verify通过,真实办理端口保持Pending。见验证证据。
用户可见行为与接入边界
员工一次确认后的同次UPDATE固定关联原来找到的酒店预订。GROUP为唯一Block,FIT为完整Reservation集合。处理中断或失败续办仍保留原集合;重新查询若增加、缺少或更换目标则停止,不能取第一条或悄悄切换。
PREPARE可先准备配置;UPDATE的RECONCILE成功前必须保存目标。缺失时在查询环节失败,写尝试保持0,之后可先重新查询再续办。已有写尝试的旧记录若未绑定,不允许事后补绑推定旧操作对象。
这只是身份与持久执行的接合,不证明日期、完整房格、客档、Note、附件都已读取或正确更新。FIT身份仍仅有TA筛选证据,TA recorder写入及最终字段核验没有因此补齐。后台四流程实际端口仍未启用。
内部契约
HotelBookingTargetBinding保存Execution、确认版本、酒店/环境、GROUP/FIT、Tour Code、完整排序ID集合、证据类别及首次识别时间。无业务原文、附件字节、URL或凭据,toString隐藏内部资料。HotelBookingTargetBindingService负责身份核对与合并,数据库仍由现有Repository负责。
- CP6的IDENTIFIED结果通过bind与冻结输入核对,查询时间不得早于当前读取步骤或晚于当前时间。
- Progress/Outcome新增可选targets;旧JSON、旧4/5参数Progress及6/7参数Outcome继续可用。省略targets和scope表示保留旧值,不能清空已有绑定。
- 首次绑定只接受库内唯一RUNNING的PREPARE/RECONCILE,且此前没有任何写步骤尝试或非READY写状态。确认登记时禁止预塞目标。
- 保存后目标集合、确认、范围、类型、Tour Code和证据类别不可变;同集合异序可重入,再次识别不覆盖首次时间。
- 复用V41 progress_json,无新表、迁移、员工入口或HTTP返回字段。NEW新建对象仍需依据实际创建回执建立关联,未复用本轮UPDATE绑定。
两个持久校验点
ExecutionRepository.advance按完整所属、revision和有效租约锁定数据库执行行,核对调用者完整Snapshot、Progress和scopeKey,再以库内旧值合并。首次绑定与阶段结果原子提交;过期或被其他工作者推进的版本返回未更新。resume/recoverExpired及worker所有复制进度路径均保留身份。
CallRepository.reserve在发送前锁定执行行,继续检查冻结Snapshot、范围、阶段和调用预算,并比较库内targets与调用者targets。因此内存中伪造另一组ID也不能获得发送许可。迟到调用回执仍只更新独立调用台账,不能推进过期执行。
请求目标约束
| UPDATE操作 | 必须匹配的绑定 |
|---|---|
| 修改Block/房量、删除Block附件 | GROUP及路径resourceId |
| 修改Reservation、删除Reservation附件 | FIT及路径resourceId |
| 上传附件 | 正文target_type与file.linkId同时匹配对象类型和ID集合 |
| 创建Block/Reservation | UPDATE中明确拒绝 |
检查发生于发送许可和HTTP之前。原有同键请求摘要、未知结果不重发、精准附件ID/哈希校验保持。绑定父对象不代替旧附件识别,也不授权删除同名的其他附件。
后续工作
继续完整旧住期、旧房格、Note/客档及附件范围读取,组装逐项执行和实际字段核验;新建回执关联、FIT多房修改与TA recorder仍需独立接通。平台候选发布、测试配置权限/实际值、MySQL及Oracle原生验证前置保持;本轮没有平台轮询、酒店读写或服务重启。