完成求解器雅可比矩阵首轮优化,增加更新目录,整理了文档文件夹,增加了服务启动脚本

This commit is contained in:
lujingze committed 2026-08-17 07:33:31 +00:00
1 parent 6bb0591d32
commit 16a7eb2d6c
48 files changed
+8172 -217

No files matched your search

+40
View File
@@ -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
+130
View File
@@ -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"
+44
View File
@@ -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%
+29
View File
@@ -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
+77
View File
@@ -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%
+72
View File
@@ -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