CleanupLogController.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?php
  2. namespace App\Module\Cleanup\AdminControllers;
  3. use App\Module\Cleanup\Models\CleanupLog;
  4. use App\Module\Cleanup\Repositories\CleanupLogRepository;
  5. use App\Module\Cleanup\Enums\CLEANUP_TYPE;
  6. use UCore\DcatAdmin\AdminController;
  7. use Dcat\Admin\Form;
  8. use Dcat\Admin\Grid;
  9. use Dcat\Admin\Show;
  10. use Dcat\Admin\Layout\Content;
  11. /**
  12. * 清理日志管理控制器
  13. *
  14. * @route /admin/cleanup/logs
  15. */
  16. class CleanupLogController extends AdminController
  17. {
  18. /**
  19. * 页面标题
  20. */
  21. protected $title = '清理日志';
  22. /**
  23. * 数据仓库
  24. */
  25. protected function repository()
  26. {
  27. return CleanupLogRepository::class;
  28. }
  29. /**
  30. * 列表页面
  31. */
  32. protected function grid(): Grid
  33. {
  34. return Grid::make(new CleanupLogRepository(), function (Grid $grid) {
  35. // 基础设置
  36. $grid->column('id', 'ID')->sortable();
  37. // 关联信息
  38. $grid->column('task.task_name', '关联任务')->sortable();
  39. $grid->column('table_name', '表名')->sortable();
  40. // 清理类型
  41. $grid->column('cleanup_type', '清理类型')->using([
  42. 1 => '清空表',
  43. 2 => '删除所有',
  44. 3 => '按时间删除',
  45. 4 => '按用户删除',
  46. 5 => '按条件删除',
  47. ])->label([
  48. 1 => 'danger',
  49. 2 => 'warning',
  50. 3 => 'info',
  51. 4 => 'primary',
  52. 5 => 'secondary',
  53. ])->sortable();
  54. // 记录统计
  55. $grid->column('before_count', '清理前记录数')->display(function ($value) {
  56. return number_format($value);
  57. })->sortable();
  58. $grid->column('after_count', '清理后记录数')->display(function ($value) {
  59. return number_format($value);
  60. })->sortable();
  61. $grid->column('deleted_records', '删除记录数')->display(function ($value) {
  62. return number_format($value);
  63. })->sortable();
  64. // 删除率
  65. $grid->column('delete_rate', '删除率')->display(function () {
  66. if ($this->before_count == 0) return '0%';
  67. $rate = ($this->deleted_records / $this->before_count) * 100;
  68. $color = 'secondary';
  69. if ($rate >= 90) $color = 'danger';
  70. elseif ($rate >= 50) $color = 'warning';
  71. elseif ($rate > 0) $color = 'info';
  72. return "<span class='badge badge-{$color}'>" . number_format($rate, 2) . '%</span>';
  73. });
  74. // 执行时间
  75. $grid->column('execution_time', '执行时间(秒)')->display(function ($value) {
  76. $color = 'secondary';
  77. if ($value >= 60) $color = 'danger';
  78. elseif ($value >= 10) $color = 'warning';
  79. elseif ($value >= 1) $color = 'info';
  80. return "<span class='badge badge-{$color}'>" . number_format($value, 3) . '</span>';
  81. })->sortable();
  82. // 执行时间
  83. $grid->column('created_at', '执行时间')->sortable();
  84. // 错误信息
  85. $grid->column('error_message', '错误信息')->display(function ($value) {
  86. if (empty($value)) {
  87. return '<span class="badge badge-success">成功</span>';
  88. }
  89. return '<span class="badge badge-danger">失败</span>';
  90. });
  91. // 筛选器
  92. $grid->filter(function (Grid\Filter $filter) {
  93. $filter->equal('task_id', '关联任务')->select(
  94. \App\Module\Cleanup\Models\CleanupTask::pluck('task_name', 'id')->toArray()
  95. );
  96. $filter->equal('cleanup_type', '清理类型')->select([
  97. 1 => '清空表',
  98. 2 => '删除所有',
  99. 3 => '按时间删除',
  100. 4 => '按用户删除',
  101. 5 => '按条件删除',
  102. ]);
  103. $filter->like('table_name', '表名');
  104. $filter->between('deleted_records', '删除记录数');
  105. $filter->between('execution_time', '执行时间(秒)');
  106. $filter->between('created_at', '执行时间')->datetime();
  107. $filter->where(function ($query) {
  108. $query->whereNotNull('error_message')->where('error_message', '!=', '');
  109. }, '仅显示错误', 'has_error')->checkbox();
  110. });
  111. // 禁用操作
  112. $grid->disableActions();
  113. $grid->disableCreateButton();
  114. $grid->disableBatchActions();
  115. // 工具栏
  116. $grid->tools([
  117. new \App\Module\Cleanup\AdminControllers\Actions\ExportLogsAction(),
  118. new \App\Module\Cleanup\AdminControllers\Actions\CleanOldLogsAction(),
  119. ]);
  120. // 设置每页显示数量
  121. $grid->paginate(50);
  122. // 默认排序
  123. $grid->model()->orderBy('created_at', 'desc');
  124. });
  125. }
  126. /**
  127. * 详情页面
  128. */
  129. protected function detail($id): Show
  130. {
  131. return Show::make($id, new CleanupLogRepository(), function (Show $show) {
  132. $show->field('id', 'ID');
  133. $show->field('task.task_name', '关联任务');
  134. $show->field('table_name', '表名');
  135. $show->field('cleanup_type', '清理类型')->using([
  136. 1 => '清空表',
  137. 2 => '删除所有',
  138. 3 => '按时间删除',
  139. 4 => '按用户删除',
  140. 5 => '按条件删除',
  141. ]);
  142. // 记录统计
  143. $show->field('before_count', '清理前记录数')->display(function ($value) {
  144. return number_format($value);
  145. });
  146. $show->field('after_count', '清理后记录数')->display(function ($value) {
  147. return number_format($value);
  148. });
  149. $show->field('deleted_records', '删除记录数')->display(function ($value) {
  150. return number_format($value);
  151. });
  152. // 删除率
  153. $show->field('delete_rate', '删除率')->display(function () {
  154. if ($this->before_count == 0) return '0%';
  155. $rate = ($this->deleted_records / $this->before_count) * 100;
  156. return number_format($rate, 2) . '%';
  157. });
  158. $show->field('execution_time', '执行时间')->display(function ($value) {
  159. return number_format($value, 3) . ' 秒';
  160. });
  161. $show->field('conditions', '使用的清理条件')->json();
  162. $show->field('error_message', '错误信息');
  163. $show->field('created_at', '执行时间');
  164. });
  165. }
  166. /**
  167. * 表单(只读,日志不允许创建/编辑)
  168. */
  169. protected function form(): Form
  170. {
  171. return Form::make(new CleanupLogRepository(), function (Form $form) {
  172. $form->display('id', 'ID');
  173. $form->display('task.task_name', '关联任务');
  174. $form->display('table_name', '表名');
  175. $form->display('cleanup_type', '清理类型')->using([
  176. 1 => '清空表',
  177. 2 => '删除所有',
  178. 3 => '按时间删除',
  179. 4 => '按用户删除',
  180. 5 => '按条件删除',
  181. ]);
  182. $form->display('before_count', '清理前记录数');
  183. $form->display('after_count', '清理后记录数');
  184. $form->display('deleted_records', '删除记录数');
  185. $form->display('execution_time', '执行时间(秒)');
  186. $form->display('conditions', '使用的清理条件');
  187. $form->display('error_message', '错误信息');
  188. $form->display('created_at', '执行时间');
  189. // 禁用所有操作
  190. $form->disableCreatingCheck();
  191. $form->disableEditingCheck();
  192. $form->disableViewCheck();
  193. });
  194. }
  195. }