UrsBackfillRewardService.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. namespace App\Module\UrsPromotion\Services;
  3. use App\Module\UrsPromotion\Logics\UrsBackfillRewardLogic;
  4. use Illuminate\Support\Facades\Log;
  5. /**
  6. * URS推荐奖励补发服务
  7. *
  8. * 处理用户首次进入农场时的推荐奖励补发逻辑
  9. */
  10. class UrsBackfillRewardService
  11. {
  12. /**
  13. * 为用户补发推荐奖励
  14. *
  15. * 当URS用户首次进入农场时,如果该用户有下级/下下级,
  16. * 按照用户当前达人等级(最低级)的奖励标准一次性补发推荐奖励
  17. * 使用奖励组系统的倍数功能:总量 = 奖励 × 人数
  18. *
  19. * @param int $ursUserId URS用户ID
  20. * @param int $farmUserId 农场用户ID
  21. * @return array 补发结果
  22. */
  23. public static function backfillPromotionReward(int $ursUserId, int $farmUserId): array
  24. {
  25. try {
  26. Log::info('开始处理URS推荐奖励补发', [
  27. 'urs_user_id' => $ursUserId,
  28. 'farm_user_id' => $farmUserId
  29. ]);
  30. $logic = new UrsBackfillRewardLogic();
  31. $result = $logic->backfillPromotionReward($ursUserId, $farmUserId);
  32. Log::info('URS推荐奖励补发处理完成', [
  33. 'urs_user_id' => $ursUserId,
  34. 'farm_user_id' => $farmUserId,
  35. 'result' => $result
  36. ]);
  37. return $result;
  38. } catch (\Exception $e) {
  39. Log::error('URS推荐奖励补发失败', [
  40. 'urs_user_id' => $ursUserId,
  41. 'farm_user_id' => $farmUserId,
  42. 'error' => $e->getMessage(),
  43. 'trace' => $e->getTraceAsString()
  44. ]);
  45. return [
  46. 'success' => false,
  47. 'error' => $e->getMessage(),
  48. 'backfilled_count' => 0,
  49. 'total_subordinates' => 0,
  50. 'talent_level' => 0,
  51. 'reward_details' => []
  52. ];
  53. }
  54. }
  55. /**
  56. * 检查用户是否需要补发推荐奖励
  57. *
  58. * @param int $ursUserId URS用户ID
  59. * @return bool
  60. */
  61. public static function needsBackfillReward(int $ursUserId): bool
  62. {
  63. try {
  64. $logic = new UrsBackfillRewardLogic();
  65. return $logic->needsBackfillReward($ursUserId);
  66. } catch (\Exception $e) {
  67. Log::error('检查是否需要补发奖励失败', [
  68. 'urs_user_id' => $ursUserId,
  69. 'error' => $e->getMessage()
  70. ]);
  71. return false;
  72. }
  73. }
  74. /**
  75. * 获取用户的下级统计信息
  76. *
  77. * @param int $ursUserId URS用户ID
  78. * @return array
  79. */
  80. public static function getSubordinateStats(int $ursUserId): array
  81. {
  82. try {
  83. $logic = new UrsBackfillRewardLogic();
  84. return $logic->getSubordinateStats($ursUserId);
  85. } catch (\Exception $e) {
  86. Log::error('获取下级统计信息失败', [
  87. 'urs_user_id' => $ursUserId,
  88. 'error' => $e->getMessage()
  89. ]);
  90. return [
  91. 'direct_count' => 0,
  92. 'indirect_count' => 0,
  93. 'third_count' => 0,
  94. 'total_count' => 0
  95. ];
  96. }
  97. }
  98. }