rollback_to_stable.bat 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. @echo off
  2. chcp 65001 >nul
  3. setlocal EnableDelayedExpansion
  4. :: 设置窗口标题
  5. title MES制造执行系统 - 版本回滚工具
  6. echo.
  7. echo ================================================
  8. echo MES制造执行系统 - 版本回滚工具
  9. echo ================================================
  10. echo.
  11. :: 显示当前版本信息
  12. echo [当前版本信息]
  13. if exist "VERSION.txt" (
  14. for /f "tokens=2" %%i in ('findstr "版本:" VERSION.txt') do set "current_version=%%i"
  15. echo 当前版本: !current_version!
  16. ) else (
  17. echo 当前版本: 未知
  18. )
  19. echo.
  20. :: 警告信息
  21. echo ⚠️ 警告信息:
  22. echo.
  23. echo 🔄 此操作将回滚系统到稳定版本
  24. echo 📊 当前数据可能会丢失
  25. echo 🔧 配置文件将被重置
  26. echo 📁 自定义修改将被覆盖
  27. echo.
  28. :: 确认回滚操作
  29. set /p "confirm=确定要继续回滚操作吗?(Y/N) [默认: N]: "
  30. if /i not "%confirm%"=="Y" (
  31. echo 回滚操作已取消
  32. pause
  33. exit /b 0
  34. )
  35. echo.
  36. echo ================================================
  37. echo 开始回滚操作...
  38. echo ================================================
  39. echo.
  40. :: 停止所有相关服务
  41. echo [1/8] 停止运行中的服务...
  42. :: 停止前端服务
  43. echo 正在停止前端服务...
  44. for /f "tokens=5" %%i in ('netstat -ano ^| findstr ":3001.*LISTENING" 2^>nul') do (
  45. echo 终止前端进程: %%i
  46. taskkill /F /PID %%i >nul 2>&1
  47. )
  48. :: 停止后端服务
  49. echo 正在停止后端服务...
  50. for /f "tokens=5" %%i in ('netstat -ano ^| findstr ":8080.*LISTENING" 2^>nul') do (
  51. echo 终止后端进程: %%i
  52. taskkill /F /PID %%i >nul 2>&1
  53. )
  54. :: 停止可能的Java进程
  55. taskkill /F /IM java.exe >nul 2>&1
  56. taskkill /F /IM node.exe >nul 2>&1
  57. echo ✅ 服务停止完成
  58. :: 备份当前配置
  59. echo.
  60. echo [2/8] 备份当前配置...
  61. set "backup_dir=backup_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%"
  62. set "backup_dir=!backup_dir: =0!"
  63. if not exist "backups" mkdir backups
  64. mkdir "backups\%backup_dir%"
  65. :: 备份重要文件
  66. if exist "db-config.txt" copy "db-config.txt" "backups\%backup_dir%\" >nul
  67. if exist "Front\mes-frontend\src\api\index.js" copy "Front\mes-frontend\src\api\index.js" "backups\%backup_dir%\" >nul
  68. if exist "Back\mes-sorter\src\main\resources\application.properties" copy "Back\mes-sorter\src\main\resources\application.properties" "backups\%backup_dir%\" >nul
  69. if exist "logs" xcopy "logs" "backups\%backup_dir%\logs\" /E /I /Q >nul
  70. echo ✅ 配置备份完成: backups\%backup_dir%
  71. :: 数据库备份
  72. echo.
  73. echo [3/8] 备份数据库...
  74. if exist "db-config.txt" (
  75. :: 读取数据库配置
  76. for /f "tokens=2 delims==" %%i in ('findstr "DB_HOST=" db-config.txt') do set "DB_HOST=%%i"
  77. for /f "tokens=2 delims==" %%i in ('findstr "DB_PORT=" db-config.txt') do set "DB_PORT=%%i"
  78. for /f "tokens=2 delims==" %%i in ('findstr "DB_USER=" db-config.txt') do set "DB_USER=%%i"
  79. for /f "tokens=2 delims==" %%i in ('findstr "DB_PASSWORD=" db-config.txt') do set "DB_PASSWORD=%%i"
  80. for /f "tokens=2 delims==" %%i in ('findstr "DB_NAME=" db-config.txt') do set "DB_NAME=%%i"
  81. echo 正在备份数据库 !DB_NAME!...
  82. mysqldump -h!DB_HOST! -P!DB_PORT! -u!DB_USER! -p!DB_PASSWORD! !DB_NAME! > "backups\%backup_dir%\database_backup.sql" 2>nul
  83. if errorlevel 1 (
  84. echo ⚠️ 数据库备份失败,但继续回滚操作
  85. ) else (
  86. echo ✅ 数据库备份完成
  87. )
  88. ) else (
  89. echo ⚠️ 未找到数据库配置,跳过数据库备份
  90. )
  91. :: Git状态检查
  92. echo.
  93. echo [4/8] 检查Git状态...
  94. git status >nul 2>&1
  95. if errorlevel 1 (
  96. echo ⚠️ 当前目录不是Git仓库,跳过Git操作
  97. set "use_git=false"
  98. ) else (
  99. echo ✅ Git仓库检测成功
  100. set "use_git=true"
  101. :: 显示当前分支和提交
  102. for /f "delims=" %%i in ('git branch --show-current 2^>nul') do set "current_branch=%%i"
  103. for /f "delims=" %%i in ('git rev-parse --short HEAD 2^>nul') do set "current_commit=%%i"
  104. echo 当前分支: !current_branch!
  105. echo 当前提交: !current_commit!
  106. )
  107. :: 清理临时文件和缓存
  108. echo.
  109. echo [5/8] 清理临时文件...
  110. :: 清理前端依赖和缓存
  111. if exist "Front\mes-frontend\node_modules" (
  112. echo 清理前端依赖...
  113. rmdir /s /q "Front\mes-frontend\node_modules" >nul 2>&1
  114. )
  115. if exist "Front\mes-frontend\dist" (
  116. echo 清理前端构建文件...
  117. rmdir /s /q "Front\mes-frontend\dist" >nul 2>&1
  118. )
  119. :: 清理后端目标目录
  120. if exist "Back\mes-sorter\target" (
  121. echo 清理后端构建文件...
  122. rmdir /s /q "Back\mes-sorter\target" >nul 2>&1
  123. )
  124. :: 清理日志文件
  125. if exist "logs" (
  126. echo 清理日志文件...
  127. del /q "logs\*.*" >nul 2>&1
  128. )
  129. echo ✅ 临时文件清理完成
  130. :: Git回滚操作
  131. echo.
  132. echo [6/8] 执行版本回滚...
  133. if "%use_git%"=="true" (
  134. echo 选择回滚方式:
  135. echo [1] 回滚到上一个提交
  136. echo [2] 回滚到指定标签 (推荐)
  137. echo [3] 重置到远程最新版本
  138. echo.
  139. set /p "rollback_type=请选择回滚方式 [1-3]: "
  140. if "!rollback_type!"=="1" (
  141. echo 回滚到上一个提交...
  142. git reset --hard HEAD~1
  143. echo ✅ 已回滚到上一个提交
  144. ) else if "!rollback_type!"=="2" (
  145. echo.
  146. echo 可用的稳定版本标签:
  147. git tag -l "v*" | sort /r
  148. echo.
  149. set /p "tag_name=请输入要回滚的标签名 (如: v1.5.0): "
  150. if not "!tag_name!"=="" (
  151. git reset --hard !tag_name!
  152. echo ✅ 已回滚到标签: !tag_name!
  153. ) else (
  154. echo ❌ 标签名不能为空,跳过Git回滚
  155. )
  156. ) else if "!rollback_type!"=="3" (
  157. echo 从远程拉取最新代码...
  158. git fetch origin
  159. git reset --hard origin/!current_branch!
  160. echo ✅ 已重置到远程最新版本
  161. ) else (
  162. echo ⚠️ 无效选择,跳过Git回滚
  163. )
  164. ) else (
  165. echo ⚠️ 非Git环境,手动还原文件...
  166. :: 还原默认配置文件 (如果存在)
  167. if exist "Back\mes-sorter\src\main\resources\application.properties.template" (
  168. copy "Back\mes-sorter\src\main\resources\application.properties.template" "Back\mes-sorter\src\main\resources\application.properties" >nul
  169. echo ✅ 已还原默认配置文件
  170. )
  171. )
  172. :: 重新安装依赖
  173. echo.
  174. echo [7/8] 重新安装依赖...
  175. :: 重新安装前端依赖
  176. echo 安装前端依赖...
  177. cd Front\mes-frontend
  178. npm install >nul 2>&1
  179. if errorlevel 1 (
  180. echo ⚠️ 前端依赖安装失败,请手动执行: npm install
  181. ) else (
  182. echo ✅ 前端依赖安装完成
  183. )
  184. cd ..\..
  185. :: 重新编译后端
  186. echo 编译后端项目...
  187. cd Back\mes-sorter
  188. mvn clean compile -q >nul 2>&1
  189. if errorlevel 1 (
  190. echo ⚠️ 后端编译失败,请手动执行: mvn clean compile
  191. ) else (
  192. echo ✅ 后端编译完成
  193. )
  194. cd ..\..
  195. :: 恢复数据库配置
  196. echo.
  197. echo [8/8] 恢复系统配置...
  198. if exist "backups\%backup_dir%\db-config.txt" (
  199. echo 恢复数据库配置...
  200. copy "backups\%backup_dir%\db-config.txt" "db-config.txt" >nul
  201. echo ✅ 数据库配置已恢复
  202. echo.
  203. set /p "restore_db=是否恢复数据库数据?(Y/N) [默认: N]: "
  204. if /i "!restore_db!"=="Y" (
  205. if exist "backups\%backup_dir%\database_backup.sql" (
  206. echo 正在恢复数据库数据...
  207. :: 读取恢复的数据库配置
  208. for /f "tokens=2 delims==" %%i in ('findstr "DB_HOST=" db-config.txt') do set "DB_HOST=%%i"
  209. for /f "tokens=2 delims==" %%i in ('findstr "DB_PORT=" db-config.txt') do set "DB_PORT=%%i"
  210. for /f "tokens=2 delims==" %%i in ('findstr "DB_USER=" db-config.txt') do set "DB_USER=%%i"
  211. for /f "tokens=2 delims==" %%i in ('findstr "DB_PASSWORD=" db-config.txt') do set "DB_PASSWORD=%%i"
  212. for /f "tokens=2 delims==" %%i in ('findstr "DB_NAME=" db-config.txt') do set "DB_NAME=%%i"
  213. mysql -h!DB_HOST! -P!DB_PORT! -u!DB_USER! -p!DB_PASSWORD! !DB_NAME! < "backups\%backup_dir%\database_backup.sql" 2>nul
  214. if errorlevel 1 (
  215. echo ❌ 数据库恢复失败
  216. ) else (
  217. echo ✅ 数据库数据恢复完成
  218. )
  219. ) else (
  220. echo ❌ 未找到数据库备份文件
  221. )
  222. )
  223. ) else (
  224. echo ⚠️ 未找到数据库配置备份,可能需要重新配置
  225. echo 运行以下命令重新配置数据库:
  226. echo setup-database.bat
  227. )
  228. :: 显示回滚完成信息
  229. echo.
  230. echo ================================================
  231. echo 回滚操作完成!
  232. echo ================================================
  233. echo.
  234. echo 🎉 系统已成功回滚到稳定版本
  235. echo 📅 回滚时间: %date% %time%
  236. echo 📁 备份位置: backups\%backup_dir%
  237. echo.
  238. :: 显示回滚后版本信息
  239. if exist "VERSION.txt" (
  240. for /f "tokens=2" %%i in ('findstr "版本:" VERSION.txt') do set "rollback_version=%%i"
  241. echo 📌 回滚后版本: !rollback_version!
  242. ) else (
  243. echo 📌 回滚后版本: 未知
  244. )
  245. echo.
  246. echo ✅ 系统组件状态:
  247. echo 🎨 前端依赖: 已重新安装
  248. echo ☕ 后端编译: 已完成
  249. echo 🗄️ 数据库配置: 已恢复
  250. echo 📋 备份文件: 已保存
  251. echo.
  252. echo 🚀 后续操作:
  253. echo 1. 运行 start.bat 启动系统
  254. echo 2. 如有问题,检查备份文件
  255. echo 3. 必要时重新运行 setup-database.bat
  256. echo.
  257. echo 📞 如需技术支持:
  258. echo - GitHub Issues: https://github.com/Minato258/MES-SORTER/issues
  259. echo - 备份目录: backups\%backup_dir%
  260. echo.
  261. pause
  262. exit /b 0