From 8c91db3f60e27c4d3ade792be7b3b37e8040e111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=96=87=E8=96=87=E5=AE=89?= Date: Thu, 12 Feb 2026 10:15:44 +0800 Subject: [PATCH] 1 --- backend/api/routes/system.py | 47 +++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/backend/api/routes/system.py b/backend/api/routes/system.py index 9dafb0e..3a82d1d 100644 --- a/backend/api/routes/system.py +++ b/backend/api/routes/system.py @@ -6,7 +6,7 @@ import time from pathlib import Path from typing import Any, Dict, Optional, Tuple -from fastapi import APIRouter, HTTPException, Header, Depends +from fastapi import APIRouter, HTTPException, Header, Depends, BackgroundTasks from pydantic import BaseModel import logging @@ -708,6 +708,51 @@ def _action_with_fallback(action: str, program: str) -> Tuple[str, Optional[str] return out, resolved, status_all + +def _run_fix_script(): + """Run the fix_trade_records.py script in a subprocess""" + try: + script_path = Path(__file__).parent.parent.parent.parent / "scripts" / "fix_trade_records.py" + if not script_path.exists(): + logger.error(f"Fix script not found at {script_path}") + return + + logger.info(f"Starting trade record fix script: {script_path}") + + # Ensure project root is in PYTHONPATH + env = os.environ.copy() + project_root = Path(__file__).parent.parent.parent.parent + env["PYTHONPATH"] = f"{env.get('PYTHONPATH', '')}:{project_root}" + + process = subprocess.Popen( + ["python3", str(script_path)], + env=env, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True + ) + stdout, stderr = process.communicate() + + if process.returncode == 0: + logger.info(f"Trade record fix completed successfully:\n{stdout}") + else: + logger.error(f"Trade record fix failed (exit code {process.returncode}):\n{stderr}") + + except Exception as e: + logger.error(f"Error running trade record fix script: {e}") + +@router.post("/fix-trade-records") +async def fix_trade_records( + background_tasks: BackgroundTasks, + _admin: Dict[str, Any] = Depends(require_system_admin) +): + """ + Trigger the trade record fix script (time inversion & commission backfill). + Runs in background. + """ + background_tasks.add_task(_run_fix_script) + return {"message": "Trade fix task started in background"} + @router.post("/clear-cache") async def clear_cache( _admin: Dict[str, Any] = Depends(require_system_admin),