FarmServiceProvider.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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. Commands\FixRemovedCropLandStatusCommand::class,
  66. ]);
  67. }
  68. /**
  69. * 引导服务
  70. *
  71. * @return void
  72. */
  73. public function boot()
  74. {
  75. $events = $this->app['events'];
  76. foreach ($this->listen as $event => $listeners) {
  77. foreach ($listeners as $listener) {
  78. $events->listen($event, $listener);
  79. }
  80. }
  81. // 注册农场配置管理路由
  82. $this->registerAdminRoutes();
  83. // 注册农场定时任务
  84. $this->registerSchedules();
  85. }
  86. /**
  87. * 注册后台管理路由
  88. *
  89. * @return void
  90. */
  91. protected function registerAdminRoutes()
  92. {
  93. $attributes = [
  94. 'prefix' => config('admin.route.prefix'),
  95. 'middleware' => config('admin.route.middleware'),
  96. ];
  97. app('router')->group($attributes, function ($router) {
  98. // 农场配置管理路由
  99. $router->resource('farm-configs', \App\Module\Farm\AdminControllers\FarmConfigController::class);
  100. // 清除缓存路由
  101. $router->post('farm-configs/clear-cache', [\App\Module\Farm\AdminControllers\FarmConfigController::class, 'clearCache']);
  102. // 农场每日统计路由
  103. $router->resource('farm-daily-stats', \App\Module\Farm\AdminControllers\FarmDailyStatsController::class);
  104. // 农场统计图表路由
  105. $router->get('farm-metrics', [\App\Module\Farm\AdminControllers\FarmMetricsController::class, 'index']);
  106. });
  107. }
  108. /**
  109. * 注册农场相关的定时任务
  110. *
  111. * 将原本在 routes/console.php 中的农场调度配置迁移到此处
  112. */
  113. protected function registerSchedules(): void
  114. {
  115. // 在应用完全启动后注册定时任务
  116. $this->app->booted(function () {
  117. // 每天凌晨2点检查房屋降级
  118. Schedule::command('farm:check-house-downgrade')
  119. ->dailyAt('02:00')
  120. ->description('检查农场房屋降级');
  121. // 每分钟更新作物生长状态
  122. Schedule::command('farm:update-crop-growth')
  123. ->everyMinute()
  124. ->description('更新作物生长状态');
  125. // 每分钟随机生成灾害
  126. Schedule::command(\App\Module\Farm\Commands\GenerateDisastersCommand::class)
  127. ->everyMinute()
  128. ->description('随机生成农场灾害');
  129. // 每天凌晨01:00生成农场每日统计数据
  130. Schedule::command('farm:generate-daily-stats')
  131. ->dailyAt('01:00')
  132. ->description('生成农场每日统计数据');
  133. });
  134. }
  135. }