FarmServiceProvider.php 4.9 KB

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