修复流水详情原始文件关联与Mock随机logId

This commit is contained in:
wkc
2026-03-20 16:25:22 +08:00
parent d7c9f0e5bf
commit 079b412d38
11 changed files with 427 additions and 15 deletions

View File

@@ -38,3 +38,18 @@
## 执行说明
- 验证过程中若任一层失败,立即停在对应层记录证据,不继续给出“验证通过”结论。
- 本次执行基于当前本地开发环境,不额外引入修复或扩展范围。
## 当前进展
- 2026-03-20 15:21:54 CST 完成阶段 1已对齐验证范围、读取来源实施记录、选定 `project_id=47`,并创建实施记录与验证记录骨架。
- 2026-03-20 15:21:54 CST 完成阶段 2`lsfx-mock-server` 聚焦回归与全量回归全部通过,确认规则命中计划、样本装配、缓存稳定性与集成链路未回退。
- 2026-03-20 15:23:10 CST 完成阶段 3`ccdi-project` 第一期真实规则目标测试全部 `BUILD SUCCESS`,规则映射、真实 SQL、规则分发与风险人数刷新链路保持通过。
- 2026-03-20 15:24 左右执行阶段 4采购基线脚本成功重跑`LSFXMOCKPUR001` 基线记录存在且金额满足门槛;但第一期规则元数据查询发现 `indicator_code` 与既有实施记录不一致,判定为“数据基线异常”,按计划停在数据库核验层,不继续执行接口端到端验证。
- 2026-03-20 15:41:06 CST 完成问题修复与复验:
- 已新增第一期规则元数据 SQL 校验测试与增量修复脚本。
- 已将修复脚本落库,确认 `FOREX_BUY_AMT``FOREX_SELL_AMT``LARGE_STOCK_TRADING``indicator_code` 与 9 条一期真实规则 `remark` 均已对齐。
- 已完成项目 `47` 的拉取本行信息、手动重算、任务轮询、命中结果查询与流水详情接口复验。
- Mock 与后端验证进程均已关闭。
- 2026-03-20 16:01 左右完成补充复验:
- 重新启动 Mock 与后端服务,复跑项目 `47` 的登录、拉取本行信息、手动重算、任务轮询与详情接口链路。
- 自动任务 `id=39` 与手动任务 `id=40` 均执行成功,`hit_count=3636``success_rule_count=33``failed_rule_count=0`
- 针对之前出现 `selectOne()` 重复结果异常的样例 `bank_statement_id=67279`,详情接口已返回 `code=200`,并正确带出 `GAMBLING_SENSITIVE_KEYWORD` 命中标签与原始文件名。

View File

