# 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`
- 新增回归测试已覆盖采购规则项目范围约束，防止后续再次把全局采购员工带入单个项目的预警统计。
