From 41961dc18ad76b5512d32014b1d9755c5850b757 Mon Sep 17 00:00:00 2001 From: API Changelog Bot Date: Thu, 30 Apr 2026 09:22:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(insurance):=20=E4=BF=9D=E9=99=A9=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E5=88=97=E8=A1=A8=E4=BF=9D=E9=99=A9=E5=85=AC=E5=8F=B8?= =?UTF-8?q?=E5=88=97=E7=A9=BA=E7=99=BD=E9=99=8D=E7=BA=A7=E5=88=B0=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E6=89=BF=E4=BF=9D=E6=96=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 工单 #1544 / PR #1545 / dev 8f29d4b9 保游网 GetProductList 不返回 CompanyName, sync 写入 NULL 导致管理后台 列表保险公司列空白。修复方式:配置默认承保方「亚太财险保险有限公司」, mapProductFields null/blank 时降级。 测试服 round-trip 验证 companyName=null 0/10 产品全部填上。 --- .../30_fix_insurance_company-name-fallback.md | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 changelogs/2026-04/30_fix_insurance_company-name-fallback.md diff --git a/changelogs/2026-04/30_fix_insurance_company-name-fallback.md b/changelogs/2026-04/30_fix_insurance_company-name-fallback.md new file mode 100644 index 0000000..2d3045f --- /dev/null +++ b/changelogs/2026-04/30_fix_insurance_company-name-fallback.md @@ -0,0 +1,91 @@ +# 修复:保险产品列表「保险公司」列空白,降级到默认承保方 + +**类型**: 后端 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 列实证: +```json +{"Guid": "FAB0BF91...", "Isjw": 20, "Isjssx": 20, "ProductName": "保游天下..."} +``` + +`InsuranceManageService.mapProductFields()` 试图取这些字段,全部 null,sync 时把 NULL 写入 DB 各列。 + +GetPlanList / GetPlanRateList 的 raw_json 也无 CompanyName,已穷举保游网 3 个产品相关 API 确认无该字段。 + +## 业务事实(用户确认) + +保游网即亚太财险保险有限公司销售渠道,所有保游产品承保方均为「亚太财险保险有限公司」(固定值)。 + +## 修复内容 + +### 1. BaoyouApiProperties 新增 defaultCompanyName 字段 +```java +/** 保游网产品默认承保方名称(保游网 GetProductList 不返回 CompanyName,固定为亚太财险保险有限公司) */ +private String defaultCompanyName; +``` + +### 2. mapProductFields 缺失/空白时降级 +```java +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` 段新增: +```yaml +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` 响应中 `companyName` 与 `insurerName` 两字段均返回「亚太财险保险有限公司」(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 验证通过 +- ✅ 管理后台列表「保险公司」列显示「亚太财险保险有限公司」