Files
ccdi/docs/reports/implementation/2026-03-23-project-51-warning-count-fix-implementation.md

2.1 KiB

Project 51 预警人数异常修复记录

本次改动

  • 修复 ccdi-project 模块中采购类规则未按项目人员范围过滤的问题。
  • ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml 新增 projectScopedDirectStaffSql 片段,统一收敛“当前项目流水中已识别员工”的范围。
  • selectLargePurchaseTransactionStatements 改为仅统计当前项目员工对应的采购记录。
  • selectSupplierConcentrationObjects 改为仅统计当前项目员工对应的采购记录,避免把其他项目或全局采购数据映射进当前项目预警结果。
  • ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiBankTagAnalysisMapperXmlTest.java 新增回归测试,约束采购规则必须引用项目员工范围片段。

根因说明

  • project_id = 51 的项目总人数来自 ccdi_project.target_count,当前值为 1
  • 预警人数来自 ccdi_project_overview_employee_result 聚合结果,排查发现其中除了上传文件对应员工 韩桂英 外,还混入了 罗洋
  • 进一步核对 ccdi_bank_statement_tag_result 后确认,多出的 罗洋 来自 SUPPLIER_CONCENTRATION 规则生成的对象命中结果。
  • 原始 SQL 直接扫描 ccdi_purchase_transaction 全表,并通过员工工号映射到 ccdi_base_staff,没有任何 projectId 或项目人员范围限制,导致全局采购数据串入当前项目。

变更文件

  • ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml
  • ccdi-project/src/test/java/com/ruoyi/ccdi/project/mapper/CcdiBankTagAnalysisMapperXmlTest.java

验证结果

  • 通过数据库核对确认:project_id = 51 当前仅上传成功 1 个文件,但 ccdi_project_overview_employee_result 中存在 2 名员工,异常现象可复现。
  • 执行 mvn -pl ccdi-project -Dtest=CcdiBankTagAnalysisMapperXmlTest test
  • 结果:BUILD SUCCESS
  • 新增回归测试已覆盖采购规则项目范围约束,防止后续再次把全局采购员工带入单个项目的预警统计。