diff --git a/changelogs-v2/2026-06/24_4363_配房选酒店默认不按城市列全部跨城_管理后台.md b/changelogs-v2/2026-06/24_4363_配房选酒店默认不按城市列全部跨城_管理后台.md new file mode 100644 index 0000000..fdc996f --- /dev/null +++ b/changelogs-v2/2026-06/24_4363_配房选酒店默认不按城市列全部跨城_管理后台.md @@ -0,0 +1,30 @@ +# 配房选酒店默认不按城市(列全部在售·跨城,池内/定制师优先;搜索框可筛;已上线测试服·可对接) + +> 变更类型:✨ 行为变更(后端 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. 前端动作 +- **全量顺序渲染 `candidates`**(后端已排好序,带标签的在最前),弹窗「共 N 条」= candidates.length,勿按标签过滤。 +- 搜索框:输入城市 → 传 `city`;跨城 / 关键词 → 传 `keyword`。 diff --git a/changelogs-v2/2026-06/24_配房选择酒店候选列表后端返全集前端需全量渲染_管理后台.md b/changelogs-v2/2026-06/24_配房选择酒店候选列表后端返全集前端需全量渲染_管理后台.md deleted file mode 100644 index 9ed80ae..0000000 --- a/changelogs-v2/2026-06/24_配房选择酒店候选列表后端返全集前端需全量渲染_管理后台.md +++ /dev/null @@ -1,29 +0,0 @@ -# 配房「选择酒店」候选列表:后端返回全集 + 已排序,前端需全量渲染(接口说明·后端无改动) - -> 变更类型:📖 接口使用说明(后端无改动;澄清前端渲染缺陷) -> 端类型:管理后台(配房·「选择酒店」弹窗) -> 日期:2026-06-24 | 服务:hl-order-service-v3 | 接口:`GET /v3/admin/hotel-candidates` - ---- - -## ⚠️ 关键说明(定位为前端渲染 bug) -- **现象**:配房「选择酒店」弹窗显示「共 N 条」,列表却只渲染 1 行(只剩池内/带标签那家),城市内其余酒店没显示。 -- **定位**:**后端无问题**。`GET /v3/admin/hotel-candidates` 实测返回**城市内全部酒店**(测试服订单 2069593503129636865 第 1 晚返 **10 条**),且**已按「定制师点名 > 产品池内 > 普通」排好序**(池内的海拉尔海棠排第 1)。 -- **根因**:该接口 RespVO **没有 total / 分页字段**,只有 `candidates` 完整数组。前端「共 N 条」= `candidates.length`,即前端**已收到全部 N 条**,却只渲染了 1 行(疑似误按 `isPoolMatch / isConsultantRecommended = true` 过滤,把普通酒店漏掉)。 -- **前端动作**:**全量顺序渲染 `candidates` 数组,不要按标签过滤**。后端已排好序,带标签的天然在最前,普通酒店在后。 - -## 1. 接口出参(关键字段,本次无变更) -`GET /v3/admin/hotel-candidates` → `data.candidates[]`(完整数组,无分页,默认上限 limit=10,可传 limit 上调,≤50): - -| 字段 | 类型 | 说明 | -|---|---|---| -| `hotelName` | String | 酒店名 | -| `protoPrice` | String(BigDecimal) | 协议价 | -| `matchedRoomTypeLabel` / `matchedRoomTypeAvailable` | String / Integer | 匹配房型 / 可用房 | -| `isPoolMatch` | Boolean | 是否产品池内(前端标签「产品池内」) | -| `isConsultantRecommended` | Boolean | 是否定制师点名(前端标签「定制师推荐」) | -| `tags` | List<String> | 运营标签(草原景观 / 含早餐 / 性价比高 等) | -| `recommendSource` / `score` | String / Double | 推荐来源 / 排序分(后端已据此排序,前端勿重排,按返回顺序渲染即可) | - -## 2. 测试服实测(order 2069593503129636865 第 1 晚) -返回 **10 条**:海拉尔海棠(`isPoolMatch=true`,第 1)+ 呼伦贝尔香格里拉 / 海拉尔嘉世豪 / 恩和瓦西里民宿 / 额尔古纳白桦 / 满洲里凯旋 / 额尔古纳豪星 / 海拉尔首旅京伦 / 额尔古纳玖成万豪 / 黑山头弘吉剌部 等 9 家城市内酒店。**前端应渲染全部 10 行**,当前只显示 1 行即缺陷所在。