hl-api-changelog/changelogs/2026-04/2026-04-20_product-map-amap-auto.md
API Changelog Bot 812fd5d787 feat(2026-04-20): 第一期 BUG 修复 + 3 大新功能上线(早鸟多方案/备品组合/高德地图)
本批变更(测试环境已部署验证):
1. 后端修复 9 个 BUG(#956/957/958/959/960 + hotfix #965/966/967)
2. BUG 10 产品地图支持高德自动生成(#962)
3. BUG 15 备品组合功能(#963)
4. BUG 20 早鸟优惠改造为 1:N 多方案(#964)

前端待跟进 BUG:1/2/5/6/8/12/19
2026-04-20 12:26:50 +08:00

142 行
4.5 KiB
Markdown

此文件含有不可见的 Unicode 字符

此文件含有人类无法区分的不可见的 Unicode 字符,但可以由计算机进行不同的处理。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。

# 产品地图支持高德自动生成BUG 10
**日期**2026-04-20
**PR**#962
**影响**:管理端产品编辑 Step3路线地图+ 小程序产品详情页
---
## 业务变化
运营反馈:定制路线没人有时间做线路图。期望一键用高德自动生成路径图。
**能力**:产品地图新增 3 模式,互斥:
| mapMode | 含义 | route_map_url |
|---|---|---|
| `UPLOAD`(默认,老数据行为) | 手动上传图片 | 前端上传后的 OSS URL |
| `AMOUNT_AUTO` | 高德根据行程坐标自动生成 | 后端生成、上传后的 OSS URL |
| `NONE` | 隐藏该模块(小程序不展示) | 可保留或清空 |
---
## 新增接口
### 1. `POST /admin/product/item/{id}/map/generate-by-amap`
**一键触发**:后端取产品行程所有坐标(首天 `gatherPlace.center` → 每天 SCENIC/ACTIVITY/HOTEL 节点 → 末天 `dismissalPlace.center`),调高德静态地图 API,下载 PNG 后落 OSS,写回 `routeMapUrl` + `mapMode=AMAP_AUTO`
**请求**(全部可选,均有默认值):
```ts
{
"size": "750*500", // 可选,默认 750*500
"scale": 2 // 可选,默认 2高清
}
```
**响应**
```ts
{
"mapUrl": "https://oss.../product-route-map/....png",
"mapMode": "AMAP_AUTO",
"pointCount": 8,
"generatedAt": "2026-04-20T12:34:56"
}
```
**异常场景**
- 坐标 < 2 400 `行程坐标不足,无法生成地图,请先完善行程`
- 高德返回非图片 400 `高德地图生成失败: <错误详情>`
- OSS 上传失败 500
- 幂等10 秒内重复调用会被拦截`@Idempotent(10)`
### 2. `PUT /admin/product/item/{id}/map/mode`
**切换地图模式**
**请求**
```ts
{
"mapMode": "NONE", // @Pattern: NONE|AMAP_AUTO|UPLOAD
"clearMapUrl": false // 可选,true 时同时清空 routeMapUrl
}
```
**响应**`{"code":200,"message":"地图模式切换成功"}`
### 3. 老接口 `PUT /admin/product/item/{id}/route` 扩展
`ProductRouteSaveReqVO` 新增
```ts
{
"routeMapUrl": "...",
"mapMode": "UPLOAD" // NEW 可选,前端手动上传后可一并传 UPLOAD
}
```
手动上传流程不变前端走现有 `/admin/file/upload/token` 拿预签名 URL 上传 OSS 回填 `routeMapUrl`顺带把 `mapMode` 设为 `UPLOAD`
---
## 小程序详情页字段扩展
`MpProductDetailRespVO` 新增
```ts
{
"routeMapUrl": "...",
"mapMode": "UPLOAD" // NEW NONE/AMAP_AUTO/UPLOAD
}
```
**管理端详情 VO `ProductDetailRespVO.RouteInfoVO`** 新增 3 字段
```ts
{
"mapMode": "AMAP_AUTO",
"mapGeneratedAt": "2026-04-20T12:34:56",
"mapAmapSnapshot": { // 高德生成快照,用于展示"最近生成时间"
"points": [...],
"size": "750*500",
"scale": 2,
"generatedAt": "..."
}
}
```
**Internal VO**供订单服务 / mp 聚合服务 Feign 使用也同步加了 `mapMode``InternalProductDetailVO.RouteInfoVO``InternalMpCustomProductDetailVO``MpProductDetailInternalVO`
---
## 前端 TODO
### 管理端产品编辑 Step3
1. "路线地图"模块顶部加 **3 选 1 切换**
- 🙈 隐藏`NONE`)→ 下方模块折叠
- 🗺 高德自动生成`AMAP_AUTO`)→ 显示"用高德生成"按钮
- 📤 手动上传`UPLOAD`)→ 显示上传组件
2. 切换模式调 `PUT /map/mode`
3. "用高德生成"按钮调 `POST /map/generate-by-amap`成功后回显 URL + "最近生成于 X" 提示
4. 手动上传提示文案**建议图片 2MB尺寸 4:3 3:2格式 jpg/png**后端目前不强校验靠前端提示
5. 编辑页可显示"行程已更新建议重新生成地图" `mapGeneratedAt < product.updateTime`
### 小程序产品详情页
1. `mapMode` 判断
- `NONE` 不渲染地图模块
- `AMAP_AUTO` / `UPLOAD` 渲染 `routeMapUrl`
2. 支持 `routeMapUrl` 为空时兜底隐藏
---
## 部署前置(已在测试环境完成,生产部署前运维注意)
- [ ] Nacos `hl-product-service-v2-dev.yml` / `-prod.yml` 需配置 `amap.web-service-key`与现有 AmapDrivingService 共用同一个 key
- [ ] OSS 存储类 `product-route-map` groupKey 权限放通
- [ ] DDL 后重启服务`sql/alter_product_route_info_add_map_mode.sql`
---
## 兼容性
- 老数据`product_route_info.map_mode` 默认 `UPLOAD`已有图片保留小程序端展示不变
- 老接口`ProductRouteSaveReqVO.mapMode` 可选不传走原路径
- 老前端不读 `mapMode` 也能工作`routeMapUrl` 字段语义未变