shouldDisplay = $shouldDisplay; } public function title() { return '刷新检查'; } public function confirm() { return '确定要刷新检查同步状态吗?'; } public function handle(Request $request) { return $this->response()->success('刷新成功')->refresh(); } public function render() { if (!$this->shouldDisplay) { return ''; } return parent::render(); } public static function checkSyncStatus(): array { $json = ItemJsonConfig::getData(); $lastUpdated = \Carbon\Carbon::parse(\App\Module\GameItems\Models\Item::max('updated_at')); // dd($json); $generatedAt = \Carbon\Carbon::createFromTimestamp($json['generated_ts']); $isSynced = $generatedAt->gte($lastUpdated); // 使用绝对时间差,避免相对时间导致的"X小时后"这样的显示问题 $options = ['syntax' => \Carbon\CarbonInterface::DIFF_ABSOLUTE]; return [ 'should_display' => !$isSynced, 'message' => $isSynced ? '【物品配置表】已同步,生成于 '.$generatedAt->diffForHumans(null, $options) : '【物品配置表】需要更新,数据库最后更新于 '.$lastUpdated->diffForHumans(null, $options), 'is_synced' => $isSynced ]; } public static function shouldDisplay(): bool { return self::checkSyncStatus()['should_display']; } }