UrsPromotionServiceProvider.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace App\Module\UrsPromotion\Providers;
  3. use Illuminate\Support\ServiceProvider;
  4. use Illuminate\Console\Scheduling\Schedule;
  5. use App\Module\Farm\Events\CropHarvestedEvent;
  6. use App\Module\Transfer\Events\FeeCalculatingEvent;
  7. use App\Module\UrsPromotion\Events\UrsUserEnteredFarmEvent;
  8. use App\Module\UrsPromotion\Listeners\CropHarvestedListener;
  9. use App\Module\UrsPromotion\Listeners\UrsTransferFeeListener;
  10. use App\Module\UrsPromotion\Listeners\UrsUserEnteredFarmListener;
  11. /**
  12. * URS推广模块服务提供者
  13. */
  14. class UrsPromotionServiceProvider extends ServiceProvider
  15. {
  16. /**
  17. * 事件与监听器映射
  18. *
  19. * @var array
  20. */
  21. protected $listen = [
  22. CropHarvestedEvent::class => [
  23. CropHarvestedListener::class,
  24. ],
  25. FeeCalculatingEvent::class => [
  26. UrsTransferFeeListener::class,
  27. ],
  28. UrsUserEnteredFarmEvent::class => [
  29. UrsUserEnteredFarmListener::class,
  30. ],
  31. ];
  32. /**
  33. * 注册服务
  34. */
  35. public function register(): void
  36. {
  37. // 注册命令
  38. if ($this->app->runningInConsole()) {
  39. $this->commands([
  40. \App\Module\UrsPromotion\Commands\UrsPartnerDividendCommand::class,
  41. \App\Module\UrsPromotion\Commands\UrsRebuildRelationCacheCommand::class,
  42. \App\Module\UrsPromotion\Commands\UrsTestRelationCacheCommand::class,
  43. ]);
  44. }
  45. }
  46. /**
  47. * 启动服务
  48. */
  49. public function boot(): void
  50. {
  51. // 注册事件监听器
  52. $events = $this->app['events'];
  53. foreach ($this->listen as $event => $listeners) {
  54. foreach ($listeners as $listener) {
  55. $events->listen($event, $listener);
  56. }
  57. }
  58. // 后台路由通过注解自动注册
  59. // 注册定时任务
  60. $this->app->booted(function () {
  61. $schedule = $this->app->make(Schedule::class);
  62. // 每天00:30执行合伙人分红(处理昨天的数据)
  63. $schedule->command('urs-promotion:partner-dividend')
  64. ->dailyAt('00:30')
  65. ->description('URS合伙人分红 - 顶级达人享受手续费分红')
  66. ->withoutOverlapping() // 防止重复执行
  67. ->runInBackground(); // 后台运行
  68. });
  69. }
  70. }