FarmServiceProvider.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. namespace App\Module\Farm\Providers;
  3. use App\Module\Farm\Commands;
  4. use App\Module\Farm\Events\CropGrowthStageChangedEvent;
  5. use App\Module\Farm\Events\CropHarvestedEvent;
  6. use App\Module\Farm\Listeners\CalculateHarvestOutputListener;
  7. use App\Module\Farm\Listeners\CheckHouseDowngradeListener;
  8. use App\Module\Farm\Listeners\DistributeTeamProfitListener;
  9. use App\Module\Farm\Listeners\GenerateDisasterListener;
  10. use App\Module\Farm\Listeners\UpdateCropStatusListener;
  11. use App\Module\Farm\Listeners\UpdateTalentLevelListener;
  12. use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
  13. use Illuminate\Support\Facades\Event;
  14. /**
  15. * 农场模块服务提供者
  16. */
  17. class FarmServiceProvider extends ServiceProvider
  18. {
  19. /**
  20. * 事件与监听器映射
  21. *
  22. * @var array
  23. */
  24. protected $listen = [
  25. CropGrowthStageChangedEvent::class => [
  26. UpdateCropStatusListener::class,
  27. GenerateDisasterListener::class,
  28. ],
  29. CropHarvestedEvent::class => [
  30. CalculateHarvestOutputListener::class,
  31. DistributeTeamProfitListener::class,
  32. ],
  33. ];
  34. /**
  35. * 注册服务
  36. *
  37. * @return void
  38. */
  39. public function register()
  40. {
  41. // 注册命令
  42. $this->commands([
  43. Commands\UpdateCropGrowthCommand::class,
  44. Commands\GenerateDisastersCommand::class,
  45. Commands\CheckHouseDowngradeCommand::class,
  46. Commands\CleanExpiredLogsCommand::class,
  47. Commands\RebuildFarmCacheCommand::class,
  48. Commands\GenerateFarmHouseConfigJson::class,
  49. Commands\GenerateFarmHouseJson::class,
  50. ]);
  51. // 注册服务
  52. $this->app->singleton(Logics\FarmLogic::class, function ($app) {
  53. return new Logics\FarmLogic();
  54. });
  55. $this->app->singleton(Logics\LandLogic::class, function ($app) {
  56. return new Logics\LandLogic();
  57. });
  58. $this->app->singleton(Logics\CropLogic::class, function ($app) {
  59. return new Logics\CropLogic();
  60. });
  61. $this->app->singleton(Logics\SeedLogic::class, function ($app) {
  62. return new Logics\SeedLogic();
  63. });
  64. $this->app->singleton(Logics\DisasterLogic::class, function ($app) {
  65. return new Logics\DisasterLogic();
  66. });
  67. $this->app->singleton(Logics\HouseLogic::class, function ($app) {
  68. return new Logics\HouseLogic();
  69. });
  70. $this->app->singleton(Logics\BuffLogic::class, function ($app) {
  71. return new Logics\BuffLogic();
  72. });
  73. $this->app->singleton(Logics\TeamLogic::class, function ($app) {
  74. return new Logics\TeamLogic();
  75. });
  76. }
  77. /**
  78. * 引导服务
  79. *
  80. * @return void
  81. */
  82. public function boot()
  83. {
  84. parent::boot();
  85. // 注册路由
  86. if (file_exists(__DIR__ . '/../routes.php')) {
  87. $this->loadRoutesFrom(__DIR__ . '/../routes.php');
  88. }
  89. // 注册定时任务监听器
  90. $this->app->booted(function () {
  91. $schedule = $this->app->make(\Illuminate\Console\Scheduling\Schedule::class);
  92. // 每5分钟更新作物生长状态
  93. $schedule->command('farm:update-crop-growth')->everyFiveMinutes();
  94. // 每小时随机生成灾害
  95. $schedule->command('farm:generate-disasters')->hourly();
  96. // 每天凌晨2点检查房屋降级
  97. $schedule->command('farm:check-house-downgrade')->dailyAt('02:00');
  98. // 每天凌晨3点更新达人等级
  99. $schedule->call(function () {
  100. app()->make(UpdateTalentLevelListener::class)->handle();
  101. })->dailyAt('03:00');
  102. // 每周一凌晨4点清理过期日志
  103. $schedule->command('farm:clean-expired-logs')->weekly()->mondays()->at('04:00');
  104. // 每天凌晨5点重建缓存
  105. $schedule->command('farm:rebuild-cache')->dailyAt('05:00');
  106. });
  107. }
  108. }