# 管理端行程安排聚合接口 + 订单详情房间日期补全 — 2026-04-21 > **服务** hl-order-service-v2(端口 8094)· **类型** feat + fix · **关联** PR #1064 > **使用场景**:管理端订单详情 · 行程安排 Tab · 查看场景一次性加载 > **前端调用路径**:网关(8080) → hl-order-service-v2(8094) --- ## 一、新增聚合接口 ### 🆕 `GET /admin/order/{orderId}/itinerary/summary` — 行程安排聚合 **功能**:一次返回【行程安排】Tab 所需的 **房间 / 车辆 / 交通** 三段数据,替代前端分别调用 `/hotel-assignment`、`/vehicle-assignment`、`/arrival` 的三次并发请求。 原三个接口**保留不动**,编辑场景仍各自调用;查看场景推荐走此聚合接口。 **请求参数**: | 参数 | 位置 | 类型 | 必填 | 说明 | | --- | --- | --- | --- | --- | | `orderId` | Path | `Long` | ✅ | 订单ID | **返回值** `Result`: | 字段 | 类型 | 说明 | | --- | --- | --- | | `orderId` | `Long` | 订单ID | | `hotelAssignments` | `List` | 房间安排列表(字段同 `GET /hotel-assignment`,含 `assignmentDate` 现算值) | | `vehicleAssignments` | `List` | 车辆安排列表(字段同 `GET /vehicle-assignment`,司机电话脱敏) | | `transports` | `ArrivalListRespVO` | 交通信息(字段同 `GET /arrival`,按 `ARRIVAL`/`DEPARTURE` 分组) | > 💡 `transports` 是 VO 包对象而非扁平 List,内部按到达/离开方向拆成 `arrivals` / `departures` 两个子列表,结构与 `GET /arrival` 一致,保留方向分组语义。 **`transports` 子结构**: | 字段 | 类型 | 说明 | | --- | --- | --- | | `orderId` | `Long` | 订单ID | | `arrivals` | `List` | 到达批次(`direction=ARRIVAL`) | | `departures` | `List` | 离开批次(`direction=DEPARTURE`) | **响应示例**: ```json { "code": 200, "data": { "orderId": 700001, "hotelAssignments": [ { "assignmentId": 800001, "orderId": 700001, "familyIndex": 1, "hotelId": 500001, "hotelName": "香格里拉", "roomTypeId": 500101, "roomType": "大床房", "dayNumber": 1, "assignmentDate": "2026-07-01", "upgradePrice": null, "remark": null } ], "vehicleAssignments": [ { "assignmentId": 900001, "orderId": 700001, "vehicleType": "丰田普拉多", "vehicleCount": 1, "plateNumber": "蒙A·A1234", "driverName": "李师傅", "driverPhone": "138****1234", "remark": null, "createTime": "2026-04-20 10:00:00" } ], "transports": { "orderId": 700001, "arrivals": [ { "planId": 800001, "orderId": 700001, "direction": "ARRIVAL", "directionLabel": "到达", "transportType": "FLIGHT", "transportTypeLabel": "飞机", "transportNo": "CZ6255" } ], "departures": [] } } } ``` > 💡 三段子项**都带主键**:`hotelAssignments[].assignmentId` / `vehicleAssignments[].assignmentId` / `transports.arrivals[].planId`,从查看态进入编辑态的路径完全通畅。 --- ## 二、现有接口字段修复 ### 🐛 `GET /admin/order/{orderId}` — 订单详情 **修复**:`hotelAssignmentDetails[].assignmentDate` 之前返回 `null`(由于字段存储方式改为 `dayNumber`),现已由后端按 `order.departureDate + dayNumber - 1` 现算填充。 前端若此前已降级为展示 `-` 或基于 `dayNumber` 自行计算日期,可在本次迭代后恢复直接读取 `assignmentDate`。其他字段保持不变。 --- ## 三、与已有接口关系 | 接口 | 作用 | 状态 | | --- | --- | --- | | `GET /admin/order/{orderId}/hotel-assignment` | 查酒店分配 | 已有(未变,仍可单独调) | | `GET /admin/order/{orderId}/vehicle-assignment` | 查车辆分配 | 已有(未变,仍可单独调) | | `GET /admin/order/{orderId}/arrival` | 查到达批次(按方向分组) | 已有(未变,仍可单独调) | | `GET /admin/order/{orderId}/itinerary/summary` | 一次返回上述三段 | **本期新增** | 聚合接口与三个独立接口**并存**: - **查看态**:推荐走 `/itinerary/summary`,一次请求拿全。 - **编辑态**:仍各自调子接口,减少无关数据传输。 --- ## 四、数据库变更 **无**。纯服务层聚合,数据源均是既有表。 --- ## 五、错误码 HTTP 始终返回 200,错误码在 `Result.code` 中。 | code | 触发 | 说明 | | --- | --- | --- | | 200 | 正常 | 成功(无分配数据返回空列表/空子对象) | | 400 | 订单不存在 | `BusinessException` | --- ## 六、关联 - PR: [wx/HL#1064](https://git.1814.love:8443/wx/HL/pulls/1064)(已合并到 dev) - 相关接口: - `GET /admin/order/{orderId}/hotel-assignment` · `GET /admin/order/{orderId}/vehicle-assignment` — 见 `2026-04-20_order-v2_admin-assignment-get.md` - `GET /admin/order/{orderId}/arrival` — 见 `2026-04-20_order-v2_arrival.md`(C 端,管理端字段结构一致) - `PUT /admin/order/{orderId}/hotel-assignment` `date → dayNumber` 破坏性变更 — 见 `2026-04-21_order-v2_hotel-assignment-day-number.md`