3.7 KiB
3.7 KiB
fix(product-v2): /mp/product/** 全量补 CUSTOM 支持(#900 follow-up)
服务: hl-product-service-v2 PR: #903(接续 #900) Issue: #901 日期: 2026-04-19 前端是否需要改动: 可能需要,视前端是否已调 B 类接口(详见下文)
一、背景
PR #900 只修了 /mp/product/{id} 主详情,其他 5 个 /mp/product/{id}/** 子接口对 CUSTOM 产品仍 404。本 PR 一次性收口 /mp/product/** 下所有子接口的 CUSTOM 支持。
二、变更接口(10 个子接口分 3 类处理)
A 类 - 行为修复:放行 CUSTOM(1 个)
| 接口 | 方法 | 路径 | 新行为 |
|---|---|---|---|
| 日酒店详情 | GET | /mp/product/{id}/day/{dayNumber}/hotels |
CUSTOM + COMPLETED/ORDERED 放行返回 200 |
B 类 - 行为修复:明确拒绝 CUSTOM(4 个)
业务上 CUSTOM 产品是一口价、无班期、无多档位,这些接口本来就不适用。原来模糊 404,现在改为明确业务异常:
| 接口 | 方法 | 路径 | CUSTOM 产品新响应 |
|---|---|---|---|
| 价格日历 | GET | /mp/product/{id}/price-calendar?month=xxx |
{"code":500,"message":"定制产品不支持本接口","success":false} |
| 班期 | GET | /mp/product/{id}/schedules |
同上 |
| 档位对比 | GET | /mp/product/{id}/tier-compare |
同上 |
| 算价 | POST | /mp/product/{id}/quote |
同上 |
注:
code=500是项目 BusinessException 的默认业务码,HTTP 状态仍是 200。前端应按message="定制产品不支持本接口"字面识别,不要按code跳转错误页。
C 类 - 无变化(5 个)
/mp/product/{id}(PR #900 已修)/mp/product/{id}/day/{dayNumber}(PR #900 已修)/mp/product/hotel/**、/mp/product/room-type/**(产品无关)/mp/product/compare(自然过滤)
三、前端行动项
如果前端没有对 CUSTOM 产品调用 B 类接口:无需改动
如果前端有调用:
推荐:前端详情页按产品 productType 隐藏/禁用无意义的入口:
- CUSTOM 产品详情页 不渲染:价格日历 / 班期列表 / 档位对比 tab / 立即报价按钮
- CUSTOM 产品只展示:基本信息、行程、每日酒店、描述、图集
兜底:如果没法按 productType 前置判断,收到 message="定制产品不支持本接口" 时静默降级,不要弹全局错误。
清理历史 workaround
| 可清理 | 原因 |
|---|---|
对 /mp/product/{id}/day/{n}/hotels 的 CUSTOM 特殊兜底 |
现已正常返回 |
| CUSTOM 产品详情页对主接口 404 的全局兜底 | PR #900 已修 |
四、完整状态可见性矩阵
| productType | status | 详情/日酒店 | 日历/班期/档位/算价 |
|---|---|---|---|
| CORE / GROUP | DRAFT/PENDING_REVIEW | 404 | 404 |
| CORE / GROUP | PUBLISHED | 200 | 200 |
| CUSTOM | DRAFT/PENDING_REVIEW | 404 | 404 |
| CUSTOM | COMPLETED/ORDERED | 200(本次修复) | 500 "定制产品不支持本接口"(本次明确拒) |
五、测试环境已验证
CUSTOM 产品 2045390643479412737(7天6晚草原VIP私定):
GET /tier-compare → 500 "定制产品不支持本接口" ✓
GET /price-calendar → 500 "定制产品不支持本接口" ✓
GET /schedules → 500 "定制产品不支持本接口" ✓
POST /quote → 500 "定制产品不支持本接口" ✓
GET /day/1/hotels → 200(含 dayNumber/tiers)✓
CORE 产品 2045424500610125825:
GET /price-calendar → 200 ✓
GET /tier-compare → 200 ✓
GET /schedules → 200 ✓