| 
														
															@@ -50,6 +50,7 @@ import java.util.List; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import java.util.Map; 
														 | 
														
														 | 
														
															 import java.util.Map; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import java.util.Optional; 
														 | 
														
														 | 
														
															 import java.util.Optional; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 import java.util.stream.Collectors; 
														 | 
														
														 | 
														
															 import java.util.stream.Collectors; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+import java.util.*; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 @Service 
														 | 
														
														 | 
														
															 @Service 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -77,6 +78,9 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     private ActivityPlanRewardService activityPlanRewardService; 
														 | 
														
														 | 
														
															     private ActivityPlanRewardService activityPlanRewardService; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @Autowired 
														 | 
														
														 | 
														
															     @Autowired 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    private ActivityRewardService activityRewardService; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    @Autowired 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     private MemberPriceSettingsService memberPriceSettingsService; 
														 | 
														
														 | 
														
															     private MemberPriceSettingsService memberPriceSettingsService; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @Override 
														 | 
														
														 | 
														
															     @Override 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -180,56 +184,59 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @Override 
														 | 
														
														 | 
														
															     @Override 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     @Transactional(rollbackFor = Exception.class) 
														 | 
														
														 | 
														
															     @Transactional(rollbackFor = Exception.class) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    public List<Long> sendReward(Long userId, Long activityId) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    public List<Long> sendReward(Long userId, Long activityId,List<Long> rewardIdList) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (userRewarded(userId, activityId)) { 
														 | 
														
														 | 
														
															         if (userRewarded(userId, activityId)) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return new ArrayList<>(); 
														 | 
														
														 | 
														
															             return new ArrayList<>(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         ActivityPlan activityPlan = activityPlanService.getById(activityId); 
														 | 
														
														 | 
														
															         ActivityPlan activityPlan = activityPlanService.getById(activityId); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         if (activityPlan == null) { 
														 | 
														
														 | 
														
															         if (activityPlan == null) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             log.warn("活动不存在"); 
														 | 
														
														 | 
														
															             log.warn("活动不存在"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            return null; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            return new ArrayList<>(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        if (CollectionUtils.isEmpty(rewardIdList)) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            log.warn("奖品不存在"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            return new ArrayList<>(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        List<ActivityPlanRewardDto> activityPlanRewardDtos = activityPlanRewardService.queryActivityPlanReward( 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                activityId); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        Collection<ActivityReward> activityRewards = activityRewardService.listByIds(rewardIdList); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        if (CollectionUtils.isEmpty(activityPlanRewardDtos)) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        if (CollectionUtils.isEmpty(activityRewards)) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             return new ArrayList<>(); 
														 | 
														
														 | 
														
															             return new ArrayList<>(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															         // 级联锁同时处理奖品库存 
														 | 
														
														 | 
														
															         // 级联锁同时处理奖品库存 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        List<RLock> lockList = new ArrayList<>(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        for (ActivityPlanRewardDto activityReward : activityPlanRewardDtos) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            lockList.add(redissonClient.getLock(CacheNameEnum.LOCK_ACTIVITY_REWARD_STOCK.getRedisKey(activityReward.getId()))); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        } 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-        RedissonMultiLock lock = new RedissonMultiLock(lockList.toArray(new RLock[lockList.size()])); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        // List<RLock> lockList = new ArrayList<>(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        // for (ActivityPlanRewardDto activityReward : activityPlanRewardDtos) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        //     lockList.add(redissonClient.getLock(CacheNameEnum.LOCK_ACTIVITY_REWARD_STOCK.getRedisKey(activityReward.getId()))); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        // } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        // 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        // RedissonMultiLock lock = new RedissonMultiLock(lockList.toArray(new RLock[lockList.size()])); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															         List<Long> activityRewardIdList = new ArrayList<>(); 
														 | 
														
														 | 
														
															         List<Long> activityRewardIdList = new ArrayList<>(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         List<String> rewardNameList = new ArrayList<>(); 
														 | 
														
														 | 
														
															         List<String> rewardNameList = new ArrayList<>(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         try { 
														 | 
														
														 | 
														
															         try { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            lock.lock(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            for (ActivityPlanRewardDto activityReward : activityPlanRewardDtos) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                int update = activityPlanRewardService.reduceStock(activityId, activityReward.getActivityReward().getId()); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                if (update == 0) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                    continue; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                } 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                if (activityReward.getActivityReward().getRewardType().equals(RewardTypeEnum.PIAMO_ROOM)) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            // lock.lock(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            for (ActivityReward activityReward : activityRewards) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                // int update = activityPlanRewardService.reduceStock(activityId, activityReward.getActivityReward().getId()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                // if (update == 0) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                //     continue; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                // } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                if (activityReward.getRewardType().equals(RewardTypeEnum.PIAMO_ROOM)) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     PianoRoomChangeRecord pianoRoomChangeRecord = new PianoRoomChangeRecord(); 
														 | 
														
														 | 
														
															                     PianoRoomChangeRecord pianoRoomChangeRecord = new PianoRoomChangeRecord(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     pianoRoomChangeRecord.setUserId(userId); 
														 | 
														
														 | 
														
															                     pianoRoomChangeRecord.setUserId(userId); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     pianoRoomChangeRecord.setInOrOut(InOrOutEnum.IN); 
														 | 
														
														 | 
														
															                     pianoRoomChangeRecord.setInOrOut(InOrOutEnum.IN); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     pianoRoomChangeRecord.setSourceType(SourceTypeEnum.ACTIVITY); 
														 | 
														
														 | 
														
															                     pianoRoomChangeRecord.setSourceType(SourceTypeEnum.ACTIVITY); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                    pianoRoomChangeRecord.setTimes(activityReward.getActivityReward().getNum()); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                    pianoRoomChangeRecord.setTimes(activityReward.getNum()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     pianoRoomChangeRecord.setBizId(activityId.toString()); 
														 | 
														
														 | 
														
															                     pianoRoomChangeRecord.setBizId(activityId.toString()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     pianoRoomChangeRecord.setCreateTime(new Date()); 
														 | 
														
														 | 
														
															                     pianoRoomChangeRecord.setCreateTime(new Date()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     pianoRoomChangeRecord.setReason(activityPlan.getActivityName()); 
														 | 
														
														 | 
														
															                     pianoRoomChangeRecord.setReason(activityPlan.getActivityName()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     pianoRoomChangeRecordService.add(pianoRoomChangeRecord); 
														 | 
														
														 | 
														
															                     pianoRoomChangeRecordService.add(pianoRoomChangeRecord); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                } else if (activityReward.getActivityReward().getRewardType().equals(RewardTypeEnum.VIP)) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                } else if (activityReward.getRewardType().equals(RewardTypeEnum.VIP)) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                     memberPriceSettingsService.activityReward(userId, activityPlan.getActivityClient(), 
														 | 
														
														 | 
														
															                     memberPriceSettingsService.activityReward(userId, activityPlan.getActivityClient(), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                                                              activityReward.getActivityReward(), activityId,activityPlan.getActivityName()); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                                                              activityReward, activityId,activityPlan.getActivityName()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 } 
														 | 
														
														 | 
														
															                 } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                rewardNameList.add(activityReward.getActivityReward().getRewardName()); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-                activityRewardIdList.add(activityReward.getActivityReward().getId()); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                rewardNameList.add(activityReward.getRewardName()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+                activityRewardIdList.add(activityReward.getId()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             } 
														 | 
														
														 | 
														
															             } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             // 发送活动获奖推送 
														 | 
														
														 | 
														
															             // 发送活动获奖推送 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             if (!CollectionUtils.isEmpty(rewardNameList)) { 
														 | 
														
														 | 
														
															             if (!CollectionUtils.isEmpty(rewardNameList)) { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -237,13 +244,14 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac 
														 | 
													
												
											
												
													
														| 
														 | 
														
															                 sendActivityMessage(userId, activityPlan.getActivityName(),name, activityPlan.getActivityClient()); 
														 | 
														
														 | 
														
															                 sendActivityMessage(userId, activityPlan.getActivityName(),name, activityPlan.getActivityClient()); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															             } 
														 | 
														
														 | 
														
															             } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } finally { 
														 | 
														
														 | 
														
															         } finally { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-            lock.unlock(); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+            // lock.unlock(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         } 
														 | 
														
														 | 
														
															         } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return activityRewardIdList; 
														 | 
														
														 | 
														
															         return activityRewardIdList; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-    private Boolean userRewarded(Long userId, Long activityId) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    @Override 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+    public Boolean userRewarded(Long userId, Long activityId) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															         return baseMapper.userRewarded(userId, activityId); 
														 | 
														
														 | 
														
															         return baseMapper.userRewarded(userId, activityId); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															     } 
														 | 
														
														 | 
														
															     } 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 |