# 双员工夫妻家庭专项核查实施记录 - 保存路径:`docs/reports/implementation/2026-05-26-double-staff-spouse-family-special-check.md` - 实施日期:2026-05-26 - 变更范围:后端专项核查家庭资产负债聚合 SQL 与对应 Mapper SQL 结构测试 ## 修改内容 1. 调整 `CcdiProjectSpecialCheckMapper.xml` 的配偶识别口径: - 支持 `本人 -> 配偶` 的直接关系。 - 支持 `配偶员工 -> 本人` 的反向推导,覆盖只维护单向配偶关系但双方都是员工的情况。 - 增加 `spouse_is_staff` 标识,配偶为员工时收入优先取 `ccdi_base_staff.annual_income`。 2. 调整家庭资产、负债与缺少信息口径: - 双员工夫妻家庭中,本人资产取 `family_id = 本人身份证号 AND person_id = 本人身份证号`。 - 配偶为员工时,配偶资产取 `family_id = 配偶身份证号 AND person_id = 配偶身份证号`。 - 配偶不是员工时,配偶资产仍取 `family_id = 本人身份证号 AND person_id = 配偶身份证号`。 - 负债继续按本人和配偶证件号从 `ccdi_debts_info` 汇总。 - 配偶为员工时,任一公司员工成员缺少本人资产或本人负债记录,风险结果按“缺少信息”处理。 3. 调整详情明细展示查询: - 资产明细按 `spouse_is_staff` 选择员工本人资产或亲属资产,避免把员工配偶作为亲属资产重复计入。 - 资产持有人和负债归属人名称优先取员工主档,非员工配偶再从亲属关系中取名,避免双向配偶关系导致明细行重复。 4. 补充 Mapper SQL 结构测试断言: - 校验双向配偶识别、员工配偶收入来源、员工配偶资产归属、员工配偶负债缺失判断和明细查询参数传递。 ## 影响范围 - 接口路径和返回结构不变: - `GET /ccdi/project/special-check/family-asset-liability/list` - `GET /ccdi/project/special-check/family-asset-liability/detail` - 前端页面无需调整,仍按员工展示列表。 - 不新增数据库表和字段。 ## 验证结果 1. 主代码编译: - 命令:`mvn -DskipTests compile` - 目录:`ccdi-project` - 结果:通过。 2. Mapper XML 格式校验: - 命令:`xmllint --noout ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectSpecialCheckMapper.xml` - 结果:通过。 3. 本次变更空白检查: - 命令:`git diff --check -- ccdi-project/src/main/resources/mapper/ccdi/project/CcdiProjectSpecialCheckMapper.xml ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectSpecialCheckMapperListSqlTest.java ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiProjectSpecialCheckMapperDetailSqlTest.java` - 结果:通过。 4. 双员工夫妻 Mapper 关键口径文本校验: - 命令:Ruby 读取 Mapper XML 并检查反向配偶、员工配偶收入、员工配偶资产、员工配偶负债和明细参数关键片段。 - 结果:通过,输出 `double-staff spouse mapper checks passed`。 5. 专项 JUnit: - 命令:`mvn test -Dtest=CcdiProjectSpecialCheckMapperListSqlTest,CcdiProjectSpecialCheckMapperDetailSqlTest` - 结果:未完成执行。当前模块测试编译阶段被既有无关测试错误阻断,错误集中在 `CcdiBankStatementTest` 与 `CcdiFileUploadServiceImplTest` 中旧接口签名不匹配,本次未修改这些文件。