实现lsfx-mock全命中SQL对齐

This commit is contained in:
wkc
2026-03-25 10:05:30 +08:00
parent f217d59f09
commit 5eea3c66ff
9 changed files with 523 additions and 24 deletions

View File

@@ -0,0 +1,115 @@
# lsfx-mock all 模式 SQL 对齐强命中实施记录
## 1. 背景
本次实施基于设计文档 [`2026-03-25-lsfx-mock-all-hit-sql-alignment-design.md`](/Users/wkc/Desktop/ccdi/ccdi/docs/design/2026-03-25-lsfx-mock-all-hit-sql-alignment-design.md),目标是在不修改主工程打标逻辑的前提下,仅通过调整 `lsfx-mock-server``--rule-hit-mode all` 生成策略,使以下 5 条已落地真实 SQL 的规则稳定命中:
- `SPECIAL_AMOUNT_TRANSACTION`
- `MONTHLY_FIXED_INCOME`
- `SUSPICIOUS_INCOME_KEYWORD`
- `FIXED_COUNTERPARTY_TRANSFER`
- `LOW_INCOME_RELATIVE_LARGE_TRANSACTION`
## 2. 实际修改
### 2.1 规则样本对齐
修改文件:
- [statement_rule_samples.py](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/services/statement_rule_samples.py)
调整内容:
- `SPECIAL_AMOUNT_TRANSACTION`
- 将样本金额从 `88888.88` 调整为 `1314.0`
- `MONTHLY_FIXED_INCOME`
- 将稳定收入月份从 4 个月扩展到 6 个月
- `SUSPICIOUS_INCOME_KEYWORD`
- 将摘要改为 `劳务费发放`
- 将交易类型改为 `劳务费入账`
- `FIXED_COUNTERPARTY_TRANSFER`
- 将样本主体从家属证件号切换为员工本人证件号
### 2.2 低收入亲属基线补齐
修改文件:
- [phase2_baseline_service.py](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/services/phase2_baseline_service.py)
- [file_service.py](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/services/file_service.py)
调整内容:
-`LOW_INCOME_RELATIVE_LARGE_TRANSACTION` 新增关系表基线 SQL 生成逻辑
- 基线通过 `INSERT ... ON DUPLICATE KEY UPDATE` 将目标家属 `annual_income` 收敛到 `0.00`
-`all` 模式下,`FileService` 会将该规则追加到 baseline 服务执行列表
- `subset` 模式保持原有行为不变
### 2.3 all 模式噪声收敛
修改文件:
- [statement_service.py](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/services/statement_service.py)
调整内容:
-`all` 模式且存在真实 `FileRecord` 时,将补齐总数的噪声流水改为“低额支出型安全噪声”
- 安全噪声特征:
- 仅生成支出流水
- 金额范围缩窄到 `10 ~ 200`
- 使用唯一化商户名和通用消费摘要
- 目的:
- 避免额外收入干扰 `MONTHLY_FIXED_INCOME`
- 避免随机稳定对手干扰 `FIXED_COUNTERPARTY_TRANSFER`
## 3. 测试补充
修改文件:
- [test_file_service.py](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/tests/test_file_service.py)
- [test_statement_service.py](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/tests/test_statement_service.py)
- [test_phase2_baseline_service.py](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/tests/test_phase2_baseline_service.py)
- [test_full_workflow.py](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/tests/integration/test_full_workflow.py)
新增验证点:
- all 模式保留目标规则,不引入占位 SQL 规则
- 特殊金额样本仅使用 `520/1314`
- 月度固定收入覆盖至少 6 个月
- 收入关键词样本直接命中 SQL 关键词集
- 固定对手转入主体为员工本人
- 低收入亲属规则会生成并执行关系表基线 SQL
- all 模式下噪声收敛为安全支出噪声
- 接口链路能返回 5 条目标规则对应的关键样本
## 4. 验证命令
执行命令:
```bash
cd lsfx-mock-server
python3 -m pytest tests/test_file_service.py tests/test_statement_service.py tests/test_phase2_baseline_service.py tests/integration/test_full_workflow.py -v
```
验证结果:
- `49 passed`
- `0 failed`
## 5. 前端影响
本次未修改 `ruoyi-ui`
结论:
- 接口结构未变化
- 本轮实现仅影响 Mock 样本和关联表基线
- 前端无需适配代码
## 6. 未完成项
本次完成了 Mock 侧单元测试和接口级集成测试,但未在本记录中执行真实后端联调与数据库结果核验:
- 未实际启动本地后端并拉取流水
- 未实际查询 `ccdi_bank_statement_tag_result`
如果后续需要闭环到项目库结果,应再补一次真实联调记录。