[feat]:[FL-69][接入 legacy ATP/EGM worker 适配链路]

Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
chengkai3
2026-06-09 12:27:42 +08:00
parent d36aeb8636
commit d7f712e3c1
11 changed files with 1704 additions and 16 deletions
+64
View File
@@ -81,3 +81,67 @@
- 风险与关注点:
- 本次变更仅影响文件管理页列表展示,不涉及后端索引同步逻辑,也不影响其它复用该接口的页面读取 `synced_at` 字段。
## Work Log - ATP/EGM/Wine 生产计算链路接入 legacy_atp worker 适配(2026-06-09
- 背景:
- Issue `FL-69` 要求把 `fl-knowledge` 的旧 ATP/EGM 生产计算协议接入 `fquiz`,并确保真实计算执行在 worker 中异步完成。
- 现状是:
- `fl_analysis_service` 已有 Celery worker 链路,但 `external_adapter` 仅支持 `placeholder/atp/wine`
- 通用 `fl_analysis_external.py` 只覆盖“ATP 模板渲染 + 子进程执行”的简化协议,不承接旧 ATP 目录协议、特征写入和 EGM/rjtzl.exe。
- `atp_model_service.get_engine_status()` 只能返回 ATP engine 总体可用性,不能细分 `tpbig.exe/rjtzl.exe/legacy_root/EGM子目录` 等资产状态。
- 本次处理:
- `api/app/services/legacy_atp_adapter.py`
- 新增独立 legacy ATP/EGM 业务适配层,不把旧链路逻辑混入通用 `wine_service.py`
- 支持:
- `WINE_ALLOWED_ROOT` 下的 legacy 资产路径校验。
- 旧模板目录解析、`fanji/raoji1/raoji2/raoji3` 模式选择。
- ATP 特征配置读取与定长 offset/length 写入。
- `gb18030/gbk/utf-8-sig/utf-8` 配置与结果文件解码。
- `tpbig.exe``rjtzl.exe` 调用。
- EGM 子目录存在性校验、`rjtzl.exe运行失败,所得绕击跳闸率无效` 错误归一化。
- 结果文件 / stdout 解析并映射到现有防雷分析结果结构。
- 同时补了 legacy 资产状态检查构建函数,给 ATP 状态接口复用。
- `api/app/services/fl_analysis_service.py`
- 扩展 `external_adapter` 支持 `legacy_atp`
-`normal/tongtiao` worker 执行链路中直接调用 `resolve_legacy_atp_job()` / `execute_legacy_atp_tower_analysis()`
- `scenario` 复算场景会沿用基线任务的 `external_adapter + adapter_config_json`,因此也能复用 `legacy_atp`
- 保持长耗时执行仍在现有 `execute_fl_analysis_job` worker 中完成,API 侧只负责校验和派发。
- `api/app/services/atp_model_service.py`
- ATP 状态响应新增 `checks` 明细,细分返回:
- `wine`
- `legacy_root`
- `template_root`
- `run_root`
- `tpbig_executable`
- `rjtzl_executable`
- `egm_subdir`
- `api/app/core/config.py`
- 新增 legacy ATP/EGM 资产配置项:
- `atp_legacy_root`
- `atp_tpbig_executable`
- `atp_rjtzl_executable`
- `atp_template_root`
- `atp_run_root`
- `atp_egm_subdir`
- `api/app/schemas/fl_analysis.py` / `api/app/schemas/atp_model.py`
- 扩展 adapter 枚举和 ATP 状态响应字段,补齐接口契约。
- 新增测试:
- `api/tests/test_legacy_atp_adapter_paths.py`
- `api/tests/test_legacy_atp_feature_set.py`
- `api/tests/test_fl_analysis_legacy_atp_adapter.py`
- `api/tests/test_atp_engine_task.py`
- 验证:
- `python3 -m py_compile app/services/legacy_atp_adapter.py app/services/fl_analysis_service.py app/services/atp_model_service.py app/schemas/fl_analysis.py app/schemas/atp_model.py app/core/config.py tests/test_legacy_atp_adapter_paths.py tests/test_legacy_atp_feature_set.py tests/test_fl_analysis_legacy_atp_adapter.py tests/test_atp_engine_task.py`
- 通过
- `UV_CACHE_DIR=/tmp/uv-cache uv run --with-requirements requirements.txt --with pytest --no-project env PYTHONPATH=. python -m pytest tests/test_atp_engine_task.py tests/test_wine_probe.py tests/test_legacy_atp_adapter_paths.py tests/test_legacy_atp_feature_set.py tests/test_fl_analysis_legacy_atp_adapter.py tests/test_fl_analysis_external.py tests/test_async_dispatch_services.py tests/test_atp_model_service.py tests/test_fl_analysis_service.py tests/test_fl_analysis_schema.py`
- `19 passed, 1 warning`
- warning 为既有 SQLAlchemy relationship overlap 提示,与本次改动无直接关系。
- `git diff --check`
- 通过
- 风险与关注点:
- 当前仓库内仍没有 `tpbig.exe``rjtzl.exe`、旧 ATP 模型目录和 EGM 子目录等真实生产运行资产;本次交付的是代码层接入、状态检测和可测的 worker 执行协议。
- 上线前仍需在容器/部署环境提供实际 legacy 资产挂载,并用真实资产做 smoke test。