hl-api-changelog/changelogs/2026-04/2026-04-19_mp-tier-compare-hotel-cover.md
API Changelog Bot ab98d6a4f1 小程序档位对比补酒店封面图/类型/城市
PR #923 squash 合并到 dev commit 0e029c38
GET /mp/product/{id}/tier-compare 返回 tiers[].hotels[] 每项新增 coverUrl/hotelType/city
PR #913 姊妹修复 字段兜底/key规则 与主详情完全一致
2026-04-19 04:19:38 +08:00

4.7 KiB

小程序档位对比 - 住宿补酒店封面图 / 类型 / 城市

  • 日期: 2026-04-19
  • PR: #923 (squash merge → dev, 0e029c38)
  • 类型: FIX
  • 状态: 已合并到 dev + 测试环境部署完成 + API 验证通过
  • 服务: hl-product-service-v2端口 8083
  • 关联: PR #913 姊妹修复(主详情已修,本 PR 覆盖档位对比)

一、为什么加这三个字段

PR #913 修复了 GET /mp/product/{id} 主详情的住宿封面图缺失(每日住宿卡左侧 100x100 封面图位)。但档位对比接口 GET /mp/product/{id}/tier-comparetiers[].hotels[] 同样没返回 coverUrl/hotelType/city,前端档位对比画面展示酒店时封面依然空白。

根因:MpProductService.tierCompare(...) 组装 HotelItem只做 BeanUtil.toBeanProductDayHotelDO 快照拷贝,未调 resourceDetailFeignClient.batchDetails(...) 取酒店资源详情(与主详情修复前症状一致)。


二、变更接口清单

# 方法 路径 影响
1 GET /mp/product/{id}/tier-compare 返回的 tiers[].hotels[] 每项新增 coverUrl / hotelType / city 三字段

三、字段定义

MpTierCompareRespVO.HotelItem 新增字段

字段 类型 说明 示例 可能为 null
coverUrl String 酒店封面图 URL来自资源服务 cover "https://hlgl-test.oss-cn-beijing.aliyuncs.com/test/material/2026/03/07/xxx.jpg" 酒店资源未配封面或 Feign 异常
hotelType String 酒店类型(字典 hotel_typeFIVE_STAR / FOUR_STAR / BOUTIQUE / HOMESTAY / ... "FIVE_STAR" 可能为 null
city String 酒店所在城市 "呼伦贝尔市" 可能为 null

既有字段(语义不变)

id / productId / dayId / dayNumber / tierSeq / hotelId / hotelName / roomTypeId / roomTypeName / roomCount / isDefault / sortOrder


四、响应示例对比

{
  "code": 200,
  "data": {
    "tiers": [{
      "tierSeq": 1,
      "tierName": "标准",
      "hotels": [{
        "dayNumber": 1,
        "hotelId": 9001,
        "hotelName": "呼伦贝尔香格里拉大酒店",
        "tierSeq": 1
      }]
    }]
  }
}

{
  "code": 200,
  "data": {
    "tiers": [{
      "tierSeq": 1,
      "tierName": "标准",
      "hotels": [{
        "dayNumber": 1,
        "hotelId": 9001,
        "hotelName": "呼伦贝尔香格里拉大酒店",
        "tierSeq": 1,
        "coverUrl": "https://hlgl-test.oss-cn-beijing.aliyuncs.com/test/material/2026/03/07/4be257ef92d0b76e401792e2f445c96d.jpg",
        "hotelType": "HOTEL",
        "city": "呼伦贝尔市"
      }]
    }]
  }
}

五、和主详情一致性保证

与 PR #913 的主详情修复字段顺序和兜底逻辑完全一致(开发验收员已核对):

做法
resourceMap 的 key "HOTEL:" + hotelId
字段覆盖顺序 coverhotelTypecityname
null 值策略 dto == null / 各字段 null 一律保留 BeanUtil 快照,不强制覆盖
Feign 异常 try/catchresourceMap = Map.of() + log.warn
批量 Feign 一次 batchDetails(null, hotelIds, null, null, null),非 N+1

前端不会出现同一个酒店在主详情和档位对比接口中 coverUrl 值不一致的情况。


六、前端容错要求

2026-04-19_mp-product-detail-hotel-cover.md 完全一致:三个字段均可能为 null,务必做判空:

  • coverUrl 为空 → 显示默认占位图
  • city 为空 → 不显示地理位置标签
  • hotelType 为空 → 不显示类型标签

七、不兼容变更

。纯新增字段,既有字段全部保留语义不变。


八、运维注意事项

本接口有 5 分钟 Redis 缓存key 前缀 mp:product:tier-compare:)。测试环境已在本次部署时清理过;生产部署时务必再清一次,否则 C 端最长 5 分钟内仍返回旧数据:

redis-cli --scan --pattern 'mp:product:tier-compare:*' | xargs -r redis-cli del

九、回归验证

测试环境已验证productId=2044306857534636034

curl -sk "http://127.0.0.1:8080/mp/product/2044306857534636034/tier-compare" \
  -H "Authorization: Bearer {token}" \
  | jq '.data.tiers[].hotels[] | {hotelName, coverUrl, hotelType, city}'

实测结果

  • 呼伦贝尔香格里拉大酒店 → coverUrl 真实 OSS URL、city=呼伦贝尔市
  • 海拉尔海棠酒店 → coverUrl 真实 OSS URL、city=呼伦贝尔市
  • 三个新字段键均存在,均有真实值(非 null