SystemDatabackup.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2016~2023 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 think\facade\App;
  13. use think\facade\Session;
  14. use app\adminapi\controller\AuthController;
  15. use app\services\system\SystemDatabackupServices;
  16. /**
  17. * 数据备份
  18. * Class SystemDatabackup
  19. * @package app\admin\controller\system
  20. *
  21. */
  22. class SystemDatabackup extends AuthController
  23. {
  24. /**
  25. * 构造方法
  26. * SystemDatabackup constructor.
  27. * @param App $app
  28. * @param SystemDatabackupServices $services
  29. */
  30. public function __construct(App $app, SystemDatabackupServices $services)
  31. {
  32. parent::__construct($app);
  33. $this->services = $services;
  34. }
  35. /**
  36. * 获取数据库表
  37. */
  38. public function index()
  39. {
  40. return app('json')->success($this->services->getDataList());
  41. }
  42. /**
  43. * 查看表结构 详情
  44. */
  45. public function read()
  46. {
  47. $tablename = request()->param('tablename', '', 'htmlspecialchars');
  48. return app('json')->success($this->services->getRead($tablename));
  49. }
  50. /**
  51. * 优化表
  52. */
  53. public function optimize()
  54. {
  55. $tables = $this->request->param('tables', '', 'htmlspecialchars');
  56. $res = $this->services->getDbBackup()->optimize($tables);
  57. return app('json')->success($res ? 100047 : 100048);
  58. }
  59. /**
  60. * 修复表
  61. */
  62. public function repair()
  63. {
  64. $tables = $this->request->param('tables', '', 'htmlspecialchars');
  65. $res = $this->services->getDbBackup()->repair($tables);
  66. return app('json')->success($res ? 100049 : 100050);
  67. }
  68. /**
  69. * 备份表
  70. */
  71. public function backup()
  72. {
  73. $tables = $this->request->param('tables', '', 'htmlspecialchars');
  74. $data = $this->services->backup($tables);
  75. return app('json')->success(100051);
  76. }
  77. /**
  78. * 获取备份记录表
  79. */
  80. public function fileList()
  81. {
  82. return app('json')->success($this->services->getBackup());
  83. }
  84. /**
  85. * 删除备份记录表
  86. */
  87. public function delFile()
  88. {
  89. $filename = intval(request()->post('filename'));
  90. $files = $this->services->getDbBackup()->delFile($filename);
  91. return app('json')->success(100002);
  92. }
  93. /**
  94. * 导入备份记录表
  95. */
  96. public function import()
  97. {
  98. [$part, $start, $time] = $this->request->postMore([
  99. [['part', 'd'], 0],
  100. [['start', 'd'], 0],
  101. [['time', 'd'], 0],
  102. ], true);
  103. $db = $this->services->getDbBackup();
  104. if (is_numeric($time) && !$start) {
  105. $list = $db->getFile('timeverif', $time);
  106. if (is_array($list)) {
  107. session::set('backup_list', $list);
  108. return app('json')->success(400307, array('part' => 1, 'start' => 0));
  109. } else {
  110. return app('json')->fail(400308);
  111. }
  112. } else if (is_numeric($part) && is_numeric($start) && $part && $start) {
  113. $list = session::get('backup_list');
  114. $start = $db->setFile($list)->import($start);
  115. if (false === $start) {
  116. return app('json')->fail(400309);
  117. } elseif (0 === $start) {
  118. if (isset($list[++$part])) {
  119. $data = array('part' => $part, 'start' => 0);
  120. return app('json')->success(400310, $data);
  121. } else {
  122. session::delete('backup_list');
  123. return app('json')->success(400311);
  124. }
  125. } else {
  126. $data = array('part' => $part, 'start' => $start[0]);
  127. if ($start[1]) {
  128. $rate = floor(100 * ($start[0] / $start[1]));
  129. return app('json')->success(400310, $data);
  130. } else {
  131. $data['gz'] = 1;
  132. return app('json')->success(400310, $data);
  133. }
  134. }
  135. } else {
  136. return app('json')->fail(100100);
  137. }
  138. }
  139. /**
  140. * 下载备份记录表
  141. */
  142. public function downloadFile()
  143. {
  144. $time = intval(request()->param('time'));
  145. return app('json')->success(['key' => $this->services->getDbBackup()->downloadFile($time, 0, true)]);
  146. }
  147. }