diff --git a/changelogs/2026-04/2026-04-19_mp-product-all-custom-followup.md b/changelogs/2026-04/2026-04-19_mp-product-all-custom-followup.md new file mode 100644 index 0000000..774b58a --- /dev/null +++ b/changelogs/2026-04/2026-04-19_mp-product-all-custom-followup.md @@ -0,0 +1,95 @@ +# 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 ✓ +```