shouldDisplay = $shouldDisplay; } public function title() { return '检查状态'; } public function render() { if (!$this->shouldDisplay) { return ''; } return parent::render(); } /** * 检查配置表同步状态 * * @param string $type 配置表类型,可选值:config, level, skill, all * @return array */ public static function checkSyncStatus(string $type = 'all'): array { if ($type === 'config') { return self::checkPetConfigStatus(); } elseif ($type === 'level') { return self::checkPetLevelStatus(); } elseif ($type === 'skill') { return self::checkPetSkillStatus(); } else { // 检查所有配置表 $configStatus = self::checkPetConfigStatus(); $levelStatus = self::checkPetLevelStatus(); $skillStatus = self::checkPetSkillStatus(); // 如果都已同步,返回成功状态 if ($configStatus['is_synced'] && $levelStatus['is_synced'] && $skillStatus['is_synced']) { return [ 'is_synced' => true, 'message' => '【宠物配置】所有配置表已同步', 'should_display' => false ]; } // 否则返回需要同步的状态 $message = '【宠物配置】'; if (!$configStatus['is_synced']) { $message .= '宠物基础配置表需要更新; '; } if (!$levelStatus['is_synced']) { $message .= '宠物等级配置表需要更新; '; } if (!$skillStatus['is_synced']) { $message .= '宠物技能配置表需要更新; '; } return [ 'is_synced' => false, 'message' => $message, 'should_display' => true ]; } } /** * 检查宠物基础配置表状态 * * @return array */ private static function checkPetConfigStatus(): array { try { $json = PetConfigJsonConfig::getData(); // 如果没有生成时间戳,说明需要生成 if (!isset($json['generated_ts'])) { return [ 'is_synced' => false, 'message' => '【宠物基础配置表】需要生成,尚未找到配置数据', 'should_display' => true ]; } $generatedAt = \Carbon\Carbon::createFromTimestamp($json['generated_ts']); $lastUpdated = \Carbon\Carbon::parse(PetConfig::max('updated_at') ?: '2000-01-01'); // 使用绝对时间差,避免相对时间导致的"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 pet config sync status failed: '.$e->getMessage()); return [ 'is_synced' => false, 'message' => '【宠物基础配置表】检查状态失败:'.$e->getMessage(), 'should_display' => true ]; } } /** * 检查宠物等级配置表状态 * * @return array */ private static function checkPetLevelStatus(): array { try { $json = PetLevelJsonConfig::getData(); // 如果没有生成时间戳,说明需要生成 if (!isset($json['generated_ts'])) { return [ 'is_synced' => false, 'message' => '【宠物等级配置表】需要生成,尚未找到配置数据', 'should_display' => true ]; } $generatedAt = \Carbon\Carbon::createFromTimestamp($json['generated_ts']); $lastUpdated = \Carbon\Carbon::parse(PetLevelConfig::max('updated_at') ?: '2000-01-01'); // 使用绝对时间差,避免相对时间导致的"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 pet level config sync status failed: '.$e->getMessage()); return [ 'is_synced' => false, 'message' => '【宠物等级配置表】检查状态失败:'.$e->getMessage(), 'should_display' => true ]; } } /** * 检查宠物技能配置表状态 * * @return array */ private static function checkPetSkillStatus(): array { try { $json = PetSkillJsonConfig::getData(); // 如果没有生成时间戳,说明需要生成 if (!isset($json['generated_ts'])) { return [ 'is_synced' => false, 'message' => '【宠物技能配置表】需要生成,尚未找到配置数据', 'should_display' => true ]; } $generatedAt = \Carbon\Carbon::createFromTimestamp($json['generated_ts']); $lastUpdated = \Carbon\Carbon::parse(PetSkill::max('updated_at') ?: '2000-01-01'); // 使用绝对时间差,避免相对时间导致的"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 pet skill config sync status failed: '.$e->getMessage()); return [ 'is_synced' => false, 'message' => '【宠物技能配置表】检查状态失败:'.$e->getMessage(), 'should_display' => true ]; } } public static function shouldDisplay(): bool { return self::checkSyncStatus()['should_display']; } }