---
schema: "hl-changelog/v2"
ticket: "5630"
title: "房型分类入口字典白名单校验 + 存量 BIG_BED 归一，行程/配房房型恢复中文显示"
consumer: "admin"
author: "wx"
change_type: "修改接口"
backend_status: "deployed"
gateway_status: "verified"
frontend_status: "not_required"
frontend_owner: ""
frontend_ref: ""
target_release: ""
verified_at: ""
status_note: "后端完成：PR #5634 合并 dev-v3（4f881af977be50850a78c3b05ac9912758b8b87c）并部署 TEST；网关实测创建/更新房型 roomCategory=BIG_BED 被 310210 拒绝，存量 BIG_BED 三处数据源归一 KING 后订单详情 roomCategoryLabel 显示中文「豪华大床」。"
updated_at: "2026-08-07"
base: "dev-v3"
generated: "2026-08-07T11:45:00+08:00"
---

# 房型分类字典白名单校验 + 存量 BIG_BED 归一（#5630）

## 背景

行程安排/配房的房型显示英文 `BIG_BED` 无中文。根因链（TEST 库实证）：

1. 房型管理入口 `RoomTypeCreate/UpdateRequest.roomCategory` 只校验非空+长度，**无字典 `room_category` 白名单校验** → `BIG_BED` 经房型管理入口写入 `room_type`（2026-02-19）；
2. 配房时 `room_type.room_category` 快照进 `house_hotel_assignment` / `house_requirement_assignment_snapshot`，需求 `order_hotel_requirement.days` JSON 亦含该 code；
3. 房型 2026-05-28 已被人工改回 `KING`，但快照停留 `BIG_BED`；字典 `room_category` 无 `BIG_BED`（有 `KING`=豪华大床）→ `roomCategoryLabel` 字典映射失败 → 原样显示英文。

## 变更内容

`POST /admin/hotel/{hotelId}/room-type` 与 `PUT /admin/hotel/room-type/{roomTypeId}` 新增房型分类字典白名单校验：

- `roomCategory` 必须在字典 `room_category` 已维护 value 集合内（STANDARD/SINGLE/TWIN/QUEEN/KING/DELUXE/SUITE/FAMILY/YURT/SPECIAL/PARENT_CHILD），否则返回业务错误 **310210**（`房型分类无效：{code}，仅允许字典 room_category 已维护的值`），不落库。
- 字典服务异常/字典数据缺失时降级放行（warn 日志），不阻塞房型管理主流程。
- `updateRoomType` 未变更 `roomCategory` 字段时不触发该校验。

补充说明：

- 无 DTO 字段结构变化；非法 category 此前会静默写库，现在返回 400 业务错误码 310210，属行为收紧。
- 前端无需适配：房型分类表单一向从字典 `room_category` 下拉选择，字典内值全部放行。

## 存量数据处理（TEST 已执行，生产需按相同 SQL 归一）

`BIG_BED→KING`（跟随源房型 3002000000000000013 当前口径，字典映射 `KING→豪华大床`）：

```sql
-- TEST 已执行并复核清零（4+2+2 需求 4 处）
UPDATE house_hotel_assignment SET room_category='KING' WHERE room_category='BIG_BED';              -- 4 条
UPDATE house_requirement_assignment_snapshot SET room_category='KING' WHERE room_category='BIG_BED'; -- 2 条
-- order_hotel_requirement.days JSON：读出→递归 roomCategory BIG_BED→KING→写回（2 需求 4 处）
```

## 验证

- 定向测试 `RoomTypeCategoryValidationTest` 8/8：BIG_BED 拒绝（不写库）/KING 放行/字典异常降级/空字典降级/update 不改 category 不触发/null 拒绝。
- 合并后 dev-v3（4f881af9）`mvn -pl hl-resource-service -am verify`：2596 项 0 失败（3 个 option Mapper Testcontainers 测试因 Docker Desktop 29 API≥1.40 与老 ryuk 0.7.0 不兼容排除，基线同失败已实证，与本改动无关）。
- 网关实测 9/9：创建/更新 BIG_BED → 310210 拒绝；归一前订单详情 label=BIG_BED（英文实证）；三处归一复核清零；归一后两订单 label 全显示「豪华大床」。
