|
@@ -6,13 +6,19 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.ActivityPlanDto;
|
|
|
import com.yonge.cooleshow.biz.dal.dto.search.UserFirstTimeSearch;
|
|
|
import com.yonge.cooleshow.biz.dal.entity.ActivityPlan;
|
|
|
+import com.yonge.cooleshow.biz.dal.entity.ActivityReward;
|
|
|
import com.yonge.cooleshow.biz.dal.entity.UserFirstTime;
|
|
|
+import com.yonge.cooleshow.biz.dal.enums.InOrOutEnum;
|
|
|
import com.yonge.cooleshow.biz.dal.service.*;
|
|
|
import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
|
|
|
import com.yonge.cooleshow.biz.dal.vo.ActivityPlanVo;
|
|
|
import com.yonge.cooleshow.common.enums.ActivityTypeEnum;
|
|
|
+import com.yonge.cooleshow.common.enums.CacheNameEnum;
|
|
|
import com.yonge.cooleshow.common.enums.ConditionEnum;
|
|
|
import com.yonge.cooleshow.common.enums.ConditionMethodEnum;
|
|
|
+import com.yonge.toolset.base.exception.BizException;
|
|
|
+import com.yonge.toolset.payment.util.DistributedLock;
|
|
|
+import org.redisson.api.RedissonClient;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.slf4j.Logger;
|
|
@@ -32,9 +38,13 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
|
|
|
@Autowired
|
|
|
private ActivityPlanService activityPlanService;
|
|
|
@Autowired
|
|
|
+ private ActivityPlanRewardService activityPlanRewardService;
|
|
|
+ @Autowired
|
|
|
private UserFirstTimeService userFirstTimeService;
|
|
|
@Autowired
|
|
|
private ActivityRewardService activityRewardService;
|
|
|
+ @Autowired
|
|
|
+ private RedissonClient redissonClient;
|
|
|
|
|
|
@Override
|
|
|
public boolean createOrUpdate(ActivityPlanDto activityPlan) {
|
|
@@ -60,20 +70,21 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
|
|
|
.select(ActivityPlan::getId));
|
|
|
|
|
|
for (ActivityPlan activityPlan : activityIds) {
|
|
|
- ActivityPlanVo detail = activityPlanService.detail(activityPlan.getId());
|
|
|
-
|
|
|
- dealActivityIng(detail);
|
|
|
+ DistributedLock.of(redissonClient)
|
|
|
+ .runIfLockToFunction(CacheNameEnum.LOCK_ACTIVITY_STOCK.getRedisKey(activityPlan.getId())
|
|
|
+ , this::dealActivityIng, activityPlan.getId(), 10l);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
- private void dealActivityIng(ActivityPlanVo detail) {
|
|
|
- if(null == detail){
|
|
|
- return;
|
|
|
+ private Boolean dealActivityIng(Long activityId) {
|
|
|
+ ActivityPlanVo detail = activityPlanService.detail(activityId);
|
|
|
+ if (null == detail) {
|
|
|
+ return true;
|
|
|
}
|
|
|
+
|
|
|
ActivityPlanStandard planStandard = detail.getPlanStandard();
|
|
|
- if(null == planStandard){
|
|
|
- return;
|
|
|
+ if (null == planStandard) {
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
UserFirstTimeSearch search = new UserFirstTimeSearch();
|
|
@@ -86,29 +97,32 @@ public class ActivityPlanStandardServiceImpl extends ServiceImpl<ActivityPlanSta
|
|
|
List<String> timeTypes = WrapperUtil.toList(timeType);
|
|
|
|
|
|
List<UserFirstTime> userFirstTimes = userFirstTimeService.selectAllList(search);
|
|
|
- if(CollectionUtils.isEmpty(userFirstTimes)){
|
|
|
- return;
|
|
|
+ if (CollectionUtils.isEmpty(userFirstTimes)) {
|
|
|
+ return true;
|
|
|
}
|
|
|
Map<Long, List<UserFirstTime>> userMap = userFirstTimes.stream().collect(Collectors.groupingBy(UserFirstTime::getUserId));
|
|
|
- if(ConditionMethodEnum.OR.equals(planStandard.getCalculationMethod())){
|
|
|
- for(Long userId : userMap.keySet()){
|
|
|
+ if (ConditionMethodEnum.OR.equals(planStandard.getCalculationMethod())) {
|
|
|
+ for (Long userId : userMap.keySet()) {
|
|
|
//给用户发奖
|
|
|
- activityRewardService.sendReward(userId,detail.getId());
|
|
|
+ activityRewardService.sendReward(userId, detail.getId());
|
|
|
}
|
|
|
- }else{
|
|
|
- for(Long userId : userMap.keySet()){
|
|
|
+ } else {
|
|
|
+ for (Long userId : userMap.keySet()) {
|
|
|
List<UserFirstTime> firstTimes = userMap.get(userId);
|
|
|
- if(firstTimes.size() == timeTypes.size()){
|
|
|
+ if (firstTimes.size() == timeTypes.size()) {
|
|
|
//给用户发奖
|
|
|
- activityRewardService.sendReward(userId,detail.getId());
|
|
|
+ activityRewardService.sendReward(userId, detail.getId());
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void successActivity(Long activytyId) {
|
|
|
-
|
|
|
+ //处理活动发奖
|
|
|
+ dealActivityIng(activytyId);
|
|
|
+ //归还库存
|
|
|
+ activityPlanRewardService.recoveryReward(activytyId);
|
|
|
}
|
|
|
}
|