|
@@ -10,6 +10,7 @@ import com.yonge.cooleshow.biz.dal.dao.ActivityRewardChangeStockDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dao.ActivityRewardDao;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.ActivityRewardDto;
|
|
|
+import com.yonge.cooleshow.biz.dal.dto.UserParam;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.search.ActivityRewardChangeStockSearch;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.search.ActivityRewardSearch;
|
|
|
import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
|
|
@@ -22,6 +23,7 @@ import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
|
|
|
import com.yonge.cooleshow.biz.dal.enums.SourceTypeEnum;
|
|
|
+import com.yonge.cooleshow.biz.dal.service.*;
|
|
|
import com.yonge.cooleshow.biz.dal.mapper.CouponInfoMapper;
|
|
|
import com.yonge.cooleshow.biz.dal.service.ActivityPlanRewardService;
|
|
|
import com.yonge.cooleshow.biz.dal.service.ActivityPlanService;
|
|
@@ -56,6 +58,7 @@ import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Optional;
|
|
|
import java.util.stream.Collectors;
|
|
|
+import java.util.*;
|
|
|
|
|
|
|
|
|
@Service
|
|
@@ -85,8 +88,14 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
|
|
|
private ActivityPlanRewardService activityPlanRewardService;
|
|
|
|
|
|
@Autowired
|
|
|
+ private ActivityRewardService activityRewardService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
private MemberPriceSettingsService memberPriceSettingsService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private CouponIssueService couponIssueService;
|
|
|
+
|
|
|
@Override
|
|
|
public ActivityRewardVo detail(Long id) {
|
|
|
return baseMapper.detail(id);
|
|
@@ -218,26 +227,29 @@ 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) {
|
|
|
+ for (ActivityReward activityReward : activityRewards) {
|
|
|
lockList.add(redissonClient.getLock(CacheNameEnum.LOCK_ACTIVITY_REWARD_STOCK.getRedisKey(activityReward.getId())));
|
|
|
}
|
|
|
|
|
@@ -246,28 +258,40 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
|
|
|
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());
|
|
|
+ // lock.lock();
|
|
|
+ for (ActivityReward activityReward : activityRewards) {
|
|
|
+ int update = activityPlanRewardService.reduceStock(activityId, activityReward.getId());
|
|
|
if (update == 0) {
|
|
|
continue;
|
|
|
}
|
|
|
- if (activityReward.getActivityReward().getRewardType().equals(RewardTypeEnum.PIAMO_ROOM)) {
|
|
|
+ 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());
|
|
|
+ } else if (activityReward.getRewardType().equals(RewardTypeEnum.COUPON)) {
|
|
|
+ List<UserParam> list = new ArrayList<>();
|
|
|
+ UserParam userParam = new UserParam();
|
|
|
+ userParam.setUserId(userId);
|
|
|
+ userParam.setClientType(activityPlan.getActivityClient());
|
|
|
+ list.add(userParam);
|
|
|
+ try {
|
|
|
+ couponIssueService.issueCoupon(activityReward.getCouponId(),list,null,"活动奖品",false);
|
|
|
+ } catch (BizException e) {
|
|
|
+ log.warn("send activity coupon {}",e.fillInStackTrace());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
}
|
|
|
- rewardNameList.add(activityReward.getActivityReward().getRewardName());
|
|
|
- activityRewardIdList.add(activityReward.getActivityReward().getId());
|
|
|
+ rewardNameList.add(activityReward.getRewardName());
|
|
|
+ activityRewardIdList.add(activityReward.getId());
|
|
|
}
|
|
|
// 发送活动获奖推送
|
|
|
if (!CollectionUtils.isEmpty(rewardNameList)) {
|
|
@@ -281,7 +305,8 @@ public class ActivityRewardServiceImpl extends ServiceImpl<ActivityRewardDao, Ac
|
|
|
return activityRewardIdList;
|
|
|
}
|
|
|
|
|
|
- private Boolean userRewarded(Long userId, Long activityId) {
|
|
|
+ @Override
|
|
|
+ public Boolean userRewarded(Long userId, Long activityId) {
|
|
|
return baseMapper.userRewarded(userId, activityId);
|
|
|
}
|
|
|
|