fix: 战略地图P0修复 — KPI code统一+放开同层连线+数据迁移

This commit is contained in:
Hermes CI Fix
2026-07-14 16:02:33 +08:00
parent c7d436ec7a
commit 6218a7d2db
8775 changed files with 4125 additions and 1758555 deletions
+47 -1
View File
@@ -8,7 +8,7 @@ from sqlalchemy import func
from typing import Optional
from app.database import get_db
from app.auth_middleware import require_auth, require_role
from app.models import KPIValue, DataSourceConfig, OperationLog
from app.models import KPIValue, DataSourceConfig, OperationLog, KPIDefinition
router = APIRouter(prefix="/api/cma/data", tags=["数据对接"],
dependencies=[Depends(require_role("ceo", "finance", "it"))],
@@ -301,3 +301,49 @@ def delete_source(source_id: int, db: Session = Depends(get_db)):
db.delete(source)
db.commit()
return {"message": "删除成功"}
@router.get("/sync-kpis")
def sync_kpis_from_erp(db: Session = Depends(get_db)):
"""从ERP数据源同步KPI值(调用erp_sync模块)"""
from scripts.erp_sync import run_sync
import traceback
from datetime import datetime as dt
try:
# 获取所有标记为erp数据源的KPI
erp_kpis = db.query(KPIDefinition).filter(
KPIDefinition.status == "active",
KPIDefinition.data_source_type == "erp",
).all()
kpi_count = len(erp_kpis)
kpi_codes = [k.kpi_code for k in erp_kpis]
# 执行同步 (dry_run=False, use_api=False 使用本地fallback)
run_sync(dry_run=False, kpi_codes=kpi_codes, use_api=False)
# 记录操作日志
log = OperationLog(
action="sync_kpis",
target_type="kpi",
detail=f"ERP同步: {kpi_count}个KPI, 编码: {', '.join(kpi_codes[:10])}{'...' if kpi_count > 10 else ''}",
)
db.add(log)
db.commit()
return {
"message": f"ERP数据同步完成",
"total_kpis": kpi_count,
"kpi_codes": kpi_codes,
"synced_at": dt.now().isoformat(),
}
except Exception as e:
log = OperationLog(
action="sync_kpis_error",
target_type="kpi",
detail=f"ERP同步失败: {str(e)[:500]}",
)
db.add(log)
db.commit()
raise HTTPException(500, f"ERP同步失败: {str(e)}")