diff --git a/docs/plans/backend/2026-03-18-lsfx-logid-primary-binding-backend-implementation.md b/docs/plans/backend/2026-03-18-lsfx-logid-primary-binding-backend-implementation.md index ee868cd5..e1fa6520 100644 --- a/docs/plans/backend/2026-03-18-lsfx-logid-primary-binding-backend-implementation.md +++ b/docs/plans/backend/2026-03-18-lsfx-logid-primary-binding-backend-implementation.md @@ -8,6 +8,22 @@ **Tech Stack:** Python 3, FastAPI, pytest, httpx TestClient +## 执行结果 + +- 2026-03-18 已按计划完成 Task 1 至 Task 5,功能实现、实施记录与最终验证均已落地。 +- 代码提交顺序: + - `0120d09` `收敛Mock文件记录主体账号绑定模型` + - `6fb7287` `让拉取本行信息链路复用Mock主体账号绑定` + - `0a85c09` `统一Mock上传状态主体账号绑定优先级` + - `5195617` `让Mock流水查询复用logId主体账号绑定` +- 最终验证已通过: + - `python3 -m pytest tests/test_file_service.py -v` + - `python3 -m pytest tests/test_statement_service.py -v` + - `python3 -m pytest tests/test_api.py -v` + - `python3 -m pytest tests/integration/test_full_workflow.py -v` + - `python3 verify_implementation.py` +- 实施细节见 `docs/reports/implementation/2026-03-18-lsfx-logid-primary-binding-implementation.md` + --- ### Task 1: 收敛 FileRecord 为单一主体账号绑定模型 diff --git a/docs/reports/implementation/2026-03-18-lsfx-logid-primary-binding-implementation.md b/docs/reports/implementation/2026-03-18-lsfx-logid-primary-binding-implementation.md new file mode 100644 index 00000000..2ff3b4d5 --- /dev/null +++ b/docs/reports/implementation/2026-03-18-lsfx-logid-primary-binding-implementation.md @@ -0,0 +1,49 @@ +# LSFX Mock LogId 主体账号绑定实施记录 + +## 变更概述 + +- 在 `lsfx-mock-server/services/file_service.py` 为 `FileRecord` 增加 `primary_enterprise_name`、`primary_account_no`,统一维护 `logId -> 主体/账号` 单一主绑定。 +- 上传文件、拉取本行信息两条链路都改为创建并保存完整 `FileRecord`,后续上传状态查询优先读取真实记录,未命中时才回退到 deterministic 生成。 +- `lsfx-mock-server/services/statement_service.py` 改为按 `logId` 从 `FileService` 读取主绑定,并将 `leName`、`accountMaskNo` 统一注入分页流水结果。 +- `lsfx-mock-server/routers/api.py` 改为让 `statement_service` 与 `file_service` 共享同一份 `FileService` 实例,确保上传状态接口与查流水接口使用同一组绑定数据。 +- 补齐 `tests/test_file_service.py`、`tests/test_statement_service.py`、`tests/test_api.py`、`tests/integration/test_full_workflow.py` 回归测试,并在 `tests/conftest.py` 增加单例状态重置夹具,避免测试串扰。 + +## 联动结果 + +- 上传文件:创建 `FileRecord` 时同时生成主绑定,并同步回填 `accountsOfLog`、`uploadLogList`。 +- 拉取本行信息:返回 `logId` 前即落库 `FileRecord`,后续 `bs/upload`、`getpendings`、`getBSByLogId` 都可复用同一主绑定。 +- 上传状态:优先读取真实 `FileRecord`;只有当 `logId` 没有已存记录时,才走 deterministic fallback。 +- 银行流水:优先从 `FileService` 读取 `primary_enterprise_name`、`primary_account_no`,统一写入每条流水的 `leName`、`accountMaskNo`。 + +## 优先级说明 + +- `FileService.get_upload_status()`:真实 `FileRecord` 优先,deterministic fallback 兜底。 +- `StatementService` 主绑定解析:真实 `FileRecord` 优先,服务内 fallback 仅在记录不存在时生效。 +- deterministic fallback 的时间字段、主体字段、账号字段都已改为基于 `logId` 的稳定生成,保证同一 `logId` 重复查询结果一致。 + +## 提交记录 + +- `0120d09` `收敛Mock文件记录主体账号绑定模型` +- `6fb7287` `让拉取本行信息链路复用Mock主体账号绑定` +- `0a85c09` `统一Mock上传状态主体账号绑定优先级` +- `5195617` `让Mock流水查询复用logId主体账号绑定` + +## 验证记录 + +- `cd lsfx-mock-server && python3 -m pytest tests/test_file_service.py -v` +- `cd lsfx-mock-server && python3 -m pytest tests/test_statement_service.py -v` +- `cd lsfx-mock-server && python3 -m pytest tests/test_api.py -v` +- `cd lsfx-mock-server && python3 -m pytest tests/integration/test_full_workflow.py -v` +- `cd lsfx-mock-server && python3 verify_implementation.py` + +## 验证结果 + +- `tests/test_file_service.py`:3 个用例全部通过。 +- `tests/test_statement_service.py`:1 个用例通过。 +- `tests/test_api.py`:14 个用例全部通过。 +- `tests/integration/test_full_workflow.py`:4 个用例全部通过。 +- `verify_implementation.py`:接口字段完整性与模板文件校验全部通过。 + +## 进程说明 + +- 本次验证仅运行 pytest 与 `verify_implementation.py`,未启动 `python main.py` 或 `uvicorn`,无需额外停止服务进程。