DATA_CATEGORY.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <?php
  2. namespace App\Module\Cleanup\Enums;
  3. /**
  4. * 数据分类枚举
  5. *
  6. * 定义了5种数据分类,用于自动识别表的数据类型
  7. */
  8. enum DATA_CATEGORY: int
  9. {
  10. /**
  11. * 用户运行数据
  12. * 包括:用户农场数据、物品数据、宠物数据等
  13. */
  14. case USER_DATA = 1;
  15. /**
  16. * 日志数据
  17. * 包括:操作日志、交易日志、系统日志等
  18. */
  19. case LOG_DATA = 2;
  20. /**
  21. * 交易数据
  22. * 包括:订单数据、交易记录、支付记录等
  23. */
  24. case TRANSACTION_DATA = 3;
  25. /**
  26. * 缓存数据
  27. * 包括:临时数据、会话数据、缓存表等
  28. */
  29. case CACHE_DATA = 4;
  30. /**
  31. * 配置数据
  32. * 包括:系统配置、模块配置、规则配置等
  33. * 注意:配置数据通常不应该被清理
  34. */
  35. case CONFIG_DATA = 5;
  36. /**
  37. * 获取数据分类的描述
  38. */
  39. public function getDescription(): string
  40. {
  41. return match($this) {
  42. self::USER_DATA => '用户运行数据',
  43. self::LOG_DATA => '日志数据',
  44. self::TRANSACTION_DATA => '交易数据',
  45. self::CACHE_DATA => '缓存数据',
  46. self::CONFIG_DATA => '配置数据',
  47. };
  48. }
  49. /**
  50. * 获取数据分类的详细说明
  51. */
  52. public function getDetailDescription(): string
  53. {
  54. return match($this) {
  55. self::USER_DATA => '用户的运行数据,如农场数据、物品数据、宠物数据等',
  56. self::LOG_DATA => '各种日志数据,如操作日志、交易日志、系统日志等',
  57. self::TRANSACTION_DATA => '交易相关数据,如订单、支付记录、交易记录等',
  58. self::CACHE_DATA => '临时缓存数据,如会话数据、临时表、缓存表等',
  59. self::CONFIG_DATA => '系统配置数据,通常不应该被清理',
  60. };
  61. }
  62. /**
  63. * 获取数据分类的颜色标识
  64. */
  65. public function getColor(): string
  66. {
  67. return match($this) {
  68. self::USER_DATA => 'primary',
  69. self::LOG_DATA => 'info',
  70. self::TRANSACTION_DATA => 'warning',
  71. self::CACHE_DATA => 'secondary',
  72. self::CONFIG_DATA => 'danger',
  73. };
  74. }
  75. /**
  76. * 判断是否默认启用清理
  77. */
  78. public function isDefaultEnabled(): bool
  79. {
  80. return match($this) {
  81. self::USER_DATA => false, // 用户数据需要谨慎处理
  82. self::LOG_DATA => true, // 日志数据可以清理
  83. self::TRANSACTION_DATA => false, // 交易数据需要谨慎处理
  84. self::CACHE_DATA => true, // 缓存数据可以清理
  85. self::CONFIG_DATA => false, // 配置数据不应该清理
  86. };
  87. }
  88. /**
  89. * 获取默认的清理类型
  90. */
  91. public function getDefaultCleanupType(): CLEANUP_TYPE
  92. {
  93. return match($this) {
  94. self::USER_DATA => CLEANUP_TYPE::DELETE_BY_TIME,
  95. self::LOG_DATA => CLEANUP_TYPE::DELETE_BY_TIME,
  96. self::TRANSACTION_DATA => CLEANUP_TYPE::DELETE_BY_TIME,
  97. self::CACHE_DATA => CLEANUP_TYPE::TRUNCATE,
  98. self::CONFIG_DATA => CLEANUP_TYPE::DELETE_BY_CONDITION, // 不建议清理
  99. };
  100. }
  101. /**
  102. * 获取默认的优先级
  103. */
  104. public function getDefaultPriority(): int
  105. {
  106. return match($this) {
  107. self::USER_DATA => 100,
  108. self::LOG_DATA => 200,
  109. self::TRANSACTION_DATA => 150,
  110. self::CACHE_DATA => 400,
  111. self::CONFIG_DATA => 999, // 最低优先级
  112. };
  113. }
  114. /**
  115. * 获取所有数据分类的选项数组
  116. */
  117. public static function getOptions(): array
  118. {
  119. $options = [];
  120. foreach (self::cases() as $case) {
  121. $options[$case->value] = $case->getDescription();
  122. }
  123. return $options;
  124. }
  125. /**
  126. * 获取带详细信息的选项数组
  127. */
  128. public static function getDetailOptions(): array
  129. {
  130. $options = [];
  131. foreach (self::cases() as $case) {
  132. $options[$case->value] = [
  133. 'name' => $case->getDescription(),
  134. 'description' => $case->getDetailDescription(),
  135. 'color' => $case->getColor(),
  136. 'default_enabled' => $case->isDefaultEnabled(),
  137. 'default_cleanup_type' => $case->getDefaultCleanupType()->value,
  138. 'default_priority' => $case->getDefaultPriority(),
  139. ];
  140. }
  141. return $options;
  142. }
  143. /**
  144. * 根据表名自动识别数据分类
  145. */
  146. public static function detectFromTableName(string $tableName): self
  147. {
  148. $tableName = strtolower($tableName);
  149. // 移除表前缀
  150. $tableName = preg_replace('/^kku_/', '', $tableName);
  151. // 配置数据识别
  152. if (str_contains($tableName, 'config') ||
  153. str_contains($tableName, 'setting') ||
  154. str_contains($tableName, 'rule') ||
  155. str_ends_with($tableName, '_configs') ||
  156. str_ends_with($tableName, '_settings') ||
  157. str_ends_with($tableName, '_rules')) {
  158. return self::CONFIG_DATA;
  159. }
  160. // 日志数据识别
  161. if (str_contains($tableName, 'log') ||
  162. str_contains($tableName, 'history') ||
  163. str_ends_with($tableName, '_logs') ||
  164. str_ends_with($tableName, '_histories')) {
  165. return self::LOG_DATA;
  166. }
  167. // 交易数据识别
  168. if (str_contains($tableName, 'order') ||
  169. str_contains($tableName, 'transaction') ||
  170. str_contains($tableName, 'payment') ||
  171. str_contains($tableName, 'trade') ||
  172. str_ends_with($tableName, '_orders') ||
  173. str_ends_with($tableName, '_transactions')) {
  174. return self::TRANSACTION_DATA;
  175. }
  176. // 缓存数据识别
  177. if (str_contains($tableName, 'cache') ||
  178. str_contains($tableName, 'session') ||
  179. str_contains($tableName, 'temp') ||
  180. str_starts_with($tableName, 'cache_') ||
  181. str_ends_with($tableName, '_cache')) {
  182. return self::CACHE_DATA;
  183. }
  184. // 默认为用户数据
  185. return self::USER_DATA;
  186. }
  187. }