@@ -0,0 +1,32 @@
# 第一期银行流水规则元数据修复实施记录
## 问题背景
- 2026-03-20 新增模型打标完整验证在数据库核验阶段发现:
- `FOREX_BUY_AMT.indicator_code` 仍为 `FOREX_BUY_AMT`
- `FOREX_SELL_AMT.indicator_code` 仍为 `FOREX_SELL_AMT`
- `LARGE_STOCK_TRADING.indicator_code``NULL`
- 同时,第一期已落地真实规则的 `remark` 仍停留在“占位规则待补充真实SQL”。
## 根因分析
- 主初始化脚本 [`sql/2026-03-16-bank-tagging.sql`](/Users/wkc/Desktop/ccdi/ccdi/sql/2026-03-16-bank-tagging.sql) 已包含第一期真实规则的正确元数据。
- 老增量脚本 [`sql/migration/2026-03-18-sync-bank-tag-uppercase-and-rules.sql`](/Users/wkc/Desktop/ccdi/ccdi/sql/migration/2026-03-18-sync-bank-tag-uppercase-and-rules.sql) 仍写入旧的占位元数据。
- 已执行过 2026-03-18 增量脚本、但未补后续迁移的环境,会停留在旧的 `indicator_code``remark` 状态。
## 本次修改
- 新增 SQL 资产校验测试 [`ccdi-project/src/test/java/com/ruoyi/ccdi/project/sql/CcdiBankTagRuleSqlMetadataTest.java`](/Users/wkc/Desktop/ccdi/ccdi/ccdi-project/src/test/java/com/ruoyi/ccdi/project/sql/CcdiBankTagRuleSqlMetadataTest.java)
- 先以缺失迁移脚本的红灯方式固定问题。
- 约束初始化脚本与增量脚本必须同时对齐:
- `FOREX_BUY_AMT -> SINGLE_PURCHASE_AMOUNT`
- `FOREX_SELL_AMT -> SINGLE_SETTLEMENT_AMOUNT`
- `LARGE_STOCK_TRADING -> STOCK_TFR_LARGE`
- 三条规则真实说明文案保持一致。
- 新增增量脚本 [`sql/migration/2026-03-20-sync-bank-tag-phase1-rule-metadata.sql`](/Users/wkc/Desktop/ccdi/ccdi/sql/migration/2026-03-20-sync-bank-tag-phase1-rule-metadata.sql)
- 使用 `INSERT ... ON DUPLICATE KEY UPDATE` 同步第一期 9 条真实规则元数据。
- 修复三条规则的 `indicator_code`
- 同步 9 条规则的真实规则 `remark`
- 将增量脚本通过 `bin/mysql_utf8_exec.sh` 落到当前验证数据库。
## 实施结果
- 规则元数据已对齐到第一期真实规则状态。
- 新增 SQL 校验测试可在仓库层拦住“只改初始化脚本、遗漏增量脚本”的回归。
- 修复后重新完成接口链路复验,项目 `47` 的自动拉取、手动重算、命中结果查询与详情接口均已通过。

View File

@@ -0,0 +1,28 @@
# Mock 服务随机 logId 实施记录
## 问题背景
- 2026-03-20 联调过程中,`lsfx-mock-server``logId` 仍使用进程内递增方式分配。
- 仓库文档与接口预期要求 Mock 返回随机 `logId`,避免联调时对顺序值形成隐式依赖。
## 根因分析
- [`lsfx-mock-server/services/file_service.py`](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/services/file_service.py) 中,`upload_file()``fetch_inner_flow()` 都直接通过 `self.log_counter += 1` 生成 `logId`
- 现有测试只覆盖了 `logId` 落在 `10000-99999` 区间内,没有约束“冲突时需要重试并避让已有记录”。
## 本次修改
- 在 [`lsfx-mock-server/tests/test_file_service.py`](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/tests/test_file_service.py) 先新增红灯测试 `test_generate_log_id_should_retry_when_random_value_conflicts`
- 固定随机值第一次命中已存在 `logId` 时必须重试。
- 同步把行内流水测试中的旧递增断言改为随机区间断言。
- 在 [`lsfx-mock-server/services/file_service.py`](/Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/services/file_service.py) 新增统一 `_generate_log_id()`
-`10000-99999` 区间内随机生成。
- 若命中 `file_records` 中已存在的 `logId`,则继续重试直到拿到未占用值。
- `upload_file()``fetch_inner_flow()` 均切换为调用该方法。
## 验证结果
- `python3 -m pytest lsfx-mock-server/tests/test_file_service.py -k "fetch_inner_flow_persists_primary_binding_record or generate_log_id_should_retry_when_random_value_conflicts" -v`
- 结果:`2 passed`
- `python3 -m pytest lsfx-mock-server/tests/test_file_service.py lsfx-mock-server/tests/test_statement_service.py lsfx-mock-server/tests/test_api.py lsfx-mock-server/tests/integration/test_full_workflow.py -v`
- 结果:`39 passed, 20 warnings`
## 实施结果
- Mock 服务的新建上传记录与行内流水记录已改为随机 `logId`
- 同一 `logId` 下的规则命中计划、流水样本与上传状态复用逻辑保持不变。