TASK_STATUS.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <?php
  2. namespace App\Module\Cleanup\Enums;
  3. /**
  4. * 任务状态枚举
  5. *
  6. * 定义了清理任务的各种状态
  7. */
  8. enum TASK_STATUS: int
  9. {
  10. /**
  11. * 待执行 - 任务已创建但尚未开始执行
  12. */
  13. case PENDING = 1;
  14. /**
  15. * 备份中 - 正在创建数据备份
  16. */
  17. case BACKING_UP = 2;
  18. /**
  19. * 执行中 - 正在执行清理操作
  20. */
  21. case RUNNING = 3;
  22. /**
  23. * 已完成 - 任务执行成功完成
  24. */
  25. case COMPLETED = 4;
  26. /**
  27. * 已失败 - 任务执行失败
  28. */
  29. case FAILED = 5;
  30. /**
  31. * 已取消 - 任务被用户取消
  32. */
  33. case CANCELLED = 6;
  34. /**
  35. * 已暂停 - 任务被暂停执行
  36. */
  37. case PAUSED = 7;
  38. /**
  39. * 获取任务状态的描述
  40. */
  41. public function getDescription(): string
  42. {
  43. return match($this) {
  44. self::PENDING => '待执行',
  45. self::BACKING_UP => '备份中',
  46. self::RUNNING => '执行中',
  47. self::COMPLETED => '已完成',
  48. self::FAILED => '已失败',
  49. self::CANCELLED => '已取消',
  50. self::PAUSED => '已暂停',
  51. };
  52. }
  53. /**
  54. * 获取任务状态的详细说明
  55. */
  56. public function getDetailDescription(): string
  57. {
  58. return match($this) {
  59. self::PENDING => '任务已创建,等待执行',
  60. self::BACKING_UP => '正在创建数据备份',
  61. self::RUNNING => '正在执行清理操作',
  62. self::COMPLETED => '任务执行成功完成',
  63. self::FAILED => '任务执行过程中发生错误',
  64. self::CANCELLED => '任务被用户手动取消',
  65. self::PAUSED => '任务执行被暂停',
  66. };
  67. }
  68. /**
  69. * 获取状态对应的颜色
  70. */
  71. public function getColor(): string
  72. {
  73. return match($this) {
  74. self::PENDING => 'secondary',
  75. self::BACKING_UP => 'info',
  76. self::RUNNING => 'primary',
  77. self::COMPLETED => 'success',
  78. self::FAILED => 'danger',
  79. self::CANCELLED => 'warning',
  80. self::PAUSED => 'dark',
  81. };
  82. }
  83. /**
  84. * 获取状态对应的图标
  85. */
  86. public function getIcon(): string
  87. {
  88. return match($this) {
  89. self::PENDING => 'fa-clock',
  90. self::BACKING_UP => 'fa-download',
  91. self::RUNNING => 'fa-spinner',
  92. self::COMPLETED => 'fa-check-circle',
  93. self::FAILED => 'fa-times-circle',
  94. self::CANCELLED => 'fa-ban',
  95. self::PAUSED => 'fa-pause-circle',
  96. };
  97. }
  98. /**
  99. * 判断任务是否正在运行
  100. */
  101. public function isRunning(): bool
  102. {
  103. return in_array($this, [self::BACKING_UP, self::RUNNING]);
  104. }
  105. /**
  106. * 判断任务是否已完成(成功或失败)
  107. */
  108. public function isFinished(): bool
  109. {
  110. return in_array($this, [self::COMPLETED, self::FAILED, self::CANCELLED]);
  111. }
  112. /**
  113. * 判断任务是否可以执行
  114. */
  115. public function canExecute(): bool
  116. {
  117. return in_array($this, [self::PENDING, self::PAUSED]);
  118. }
  119. /**
  120. * 判断任务是否可以取消
  121. */
  122. public function canCancel(): bool
  123. {
  124. return in_array($this, [self::PENDING, self::BACKING_UP, self::RUNNING, self::PAUSED]);
  125. }
  126. /**
  127. * 判断任务是否可以暂停
  128. */
  129. public function canPause(): bool
  130. {
  131. return in_array($this, [self::BACKING_UP, self::RUNNING]);
  132. }
  133. /**
  134. * 判断任务是否可以恢复
  135. */
  136. public function canResume(): bool
  137. {
  138. return $this === self::PAUSED;
  139. }
  140. /**
  141. * 获取所有任务状态的选项数组
  142. */
  143. public static function getOptions(): array
  144. {
  145. $options = [];
  146. foreach (self::cases() as $case) {
  147. $options[$case->value] = $case->getDescription();
  148. }
  149. return $options;
  150. }
  151. /**
  152. * 获取带详细信息的选项数组
  153. */
  154. public static function getDetailOptions(): array
  155. {
  156. $options = [];
  157. foreach (self::cases() as $case) {
  158. $options[$case->value] = [
  159. 'name' => $case->getDescription(),
  160. 'description' => $case->getDetailDescription(),
  161. 'color' => $case->getColor(),
  162. 'icon' => $case->getIcon(),
  163. 'is_running' => $case->isRunning(),
  164. 'is_finished' => $case->isFinished(),
  165. 'can_execute' => $case->canExecute(),
  166. 'can_cancel' => $case->canCancel(),
  167. 'can_pause' => $case->canPause(),
  168. 'can_resume' => $case->canResume(),
  169. ];
  170. }
  171. return $options;
  172. }
  173. /**
  174. * 获取运行中的状态列表
  175. */
  176. public static function getRunningStatuses(): array
  177. {
  178. return [self::BACKING_UP->value, self::RUNNING->value];
  179. }
  180. /**
  181. * 获取已完成的状态列表
  182. */
  183. public static function getFinishedStatuses(): array
  184. {
  185. return [self::COMPLETED->value, self::FAILED->value, self::CANCELLED->value];
  186. }
  187. }