shouldDisplay = $shouldDisplay; } public function title() { return '检查状态'; } public function render() { if (!$this->shouldDisplay) { return ''; } return parent::render(); } /** * 检查配置表同步状态 * * @param string $type 配置表类型,可选值:house, land, all * @return array */ public static function checkSyncStatus(string $type = 'house'): array { if ($type === 'house') { return self::checkHouseConfigStatus(); } elseif ($type === 'land') { return self::checkLandConfigStatus(); } else { // 检查所有配置表 $houseStatus = self::checkHouseConfigStatus(); $landStatus = self::checkLandConfigStatus(); // 如果都已同步,返回成功状态 if ($houseStatus['is_synced'] && $landStatus['is_synced']) { return [ 'is_synced' => true, 'message' => '【农场配置】所有配置表已同步', 'should_display' => false ]; } // 否则返回需要同步的状态 $message = '【农场配置】'; if (!$houseStatus['is_synced']) { $message .= '房屋配置表需要更新; '; } if (!$landStatus['is_synced']) { $message .= '土地配置表需要更新; '; } return [ 'is_synced' => false, 'message' => $message, 'should_display' => true ]; } } /** * 检查房屋配置表状态 * * @return array */ private static function checkHouseConfigStatus(): array { try { $json = FarmHouseJsonConfig::getData(); $generatedAt = \Carbon\Carbon::createFromTimestamp($json['generated_ts']); $lastUpdated = \Carbon\Carbon::parse(\App\Module\Farm\Models\FarmHouseConfig::max('updated_at')); // 使用绝对时间差,避免相对时间导致的"X小时后"这样的显示问题 $options = ['syntax' => \Carbon\CarbonInterface::DIFF_ABSOLUTE]; if ($generatedAt->lt($lastUpdated)) { return [ 'is_synced' => false, 'message' => "【房屋配置表】需要更新,生成于 {$generatedAt->diffForHumans(null, $options)},数据库最后更新于 {$lastUpdated->diffForHumans(null, $options)}", 'should_display' => true ]; } else { return [ 'is_synced' => true, 'message' => "【房屋配置表】已同步,生成于 {$generatedAt->diffForHumans(null, $options)}", 'should_display' => false ]; } } catch (\Exception $e) { Log::error('Check farm house config sync status failed: '.$e->getMessage()); return [ 'is_synced' => false, 'message' => '【房屋配置表】检查状态失败:'.$e->getMessage(), 'should_display' => true ]; } } /** * 检查土地配置表状态 * * @return array */ private static function checkLandConfigStatus(): array { try { $json = FarmLandJsonConfig::getData(); // 如果没有生成时间戳,说明需要生成 if (!isset($json['generated_ts'])) { return [ 'is_synced' => false, 'message' => '【土地配置表】需要生成,尚未找到配置数据', 'should_display' => true ]; } $generatedAt = \Carbon\Carbon::createFromTimestamp($json['generated_ts']); // 获取土地类型和升级配置的最后更新时间 $lastUpdatedType = \Carbon\Carbon::parse(\App\Module\Farm\Models\FarmLandType::max('updated_at') ?: '2000-01-01'); $lastUpdatedUpgrade = \Carbon\Carbon::parse(\App\Module\Farm\Models\FarmLandUpgradeConfig::max('updated_at') ?: '2000-01-01'); // 取最新的更新时间 $lastUpdated = $lastUpdatedType->gt($lastUpdatedUpgrade) ? $lastUpdatedType : $lastUpdatedUpgrade; // 使用绝对时间差,避免相对时间导致的"X小时后"这样的显示问题 $options = ['syntax' => CarbonInterface::DIFF_ABSOLUTE]; if ($generatedAt->lt($lastUpdated)) { return [ 'is_synced' => false, 'message' => "【土地配置表】需要更新,生成于 {$generatedAt->diffForHumans(null, $options)},数据库最后更新于 {$lastUpdated->diffForHumans(null, $options)}", 'should_display' => true ]; } else { return [ 'is_synced' => true, 'message' => "【土地配置表】已同步,生成于 {$generatedAt->diffForHumans(null, $options)}", 'should_display' => false ]; } } catch (\Exception $e) { Log::error('Check farm land config sync status failed: '.$e->getMessage()); return [ 'is_synced' => false, 'message' => '【土地配置表】检查状态失败:'.$e->getMessage(), 'should_display' => true ]; } } }