# 小程序每日详情字段补全

- **日期**: 2026-04-16
- **服务**: hl-product-service-v2
- **PR**: #669, #671
- **类型**: feat

## 概述

小程序产品详情 `GET /mp/product/{id}` 的行程天（`itinerary[]`）补全所有每日详情页所需字段。

## itinerary[] 完整字段清单

| 字段 | 类型 | 说明 |
|------|------|------|
| `dayNumber` | Integer | 天序号 |
| `dayTitle` | String | 标题 |
| `quoteText` | String | 每日金句 |
| `description` | String | 描述 |
| `coverImageUrl` | String | 封面图 |
| `gatherPlace` | Object | 集合地 {name,adcode,center,level} |
| `dismissalPlace` | Object | 解散地 {name,adcode,center,level} |
| `dailyMileage` | BigDecimal | 当日里程(km) |
| `dailyDuration` | Integer | 当日驾车时长(分钟) |
| `breakfast` | String | 早餐(HOTEL/CAMP/SPECIAL/SELF) |
| `lunch` | String | 午餐 |
| `dinner` | String | 晚餐 |
| `diningRemark` | String | 餐饮备注 |
| `photoUrls` | List | 实拍照片 |
| `routePoints` | List | 途经路线 [{name, sortOrder}] |
| `nodes` | List | 节点列表 [{nodeType, nodeName, startTime, durationMinutes, description}] |
| `hotels` | List | 住宿列表 [{hotelName, tierSeq, roomTypeId, roomTypeName, roomCount}] |

## 新增字段（本次PR）

| 字段 | 说明 |
|------|------|
| `quoteText` | 每日金句 |
| `diningRemark` | 餐饮备注 |
| `dailyMileage` | 当日里程 |
| `dailyDuration` | 当日驾车时长 |
| `routePoints` | 途经路线（自动生成） |

## 前端每日详情页数据对照

| 展示区块 | 数据来源 |
|---------|---------|
| 途经路线（海拉尔→呼籁营地→额尔古纳） | `routePoints[].name` 用 " → " 连接 |
| 290km · 约3.5小时 | `dailyMileage` + `dailyDuration`（分钟→小时格式化） |
| 金句引用 | `quoteText` |
| 行程详情（节点列表） | `nodes[]` |
| 实拍照片 | `photoUrls[]` |
| 今日概况（里程/餐饮/目的地） | `dailyMileage` / `breakfast,lunch,dinner` / `dismissalPlace.name` |
| 住宿（按档位分组） | `hotels[]` 按 `tierSeq` 分组 |
| 今日体验 | `nodes[]` 中 `nodeType=ACTIVITY` 的项 |
