UrsPromotionServiceProvider.php 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. ]);
  42. }
  43. }
  44. /**
  45. * 启动服务
  46. */
  47. public function boot(): void
  48. {
  49. // 注册事件监听器
  50. $events = $this->app['events'];
  51. foreach ($this->listen as $event => $listeners) {
  52. foreach ($listeners as $listener) {
  53. $events->listen($event, $listener);
  54. }
  55. }
  56. // 后台路由通过注解自动注册
  57. // 注册定时任务
  58. $this->app->booted(function () {
  59. $schedule = $this->app->make(Schedule::class);
  60. // 每天00:30执行合伙人分红(处理昨天的数据)
  61. $schedule->command('urs-promotion:partner-dividend')
  62. ->dailyAt('00:30')
  63. ->description('URS合伙人分红 - 顶级达人享受手续费分红')
  64. ->withoutOverlapping() // 防止重复执行
  65. ->runInBackground(); // 后台运行
  66. });
  67. }
  68. }