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

2.4 KiB

2026-03-19 LSFX Mock 数据库身份绑定修复记录

背景

  • 调整目标:一个 logId 需要从员工信息库随机选取一个员工身份证号,并且该员工的亲属证件号也必须从数据库读取。
  • 业务口径:同一个 logId 的流水证件号范围仅允许使用“该员工本人 + 该员工亲属”。

根因

  • lsfx-mock-server 之前使用内置固定身份证池生成 cretNo,没有接入 ccdi_base_staffccdi_staff_fmy_relation
  • 即使前一版已经收敛到单员工域,身份来源仍然是 mock 常量,不满足“从数据库读取员工及亲属”的要求。

修改内容

1. 新增只读员工身份仓储

  • 新增 lsfx-mock-server/services/staff_identity_repository.py
  • 仓储使用 PyMySQL 只读查询:
    • ccdi_base_staff 随机选取一个有身份证号的在职员工
    • 优先选择存在有效亲属记录的员工
    • ccdi_staff_fmy_relation 读取该员工的有效亲属证件号

2. FileRecord 绑定数据库身份

  • lsfx-mock-server/services/file_service.py
    • FileService 支持注入身份仓储
    • FileRecord 新增:
      • staff_name
      • staff_id_card
      • family_id_cards
    • 上传文件与拉取行内流水时,创建 logId 的同时写入该员工及亲属身份

3. 流水生成只复用绑定身份

  • lsfx-mock-server/services/statement_service.py
    • logId 已存在真实 FileRecord,则流水生成阶段只使用该记录中的 staff_id_cardfamily_id_cards
  • lsfx-mock-server/services/statement_rule_samples.py
    • 固定命中样本支持接收外部传入的员工/亲属证件号,避免继续依赖内置固定身份证

4. 配置与测试

  • lsfx-mock-server/config/settings.py
    • 从主项目 ruoyi-admin/src/main/resources/application-dev.yml 提取数据库连接默认值
  • lsfx-mock-server/requirements.txt
    • 新增 PyMySQL
  • 测试层新增假仓储,避免单元/集成测试访问真实数据库

验证结果

  • 执行:
    • cd lsfx-mock-server && python3 -m pytest tests/test_file_service.py tests/test_statement_service.py tests/integration/test_full_workflow.py -q
  • 结果:
    • 17 passed

影响说明

  • 本次变更仅作用于 lsfx-mock-server
  • 真实运行时会按数据库随机绑定员工与亲属;测试环境仍通过假仓储保持可控与稳定。