完成求解器雅可比矩阵首轮优化,增加更新目录,整理了文档文件夹,增加了服务启动脚本
This commit is contained in:
1 parent
6bb0591d32
commit
16a7eb2d6c
48 files changed
+8172
-217
No files matched your search
@@ -0,0 +1,40 @@
|
||||
@echo off
|
||||
setlocal EnableExtensions DisableDelayedExpansion
|
||||
|
||||
title SystemSimulationApp Launcher
|
||||
|
||||
set "BACKEND_SCRIPT=%~dp0start-backend.bat"
|
||||
set "FRONTEND_SCRIPT=%~dp0start-reactflow.bat"
|
||||
|
||||
if not exist "%BACKEND_SCRIPT%" (
|
||||
echo [ERROR] start-backend.bat was not found:
|
||||
echo %BACKEND_SCRIPT%
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
if not exist "%FRONTEND_SCRIPT%" (
|
||||
echo [ERROR] start-reactflow.bat was not found:
|
||||
echo %FRONTEND_SCRIPT%
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo Starting FastAPI and ReactFlow in separate windows...
|
||||
|
||||
set "LAUNCH_ERROR=0"
|
||||
ver >nul
|
||||
start "FastAPI - 127.0.0.1:8000" "%ComSpec%" /d /c call "%BACKEND_SCRIPT%"
|
||||
if errorlevel 1 set "LAUNCH_ERROR=1"
|
||||
ver >nul
|
||||
start "ReactFlow - 127.0.0.1:5173" "%ComSpec%" /d /c call "%FRONTEND_SCRIPT%"
|
||||
if errorlevel 1 set "LAUNCH_ERROR=1"
|
||||
|
||||
if "%LAUNCH_ERROR%"=="1" (
|
||||
echo.
|
||||
echo [ERROR] One or more service windows could not be created.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
exit /b 0
|
||||
Executable
+130
@@ -0,0 +1,130 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -u
|
||||
|
||||
if (( BASH_VERSINFO[0] < 4 || (BASH_VERSINFO[0] == 4 && BASH_VERSINFO[1] < 3) )); then
|
||||
echo "[ERROR] start-all.sh requires Bash 4.3 or newer." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
|
||||
BACKEND_SCRIPT="$SCRIPT_DIR/start-backend.sh"
|
||||
FRONTEND_SCRIPT="$SCRIPT_DIR/start-reactflow.sh"
|
||||
|
||||
if [[ ! -x "$BACKEND_SCRIPT" ]]; then
|
||||
echo "[ERROR] Backend start script is missing or not executable:" >&2
|
||||
echo " $BACKEND_SCRIPT" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -x "$FRONTEND_SCRIPT" ]]; then
|
||||
echo "[ERROR] Frontend start script is missing or not executable:" >&2
|
||||
echo " $FRONTEND_SCRIPT" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
BACKEND_PID=""
|
||||
FRONTEND_PID=""
|
||||
|
||||
signal_process_group() {
|
||||
local signal="$1"
|
||||
local pid="$2"
|
||||
|
||||
[[ -n "$pid" ]] || return 0
|
||||
kill "-$signal" -- "-$pid" 2>/dev/null || kill "-$signal" "$pid" 2>/dev/null || true
|
||||
}
|
||||
|
||||
process_group_is_running() {
|
||||
local pid="$1"
|
||||
|
||||
[[ -n "$pid" ]] && kill -0 -- "-$pid" 2>/dev/null
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
local backend_cleared=false
|
||||
local force_kill=false
|
||||
local frontend_cleared=false
|
||||
local launcher_pid=$$
|
||||
local timer_pid
|
||||
|
||||
trap '' INT TERM HUP
|
||||
trap - EXIT
|
||||
trap 'force_kill=true' ALRM
|
||||
|
||||
signal_process_group TERM "$BACKEND_PID"
|
||||
signal_process_group TERM "$FRONTEND_PID"
|
||||
|
||||
(
|
||||
sleep 5
|
||||
kill -ALRM "$launcher_pid" 2>/dev/null || true
|
||||
) &
|
||||
timer_pid=$!
|
||||
|
||||
if [[ -n "$BACKEND_PID" ]]; then
|
||||
wait "$BACKEND_PID" 2>/dev/null || true
|
||||
fi
|
||||
if [[ "$force_kill" == false && -n "$FRONTEND_PID" ]]; then
|
||||
wait "$FRONTEND_PID" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
while [[ "$force_kill" == false ]]; do
|
||||
if [[ "$backend_cleared" == false ]] && ! process_group_is_running "$BACKEND_PID"; then
|
||||
backend_cleared=true
|
||||
fi
|
||||
if [[ "$frontend_cleared" == false ]] && ! process_group_is_running "$FRONTEND_PID"; then
|
||||
frontend_cleared=true
|
||||
fi
|
||||
if [[ "$backend_cleared" == true && "$frontend_cleared" == true ]]; then
|
||||
break
|
||||
fi
|
||||
sleep 0.1
|
||||
done
|
||||
|
||||
kill -KILL "$timer_pid" 2>/dev/null || true
|
||||
wait "$timer_pid" 2>/dev/null || true
|
||||
|
||||
if [[ "$force_kill" == true ]]; then
|
||||
if [[ "$backend_cleared" == false ]] && ! process_group_is_running "$BACKEND_PID"; then
|
||||
backend_cleared=true
|
||||
fi
|
||||
if [[ "$frontend_cleared" == false ]] && ! process_group_is_running "$FRONTEND_PID"; then
|
||||
frontend_cleared=true
|
||||
fi
|
||||
if [[ "$backend_cleared" == false ]]; then
|
||||
signal_process_group KILL "$BACKEND_PID"
|
||||
fi
|
||||
if [[ "$frontend_cleared" == false ]]; then
|
||||
signal_process_group KILL "$FRONTEND_PID"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -n "$BACKEND_PID" ]]; then
|
||||
wait "$BACKEND_PID" 2>/dev/null || true
|
||||
fi
|
||||
if [[ -n "$FRONTEND_PID" ]]; then
|
||||
wait "$FRONTEND_PID" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
trap - ALRM
|
||||
}
|
||||
|
||||
trap cleanup EXIT
|
||||
trap 'exit 130' INT
|
||||
trap 'exit 143' TERM
|
||||
trap 'exit 129' HUP
|
||||
|
||||
echo "Starting FastAPI and ReactFlow..."
|
||||
echo "Press Ctrl+C to stop both services."
|
||||
echo
|
||||
|
||||
set -m
|
||||
"$BACKEND_SCRIPT" &
|
||||
BACKEND_PID=$!
|
||||
"$FRONTEND_SCRIPT" &
|
||||
FRONTEND_PID=$!
|
||||
set +m
|
||||
|
||||
wait -n
|
||||
EXIT_CODE=$?
|
||||
|
||||
exit "$EXIT_CODE"
|
||||
@@ -0,0 +1,44 @@
|
||||
@echo off
|
||||
setlocal EnableExtensions DisableDelayedExpansion
|
||||
|
||||
for %%I in ("%~dp0..") do set "REPO_ROOT=%%~fI"
|
||||
title SystemSimulationApp FastAPI - 127.0.0.1:8000
|
||||
|
||||
set "PYTHON_EXE=%REPO_ROOT%\.venv-win\Scripts\python.exe"
|
||||
|
||||
if not exist "%PYTHON_EXE%" (
|
||||
echo [ERROR] Python virtual environment was not found:
|
||||
echo %PYTHON_EXE%
|
||||
echo.
|
||||
echo Create it and install the backend dependencies first:
|
||||
echo py -3 -m venv "%REPO_ROOT%\.venv-win"
|
||||
echo "%PYTHON_EXE%" -m pip install -r "%REPO_ROOT%\requirements.txt"
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
pushd "%REPO_ROOT%" >nul
|
||||
if errorlevel 1 (
|
||||
echo [ERROR] Unable to enter the repository directory:
|
||||
echo %REPO_ROOT%
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo Starting FastAPI at http://127.0.0.1:8000
|
||||
echo Press Ctrl+C to stop the service.
|
||||
echo.
|
||||
|
||||
"%PYTHON_EXE%" -m uvicorn app.main:app --host 127.0.0.1 --port 8000
|
||||
set "EXIT_CODE=%ERRORLEVEL%"
|
||||
|
||||
if not "%EXIT_CODE%"=="0" (
|
||||
echo.
|
||||
echo [ERROR] FastAPI exited with code %EXIT_CODE%.
|
||||
pause
|
||||
)
|
||||
|
||||
popd
|
||||
exit /b %EXIT_CODE%
|
||||
Executable
+29
@@ -0,0 +1,29 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -u
|
||||
|
||||
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
|
||||
REPO_ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd -P)"
|
||||
PYTHON_EXE="${SYSTEM_SIMULATION_PYTHON:-$REPO_ROOT/.venv/bin/python}"
|
||||
|
||||
if [[ "$PYTHON_EXE" != /* ]]; then
|
||||
PYTHON_EXE="$REPO_ROOT/$PYTHON_EXE"
|
||||
fi
|
||||
|
||||
if [[ ! -x "$PYTHON_EXE" ]]; then
|
||||
echo "[ERROR] Python virtual environment was not found:" >&2
|
||||
echo " $PYTHON_EXE" >&2
|
||||
echo >&2
|
||||
echo "Create it and install the backend dependencies first:" >&2
|
||||
echo " python3 -m venv \"$REPO_ROOT/.venv\"" >&2
|
||||
echo " \"$REPO_ROOT/.venv/bin/python\" -m pip install -r \"$REPO_ROOT/requirements.txt\"" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "$REPO_ROOT"
|
||||
|
||||
echo "Starting FastAPI at http://127.0.0.1:8000"
|
||||
echo "Press Ctrl+C to stop the service."
|
||||
echo
|
||||
|
||||
exec "$PYTHON_EXE" -m uvicorn app.main:app --host 127.0.0.1 --port 8000
|
||||
@@ -0,0 +1,77 @@
|
||||
@echo off
|
||||
setlocal EnableExtensions DisableDelayedExpansion
|
||||
|
||||
for %%I in ("%~dp0..") do set "REPO_ROOT=%%~fI"
|
||||
set "FRONTEND_DIR=%REPO_ROOT%\frontend"
|
||||
title SystemSimulationApp ReactFlow - 127.0.0.1:5173
|
||||
|
||||
if not exist "%FRONTEND_DIR%\package.json" (
|
||||
echo [ERROR] Frontend package.json was not found:
|
||||
echo %FRONTEND_DIR%\package.json
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
set "NODE_DIR="
|
||||
for /d %%D in ("%REPO_ROOT%\.tools\node-*-win-x64") do (
|
||||
if not defined NODE_DIR if exist "%%~fD\node.exe" if exist "%%~fD\npm.cmd" (
|
||||
"%%~fD\node.exe" -e "v=process.versions.node.split('.');M=+v[0];m=+v[1];process.exit((M===20&&m>=19)||(M===22&&m>=12)||M>=23?0:1)" >nul 2>&1
|
||||
if not errorlevel 1 set "NODE_DIR=%%~fD"
|
||||
)
|
||||
)
|
||||
|
||||
if not defined NODE_DIR (
|
||||
echo [ERROR] A compatible Node.js portable runtime was not found under:
|
||||
echo %REPO_ROOT%\.tools
|
||||
echo Vite requires Node.js 20.19+ or 22.12+.
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
set "NPM_EXE=%NODE_DIR%\npm.cmd"
|
||||
if not exist "%NPM_EXE%" (
|
||||
echo [ERROR] npm.cmd was not found:
|
||||
echo %NPM_EXE%
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
if not exist "%FRONTEND_DIR%\node_modules\.bin\vite.cmd" (
|
||||
echo [ERROR] Frontend dependencies are not installed.
|
||||
echo Run the following command first:
|
||||
echo cd /d "%FRONTEND_DIR%"
|
||||
echo call "%NPM_EXE%" ci
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
pushd "%FRONTEND_DIR%" >nul
|
||||
if errorlevel 1 (
|
||||
echo [ERROR] Unable to enter the frontend directory:
|
||||
echo %FRONTEND_DIR%
|
||||
echo.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
set "PATH=%NODE_DIR%;%PATH%"
|
||||
|
||||
echo Starting ReactFlow at http://127.0.0.1:5173
|
||||
echo Press Ctrl+C to stop the service.
|
||||
echo.
|
||||
|
||||
call "%NPM_EXE%" run dev -- --strictPort
|
||||
set "EXIT_CODE=%ERRORLEVEL%"
|
||||
|
||||
if not "%EXIT_CODE%"=="0" (
|
||||
echo.
|
||||
echo [ERROR] ReactFlow exited with code %EXIT_CODE%.
|
||||
pause
|
||||
)
|
||||
|
||||
popd
|
||||
exit /b %EXIT_CODE%
|
||||
Executable
+72
@@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -u
|
||||
|
||||
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
|
||||
REPO_ROOT="$(cd -- "$SCRIPT_DIR/.." && pwd -P)"
|
||||
FRONTEND_DIR="$REPO_ROOT/frontend"
|
||||
|
||||
node_version_supported() {
|
||||
local version="$1"
|
||||
local major
|
||||
local minor
|
||||
|
||||
[[ "$version" =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+) ]] || return 1
|
||||
major=$((10#${BASH_REMATCH[1]}))
|
||||
minor=$((10#${BASH_REMATCH[2]}))
|
||||
(( (major == 20 && minor >= 19) || (major == 22 && minor >= 12) || major >= 23 ))
|
||||
}
|
||||
|
||||
if [[ ! -f "$FRONTEND_DIR/package.json" ]]; then
|
||||
echo "[ERROR] Frontend package.json was not found:" >&2
|
||||
echo " $FRONTEND_DIR/package.json" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
NODE_EXE=""
|
||||
NPM_EXE=""
|
||||
for candidate in "$REPO_ROOT"/.tools/node-*-linux-x64/bin; do
|
||||
if [[ -x "$candidate/node" && -x "$candidate/npm" ]]; then
|
||||
CANDIDATE_VERSION="$("$candidate/node" --version 2>/dev/null || true)"
|
||||
if node_version_supported "$CANDIDATE_VERSION"; then
|
||||
NODE_EXE="$candidate/node"
|
||||
NPM_EXE="$candidate/npm"
|
||||
PATH="$candidate:${PATH:-}"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
export PATH
|
||||
|
||||
if [[ -z "$NODE_EXE" ]]; then
|
||||
NODE_EXE="$(command -v node || true)"
|
||||
NPM_EXE="$(command -v npm || true)"
|
||||
fi
|
||||
|
||||
if [[ -z "$NODE_EXE" || -z "$NPM_EXE" ]]; then
|
||||
echo "[ERROR] Node.js and npm were not found." >&2
|
||||
echo "Install Node.js 20.19+ or 22.12+ and make node/npm available on PATH." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
NODE_VERSION="$("$NODE_EXE" --version 2>/dev/null || true)"
|
||||
if ! node_version_supported "$NODE_VERSION"; then
|
||||
echo "[ERROR] Unsupported Node.js version: $NODE_VERSION" >&2
|
||||
echo "Vite requires Node.js 20.19+ or 22.12+ (Node.js 21 is not supported)." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -x "$FRONTEND_DIR/node_modules/.bin/vite" ]]; then
|
||||
echo "[ERROR] Frontend dependencies are not installed." >&2
|
||||
echo "Run the following command first:" >&2
|
||||
echo " cd \"$FRONTEND_DIR\" && \"$NPM_EXE\" ci" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd "$FRONTEND_DIR"
|
||||
|
||||
echo "Starting ReactFlow at http://127.0.0.1:5173"
|
||||
echo "Press Ctrl+C to stop the service."
|
||||
echo
|
||||
|
||||
exec "$NPM_EXE" run dev -- --strictPort
|
||||
Reference in new issue
Block a user