|
@@ -50,6 +50,7 @@ import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Optional;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.*;
|
|
|
|
|
|
|
|
|
@Service
|
|
@@ -77,6 +78,9 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
|
|
|
private ActivityPlanRewardService activityPlanRewardService;
|
|
|
|
|
|
@Autowired
|
|
|
+ private ActivityRewardService activityRewardService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
private MemberPriceSettingsService memberPriceSettingsService;
|
|
|
|
|
|
@Override
|
|
@@ -180,56 +184,59 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
|
|
|
|
|
|
@Override
|
|
|
@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)) {
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
|
ActivityPlan activityPlan = activityPlanService.getById(activityId);
|
|
|
if (activityPlan == null) {
|
|
|
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<>();
|
|
|
}
|
|
|
|
|
|
// 级联锁同时处理奖品库存
|
|
|
- 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<String> rewardNameList = new ArrayList<>();
|
|
|
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.setUserId(userId);
|
|
|
pianoRoomChangeRecord.setInOrOut(InOrOutEnum.IN);
|
|
|
pianoRoomChangeRecord.setSourceType(SourceTypeEnum.ACTIVITY);
|
|
|
- pianoRoomChangeRecord.setTimes(activityReward.getActivityReward().getNum());
|
|
|
+ pianoRoomChangeRecord.setTimes(activityReward.getNum());
|
|
|
pianoRoomChangeRecord.setBizId(activityId.toString());
|
|
|
pianoRoomChangeRecord.setCreateTime(new Date());
|
|
|
pianoRoomChangeRecord.setReason(activityPlan.getActivityName());
|
|
|
pianoRoomChangeRecordService.add(pianoRoomChangeRecord);
|
|
|
- } else if (activityReward.getActivityReward().getRewardType().equals(RewardTypeEnum.VIP)) {
|
|
|
+ } else if (activityReward.getRewardType().equals(RewardTypeEnum.VIP)) {
|
|
|
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)) {
|
|
@@ -237,13 +244,14 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
|
|
|
sendActivityMessage(userId, activityPlan.getActivityName(),name, activityPlan.getActivityClient());
|
|
|
}
|
|
|
} finally {
|
|
|
- lock.unlock();
|
|
|
+ // lock.unlock();
|
|
|
}
|
|
|
|
|
|
return activityRewardIdList;
|
|
|
}
|
|
|
|
|
|
- private Boolean userRewarded(Long userId, Long activityId) {
|
|
|
+ @Override
|
|
|
+ public Boolean userRewarded(Long userId, Long activityId) {
|
|
|
return baseMapper.userRewarded(userId, activityId);
|
|
|
}
|
|
|
|