shouldDisplay = $shouldDisplay; } /** * 按钮标题 * * @return string */ public function title() { return '生成JSON'; } /** * 确认提示 * * @return string */ public function confirm() { return '确定要生成种子配置JSON数据吗?'; } /** * 处理请求 * * @param Request $request * @return mixed */ public function handle(Request $request) { try { // 直接调用缓存类刷新数据,这会同时生成JSON文件 FarmSeedJsonConfig::getData([], true); return $this->response()->success('生成成功')->refresh(); } catch (\Exception $e) { Log::error('Generate farm_seed.json exception: '.$e->getMessage()); return $this->response()->error('生成失败:'.$e->getMessage()); } } /** * 渲染按钮 * * @return string */ public function render() { if (!$this->shouldDisplay) { return ''; } return parent::render(); } /** * 判断是否应该显示按钮 * * @return bool */ public static function shouldDisplay(): bool { // 获取缓存数据 $json = FarmSeedJsonConfig::getData(); // 如果没有生成时间戳,说明需要生成 if (!isset($json['generated_ts'])) { return true; } // 获取生成时间和最后更新时间 $generatedAt = \Carbon\Carbon::createFromTimestamp($json['generated_ts']); // 获取种子和种子产出的最后更新时间 $lastUpdatedSeed = \Carbon\Carbon::parse(\App\Module\Farm\Models\FarmSeed::max('updated_at') ?: '2000-01-01'); $lastUpdatedOutput = \Carbon\Carbon::parse(\App\Module\Farm\Models\FarmSeedOutput::max('updated_at') ?: '2000-01-01'); // 取最新的更新时间 $lastUpdated = $lastUpdatedSeed->gt($lastUpdatedOutput) ? $lastUpdatedSeed : $lastUpdatedOutput; // 如果生成时间早于最后更新时间,说明需要重新生成 return $generatedAt->lt($lastUpdated); } }