修复采购规则跨项目人员串入问题

This commit is contained in:
wkc
2026-03-23 15:11:05 +08:00
parent 15d17e4175
commit 63d8904d01
5 changed files with 659 additions and 12 deletions

View File

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