---
schema: "hl-changelog/v2"
ticket: "6033"
title: "住宿安排回配信息回显（hotelGroup.assignments 补全）+ 加急按钮显隐契约 canUrge"
consumer: "admin"
author: "wx"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "verified"
frontend_owner: "mmg"
frontend_ref: "9bd9e23b"
target_release: ""
verified_at: "2026-08-18"
status_note: "后端完成：PR #6036 已合并 dev-v3（d4288c4941）并部署 TEST（hl-order-service-v3 jar 16:30 更新、双实例重启）。bug1 改走 listActiveHotelAssignmentsByOrderId（INQUIRING∪CONFIRMED）补回显；bug2 新增 hotelGroup.canUrge 显隐契约。2849 测试全绿 + ArchTest 54 绿。网关实测 itinerary 的 assignments 非空 + canUrge=false。"
updated_at: "2026-08-18"
base: "dev-v3"
generated: "2026-08-18T16:40:00+08:00"
---

# 住宿安排回配信息回显 + 加急按钮显隐契约 canUrge（#6033）

## 背景

订单详情-行程安排-住宿安排卡片两个回显 bug（对照用车安排卡片的正确模式）：
- **bug1**：住宿安排只显示「用房需求」（每晚房型/酒店需求），**不显示具体回配结果**——用车安排卡片是「需求 + 具体回配（丰田普拉多/蒙A/司机/日期）」两段都显示，住宿缺了回配段。
- **bug2**：配房已完成，住宿安排卡片右上角**仍显示「⚡加急」按钮**（加急是催房务赶紧配用的，配完还显示不合理）。

## 变更接口

| 接口 | 变更 |
| --- | --- |
| `GET /v3/admin/order/{id}/itinerary` 的 `hotelGroup.assignments` | **行为变更**。由空数组 `[]` 改为返回每晚回配明细。根因：原走 `listHotelAssignmentsByOrderId`（**CONFIRMED-only** 业务判定语义），配房未完成（INQUIRING 询房候选）时被过滤成空 → 前端只剩需求段。改走 `listActiveHotelAssignmentsByOrderId`（**INQUIRING ∪ CONFIRMED** 纯回显中立只读契约）。其余 8 处 CONFIRMED-only 调用方（核单预览/SignVoucher/结算/TerminateRefund 等）语义零改动 |
| `GET /v3/admin/order/{id}/itinerary` 的 `hotelGroup.canUrge` | **新增字段**（Boolean）。加急按钮显隐契约：配房已完成（`finalized=true` / `houseStatus=CONFIRMED`）或已加急（`manualUrgent=true`）时 `false`，否则 `true` |

## 行为口径

- **bug1 回显**：未完成（INQUIRING 候选）行随 assignments 回显（hotelName/roomTypeName 中文/roomCount/protocolPrice/stayDate/dayNumber），行内 `returnStatusLabel/finalized` 随需求级 houseStatus（未最终确认不显示「已回配」）；已完成（CONFIRMED）回显具体回配明细、`finalized=true`、`returnStatusLabel=已回配`。
- **bug2 canUrge**：`canUrge = !finalized && !manualUrgent`。前端**不要**再自行拼接状态判显隐，直接用 `canUrge` 控制「⚡加急」按钮显隐；`requirement.manualUrgent` 仍用于显示「已加急」态。

## 响应示例

`GET /v3/admin/order/{id}/itinerary` → `data.hotelGroup`（修复后）：

```json
{
  "requirement": { "requirementId": "2089598371034505218", "status": "DONE", "totalRoomCount": 2, "manualUrgent": false },
  "houseStatus": "CONFIRMED",
  "houseStatusLabel": "已完成",
  "finalized": true,
  "returnStatusLabel": "已回配",
  "canUrge": false,
  "assignments": [
    {
      "hotelName": "呼伦贝尔香格里拉大酒店",
      "roomTypeName": "标准间",
      "roomCount": 1,
      "protocolPrice": "280.00",
      "stayDate": "2026-08-18",
      "dayNumber": 1,
      "returnStatusLabel": "已回配",
      "finalized": true
    }
  ]
}
```

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `assignments[].hotelName` | String | 回配酒店名 |
| `assignments[].roomTypeName` | String | 房型中文名（字典翻译，无则 null） |
| `assignments[].roomCount` | Integer | 房间数 |
| `assignments[].protocolPrice` | BigDecimal(字符串) | 协议价 |
| `assignments[].stayDate` | Date | 入住日 |
| `assignments[].dayNumber` | Integer | 第几晚 |
| `assignments[].finalized` / `returnStatusLabel` | Boolean/String | 随需求级状态（完成=已回配/finalized=true） |
| **`canUrge`** | Boolean | **加急按钮显隐**：false=隐藏（配完/已加急），true=显示可用（未完成且未加急） |

## 前端动作

- 住宿安排卡片把 `assignments` 每晚回配明细渲染出来（对齐用车卡片「需求 + 具体回配」两段模式）。
- 「⚡加急」按钮显隐直接用 `hotelGroup.canUrge`，不要自行拼接 `houseStatus/finalized/manualUrgent`。
- 用车安排（vehicleGroup）回显无变化。

## 验证证据

- 单测：OrderDetailServiceTest +1（INQUIRING 候选传入 converter）、OrderDetailConverterTest +1（canUrge：CONFIRMED→false / 未加急→true / 已加急→false）；order.core 全量回归 2849 绿 + ArchTest 54 绿（含 HouseModuleBoundaryArchTest）。
- 部署：PR #6036 squash 合并 dev-v3（merge commit d4288c4941），Deploy Panel 部署 hl-order-service-v3（jar 16:30 更新、双实例重启生效）。
- 网关实测（TEST）：itinerary 的 `hotelGroup.assignments` 由空变 2 条（呼伦贝尔香格里拉大酒店 + stayDate 8-18/19 + roomCount + 已回配 + finalized=true），`canUrge=false`。

## 关联 / 联系人

- Issue：https://git.1814.love:8443/wx/HL/issues/6033
- PR：https://git.1814.love:8443/wx/HL/pulls/6036
- Commit（merge）：https://git.1814.love:8443/wx/HL/commit/d4288c4941
- 后端负责人：wx
