# 管理端订单车辆/酒店分配独立 GET 接口 — 2026-04-20

> **服务** hl-order-service-v2（端口 8094）· **类型** feat · **关联** PR #1009 / #1018
> **使用场景**：管理端订单详情 · 行程安排 Tab · 懒加载车辆/酒店分配数据

---

## 一、新增接口（2 个）

### 🆕 `GET /admin/order/{orderId}/vehicle-assignment` — 查询车辆分配列表

**功能**：行程安排 Tab 懒加载。司机电话默认脱敏返回（如 `138****1234`）。订单不存在返回业务异常。

**请求参数**：

| 参数 | 位置 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- | --- |
| `orderId` | Path | `Long` | ✅ | 订单ID |

**返回值** `Result<List<VehicleAssignmentVO>>`：

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `assignmentId` | `Long` | 分配ID |
| `orderId` | `Long` | 订单ID |
| `vehicleType` | `String` | 车型名称（如"丰田普拉多"） |
| `vehicleCount` | `Integer` | 车辆数 |
| `plateNumber` | `String` | 车牌号（如"蒙A·A1234"） |
| `driverName` | `String` | 司机姓名 |
| `driverPhone` | `String` | 司机电话（脱敏，如 `138****1234`） |
| `remark` | `String` | 备注 |
| `createTime` | `LocalDateTime` | 创建时间 |

**响应示例**：

```json
{
  "code": 200,
  "data": [
    {
      "assignmentId": 900001,
      "orderId": 700001,
      "vehicleType": "丰田普拉多",
      "vehicleCount": 1,
      "plateNumber": "蒙A·A1234",
      "driverName": "李师傅",
      "driverPhone": "138****1234",
      "remark": null,
      "createTime": "2026-04-20 10:00:00"
    }
  ]
}
```

---

### 🆕 `GET /admin/order/{orderId}/hotel-assignment` — 查询酒店分配列表

**功能**：行程安排 Tab 懒加载。按家庭/日期返回结构化酒店分配。订单不存在返回业务异常。

**请求参数**：

| 参数 | 位置 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- | --- |
| `orderId` | Path | `Long` | ✅ | 订单ID |

**返回值** `Result<List<HotelAssignmentDetailVO>>`：

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `assignmentId` | `Long` | 分配ID |
| `orderId` | `Long` | 订单ID |
| `familyIndex` | `Integer` | 家庭序号（从1开始） |
| `hotelId` | `Long` | 酒店ID（资源服务） |
| `hotelName` | `String` | 酒店名称 |
| `roomTypeId` | `Long` | 房型ID（资源服务） |
| `roomType` | `String` | 房型名称 |
| `assignmentDate` | `LocalDate` | 分配日期 |
| `upgradePrice` | `BigDecimal` | 手动覆盖升级差价（null=使用系统计算） |
| `remark` | `String` | 备注 |

**响应示例**：

```json
{
  "code": 200,
  "data": [
    {
      "assignmentId": 800001,
      "orderId": 700001,
      "familyIndex": 1,
      "hotelId": 500001,
      "hotelName": "海拉尔铂尔曼大酒店",
      "roomTypeId": 500101,
      "roomType": "豪华大床房",
      "assignmentDate": "2026-07-01",
      "upgradePrice": null,
      "remark": null
    }
  ]
}
```

---

## 二、与已有接口关系

| 接口 | 作用 | 状态 |
| --- | --- | --- |
| `PUT /admin/order/{orderId}/hotel-assignment` | 按天按家庭分配酒店 | 已有（未变） |
| `POST /admin/order/{orderId}/hotel-assignment/preview` | 升级差价预览 | 已有（未变） |
| 新增的两个 `GET` | 独立查询，供列表懒加载 | 本期新增 |

订单详情接口 `GET /admin/order/{orderId}` 原有 `hotelAssignmentDetails` / `vehicleInfo` 等字段保持不变；新增的独立 GET 用于避免一次性加载全量订单详情时拉取重量级分配数据。

---

## 三、数据库变更

**无**。底层 `order_hotel_assignment` / `order_vehicle_assignment` 表未改。

---

## 四、错误码

HTTP 始终返回 200，错误码在 `Result.code` 中。

| code | 触发 | 说明 |
| --- | --- | --- |
| 200 | 正常 | 成功（无分配数据返回空列表） |
| 400 | 订单不存在 | `BusinessException` |

---

## 五、关联

- PR: [wx/HL#1018](https://git.1814.love:8443/wx/HL/pulls/1018)
