Files
ccdi/docs/reports/implementation/2026-05-22-risk-overview-negative-no-risk-fix.md

39 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 风险总览无风险人员负数修复记录
## 问题现象
- 生产项目结果总览出现“无风险人员”为负数。
- 页面展示中“高风险 + 中风险 + 低风险”人数大于“总人数”。
## 根因
- `ccdi_project.target_count` 原口径只统计 `ccdi_bank_statement.cret_no` 直接匹配到员工主数据的去重人数。
- 风险人员结果表 `ccdi_project_overview_employee_result` 的生成口径会把关系人流水、对象规则命中、账户归属等结果归并回员工。
- 当项目存在“关系人流水归属员工”或“项目流水账号归属员工”时,风险人数的员工范围大于总人数范围,导致 `target_count - high - medium - low` 出现负数。
## 修改内容
- 调整 `CcdiBankStatementMapper.countMatchedStaffCountByProjectId`
- 直接员工:流水 `cret_no` 匹配员工身份证。
- 关系人归属员工:流水 `cret_no` 匹配员工关系人证件号后归属到员工。
- 账号归属员工:项目流水账号匹配员工账户信息后归属到员工。
- 调整 `CcdiProjectOverviewServiceImpl`
- 标签重算刷新结果总览员工结果后,同步刷新项目总人数和风险人数。
- 手动刷新项目风险人数时,同步刷新项目总人数。
- 调整 `CcdiProjectMapper.updateRiskCountsByProjectId`
- 更新风险人数时同时写回 `target_count`,保证总人数与风险人数使用同一项目员工范围口径。
- 新增生产回填脚本:
- `sql/migration/2026-05-22-fix-project-target-count-employee-scope.sql`
- 用新口径回填既有项目的 `target_count`
## 影响范围
- 后端结果总览统计。
- 项目列表中的目标人数。
- 生产既有项目需要执行新增 SQL 回填脚本,后续上传、历史导入、标签重算会自动按新口径刷新。
## 验证
- 已补充 `CcdiBankStatementMapperXmlTest.targetCount_shouldUseResolvedProjectEmployeeScope`,约束总人数 SQL 必须包含直接员工、关系人归属员工、账号归属员工三类范围。
- 已更新 `CcdiProjectOverviewServiceImplTest`,约束刷新风险人数时同步写回总人数。