# 房务配房流程：询房即扣库存 + 单日确认带 requirementId + 配房弹窗全态回显（前端必改）

> 模块：房务管家 · 配房行程（管理后台）
> 类型：行为变更 + 出参新增字段（PR #4585/#4598/#4600 已合 dev-v3 + 测试服 R1/R2/R3 实测生效）
> 关联工单：#4573 / #4597 / #4599
> 日期：2026-06-28

## 1. 【阻塞修复·必改】单日确认改用 itinerary[].requirementId 拼 URL

房务测试反馈「第 1 天确认 OK、第 2 天选另一家酒店点确认报『缺少需求 ID, 暂无法确认』流程卡死」。

- 根因：前端单日确认依赖了上一步流程残留的 requirementId 临时态，切到第 2 天直接点确认时取不到。
- 后端已在订单详情 `GET /admin/house/orders/{orderId}` 的 `itinerary[]` **每天 VO 新增 `requirementId` 字段**（雪花，String 序列化），对所有天稳定一致。
- **前端必改**：单日确认 `POST /v3/admin/order/hotel-requirements/{requirementId}/assignments/days/{dayNumber}/confirm` 的 `requirementId` 一律取 `itinerary[该天].requirementId`（不要依赖配房/询房流程的临时变量）。

## 2. 【行为变更·必知】「询房即扣库存」

业务规则调整：**配房进入「询房中」(INQUIRING) 即立即扣减酒店库存**（此前是「单日确认」才扣）。

- `POST /.../assignments`（批量提交配房方案）：提交后该天候选行进入询房中**就已占用库存**；库存不足在**提交时**即拒（返 `808901 房型库存扣减失败:数量不足或日历记录缺失`）。
- 单日确认 `.../days/{dayNumber}/confirm`：保留的候选**不再重复扣**；落选/未保留的候选软删并**自动还原库存**。
- 影响前端：①「库存不足」错误现在出现在**提交配房**这一步（不再是确认步）；②取消选中/替换酒店后，被换掉的酒店库存会自动还原，无需前端干预。

## 3. 【出参新增·建议用】配房弹窗全态回显 currentSelections

房务测试反馈「选错酒店点确认后，再点配房不回显已选酒店、无法删除/替换」。

- 订单详情 `itinerary[]` 每天 VO **新增 `currentSelections`**：该天**当前全部 active 配房行**（询房中 INQUIRING ∪ 已确认 CONFIRMED 的并集），每行带 `confirmStatus` 标识。
- 候选端点 `GET /v3/admin/hotel-candidates` 的 `isCurrentlyAssigned` / `assignedRoomTypeId` 现在在**询房中与已确认两个阶段都会标记**（此前只认已确认）。
- **前端建议**：再次打开配房弹窗时，用 `currentSelections`（或候选的 `isCurrentlyAssigned`）回显/高亮该天当前已选酒店，支持删除/替换；不要只读旧的 `inquiringAssignments`（确认后会变空）。旧字段 `currentAssignments`(仅 CONFIRMED) / `inquiringAssignments`(仅 INQUIRING) 保留兼容。

## 4. 【入参校验】dayNumber 上界

`POST /.../assignments` 提交的 `dayNumber` 超过该需求应配晚数 → 返 `808102 dayNumber 越界`。前端按行程天数约束，勿提交越界天号。

## 测试服实测（R1/R2/R3）
- itinerary 每天 requirementId 非空；第 2 天换酒店确认成功无「缺少需求 ID」。
- 询房即扣：提交配房即 DB stock_used +N；确认保留不重扣；落选/替换/删除自动还原（stock 精确归还、不转负）。
- 库存不足在提交步即拒 808901（干净中文消息）；填超量被拒后改小量重提同酒店可成功。
- currentSelections 含询房中+已确认两态行；候选两阶段都标 isCurrentlyAssigned。
