32 行
3.1 KiB
Markdown
32 行
3.1 KiB
Markdown
# 配房选酒店默认不按城市(列全部在售·跨城,池内/定制师优先;搜索框可筛;已上线测试服·可对接)
|
||
|
||
> 变更类型:✨ 行为变更(后端 order + resource 一并改,已部署测试服并 API 实测)
|
||
> 端类型:管理后台(配房·「选择酒店」弹窗)
|
||
> 日期:2026-06-24 | 工单:#4363 | PR:#4364 | 服务:hl-order-service-v3 + hl-resource-service
|
||
> 关联:承接 #4346(本单做全)。**更正本目录早前「配房选择酒店候选列表后端返全集」那篇**——彼时后端实为按行程城市过滤(非纯前端 bug,我先前定性有误,致歉),现已改为默认不按城市。
|
||
|
||
---
|
||
|
||
## ⚠️ 关键说明
|
||
- **行为变更**:配房「选择酒店」`GET /v3/admin/hotel-candidates` **默认不再按行程城市过滤**,改为**列全部在售酒店**(带标签的池内 / 定制师推荐由后端排最前)。
|
||
- 用户在搜索框输入城市 / 关键词时才按城市 / 关键词筛(`city` / `keyword` 入参,行为不变)。
|
||
- 接口**无 total / 分页字段**,`candidates` 是完整数组(默认上限 30,排序后截断)。**前端全量顺序渲染 candidates,勿按标签过滤**。
|
||
|
||
## 1. 入参 / 出参(契约不变,仅默认行为变)
|
||
`GET /v3/admin/hotel-candidates`:
|
||
- `orderId`(必传)/ `dayNumber`(推算 stayDate,**不再用于推算城市**)/ `city`(选填,搜索框指定才按城市筛)/ `keyword`(选填,跨城 / 省关键词搜)/ `limit`(默认 **30**,上限 50)。
|
||
- 出参 `data.candidates[]` 字段同前(hotelName / protoPrice / isPoolMatch / isConsultantRecommended / tags / ...);排序:定制师点名 > 池内 > 普通。
|
||
|
||
## 2. 测试服实测(order 2069593503129636865 第 1 晚)
|
||
| 调用 | data.city | 候选城市 | 条数 |
|
||
|---|---|---|---|
|
||
| 默认(不传 city) | null | **兴安盟 + 呼伦贝尔市(跨城)** | 10(全部在售,池内海拉尔海棠排第 1) |
|
||
| 传 `city=海拉尔` | 海拉尔 | 呼伦贝尔市 | 1(按城市筛) |
|
||
|
||
改前同一调用只返呼伦贝尔市 10 条(锁行程城市);改后跨城返全部在售(含兴安盟阿尔山成悦酒店)。
|
||
|
||
## 3. 前端动作
|
||
- **⚠️ 默认别传 `city`(实测抓包发现的关键 bug)**:当前配房「选择酒店」弹窗自动把行程城市(如「海拉尔区、满洲里市」)塞进 `city` 入参,后端就按城市前缀匹配——而「海拉尔区、满洲里市」是多地名拼接串,库内酒店 city 是「呼伦贝尔市」,前缀匹配不到 → 城市查 0 条,只剩定制师指定(preferredHotelId)的 1 条。**默认请勿传 city**(去掉自动带的行程城市标签),只在用户搜索框输入城市时才传 city,这样才返全部跨城(实测不传 city 返 10 条跨城)。
|
||
- **全量顺序渲染 `candidates`**(后端已排好序,带标签的在最前),弹窗「共 N 条」**= `candidates.length`**(实测前端「共 8 条」与实际 candidates 条数对不上,请改用数组长度),勿按标签过滤。
|
||
- 搜索框:输入城市 → 传 `city`;跨城 / 关键词 → 传 `keyword`。
|