Files
ccdi/docs/plans/misc/2026-03-19-lsfx-mock-db-backed-identity-selection-implementation.md

2.5 KiB
Raw Blame History

LSFX Mock 数据库身份绑定实施计划

For agentic workers: REQUIRED: Use superpowers:subagent-driven-development (if subagents available) or superpowers:executing-plans to implement this plan. Steps use checkbox (- [ ]) syntax for tracking.

Goal:lsfx-mock-server 在创建 logId 时从员工信息库随机选择一个员工,并读取该员工亲属,后续同一 logId 的流水仅使用这组数据库身份。

Architecture: 在 Mock 服务中新增一个只读身份仓储,负责从 ccdi_base_staffccdi_staff_fmy_relation 读取员工及亲属。FileService 在创建 FileRecord 时写入选中的员工/亲属身份,StatementService 只复用该记录中的证件号,不再依赖内置固定身份证池。

Tech Stack: FastAPI, Python 3.9, PyMySQL, pytest


Task 1: 补数据库身份绑定失败测试

Files:

  • Modify: lsfx-mock-server/tests/test_file_service.py

  • Modify: lsfx-mock-server/tests/test_statement_service.py

  • Step 1: 写出 FileService 需要保存员工与亲属身份的失败测试

  • Step 2: 运行对应测试,确认当前实现失败

  • Step 3: 写出 StatementService 只能使用该员工及其亲属证件号的失败测试

  • Step 4: 运行对应测试,确认当前实现失败

Task 2: 新增只读身份仓储

Files:

  • Create: lsfx-mock-server/services/staff_identity_repository.py

  • Modify: lsfx-mock-server/config/settings.py

  • Modify: lsfx-mock-server/requirements.txt

  • Step 1: 定义员工/亲属身份查询结果结构与仓储接口

  • Step 2: 接入 MySQL 只读查询配置

  • Step 3: 实现“随机取一个有身份证号员工 + 读取该员工有效亲属”的最小查询逻辑

  • Step 4: 保持仓储可被测试替身替换

Task 3: 将 logId 与数据库身份绑定

Files:

  • Modify: lsfx-mock-server/services/file_service.py

  • Modify: lsfx-mock-server/services/statement_service.py

  • Modify: lsfx-mock-server/routers/api.py

  • Step 1: 在 FileRecord 中增加员工/亲属身份字段

  • Step 2: 在上传文件与拉取行内流水时写入随机员工及其亲属

  • Step 3: 在流水生成阶段只使用 FileRecord 中的员工/亲属证件号

  • Step 4: 保留 deterministic fallback但不影响真实记录链路

Task 4: 回归验证与文档沉淀

Files:

  • Create: docs/reports/implementation/2026-03-19-lsfx-mock-db-backed-identity-selection-fix.md

  • Step 1: 运行 lsfx-mock-server 相关测试

  • Step 2: 记录根因、改动点和验证结果