2.5 KiB
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_staff 与 ccdi_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: 记录根因、改动点和验证结果