# fix(product-v2): /mp/product/{id} 支持定制产品(CUSTOM)

> **服务**: hl-product-service-v2
> **PR**: #900
> **Issue**: #898
> **日期**: 2026-04-19
> **前端是否需要改动**: **无需改动**（后端行为修复，前端原调用方式继续有效）

---

## 一、背景

前端小程序调 `GET /mp/product/{id}` 查询定制产品详情时一直返回 `code=404 "产品不存在或已下架"`。例如 `GET /mp/product/2043696016590327809`（定制产品"7天6晚草原VIP私定"）。

**根因（后端侧）**：原接口硬校验 `status=PUBLISHED`，但定制产品（`productType=CUSTOM`）的状态流转是 `DRAFT → COMPLETED → ORDERED`，根本不经过 PUBLISHED。

**前端感知**：定制产品详情页进不去、白屏、或者前端做过类似"CUSTOM 改调 `/mp/custom/product/{id}`"的 workaround。

---

## 二、变更接口

| # | 接口 | 方法 | 路径 | 变更类型 | 前端改动 |
|---|------|------|------|---------|---------|
| 1 | 小程序产品详情 | GET | `/mp/product/{id}` | **行为修复**：CUSTOM 产品不再 404，返回完整详情 | 无需 |
| 2 | 定制产品专属详情 | GET | `/mp/custom/product/{id}` | 无变化 | 无需 |

**请求/响应结构完全不变**，仅扩大了状态白名单。

---

## 三、状态可见性矩阵（修复后）

| productType | status | `/mp/product/{id}` 返回 |
|-------------|--------|------------------------|
| CORE / GROUP | DRAFT / PENDING_REVIEW / COMPLETED | 404 |
| CORE / GROUP | PUBLISHED | 200 完整详情 |
| **CUSTOM** | DRAFT / PENDING_REVIEW | 404 |
| **CUSTOM** | **COMPLETED / ORDERED** | **200 完整详情（本次修复）** |

---

## 四、前端行动项

**无需任何代码改动**。可评估清理以下历史 workaround：

| 可移除的 workaround | 原因 |
|--------------------|------|
| 根据 productType 分发调用 `/mp/product/{id}` 或 `/mp/custom/product/{id}` | 现在 `/mp/product/{id}` 统一支持所有 productType |
| CUSTOM 产品详情页特殊 catch 404 显示"产品不存在"文案 | 后端已正确返回 |
| 任何针对"定制产品详情不可用"的 UI 兜底 | 不再必要 |

**保留**：`/mp/custom/product/{id}` 仍是定制产品的专属入口（带 refund policies enrich 等特化逻辑），适合"已完成定制"详情场景继续用。

---

## 五、测试环境已验证

```
GET /mp/product/2043696016590327809   (CUSTOM + COMPLETED) → 200 "7天6晚草原VIP私定" ✓
GET /mp/product/2045424500610125825   (CORE + PUBLISHED)   → 200 "E2E-核心版本-V1" ✓
GET /mp/product/2045486260364996609   (任意 + DRAFT)       → 404 ✓
```

---

## 六、响应字段

与原 `MpProductDetailRespVO` 完全一致，不新增/删除/改名任何字段。CUSTOM 产品组装时，无相关数据的子表字段（如班期、价格日历）自然为 null/空集。
