GenerateFarmSeedConfigJson.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. namespace App\Module\Farm\Commands;
  3. use App\Module\Farm\Models\FarmSeed;
  4. use Illuminate\Console\Command;
  5. /**
  6. * 生成种子配置表JSON数据命令
  7. *
  8. * 该命令用于从数据库中的种子表和种子产出表生成JSON数据文件,供客户端使用。
  9. * 生成的JSON文件包含种子的基本信息,如种子ID、名称、类型、生长时间、产量范围、灾害抵抗等,
  10. * 以及种子的产出配置信息。该命令通常在种子配置数据更新后运行,以确保客户端获取最新的配置数据。
  11. */
  12. class GenerateFarmSeedConfigJson extends Command
  13. {
  14. /**
  15. * 命令名称
  16. *
  17. * @var string
  18. */
  19. protected $signature = 'farm:generate-seed-json';
  20. /**
  21. * 命令描述
  22. *
  23. * @var string
  24. */
  25. protected $description = '生成种子配置JSON文件';
  26. /**
  27. * 生成种子配置JSON数据
  28. *
  29. * @return array|bool 生成的数据或失败标志
  30. */
  31. public static function generateJson()
  32. {
  33. try {
  34. // 获取所有种子配置,预加载产出关联
  35. $seeds = FarmSeed::with('outputs')->orderBy('id')->get();
  36. // 准备JSON数据
  37. $jsonData = [
  38. 'generated_ts' => time(),
  39. 'seeds' => []
  40. ];
  41. // 处理种子基本数据和产出数据
  42. foreach ($seeds as $seed) {
  43. // 获取种子的所有产出物品ID
  44. $seedOutputs = [];
  45. foreach ($seed->outputs as $output) {
  46. $seedOutputs[] = $output->item_id;
  47. }
  48. $jsonData['seeds'][] = [
  49. 'id' => $seed->id,
  50. 'name' => $seed->name,
  51. 'type' => $seed->type,
  52. 'seed_time' => $seed->seed_time,
  53. 'sprout_time' => $seed->sprout_time,
  54. 'growth_time' => $seed->growth_time,
  55. 'min_output' => $seed->min_output,
  56. 'max_output' => $seed->max_output,
  57. 'item_id' => $seed->item_id,
  58. 'disaster_resistance' => $seed->disaster_resistance,
  59. 'display_attributes' => $seed->display_attributes,
  60. 'seed_outputs' => $seedOutputs, // 直接在种子属性中包含产出物品ID数组
  61. ];
  62. }
  63. return $jsonData;
  64. } catch (\Exception $e) {
  65. if (php_sapi_name() === 'cli') {
  66. echo "Error: Generate farm_seed.json failed: {$e->getMessage()}\n";
  67. }
  68. return false;
  69. }
  70. }
  71. /**
  72. * 执行命令
  73. *
  74. * @return int
  75. */
  76. public function handle()
  77. {
  78. $this->info('开始生成种子配置JSON文件...');
  79. try {
  80. // 通过缓存类生成JSON
  81. $result = \App\Module\Game\DCache\FarmSeedJsonConfig::getData([], true);
  82. if ($result !== false && is_array($result)) {
  83. $this->info('种子配置JSON文件生成成功');
  84. $this->info('共生成 ' . count($result['seeds'] ?? []) . ' 条种子数据');
  85. // 统计总的产出物品数量
  86. $totalOutputs = 0;
  87. foreach ($result['seeds'] as $seed) {
  88. $totalOutputs += count($seed['seed_outputs'] ?? []);
  89. }
  90. $this->info('共包含 ' . $totalOutputs . ' 个种子产出物品');
  91. // 显示一些示例数据
  92. if (!empty($result['seeds'])) {
  93. $this->info('种子示例数据:');
  94. $firstSeed = $result['seeds'][0];
  95. $this->line(' ID: ' . $firstSeed['id'] . ', 名称: ' . $firstSeed['name']);
  96. $this->line(' 产出物品: [' . implode(', ', $firstSeed['seed_outputs'] ?? []) . ']');
  97. }
  98. return Command::SUCCESS;
  99. } else {
  100. $this->error('生成种子配置JSON文件失败');
  101. return Command::FAILURE;
  102. }
  103. } catch (\Exception $e) {
  104. $this->error('生成种子配置JSON文件失败: ' . $e->getMessage());
  105. return Command::FAILURE;
  106. }
  107. }
  108. }