| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <?php
- namespace App\Module\Activity\Services;
- use App\Module\Activity\Dtos\ActivityRewardDto;
- use App\Module\Activity\Logics\RewardLogic;
- use Exception;
- use Illuminate\Support\Facades\Log;
- /**
- * 奖励服务类
- */
- class RewardService
- {
- /**
- * 获取活动奖励信息
- *
- * @param int $activityId 活动ID
- * @return ActivityRewardDto|null
- */
- public static function getActivityReward(int $activityId): ?ActivityRewardDto
- {
- try {
- $rewardLogic = new RewardLogic();
- return $rewardLogic->getActivityReward($activityId);
- } catch (Exception $e) {
- Log::error('获取活动奖励信息失败', [
- 'activity_id' => $activityId,
- 'error' => $e->getMessage()
- ]);
- return null;
- }
- }
- /**
- * 发放活动奖励
- *
- * @param int $userId 用户ID
- * @param int $activityId 活动ID
- * @return array
- */
- public static function grantActivityReward(int $userId, int $activityId): array
- {
- try {
- $rewardLogic = new RewardLogic();
-
- // 检查是否可以领取奖励
- if (!$rewardLogic->canClaimReward($userId, $activityId)) {
- return [
- 'success' => false,
- 'message' => '不满足领取奖励条件',
- 'rewards' => []
- ];
- }
-
- // 发放奖励
- $result = $rewardLogic->grantActivityReward($userId, $activityId);
-
- // 如果发放成功,标记奖励为已领取
- if ($result['success']) {
- $rewardLogic->markRewardAsClaimed($userId, $activityId);
- }
-
- return $result;
- } catch (Exception $e) {
- Log::error('发放活动奖励失败', [
- 'user_id' => $userId,
- 'activity_id' => $activityId,
- 'error' => $e->getMessage()
- ]);
-
- return [
- 'success' => false,
- 'message' => $e->getMessage(),
- 'rewards' => []
- ];
- }
- }
- /**
- * 标记奖励为已过期
- *
- * @param int $userId 用户ID
- * @param int $activityId 活动ID
- * @return bool
- */
- public static function markRewardAsExpired(int $userId, int $activityId): bool
- {
- try {
- $rewardLogic = new RewardLogic();
- return $rewardLogic->markRewardAsExpired($userId, $activityId);
- } catch (Exception $e) {
- Log::error('标记奖励为已过期失败', [
- 'user_id' => $userId,
- 'activity_id' => $activityId,
- 'error' => $e->getMessage()
- ]);
- return false;
- }
- }
- /**
- * 批量发放活动奖励
- *
- * @param array $userIds 用户ID数组
- * @param int $activityId 活动ID
- * @return array
- */
- public static function batchGrantActivityReward(array $userIds, int $activityId): array
- {
- $results = [
- 'success_count' => 0,
- 'fail_count' => 0,
- 'details' => []
- ];
-
- foreach ($userIds as $userId) {
- $result = self::grantActivityReward($userId, $activityId);
-
- if ($result['success']) {
- $results['success_count']++;
- } else {
- $results['fail_count']++;
- }
-
- $results['details'][$userId] = $result;
- }
-
- return $results;
- }
- }
|