hl-api-changelog/changelogs/2026-04/30_fix_insurance_company-name-fallback.md
API Changelog Bot 41961dc18a fix(insurance): 保险产品列表保险公司列空白降级到默认承保方
工单 #1544 / PR #1545 / dev 8f29d4b9

保游网 GetProductList 不返回 CompanyName, sync 写入 NULL 导致管理后台
列表保险公司列空白。修复方式:配置默认承保方「亚太财险保险有限公司」,
mapProductFields null/blank 时降级。

测试服 round-trip 验证 companyName=null 0/10 产品全部填上。
2026-04-30 09:22:04 +08:00

3.7 KiB

修复:保险产品列表「保险公司」列空白,降级到默认承保方

类型: 后端 BUG 修复 + 配置补丁 关联: 工单 #1544 / PR #1545 日期: 2026-04-30 影响范围: 管理后台保险产品列表展示;后续保游网产品同步流程


现象

管理后台 web.test.1814.love:9443/insurance/products 列表「保险公司」列对所有产品(山河令、保游未来星、平安保游万里行、保游天下平安自驾游、平安快乐旅程III、签证宝等)全部空白,投保年龄/保障天数也都是 -

API GET /admin/insurance/products 返回 "insurerName":null,"companyName":null

根因

保游网 /ApiProduct/v2/GetProductList 接口仅返回 {Guid, Isjw, Isjssx, ProductName} 4 个字段,不返回 CompanyName / ProductType / MinDays / MaxDays / MinAge / MaxAge

DB insurance_product 表 raw_json 列实证:

{"Guid": "FAB0BF91...", "Isjw": 20, "Isjssx": 20, "ProductName": "保游天下..."}

InsuranceManageService.mapProductFields() 试图取这些字段,全部 null,sync 时把 NULL 写入 DB 各列。

GetPlanList / GetPlanRateList 的 raw_json 也无 CompanyName,已穷举保游网 3 个产品相关 API 确认无该字段。

业务事实(用户确认)

保游网即亚太财险保险有限公司销售渠道,所有保游产品承保方均为「亚太财险保险有限公司」(固定值)。

修复内容

1. BaoyouApiProperties 新增 defaultCompanyName 字段

/** 保游网产品默认承保方名称(保游网 GetProductList 不返回 CompanyName,固定为亚太财险保险有限公司) */
private String defaultCompanyName;

2. mapProductFields 缺失/空白时降级

String companyName = getTextSafe(item, "CompanyName");
if (companyName == null || companyName.isBlank()) {
    companyName = baoyouApiProperties.getDefaultCompanyName();
}
product.setCompanyName(companyName);

3. nacos test namespace 同步推送

hl-order-service-v2-test.yml baoyou.api 段新增:

default-company-name: "亚太财险保险有限公司"

仓库 nacos-config/hl-order-service-dev.yml 同步加(防初始化漂移)。

4. 单测覆盖 3 条分支

  • mapProductFields_companyNameMissing_fallsBackToDefault 缺失字段降级
  • mapProductFields_companyNamePresent_useFromJson 兼容性场景用真实值
  • mapProductFields_companyNameBlank_fallsBackToDefault 空字符串等同缺失

50/50 单测全绿。

修复后行为

数据库写入

新 sync 触发后,insurance_product.company_name 列从 NULL → 「亚太财险保险有限公司」。

历史数据回填

9 条已有 NULL 行需触发一次「同步产品」按钮 round-trip 一次性回写。

接口返回

/admin/insurance/products 响应中 companyNameinsurerName 两字段均返回「亚太财险保险有限公司」(VO 双通道 v1 兼容)。

前端处理

零影响。前端无须改动:

  • 列表表格已绑 companyName / insurerName 字段,后端返回真实值即正常显示
  • 字段名不变、字段类型不变、字段数量不变

待修(下次迭代)

投保年龄(minAge/maxAge) 与保障天数(minDays/maxDays) 当前同样为 NULL,因保游网 GetProductList 不返回。需要接保游网详情接口(暂不知接口名)或从 InsuranceRate 的 raw_json 聚合(BeginAge/EndAge/DayRange)推算。本次不做。

部署状态

  • PR #1545 合并到 dev (sha 8f29d4b9)
  • 测试服 nacos hl-order-service-v2-test.yml@test 已同步 default-company-name
  • 测试服后端已部署 hl-order-service-v2
  • 管理端「同步产品」按钮 round-trip 验证通过
  • 管理后台列表「保险公司」列显示「亚太财险保险有限公司」