3.5 KiB
3.5 KiB
fix(product-v2): /mp/product/** 4 接口对 CUSTOM 全量放行(撤销 PR #903 的拒绝)
服务: hl-product-service-v2 PR: #906(撤销 #903 的 B 类拦截) Issue: #905 日期: 2026-04-19 前端是否需要改动: 可能需要回退 #903 引入的兜底逻辑
⚠️ 关键变化
前一版 changelog(#903)说 4 个接口会对 CUSTOM 产品返回 {"code":500,"message":"定制产品不支持本接口"}。这个判断是错的,现已撤销。
定制产品(CUSTOM + COMPLETED/ORDERED)现在走和核心/小蒙马产品完全一样的 4 个子接口。
一、背景
#903 把 4 个接口对 CUSTOM 产品定性为"不支持"是业务误判。DB 实证推翻:
| 维度 | CUSTOM 产品 2043696016590327809 |
CUSTOM 产品 2045390643479412737 |
|---|---|---|
| 档位 | 1 档 | 2 档(轻奢/高端) |
| price_calendar 记录 | 62 条 | 92 条 |
| group_tour_batch 班期 | 2 条 | 0 条 |
| day_hotel 记录 | 6 条 | 同上 |
定制产品在 DB 里具备与 CORE/GROUP 完全一致的 4 类数据结构。底层 ProductPricingService.calculateQuote 等对 productType 零硬依赖。
二、受影响接口(全部放行)
| 接口 | CUSTOM + COMPLETED/ORDERED | CUSTOM + DRAFT/PENDING |
|---|---|---|
GET /mp/product/{id} |
200 | 404 |
GET /mp/product/{id}/day/{n}/hotels |
200 | 404 |
GET /mp/product/{id}/price-calendar?month=xxx |
200 | 404 |
GET /mp/product/{id}/schedules |
200(无班期返 []) |
404 |
GET /mp/product/{id}/tier-compare |
200 | 404 |
POST /mp/product/{id}/quote |
200 | 404 |
前面 3 行加粗的是本次新放行,其余行为不变(包括 #898/#900 修的主详情和日酒店)。
三、前端行动项
如果前端按 #903 的 changelog 做过兜底,需要回退
| 可移除的 #903 遗产 | 原因 |
|---|---|
| CUSTOM 产品详情页隐藏价格日历 tab | 现已正常返回 |
| CUSTOM 产品隐藏班期列表 | 现已正常返回(可能为空数组) |
| CUSTOM 产品隐藏档位对比 tab | 现已正常返回 |
| CUSTOM 产品隐藏"立即报价"按钮 | 现已正常返回 |
收到 message="定制产品不支持本接口" 的静默降级分支 |
不再出现此消息 |
推荐前端逻辑(统一版)
CUSTOM 和 CORE/GROUP 产品详情页可以共用同一套请求和渲染逻辑,不再按 productType 分流。
空数据兜底
/schedules 对未维护班期的 CUSTOM 产品返回 data: [](语义 = 按预约/无固定出团日期),前端应正常处理空列表 UI。
四、测试环境已验证
CUSTOM 产品 2045390643479412737(测试定制wx-01):
GET /price-calendar?month=2026-04 → 200 + days 数组(adultPrice 等完整) ✓
GET /tier-compare → 200 + tiers 数据 ✓
GET /schedules → 200 + [] (该产品未维护班期) ✓
POST /quote → 200 + 成功 ✓
CUSTOM 产品 2043696016590327809(7天6晚草原VIP私定):
GET /schedules → 200 + 2 条班期 ✓
五、相关历史
| PR | Issue | 说明 |
|---|---|---|
| #900 | #898 | 首次放行 /mp/product/{id} 主详情 |
| #903 | #901 | 误判把 4 个子接口对 CUSTOM 定性为"不支持"(已被本 PR 撤销) |
| #906 | #905 | 撤销 #903,4 个接口全量放行 CUSTOM(本次) |