diff --git a/changelogs/2026-04/2026-04-19_mp-feign-migrate-to-product-service-v2.md b/changelogs/2026-04/2026-04-19_mp-feign-migrate-to-product-service-v2.md new file mode 100644 index 0000000..4569a34 --- /dev/null +++ b/changelogs/2026-04/2026-04-19_mp-feign-migrate-to-product-service-v2.md @@ -0,0 +1,82 @@ +# 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)