# 酒店分配接口 date → dayNumber — 2026-04-21

> **服务** hl-order-service-v2（端口 8094）· **类型** refactor · **关联** Issue #1049 / PR #1051
> **破坏性变更**：请求入参字段名由 `date` 改为 `dayNumber`

---

## 一、影响接口

### ✏️ `PUT /admin/order/{orderId}/hotel-assignment` — 分配酒店（管理端）

**请求参数变更**：每个 `assignments[]` 元素的「日期字段」从 `date`（`LocalDate`）改为 `dayNumber`（`Integer`，第几天，从 1 开始）。

**变更对比**：

| 旧字段 | 新字段 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- | --- |
| ~~`date`~~ | **`dayNumber`** | `Integer` | ✅ | 第几天（从 1 开始，≥1） |

**其他字段保持不变**：`familyIndex` · `hotelId` · `hotelName` · `roomTypeId` · `roomType` · `upgradePrice` · `remark`

**新请求示例**：

```json
PUT /admin/order/700001/hotel-assignment
{
  "assignments": [
    {
      "familyIndex": 1,
      "hotelId": 2023714929877450753,
      "hotelName": "呼伦贝尔香格里拉大酒店",
      "roomTypeId": 3002000000000000013,
      "roomType": "大床房",
      "dayNumber": 1,
      "remark": ""
    },
    {
      "familyIndex": 1,
      "hotelId": 2023714929877450753,
      "hotelName": "呼伦贝尔香格里拉大酒店",
      "roomTypeId": 3002000000000000013,
      "roomType": "大床房",
      "dayNumber": 2
    }
  ]
}
```

> ⚠️ 真实入住日期由后端按 `order.departureDate + dayNumber - 1` 现算，前端传递时**不再需要知道订单出发日期**。

---

### ✏️ `GET /admin/order/{orderId}/hotel-assignment` — 查询酒店分配列表（管理端）

**返回值字段变更**：新增 `dayNumber` 字段；`assignmentDate` 字段**保留**（Service 层按 `order.departureDate + dayNumber - 1` 现算填充，前端展示逻辑无需改）。

**`HotelAssignmentDetailVO` 字段**：

| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `assignmentId` | `Long` | 分配ID |
| `orderId` | `Long` | 订单ID |
| `familyIndex` | `Integer` | 家庭序号（从1开始） |
| `hotelId` | `Long` | 酒店ID |
| `hotelName` | `String` | 酒店名称 |
| `roomTypeId` | `Long` | 房型ID |
| `roomType` | `String` | 房型名称 |
| **`dayNumber`** | `Integer` | **新增**：第几天（从1开始） |
| `assignmentDate` | `LocalDate` | 入住日期（后端现算，保留） |
| `upgradePrice` | `BigDecimal` | 手动覆盖升级差价 |
| `remark` | `String` | 备注 |

---

### ✏️ `GET /mp/order/{orderId}/hotels` — C 端订单住宿弹窗

`MpHotelItemVO` 同步新增 `dayNumber` 字段；`assignmentDate` 保留（后端现算）。

---

## 二、数据库变更

**已在测试服执行**（本 changelog 生成时）：

```sql
ALTER TABLE order_hotel_assignment
    ADD COLUMN day_number INT NOT NULL COMMENT '第几天(从1开始,与meal/scenic assignment一致)' AFTER room_type;
ALTER TABLE order_hotel_assignment DROP COLUMN assignment_date;
```

历史数据按 `DATEDIFF(assignment_date, order.departure_date) + 1` 回填。

> 生产部署顺序必须 **先跑迁移 SQL 再重启服务**，否则老代码写入会因 `assignment_date` 列缺失而失败。

---

## 三、错误码

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

| code | 触发 | 说明 |
| --- | --- | --- |
| 200 | 正常 | 成功 |
| 400 | `dayNumber` 缺失 | `第几天不能为空` |
| 400 | `dayNumber < 1` | `第几天必须大于等于1` |

---

## 四、关联

- Issue: [wx/HL#1049](https://git.1814.love:8443/wx/HL/issues/1049)
- PR: [wx/HL#1051](https://git.1814.love:8443/wx/HL/pulls/1051)（已合并到 dev）
- 前置原因：原 `assignment_date` 在订单出发日变更时需要级联更新，且与 `order_meal_assignment` / `order_scenic_assignment` 的 `day_number` 字段设计不一致
