Now改车险 SQL 追加 ID 列。Now加 toLongId 辅助方法和 import。Now给 VO 加车险险种列表字段。车险侧也改完了。

改动

  1. PolicyDataDetailVo:新增 vciRiskInfoList(商业险)和 tciRiskInfoList(交强险),一行一个险种;vciRiskInfo / tciRiskInfo 保留(= 列表第一条),老前端不会崩。
  2. PropertyInsuranceRepoImpl.getCarPolicyData():
    • 主 SQL 末尾追加两列 f.ID as VCIID, g.ID as TCIID(下标 86/87,追加在最后不动原有下标);
    • 循环里用 TreeMap<Long, ProRiskInfo> 按 car_charge.ID 去重 + 升序,循环外 set 列表,单对象取 list.get(0);
    • 新增 toLongId() 辅助方法(Number/String → Long,空或非数字 → null),空险种行沿用 isRiskRowEmpty() 过滤。
  3. 文档 §2.5 / §六已同步,含前端取值建议。

这里有个必须注意的坑

车险主 SQL 是 f(商业) × g(交强) 的笛卡尔积——实测那张多险种保单返回 8 行(2 商业 × 2 交强 × 2 投保人),同一个险种会重复出现 N×M 次,所以不能直接往列表里 add,必须按 car_charge.ID 去重。这也是我选 TreeMap 而不是普通 List 的原因(顺带保证顺序稳定 = 导入顺序)。

验证

  • 编译:verify9 1309 源 0 错误,诱饵被捕获。
  • 实跑:保单 6703430138820230000022 主 SQL 出 8 行,去重后商业险 2 条(ID 1000125 / 1000128)、交强险 2 条(1000124 / 1000127),符合预期。

一个数据问题,需要你定夺

库里目前只有这一张车险保单有多条 car_charge,而且是内容完全一样的重复:商业险 0888 / 1386.62 两条、交强险 0881 / 950.00 两条、CLASSTYPE=3 也是两条。也就是说这张单的险种明细被回写了两次(导入回写没有按 POLICYNO + CLASSTYPE + RISKCODE 去重)。

现在列表会如实展示 2 条重复险种。要消掉它得改导入回写逻辑为「先删后插」或按唯一键 upsert——这属于数据侧修复,我没动。要不要处理,告诉我一声。

前端配合改法(商业险 / 交强险各一遍,非车同理):

JavaScript
复制成功
const vci = (d.vciRiskInfoList?.length) ? d.vciRiskInfoList : (d.vciRiskInfo ? [d.vciRiskInfo] : []);
const tci = (d.tciRiskInfoList?.length) ? d.tciRiskInfoList : (d.tciRiskInfo ? [d.tciRiskInfo] : []);
const nocar = (d.noCarRiskInfoList?.length) ? d.noCarRiskInfoList : (d.noCarRiskInfo ? [d.noCarRiskInfo] : []);

本页笔记

加载中…