fix(data): 数据管理模块脱节修复 — Excel导入/sources端点 entity 隔离 + ERP直连通道诚实化(410) + 真实zxt链路展示

- import_excel/import_excel_smart KPI字典按 entity_id 过滤(防跨账套匹配串写,P0安全)
- import_excel_smart 自动建KPI编码防冲突(_next_code 循环取号)
- sources list/create/update/delete 全部按 entity_id 隔离(create 写入当前账套)
- sync-kpis + admin/erp-sync 下线返回410(erp-gateway DB凭据2026-08-31已删,真实通道=zxt智享通注入)
- 新增 GET /data/channel-status:展示真实zxt取数通道状态+遗留ERP数据源清单(诚实化)
- DataManage.vue:数据源tab顶部展示真实通道(最近注入period/时间/行数/落盘目录mtime)、ERP遗留源标注'非当前通道'、实际取数映射(kpi_value_sources)表格
- 新增 test_data_entity_isolation_20260908.py(8条:双账套导入隔离/CRUD隔离/sync-kpis 410/channel-status)
This commit is contained in:
Hermes CI Fix
2026-09-08 11:19:38 +08:00
parent bdcfa2500e
commit 193061cf4d
5 changed files with 471 additions and 79 deletions
+9 -14
View File
@@ -109,26 +109,21 @@ def startup():
logger.info("管理会计OS后端启动完成")
# ERP 直连同步通道停用(2026-08-31 起 erp-gateway DB 凭据删除;真实财务数据走 zxt 智享通注入)
_ERP_CHANNEL_DISABLED_REASON = ("ERP直连同步通道已于2026-08-31停用(erp-gateway DB 凭据已删除,zxbtest 账号停用)。"
"财务原始数据真实通道为 zxt 智享通注入(source_type='zxt-sync'),本端点不再可用。")
@app.post("/api/cma/admin/erp-sync")
def admin_erp_sync(user=Depends(require_auth), kpi_codes: str = None):
"""手动触发ERP数据同步"""
kpi_list = kpi_codes.split(",") if kpi_codes else None
try:
run_erp_sync(dry_run=False, kpi_codes=kpi_list, use_api=True)
return {"message": "ERP同步完成", "kpis": kpi_list}
except Exception as e:
return JSONResponse(status_code=500, content={"detail": f"同步失败: {str(e)}"})
"""[已停用] 手动触发ERP数据同步 — ERP 直连通道 2026-08-31 停用,返回 410"""
return JSONResponse(status_code=410, content={"detail": _ERP_CHANNEL_DISABLED_REASON})
@app.get("/api/cma/admin/erp-sync/dry-run")
def admin_erp_sync_dry_run(user=Depends(require_auth), kpi_codes: str = None):
"试运行,不写入数据库"""
kpi_list = kpi_codes.split(",") if kpi_codes else None
try:
run_erp_sync(dry_run=True, kpi_codes=kpi_list, use_api=True)
return {"message": "试运行完成"}
except Exception as e:
return JSONResponse(status_code=500, content={"detail": f"试运行失败: {str(e)}"})
"""[已停用] 试运行 — ERP 直连通道 2026-08-31 停用,返回 410"""
return JSONResponse(status_code=410, content={"detail": _ERP_CHANNEL_DISABLED_REASON})
@app.post("/api/cma/admin/alerts/check")