SystemDatabackup.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
  8. // +----------------------------------------------------------------------
  9. // | Author: CRMEB Team <admin@crmeb.com>
  10. // +----------------------------------------------------------------------
  11. namespace app\adminapi\controller\v1\system;
  12. use crmeb\services\CacheService;
  13. use think\facade\App;
  14. use think\facade\Session;
  15. use app\adminapi\controller\AuthController;
  16. use app\services\system\SystemDatabackupServices;
  17. use think\Response;
  18. /**
  19. * 数据备份
  20. * Class SystemDatabackup
  21. * @package app\admin\controller\system
  22. *
  23. */
  24. class SystemDatabackup extends AuthController
  25. {
  26. /**
  27. * 构造方法
  28. * SystemDatabackup constructor.
  29. * @param App $app
  30. * @param SystemDatabackupServices $services
  31. */
  32. public function __construct(App $app, SystemDatabackupServices $services)
  33. {
  34. parent::__construct($app);
  35. $this->services = $services;
  36. }
  37. /**
  38. * 获取数据库表
  39. */
  40. public function index()
  41. {
  42. return app('json')->success($this->services->getDataList());
  43. }
  44. /**
  45. * 查看表结构 详情
  46. */
  47. public function read()
  48. {
  49. $tablename = request()->param('tablename', '', 'htmlspecialchars');
  50. return app('json')->success($this->services->getRead($tablename));
  51. }
  52. /**
  53. * 优化表
  54. */
  55. public function optimize()
  56. {
  57. $tables = $this->request->param('tables', '', 'htmlspecialchars');
  58. $res = $this->services->getDbBackup()->optimize($tables);
  59. return app('json')->success($res ? '优化成功' : '优化失败');
  60. }
  61. /**
  62. * 修复表
  63. */
  64. public function repair()
  65. {
  66. $tables = $this->request->param('tables', '', 'htmlspecialchars');
  67. $res = $this->services->getDbBackup()->repair($tables);
  68. return app('json')->success($res ? '修复成功' : '修复失败');
  69. }
  70. /**
  71. * 备份表
  72. */
  73. public function backup()
  74. {
  75. $tables = $this->request->param('tables', '', 'htmlspecialchars');
  76. $data = $this->services->backup($tables);
  77. return app('json')->success($data ? '备份失败' . $data : '备份成功');
  78. }
  79. /**
  80. * 获取备份记录表
  81. */
  82. public function fileList()
  83. {
  84. return app('json')->success($this->services->getBackup());
  85. }
  86. /**
  87. * 删除备份记录表
  88. */
  89. public function delFile()
  90. {
  91. $filename = intval(request()->post('filename'));
  92. $files = $this->services->getDbBackup()->delFile($filename);
  93. return app('json')->success('删除成功');
  94. }
  95. /**
  96. * 导入备份记录表
  97. */
  98. public function import()
  99. {
  100. [$part, $start, $time] = $this->request->postMore([
  101. [['part', 'd'], 0],
  102. [['start', 'd'], 0],
  103. [['time', 'd'], 0],
  104. ], true);
  105. $db = $this->services->getDbBackup();
  106. if (is_numeric($time) && !$start) {
  107. $list = $db->getFile('timeverif', $time);
  108. if (is_array($list)) {
  109. session::set('backup_list', $list);
  110. return app('json')->success('初始化完成!', array('part' => 1, 'start' => 0));
  111. } else {
  112. return app('json')->fail('备份文件可能已经损坏,请检查!');
  113. }
  114. } else if (is_numeric($part) && is_numeric($start) && $part && $start) {
  115. $list = session::get('backup_list');
  116. $start = $db->setFile($list)->import($start);
  117. if (false === $start) {
  118. return app('json')->fail('还原数据出错!');
  119. } elseif (0 === $start) {
  120. if (isset($list[++$part])) {
  121. $data = array('part' => $part, 'start' => 0);
  122. return app('json')->success("正在还原...#{$part}", $data);
  123. } else {
  124. session::delete('backup_list');
  125. return app('json')->success('还原完成!');
  126. }
  127. } else {
  128. $data = array('part' => $part, 'start' => $start[0]);
  129. if ($start[1]) {
  130. $rate = floor(100 * ($start[0] / $start[1]));
  131. return app('json')->success("正在还原...#{$part}({$rate}%)", $data);
  132. } else {
  133. $data['gz'] = 1;
  134. return app('json')->success("正在还原...#{$part}", $data);
  135. }
  136. return app('json')->success("正在还原...#{$part}");
  137. }
  138. } else {
  139. return app('json')->fail('参数错误!');
  140. }
  141. }
  142. /**
  143. * 下载备份记录表
  144. */
  145. public function downloadFile()
  146. {
  147. $time = intval(request()->param('time'));
  148. return app('json')->success(['key' => $this->services->getDbBackup()->downloadFile($time, 0, true)]);
  149. }
  150. }