RefreshCheckTool.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace App\Module\GameItems\AdminControllers\Tools;
  3. use App\Module\Game\DCache\ItemJsonConfig;
  4. use Dcat\Admin\Grid\Tools\AbstractTool;
  5. use Illuminate\Http\Request;
  6. class RefreshCheckTool extends AbstractTool
  7. {
  8. protected $shouldDisplay;
  9. protected $style = 'btn btn-warning waves-effect';
  10. public function __construct(bool $shouldDisplay = true)
  11. {
  12. $this->shouldDisplay = $shouldDisplay;
  13. }
  14. public function title()
  15. {
  16. return '刷新检查';
  17. }
  18. public function confirm()
  19. {
  20. return '确定要刷新检查同步状态吗?';
  21. }
  22. public function handle(Request $request)
  23. {
  24. return $this->response()->success('刷新成功')->refresh();
  25. }
  26. public function render()
  27. {
  28. if (!$this->shouldDisplay) {
  29. return '';
  30. }
  31. return parent::render();
  32. }
  33. public static function checkSyncStatus(): array
  34. {
  35. $json = ItemJsonConfig::getData([],false);
  36. $lastUpdated = \Carbon\Carbon::parse(\App\Module\GameItems\Models\Item::max('updated_at'));
  37. $generatedAt = \Carbon\Carbon::parse($json['generated_at']);
  38. $isSynced = $generatedAt->gte($lastUpdated);
  39. return [
  40. 'should_display' => !$isSynced,
  41. 'message' => $isSynced
  42. ? 'JSON数据已同步,生成于 '.$generatedAt->diffForHumans()
  43. : 'JSON数据已过期,最后更新于 '.$lastUpdated->diffForHumans(),
  44. 'is_synced' => $isSynced
  45. ];
  46. }
  47. public static function shouldDisplay(): bool
  48. {
  49. return self::checkSyncStatus()['should_display'];
  50. }
  51. }