| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- @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
|