修复流水详情原始文件关联与Mock随机logId
This commit is contained in:
@@ -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` 命中标签与原始文件名。
|
||||
|
||||
@@ -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` 的自动拉取、手动重算、命中结果查询与详情接口均已通过。
|
||||
@@ -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` 下的规则命中计划、流水样本与上传状态复用逻辑保持不变。
|
||||
Reference in New Issue
Block a user