hl-api-changelog/changelogs/2026-04/2026-04-21_order-v2_hotel-assignment-day-number.md

114 行
3.8 KiB
Markdown

此文件含有模棱两可的 Unicode 字符

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

# 酒店分配接口 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` 字段设计不一致