FarmServiceProvider.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <?php
  2. namespace App\Module\Farm\Providers;
  3. use App\Module\Farm\Commands;
  4. use App\Module\AppGame\Events\LoginSuccessEvent;
  5. use App\Module\Farm\Events\CropGrowthStageChangedEvent;
  6. use App\Module\Farm\Events\CropPickedEvent;
  7. use App\Module\Farm\Events\FarmCreatedEvent;
  8. use App\Module\Farm\Events\HouseUpgradedEvent;
  9. use App\Module\Farm\Listeners\AddLandAfterHouseUpgradeListener;
  10. use App\Module\Farm\Listeners\FarmInitRewardListener;
  11. use App\Module\Farm\Listeners\GenerateDisasterListener;
  12. use App\Module\Farm\Listeners\LoginSuccessListener;
  13. use App\Module\Farm\Listeners\PickStatisticsListener;
  14. use App\Module\Farm\Listeners\UpdateCropStatusListener;
  15. use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
  16. use Illuminate\Support\Facades\Schedule;
  17. /**
  18. * 农场模块服务提供者
  19. */
  20. class FarmServiceProvider extends ServiceProvider
  21. {
  22. /**
  23. * 事件与监听器映射
  24. *
  25. * @var array
  26. */
  27. protected $listen = [
  28. CropGrowthStageChangedEvent::class => [
  29. UpdateCropStatusListener::class,
  30. GenerateDisasterListener::class,
  31. ],
  32. HouseUpgradedEvent::class => [
  33. AddLandAfterHouseUpgradeListener::class,
  34. ],
  35. LoginSuccessEvent::class => [
  36. LoginSuccessListener::class,
  37. ],
  38. FarmCreatedEvent::class => [
  39. FarmInitRewardListener::class,
  40. ],
  41. CropPickedEvent::class => [
  42. PickStatisticsListener::class,
  43. ],
  44. ];
  45. /**
  46. * 注册服务
  47. *
  48. * @return void
  49. */
  50. public function register()
  51. {
  52. // 注册命令
  53. $this->commands([
  54. Commands\UpdateCropGrowthCommand::class,
  55. Commands\ScheduleCropStageUpdatesCommand::class,
  56. Commands\FixCropFinalOutputCommand::class,
  57. Commands\FixCropMatureOutputCommand::class,
  58. Commands\GenerateDisastersCommand::class,
  59. Commands\FixExcessiveDisastersCommand::class,
  60. Commands\CheckHouseDowngradeCommand::class,
  61. Commands\CleanExpiredLogsCommand::class,
  62. Commands\GenerateFarmHouseConfigJson::class,
  63. Commands\GenerateFarmShrineConfigJson::class,
  64. Commands\GenerateFarmLandConfigJson::class,
  65. Commands\GenerateFarmSeedConfigJson::class,
  66. Commands\MigrateLandUpgradeMaterialsToConsumeGroupsCommand::class,
  67. Commands\MigrateLandUpgradeConditionsToConditionGroupsCommand::class,
  68. Commands\InitializeUserLandsCommand::class,
  69. Commands\InsertFarmConfigAdminMenu::class,
  70. Commands\GenerateFarmDailyStatsCommand::class,
  71. Commands\FixLandStatusCommand::class,
  72. Commands\FixRemovedCropLandStatusCommand::class,
  73. Commands\TestPickFunctionCommand::class,
  74. Commands\TestRoseSeedLandTypeCommand::class,
  75. Commands\FixCropStageCommand::class,
  76. ]);
  77. }
  78. /**
  79. * 引导服务
  80. *
  81. * @return void
  82. */
  83. public function boot()
  84. {
  85. $events = $this->app['events'];
  86. foreach ($this->listen as $event => $listeners) {
  87. foreach ($listeners as $listener) {
  88. $events->listen($event, $listener);
  89. }
  90. }
  91. // 注册农场配置管理路由
  92. $this->registerAdminRoutes();
  93. // 注册农场定时任务
  94. $this->registerSchedules();
  95. }
  96. /**
  97. * 注册后台管理路由
  98. *
  99. * @return void
  100. */
  101. protected function registerAdminRoutes()
  102. {
  103. $attributes = [
  104. 'prefix' => config('admin.route.prefix'),
  105. 'middleware' => config('admin.route.middleware'),
  106. ];
  107. app('router')->group($attributes, function ($router) {
  108. // 农场配置管理路由
  109. $router->resource('farm-configs', \App\Module\Farm\AdminControllers\FarmConfigController::class);
  110. // 清除缓存路由
  111. $router->post('farm-configs/clear-cache', [\App\Module\Farm\AdminControllers\FarmConfigController::class, 'clearCache']);
  112. // 农场每日统计路由
  113. $router->resource('farm-daily-stats', \App\Module\Farm\AdminControllers\FarmDailyStatsController::class);
  114. // 农场统计图表路由
  115. $router->get('farm-metrics', [\App\Module\Farm\AdminControllers\FarmMetricsController::class, 'index']);
  116. });
  117. }
  118. /**
  119. * 注册农场相关的定时任务
  120. *
  121. * 将原本在 routes/console.php 中的农场调度配置迁移到此处
  122. */
  123. protected function registerSchedules(): void
  124. {
  125. // 在应用完全启动后注册定时任务
  126. $this->app->booted(function () {
  127. // 每天凌晨2点检查房屋降级
  128. Schedule::command('farm:check-house-downgrade')
  129. ->dailyAt('02:00')
  130. ->description('检查农场房屋降级');
  131. // 每分钟调度作物状态变更队列任务
  132. Schedule::command('farm:schedule-crop-stage-updates')
  133. ->everyMinute()
  134. ->description('调度作物状态变更队列任务');
  135. // 保留原有的批量更新命令作为备用(可选)
  136. // Schedule::command('farm:update-crop-growth')
  137. // ->everyMinute()
  138. // ->description('更新作物生长状态(备用)');
  139. // 每分钟随机生成灾害
  140. Schedule::command(\App\Module\Farm\Commands\GenerateDisastersCommand::class)
  141. ->everyMinute()
  142. ->description('随机生成农场灾害');
  143. // 每天凌晨01:00生成农场每日统计数据
  144. Schedule::command('farm:generate-daily-stats')
  145. ->dailyAt('01:00')
  146. ->description('生成农场每日统计数据');
  147. });
  148. }
  149. }