RewardService.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. namespace App\Module\Activity\Services;
  3. use App\Module\Activity\Dtos\ActivityRewardDto;
  4. use App\Module\Activity\Logics\RewardLogic;
  5. use Exception;
  6. use Illuminate\Support\Facades\Log;
  7. use UCore\Helper\Logger;
  8. /**
  9. * 奖励服务类
  10. */
  11. class RewardService
  12. {
  13. /**
  14. * 获取活动奖励信息
  15. *
  16. * @param int $activityId 活动ID
  17. * @return ActivityRewardDto|null
  18. */
  19. public static function getActivityReward(int $activityId): ?ActivityRewardDto
  20. {
  21. try {
  22. $rewardLogic = new RewardLogic();
  23. return $rewardLogic->getActivityReward($activityId);
  24. } catch (Exception $e) {
  25. Logger::error('获取活动奖励信息失败', [
  26. 'activity_id' => $activityId,
  27. 'error' => $e->getMessage()
  28. ]);
  29. return null;
  30. }
  31. }
  32. /**
  33. * 发放活动奖励
  34. *
  35. * @param int $userId 用户ID
  36. * @param int $activityId 活动ID
  37. * @return array
  38. */
  39. public static function grantActivityReward(int $userId, int $activityId): array
  40. {
  41. try {
  42. $rewardLogic = new RewardLogic();
  43. // 检查是否可以领取奖励
  44. if (!$rewardLogic->canClaimReward($userId, $activityId)) {
  45. return [
  46. 'success' => false,
  47. 'message' => '不满足领取奖励条件',
  48. 'rewards' => []
  49. ];
  50. }
  51. // 发放奖励
  52. $result = $rewardLogic->grantActivityReward($userId, $activityId);
  53. // 如果发放成功,标记奖励为已领取
  54. if ($result['success']) {
  55. $rewardLogic->markRewardAsClaimed($userId, $activityId);
  56. }
  57. return $result;
  58. } catch (Exception $e) {
  59. Logger::error('发放活动奖励失败', [
  60. 'user_id' => $userId,
  61. 'activity_id' => $activityId,
  62. 'error' => $e->getMessage()
  63. ]);
  64. return [
  65. 'success' => false,
  66. 'message' => $e->getMessage(),
  67. 'rewards' => []
  68. ];
  69. }
  70. }
  71. /**
  72. * 标记奖励为已过期
  73. *
  74. * @param int $userId 用户ID
  75. * @param int $activityId 活动ID
  76. * @return bool
  77. */
  78. public static function markRewardAsExpired(int $userId, int $activityId): bool
  79. {
  80. try {
  81. $rewardLogic = new RewardLogic();
  82. return $rewardLogic->markRewardAsExpired($userId, $activityId);
  83. } catch (Exception $e) {
  84. Logger::error('标记奖励为已过期失败', [
  85. 'user_id' => $userId,
  86. 'activity_id' => $activityId,
  87. 'error' => $e->getMessage()
  88. ]);
  89. return false;
  90. }
  91. }
  92. /**
  93. * 批量发放活动奖励
  94. *
  95. * @param array $userIds 用户ID数组
  96. * @param int $activityId 活动ID
  97. * @return array
  98. */
  99. public static function batchGrantActivityReward(array $userIds, int $activityId): array
  100. {
  101. $results = [
  102. 'success_count' => 0,
  103. 'fail_count' => 0,
  104. 'details' => []
  105. ];
  106. foreach ($userIds as $userId) {
  107. $result = self::grantActivityReward($userId, $activityId);
  108. if ($result['success']) {
  109. $results['success_count']++;
  110. } else {
  111. $results['fail_count']++;
  112. }
  113. $results['details'][$userId] = $result;
  114. }
  115. return $results;
  116. }
  117. }