diff --git a/changelogs/2026-04/2026-04-19_mp-product-detail-hotel-cover.md b/changelogs/2026-04/2026-04-19_mp-product-detail-hotel-cover.md new file mode 100644 index 0000000..39f2426 --- /dev/null +++ b/changelogs/2026-04/2026-04-19_mp-product-detail-hotel-cover.md @@ -0,0 +1,173 @@ +# 小程序产品详情 - 住宿信息补酒店封面图 / 类型 / 城市 + +- **日期**: 2026-04-19 +- **Commit**: [2625331f](https://git.1814.love:8443/wx/HL/commit/2625331f) (分支 `fix/0419-business-hotfixes`,批量 PR 待合) +- **类型**: FIX +- **状态**: 已 commit + push,待批量 PR 合入 dev + 部署测试环境 +- **服务**: hl-product-service-v2(端口 8083,通过网关暴露 `/mp/product/**`) + +--- + +## 一、为什么加这三个字段 + +原型(`小蒙马.pen` → `S6-住宿安排`)的每晚住宿卡片结构: + +``` +┌────────┬──────────────────────┐ +│ │ 第N晚·城市名(小标签) │ +│ 封面图 │ 酒店名称(粗体) │ +│ 100x100│ 一句话描述 │ +└────────┴──────────────────────┘ +``` + +此前后端返回的 `HotelInfo` **只有 hotelName + 档位字段**,前端拿不到封面图 URL、酒店类型(五星/四星等)、酒店所在城市,小程序端显示为空白图位。 + +根因:`MpProductDetailAssembler.fetchResourceDetails(...)` 原先只收集 `nodeType=HOTEL` 节点的 hotelId 去批量查 `ResourceDetailDTO`,而 `product_day_hotel` 表里的 hotelId **从未进入批量查参数**,所以 HotelInfo 始终拿不到酒店详情。 + +--- + +## 二、变更接口清单 + +| # | 方法 | 路径 | 影响 | +|---|------|------|------| +| 1 | GET | `/mp/product/{id}` | 返回的 `itinerary[].hotels[]` 每项新增 `coverUrl` / `hotelType` / `city` 三字段 | + +**其他接口**(如 `/mp/product/{id}/day/{dayNumber}/hotels` 住宿详情弹窗)已有 `coverUrl`,**不变**。 + +--- + +## 三、字段定义 + +### `MpProductDetailRespVO.HotelInfo` 新增字段 + +| 字段 | 类型 | 说明 | 示例 | 可能为 null | +|---|---|---|---|---| +| `coverUrl` | String | 酒店封面图 URL(来自资源服务的酒店 cover) | `"https://oss.1814.love/hotel/9001/cover.jpg"` | ✅ 当酒店资源未配封面或 Feign 异常时为 null | +| `hotelType` | String | 酒店类型(字典 `hotel_type`:`FIVE_STAR` / `FOUR_STAR` / `BOUTIQUE` / `HOMESTAY` / ...) | `"FIVE_STAR"` | ✅ 可能为 null | +| `city` | String | 酒店所在城市 | `"海拉尔"` | ✅ 可能为 null | + +### 既有字段(不变) + +`hotelName` / `tierSeq` / `tierName` / `roomTypeId` / `roomTypeName` / `roomCount`。 + +此外,本次修复顺带加强了 `hotelName` 的补齐语义:当资源服务返回了 `name`,**会覆盖 DB 快照字段**(更新鲜),快照只作为 Feign 降级时的兜底。 + +--- + +## 四、响应示例对比 + +### 前 + +```json +{ + "code": 200, + "data": { + "productId": 1001, + "name": "小蒙马·呼伦贝尔5日", + "itinerary": [{ + "dayNumber": 1, + "hotels": [{ + "hotelName": "海拉尔精选酒店", + "tierSeq": 1, + "tierName": "标准", + "roomTypeName": "大床房", + "roomCount": 1 + }] + }] + } +} +``` + +### 后 + +```json +{ + "code": 200, + "data": { + "productId": 1001, + "name": "小蒙马·呼伦贝尔5日", + "itinerary": [{ + "dayNumber": 1, + "hotels": [{ + "hotelName": "海拉尔精选酒店", + "tierSeq": 1, + "tierName": "标准", + "roomTypeName": "大床房", + "roomCount": 1, + "coverUrl": "https://oss.1814.love/hotel/9001/cover.jpg", + "hotelType": "FIVE_STAR", + "city": "海拉尔" + }] + }] + } +} +``` + +--- + +## 五、前端渲染建议 + +原型 `S6-住宿安排` 每日住宿卡片: + +```html +