# LSFX Mock Server `ccdi_account_info` 异常账户字段补迁移后端实施文档 ## 背景 - `lsfx-mock-server` 上传接口 `/watson/api/project/remoteUploadSplitFile` 在写入 `ccdi_account_info` 时使用了 `is_self_account`、`trans_risk_level` 字段。 - 当前开发库中的 `ccdi_account_info` 为历史表结构,不包含这两列,导致 `AbnormalAccountBaselineService.apply(...)` 执行 upsert 时依次抛出 `Unknown column 'is_self_account' in 'field list'`、`Unknown column 'trans_risk_level' in 'field list'`,上传接口直接返回 500。 ## 本次修改 - 新增增量脚本 `sql/migration/2026-04-15-sync-ccdi-account-info-abnormal-account-columns.sql`。 - 脚本以最短路径为已有 `ccdi_account_info` 表补齐异常账户同步当前必需的字段,并保持可重复执行: - 使用 `information_schema.columns` 判断字段是否已存在 - 通过 `PREPARE / EXECUTE` 仅在缺列时执行 `ALTER TABLE` - 补齐 `is_self_account` 与 `trans_risk_level` - 列位置与当前写库 SQL 保持一致 - 新增回归测试 `lsfx-mock-server/tests/test_schema_migration_scripts.py`,锁定该增量脚本必须存在且包含两条补列语句。 ## 验证 - `python3 -m pytest /Users/wkc/Desktop/ccdi/ccdi/lsfx-mock-server/tests/test_schema_migration_scripts.py -q` - 使用 `bin/mysql_utf8_exec.sh` 执行增量脚本后,复查 `SHOW COLUMNS FROM ccdi_account_info`,确认存在 `is_self_account`、`trans_risk_level` 字段。 ## 影响范围 - 仅影响 `lsfx-mock-server` 依赖的 `ccdi_account_info` 历史表结构补齐。 - 不修改接口协议,不改动前端。