hl-product-service-v2 的 /internal/product/{id}/detail 新增
insuranceSchemeId + insuranceNotice,下游 order-v2 可省一次
getAutomationConfig 调用
3.5 KiB
补齐:产品详情内部接口增加保险字段
服务: hl-product-service-v2 (端口 8093) PR: #768 Issue: #767 日期: 2026-04-17 影响范围: 所有调用
/internal/product/{id}/detail的下游服务(典型:order-service-v2 做订单快照)
现象(下游感知)
调用 GET /internal/product/{productId}/detail 时,响应体中没有保险相关字段,下游(order-service-v2)拿不到保险方案 ID 和保险告知状态,只能额外再调 GET /internal/product/{id}/automation-config 才能补齐。
根因
InternalProductService.getProductDetail() 内部用 BeanUtil.toBean(product, InternalProductDetailVO.class) 只复制了 ProductDO 的字段,没查 ProductSupplementDO(与 product 1:1 关联的补充配置表,存 insurance_scheme_id / insurance_notice 等)。导致 VO 缺保险字段。
同 Service 的 getAutomationConfig() 方法本来就正确查过补充表,这次把产品详情接口对齐这套写法。
修复
1. InternalProductDetailVO 新增 2 个字段
| 字段 | 类型 | 说明 |
|---|---|---|
insuranceSchemeId |
Long | 保险方案 ID(下游下单/快照可直接用) |
insuranceNotice |
String | 保险告知状态(字典 insurance_notice: INCLUDED=含保险 / EXCLUDED=不含 / OPTIONAL=可选) |
2. Service 补查补充配置
InternalProductService.getProductDetail() 在 BeanUtil.toBean 之后追加一次 supplementDataService.selectById(productId),空安全赋值两个保险字段:无补充配置(supplement=null)或字段本身为 null 时,VO 保持 null。
接口契约
向后兼容,只新增字段,不改旧字段、不改路径、不改参数。
GET /internal/product/{productId}/detail
请求(无变化):
| 参数 | 位置 | 类型 | 说明 |
|---|---|---|---|
productId |
path | Long | 产品 ID |
date |
query(可选) | LocalDate | 班期日期 |
响应(新增字段,其他字段不变):
{
"code": 200,
"message": "success",
"data": {
"productId": 100001,
"name": "呼伦贝尔7日游",
"subtitle": "...",
"productType": "CORE",
"category": "...",
"status": "ON_SALE",
"tripDays": 7,
"tripNights": 6,
"coverImageUrl": "https://...",
"lineId": 9001,
"carouselImages": [...],
"insuranceSchemeId": 8888, // 新增 — 可能为 null
"insuranceNotice": "INCLUDED", // 新增 — 可能为 null(字典 insurance_notice)
"tiers": [...],
"seasons": [...],
"tags": [...],
"itinerary": [...],
"hotels": [...],
"restaurants": [...],
"staff": [...]
}
}
前端/下游影响
- order-service-v2:以后调
/internal/product/{id}/detail直接能拿到保险字段做订单快照,可以省掉一次getAutomationConfig的 Feign 调用 - 其他下游:接口完全向后兼容,不读新字段不受影响;需要保险信息的场景现在可以直接用
- 字典:
insurance_notice枚举值INCLUDED/EXCLUDED/OPTIONAL,下游做展示时自行映射中文
需要重启的服务
hl-product-service-v2(端口 8093)。其他服务无需重启。
测试
- 单元测试 9 个全绿(
InternalProductServiceDetailTest,含保险字段 3 场景:有 supplement / 无 supplement / 字段为 null) - 接口契约层面:只追加字段、不改旧字段,序列化由 Jackson 保证,兼容性安全