--- schema: "hl-changelog/v2" ticket: "8387" title: "订单房间分配:下线旧版三接口 GET/POST/PUT /v3/admin/order/{id}/room" consumer: "admin" author: "wx(GIT)" change_type: "删除接口" backend_status: "deployed" gateway_status: "verified" frontend_status: "not_required" frontend_owner: "" frontend_ref: "" target_release: "" verified_at: "" status_note: "订单侧旧版房间分配三个端点(GET list、POST add、PUT edit)已下线。API-SPEC 已标旧版,房务配房走 house 域 §2.5 接口。hl-ui 零调用。前端实证(mmg 2026-09-27):被删三口零调用(仅 /order/{id}/room-info/check-diff 不同路径),not_required 复核确认。" updated_at: "2026-09-26" base: "dev-v3" --- # order-v3:下线订单房间分配旧版接口(管理后台) **服务**: hl-order-service-v3 **PR**: #8398 **Issue**: #8387 --- ## ⚠️ 关键变化 三个接口已删除,路由不存在: - `GET /v3/admin/order/{id}/room`:查询订单房间分配列表(旧版) - `POST /v3/admin/order/{id}/room`:新增房间分配(旧版) - `PUT /v3/admin/order/{id}/room/{roomAssignmentId}`:编辑房间分配(旧版) 调用返回 HTTP 200 + `code: 404`(不是 HTTP 404)。房务配房改用 house 域接口:新增/清空配房走 `POST/DELETE /v3/admin/order/hotel-requirements/{requirementId}/assignments` 等 API-SPEC-HOUSE §2.2~§2.4c 写口;查询订单房间用 `GET /v3/admin/order/orders/{orderId}/rooms`(§2.5)。 --- ## 一、背景 订单侧房间分配(`order_room_assignment` 表)是房务配房的补充记录,实现早于 house 域统一接口。API-SPEC §8 已标为"旧版",注释指向 house 域 §2.5 为正式接口。 hl-ui 全部远程 ref 无调用;房务页面已改用 house 域配房端点。后台读写入口全删,仅保留 internal bundle 读——house 域 `RoomAssignmentVO` 与 hl-mp-service 的 C 端聚合仍需 `order_room_assignment` 表数据,故表与内部读逻辑保留,仅删对外读写接口。 --- ## 二、变更接口清单 | # | 接口 | 方法 | 路径 | 变更类型 | 说明 | |---|------|------|------|----------|------| | 1 | 查询房间分配列表(旧) | GET | `/v3/admin/order/{id}/room` | 删除 | 路由已删,任何调用返回 404 | | 2 | 新增房间分配(旧) | POST | `/v3/admin/order/{id}/room` | 删除 | 路由已删,返回 404 | | 3 | 编辑房间分配(旧) | PUT | `/v3/admin/order/{id}/room/{roomAssignmentId}` | 删除 | 路由已删,返回 404 | 房务配房改用 house 域接口(API-SPEC-HOUSE):提交配房 `POST /v3/admin/order/hotel-requirements/{requirementId}/assignments`(§2.2)、清空配房 `DELETE .../assignments`(§2.4b/§2.4c)、按天确认 `POST .../assignments/days/{dayNumber}/confirm`(§2.3)、调整入住 `PUT .../assignments/{id}/placement`(§2.3b);查询订单房间用 `GET /v3/admin/order/orders/{orderId}/rooms`(§2.5)。 --- ## 三、接口详情 ### 1. 房间分配查询 `GET /v3/admin/order/{id}/room` **VO**: `已删除` **状态**:已删除。路由不存在,返回 404。 #### 使用场景 该接口已删除。 #### 入参字段表 | 字段 | 位置 | 类型 | 必填 | 约束 | 说明 | |------|------|------|------|------|------| | — | — | — | — | — | 已删除 | #### 出参字段表 | 字段 | 类型 | 说明 | |------|------|------| | — | — | 已删除 | #### 请求示例 ```http GET /v3/admin/order/770145/room HTTP/1.1 Host: api.test.1814.love:9443 Authorization: Bearer ``` #### 响应示例 HTTP 状态码 **200**(非 404),业务错误码 404: ```json { "code": 404, "message": "接口不存在: GET /v3/admin/order/770145/room", "success": false, "data": null } ``` #### 空数据 / 降级响应 不适用。前端应只判 `code`,不依赖 HTTP 状态码。 #### 错误响应 ```json { "code": 404, "message": "接口不存在: GET /v3/admin/order/770145/room", "success": false, "data": null } ``` #### 业务边界 - 接口已删除,路由不存在;调用返回 HTTP 200 + `code: 404`。 - 阳性对照:同 Controller 下 `GET /v3/admin/order/{id}` 正常返回 200,证明是该路由本身被删,不是订单不存在。 - `order_room_assignment` 表数据仍可由服务内部通过 `internal/order/orders/{orderId}/assignments` 读取(该 internal 端点经网关直接拒绝「接口不可访问」,只服务间可达,不对前端暴露)。 --- ### 2. 房间分配新增 `POST /v3/admin/order/{id}/room` **VO**: `已删除` **状态**:已删除。路由不存在,返回 404。 #### 使用场景 该接口已删除。 #### 入参字段表 | 字段 | 位置 | 类型 | 必填 | 约束 | 说明 | |------|------|------|------|------|------| | — | — | — | — | — | 已删除 | #### 出参字段表 | 字段 | 类型 | 说明 | |------|------|------| | — | — | 已删除 | #### 请求示例 ```http POST /v3/admin/order/770145/room HTTP/1.1 Host: api.test.1814.love:9443 Authorization: Bearer Content-Type: application/json {} ``` #### 响应示例 HTTP 状态码 **200**(非 404),业务错误码 404: ```json { "code": 404, "message": "接口不存在: POST /v3/admin/order/770145/room", "success": false, "data": null } ``` #### 空数据 / 降级响应 不适用。前端应只判 `code`,不依赖 HTTP 状态码。 #### 错误响应 ```json { "code": 404, "message": "接口不存在: POST /v3/admin/order/770145/room", "success": false, "data": null } ``` #### 业务边界 - 路由已删除;调用返回 HTTP 200 + `code: 404`。 - 新增房间分配改走 house 域 `POST /v3/admin/order/hotel-requirements/{requirementId}/assignments`(API-SPEC-HOUSE §2.2)。 --- ### 3. 房间分配编辑 `PUT /v3/admin/order/{id}/room/{roomAssignmentId}` **VO**: `已删除` **状态**:已删除。路由不存在,返回 404。 #### 使用场景 该接口已删除。 #### 入参字段表 | 字段 | 位置 | 类型 | 必填 | 约束 | 说明 | |------|------|------|------|------|------| | — | — | — | — | — | 已删除 | #### 出参字段表 | 字段 | 类型 | 说明 | |------|------|------| | — | — | 已删除 | #### 请求示例 ```http PUT /v3/admin/order/770145/room/123456 HTTP/1.1 Host: api.test.1814.love:9443 Authorization: Bearer Content-Type: application/json {} ``` #### 响应示例 HTTP 状态码 **200**(非 404),业务错误码 404: ```json { "code": 404, "message": "接口不存在: PUT /v3/admin/order/770145/room/123456", "success": false, "data": null } ``` #### 空数据 / 降级响应 不适用。前端应只判 `code`,不依赖 HTTP 状态码。 #### 错误响应 ```json { "code": 404, "message": "接口不存在: PUT /v3/admin/order/770145/room/123456", "success": false, "data": null } ``` #### 业务边界 - 路由已删除;调用返回 HTTP 200 + `code: 404`。 - 编辑房间分配改走 house 域 `PUT /v3/admin/order/hotel-requirements/{requirementId}/assignments/{id}/placement`(API-SPEC-HOUSE §2.3b)。 --- ## 四、契约约束与正确调用方式 | 场景 | 改前 | 改后 | |------|------|------| | 查看订单的房间 | `GET /v3/admin/order/{orderId}/room` | 调用返回 HTTP 200 + code 404;改用 `GET /v3/admin/order/orders/{orderId}/rooms`(API-SPEC-HOUSE §2.5) | | 新增房间 | `POST /v3/admin/order/{orderId}/room` | 路由已删,不可用;改用 `POST /v3/admin/order/hotel-requirements/{requirementId}/assignments`(§2.2) | | 修改房间 | `PUT /v3/admin/order/{orderId}/room/{id}` | 路由已删,不可用;改用 `PUT /v3/admin/order/hotel-requirements/{requirementId}/assignments/{id}/placement`(§2.3b) | C 端房型统计(`GET /mp/order/{orderId}/hotels`)的 `roomTypeStats` 仍从 `order_room_assignment` 表经 internal bundle(hl-mp-service `MpServiceDetailAggregationService`)汇聚,对外无变化。internal 端点仅服务间可达,网关对前端直接拒绝「接口不可访问」。 --- ## 五、数据库行为 无变更、无 Flyway。表 `order_room_assignment` 保留;存量数据由 internal bundle 继续读取。 --- ## 六、边界行为 | 场景 | 行为 | |---|---| | 调用 GET /order/{id}/room | 返回 HTTP 200 + code 404 | | 调用 POST /order/{id}/room | 返回 HTTP 200 + code 404 | | 调用 PUT /order/{id}/room/{roomAssignmentId} | 返回 HTTP 200 + code 404 | | 前端经网关调用 `GET /v3/internal/order/orders/{orderId}/assignments` | 网关直接拒绝,返回「接口不可访问」(设计如此,非前端可用入口) | | 调用 `GET /mp/order/{orderId}/hotels` | 返回 200,roomTypeStats 从 `order_room_assignment` 经 internal bundle 读 | ## 六.6、修改前后对比 | 维度 | 改前 | 改后 | |------|------|------| | 房间分配 GET | 路由存在,可查询 | 路由删除,返回 HTTP 200 + code 404 | | 房间分配 POST | 路由存在,可新增 | 路由删除,返回 HTTP 200 + code 404 | | 房间分配 PUT | 路由存在,可编辑 | 路由删除,返回 HTTP 200 + code 404 | ## 六.7、影响评估 - **兼容性**:hl-ui 零调用这三个端点,无迁移负担。C 端房型统计无变化(经 internal bundle)。 - **数据影响**:零;表与 API 读逻辑保留。 - **其它服务**:hl-mp-service 无直接调用;fleet 无影响。 --- ## 七、不影响范围 - House 域房间分配接口(§2.5 GET/POST/DELETE):无改动。 - Internal bundle (`GET /v3/internal/order/orders/{orderId}/assignments`):保留,继续供 hl-mp-service 读。 - `order_room_assignment` 表:保留;级联软删仍在各写口生效。 - `RoomAssignmentVO` 与 `toRoomVO`:保留(bundle 在用)。 - 网关配置:无改动。 --- ## 八、测试环境已验证 部署:测试环境 order-v3 `1f65d7894`(含 e2313790b)。网关 `api.test.1814.love:9443`。 | # | 场景 | 实测结果 | |---|---|---| | 1 | `GET /v3/admin/order/{id}/room` | HTTP 200 + code 404「接口不存在: …」 | | 2 | `POST /v3/admin/order/{id}/room` | HTTP 200 + code 404「接口不存在: …」 | | 3 | `PUT /v3/admin/order/{id}/room/{roomAssignmentId}` | HTTP 200 + code 404「接口不存在: …」 | | 4 | 阳性对照:同 Controller `GET /v3/admin/order/{id}` | 200(证明是路由被删,不是订单不存在) | | 5 | 服务内部端口直连读 `order_room_assignment`(internal bundle) | 读数与只读 SQL 一致(经网关 internal 不可达,这是设计) | 调用来源:测试网关 nginx 日志窗口内旧 `room` 三路径共 71 次,全部是脚本(Python-urllib / curl / 空 UA),零浏览器 UA。 --- ## 十、相关文档 - Issue:https://git.1814.love/wx/HL/issues/8387 - PR:https://git.1814.love/wx/HL/pulls/8398 - 替代接口:写房间分配走 API-SPEC-HOUSE §2.5 的配房接口(`POST /v3/admin/order/hotel-requirements/{requirementId}/assignments` 等);读订单房间用 `GET /v3/admin/order/orders/{orderId}/rooms` - API-SPEC:§8「房间分配」与 §11 错误码表已标下线 --- ## 关联 / 联系人 ### 联系人 - **后端负责人**: @wx