@echo off chcp 65001 >nul setlocal EnableDelayedExpansion :: 设置窗口标题 title MES制造执行系统 - 版本回滚工具 echo. echo ================================================ echo MES制造执行系统 - 版本回滚工具 echo ================================================ echo. :: 显示当前版本信息 echo [当前版本信息] if exist "VERSION.txt" ( for /f "tokens=2" %%i in ('findstr "版本:" VERSION.txt') do set "current_version=%%i" echo 当前版本: !current_version! ) else ( echo 当前版本: 未知 ) echo. :: 警告信息 echo ⚠️ 警告信息: echo. echo 🔄 此操作将回滚系统到稳定版本 echo 📊 当前数据可能会丢失 echo 🔧 配置文件将被重置 echo 📁 自定义修改将被覆盖 echo. :: 确认回滚操作 set /p "confirm=确定要继续回滚操作吗?(Y/N) [默认: N]: " if /i not "%confirm%"=="Y" ( echo 回滚操作已取消 pause exit /b 0 ) echo. echo ================================================ echo 开始回滚操作... echo ================================================ echo. :: 停止所有相关服务 echo [1/8] 停止运行中的服务... :: 停止前端服务 echo 正在停止前端服务... for /f "tokens=5" %%i in ('netstat -ano ^| findstr ":3001.*LISTENING" 2^>nul') do ( echo 终止前端进程: %%i taskkill /F /PID %%i >nul 2>&1 ) :: 停止后端服务 echo 正在停止后端服务... for /f "tokens=5" %%i in ('netstat -ano ^| findstr ":8080.*LISTENING" 2^>nul') do ( echo 终止后端进程: %%i taskkill /F /PID %%i >nul 2>&1 ) :: 停止可能的Java进程 taskkill /F /IM java.exe >nul 2>&1 taskkill /F /IM node.exe >nul 2>&1 echo ✅ 服务停止完成 :: 备份当前配置 echo. echo [2/8] 备份当前配置... set "backup_dir=backup_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%" set "backup_dir=!backup_dir: =0!" if not exist "backups" mkdir backups mkdir "backups\%backup_dir%" :: 备份重要文件 if exist "db-config.txt" copy "db-config.txt" "backups\%backup_dir%\" >nul if exist "Front\mes-frontend\src\api\index.js" copy "Front\mes-frontend\src\api\index.js" "backups\%backup_dir%\" >nul if exist "Back\mes-sorter\src\main\resources\application.properties" copy "Back\mes-sorter\src\main\resources\application.properties" "backups\%backup_dir%\" >nul if exist "logs" xcopy "logs" "backups\%backup_dir%\logs\" /E /I /Q >nul echo ✅ 配置备份完成: backups\%backup_dir% :: 数据库备份 echo. echo [3/8] 备份数据库... if exist "db-config.txt" ( :: 读取数据库配置 for /f "tokens=2 delims==" %%i in ('findstr "DB_HOST=" db-config.txt') do set "DB_HOST=%%i" for /f "tokens=2 delims==" %%i in ('findstr "DB_PORT=" db-config.txt') do set "DB_PORT=%%i" for /f "tokens=2 delims==" %%i in ('findstr "DB_USER=" db-config.txt') do set "DB_USER=%%i" for /f "tokens=2 delims==" %%i in ('findstr "DB_PASSWORD=" db-config.txt') do set "DB_PASSWORD=%%i" for /f "tokens=2 delims==" %%i in ('findstr "DB_NAME=" db-config.txt') do set "DB_NAME=%%i" echo 正在备份数据库 !DB_NAME!... mysqldump -h!DB_HOST! -P!DB_PORT! -u!DB_USER! -p!DB_PASSWORD! !DB_NAME! > "backups\%backup_dir%\database_backup.sql" 2>nul if errorlevel 1 ( echo ⚠️ 数据库备份失败,但继续回滚操作 ) else ( echo ✅ 数据库备份完成 ) ) else ( echo ⚠️ 未找到数据库配置,跳过数据库备份 ) :: Git状态检查 echo. echo [4/8] 检查Git状态... git status >nul 2>&1 if errorlevel 1 ( echo ⚠️ 当前目录不是Git仓库,跳过Git操作 set "use_git=false" ) else ( echo ✅ Git仓库检测成功 set "use_git=true" :: 显示当前分支和提交 for /f "delims=" %%i in ('git branch --show-current 2^>nul') do set "current_branch=%%i" for /f "delims=" %%i in ('git rev-parse --short HEAD 2^>nul') do set "current_commit=%%i" echo 当前分支: !current_branch! echo 当前提交: !current_commit! ) :: 清理临时文件和缓存 echo. echo [5/8] 清理临时文件... :: 清理前端依赖和缓存 if exist "Front\mes-frontend\node_modules" ( echo 清理前端依赖... rmdir /s /q "Front\mes-frontend\node_modules" >nul 2>&1 ) if exist "Front\mes-frontend\dist" ( echo 清理前端构建文件... rmdir /s /q "Front\mes-frontend\dist" >nul 2>&1 ) :: 清理后端目标目录 if exist "Back\mes-sorter\target" ( echo 清理后端构建文件... rmdir /s /q "Back\mes-sorter\target" >nul 2>&1 ) :: 清理日志文件 if exist "logs" ( echo 清理日志文件... del /q "logs\*.*" >nul 2>&1 ) echo ✅ 临时文件清理完成 :: Git回滚操作 echo. echo [6/8] 执行版本回滚... if "%use_git%"=="true" ( echo 选择回滚方式: echo [1] 回滚到上一个提交 echo [2] 回滚到指定标签 (推荐) echo [3] 重置到远程最新版本 echo. set /p "rollback_type=请选择回滚方式 [1-3]: " if "!rollback_type!"=="1" ( echo 回滚到上一个提交... git reset --hard HEAD~1 echo ✅ 已回滚到上一个提交 ) else if "!rollback_type!"=="2" ( echo. echo 可用的稳定版本标签: git tag -l "v*" | sort /r echo. set /p "tag_name=请输入要回滚的标签名 (如: v1.5.0): " if not "!tag_name!"=="" ( git reset --hard !tag_name! echo ✅ 已回滚到标签: !tag_name! ) else ( echo ❌ 标签名不能为空,跳过Git回滚 ) ) else if "!rollback_type!"=="3" ( echo 从远程拉取最新代码... git fetch origin git reset --hard origin/!current_branch! echo ✅ 已重置到远程最新版本 ) else ( echo ⚠️ 无效选择,跳过Git回滚 ) ) else ( echo ⚠️ 非Git环境,手动还原文件... :: 还原默认配置文件 (如果存在) if exist "Back\mes-sorter\src\main\resources\application.properties.template" ( copy "Back\mes-sorter\src\main\resources\application.properties.template" "Back\mes-sorter\src\main\resources\application.properties" >nul echo ✅ 已还原默认配置文件 ) ) :: 重新安装依赖 echo. echo [7/8] 重新安装依赖... :: 重新安装前端依赖 echo 安装前端依赖... cd Front\mes-frontend npm install >nul 2>&1 if errorlevel 1 ( echo ⚠️ 前端依赖安装失败,请手动执行: npm install ) else ( echo ✅ 前端依赖安装完成 ) cd ..\.. :: 重新编译后端 echo 编译后端项目... cd Back\mes-sorter mvn clean compile -q >nul 2>&1 if errorlevel 1 ( echo ⚠️ 后端编译失败,请手动执行: mvn clean compile ) else ( echo ✅ 后端编译完成 ) cd ..\.. :: 恢复数据库配置 echo. echo [8/8] 恢复系统配置... if exist "backups\%backup_dir%\db-config.txt" ( echo 恢复数据库配置... copy "backups\%backup_dir%\db-config.txt" "db-config.txt" >nul echo ✅ 数据库配置已恢复 echo. set /p "restore_db=是否恢复数据库数据?(Y/N) [默认: N]: " if /i "!restore_db!"=="Y" ( if exist "backups\%backup_dir%\database_backup.sql" ( echo 正在恢复数据库数据... :: 读取恢复的数据库配置 for /f "tokens=2 delims==" %%i in ('findstr "DB_HOST=" db-config.txt') do set "DB_HOST=%%i" for /f "tokens=2 delims==" %%i in ('findstr "DB_PORT=" db-config.txt') do set "DB_PORT=%%i" for /f "tokens=2 delims==" %%i in ('findstr "DB_USER=" db-config.txt') do set "DB_USER=%%i" for /f "tokens=2 delims==" %%i in ('findstr "DB_PASSWORD=" db-config.txt') do set "DB_PASSWORD=%%i" for /f "tokens=2 delims==" %%i in ('findstr "DB_NAME=" db-config.txt') do set "DB_NAME=%%i" mysql -h!DB_HOST! -P!DB_PORT! -u!DB_USER! -p!DB_PASSWORD! !DB_NAME! < "backups\%backup_dir%\database_backup.sql" 2>nul if errorlevel 1 ( echo ❌ 数据库恢复失败 ) else ( echo ✅ 数据库数据恢复完成 ) ) else ( echo ❌ 未找到数据库备份文件 ) ) ) else ( echo ⚠️ 未找到数据库配置备份,可能需要重新配置 echo 运行以下命令重新配置数据库: echo setup-database.bat ) :: 显示回滚完成信息 echo. echo ================================================ echo 回滚操作完成! echo ================================================ echo. echo 🎉 系统已成功回滚到稳定版本 echo 📅 回滚时间: %date% %time% echo 📁 备份位置: backups\%backup_dir% echo. :: 显示回滚后版本信息 if exist "VERSION.txt" ( for /f "tokens=2" %%i in ('findstr "版本:" VERSION.txt') do set "rollback_version=%%i" echo 📌 回滚后版本: !rollback_version! ) else ( echo 📌 回滚后版本: 未知 ) echo. echo ✅ 系统组件状态: echo 🎨 前端依赖: 已重新安装 echo ☕ 后端编译: 已完成 echo 🗄️ 数据库配置: 已恢复 echo 📋 备份文件: 已保存 echo. echo 🚀 后续操作: echo 1. 运行 start.bat 启动系统 echo 2. 如有问题,检查备份文件 echo 3. 必要时重新运行 setup-database.bat echo. echo 📞 如需技术支持: echo - GitHub Issues: https://github.com/Minato258/MES-SORTER/issues echo - 备份目录: backups\%backup_dir% echo. pause exit /b 0