Now改车险 SQL 追加 ID 列。Now加 toLongId 辅助方法和 import。Now给 VO 加车险险种列表字段。车险侧也改完了。
改动
PolicyDataDetailVo:新增vciRiskInfoList(商业险)和tciRiskInfoList(交强险),一行一个险种;vciRiskInfo/tciRiskInfo保留(= 列表第一条),老前端不会崩。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()过滤。
- 主 SQL 末尾追加两列
- 文档 §2.5 / §六已同步,含前端取值建议。
这里有个必须注意的坑
车险主 SQL 是 f(商业) × g(交强) 的笛卡尔积——实测那张多险种保单返回 8 行(2 商业 × 2 交强 × 2 投保人),同一个险种会重复出现 N×M 次,所以不能直接往列表里 add,必须按 car_charge.ID 去重。这也是我选 TreeMap 而不是普通 List 的原因(顺带保证顺序稳定 = 导入顺序)。
验证
- 编译:
verify91309 源 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] : []);