# mp-service Feign 切换到 hl-product-service-v2

**日期**: 2026-04-19
**PR**: [#883](https://git.1814.love:8443/wx/HL/pulls/883) + [#884](https://git.1814.love:8443/wx/HL/pulls/884) + [#872](https://git.1814.love:8443/wx/HL/pulls/872) → dev → 测试环境
**影响端**: 小程序 (hl-ui-mp)
**部署服务**: hl-product-service-v2 + hl-mp-service

## 总体变化（对前端基本透明）

旧的 hl-product-service v1 已下线，所有小程序 `/mp/product/*` 和 `/mp/custom/*` 接口的后端实现切换到 hl-product-service-v2。**接口路径、请求参数、响应字段完全保持兼容**（通过 v2 端 22 个 internal endpoint 1:1 适配实现）。

## 受影响接口（22 个）

### 产品基础查询
- `GET /mp/product/list`
- `GET /mp/product/{productId}`
- `POST /mp/product/{productId}/quote`
- `GET /mp/product/lines`
- `GET /mp/product/line/{lineId}/products`
- `GET /mp/product/recommend`
- `GET /mp/product/{productId}/price-calendar`
- `GET /mp/product/earliest-booking-date`
- `GET /mp/product/{productId}/simple-quote`
- `GET /mp/product/{productId}/group-quote`
- `GET /mp/product/{productId}/batches/calendar`
- `GET /mp/product/batch/{batchId}/combos`
- `GET /mp/product/batch-brief?ids=...`
- `GET /mp/product/designer-published-ids?createBy=...`
- `GET /mp/product/designer-stats`（两个路径）

### 行程子资源
- `GET /mp/product/day-hotels?productId=...&dayNumber=...`
- `GET /mp/product/day-dining?productId=...&dayNumber=...`

### 定制产品
- `GET /mp/custom/product/{productId}`
- `GET /mp/custom/products`（按当前用户 + 手机号聚合）
- `GET /mp/custom/products/all`（全部已完成定制产品分页浏览，PR #870 新增）

## 4 个**降级**接口（v2 数据模型缺失，前端注意可能拿到空数据）

| 接口 | 原因 | 当前行为 | 后续 |
|---|---|---|---|
| `GET /mp/product/batch/{batchId}/combos` | v2 无 combos 概念 | 返回空列表 + 后端 log.warn | 待评估是否补 |
| `GET /mp/product/day-dining` | v2 无 product_day_dining 表 | 返回空列表 + 后端 log.warn | 后续 PR 建表+迁移 |
| `GET /mp/custom/products`（按手机号路径） | v2 ProductDO 无 contactPhone 字段 | 按手机号分支返空（按定制需求关联分支仍工作）| 后续 PR ALTER 字段 |
| `GET /mp/product/recommend` | 无推荐算法 | 按 sort_order + create_time DESC 返已上架产品 | 后续接入推荐模型 |

**前端排查建议**：上述 4 个接口出现"空数据"属于**已知降级行为**，不算 bug。优先看其他正常接口。

## 字段一致性保证

- 所有 Long ID 用 `String` 序列化（防 JS 精度丢失）— 与原 v1 行为一致
- 所有 BigDecimal 金额用 `String` 序列化（DECIMAL(12,2)）— 与原 v1 行为一致
- 日期格式 `yyyy-MM-dd HH:mm:ss` — 不变
- 分页结构 `{records, total, page, pageSize}` — 不变

## 不影响

- 接口路径、请求参数、响应字段结构、HTTP code、业务码完全不变
- mp 端 VO（`MpProductDetailVO` / `MpCustomProductDetailVO` / `MpCustomProductListVO` 等）不变
- 已有 token / 鉴权流程不变

## 需要前端做的事

**无需任何代码改动**。如发现具体接口异常请反馈对应 productId/参数。

## 后端实现要点（供前端排障参考）

- `MpProductFeignClient.@FeignClient(name=...)`: `hl-product-service` → `hl-product-service-v2`
- 22 个 endpoint 路径与 v2 实现严格 1:1 对齐
- 5 个新 v2 controller：`InternalMpProductController` / `InternalMpProductReportController` / `InternalMpProductDayController` / `InternalMpCustomProductController` / `InternalMpDesignerController`
- v2 端 44 单测全过

## 已知未修项

1. v2 缺 contactPhone 字段（custom-by-phone 降级）
2. v2 缺 product_day_dining 表（day-dining 降级）
3. v2 缺 batch_combo 表（batch-combos 降级）
4. 推荐算法待接入

🤖 Generated with [Claude Code](https://claude.com/claude-code)
