Sfoglia il codice sorgente

运营活动开发

liweifan 3 anni fa
parent
commit
87f4952c2c

+ 7 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityPlanRewardService.java

@@ -58,7 +58,13 @@ public interface ActivityPlanRewardService extends IService<ActivityPlanReward>
      */
     Boolean saveOrUpdateReward(ActivityPlanRewardDto rewardDto);
     /**
-     * 回收活动奖品数
+     * 回收活动奖品
+     * @param activityId
+     * @return
+     */
+    Boolean recoveryReward(Long activityId);
+    /**
+     * 回收活动奖品
      * @param reward
      * @return
      */

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ActivityRewardService.java

@@ -81,5 +81,11 @@ public interface ActivityRewardService extends IService<ActivityReward>  {
 	 */
 	IPage<ActivityRewardChangeStockVo> selectChangeStockPage(IPage<ActivityRewardChangeStockVo> page, ActivityRewardChangeStockSearch query);
 
+	/**
+	 * 发放获奖奖品
+	 * @param userId 用户id
+	 * @param activityId 活动id
+	 * @return 返回发放成功奖品id
+	 */
 	List<Long> sendReward(Long userId, Long activityId);
 }

+ 26 - 10
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanEvaluationServiceImpl.java

@@ -4,12 +4,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanDto;
 import com.yonge.cooleshow.biz.dal.dto.req.OrderPayReq;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
+import com.yonge.cooleshow.biz.dal.entity.ActivityPlanReward;
 import com.yonge.cooleshow.biz.dal.entity.ActivityUserReward;
 import com.yonge.cooleshow.biz.dal.enums.GoodTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.OrderTypeEnum;
-import com.yonge.cooleshow.biz.dal.service.ActivityRewardService;
-import com.yonge.cooleshow.biz.dal.service.ActivityUserRewardService;
-import com.yonge.cooleshow.biz.dal.service.UserOrderService;
+import com.yonge.cooleshow.biz.dal.service.*;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,10 +17,11 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import com.yonge.cooleshow.biz.dal.entity.ActivityPlanEvaluation;
 import com.yonge.cooleshow.biz.dal.dao.ActivityPlanEvaluationDao;
-import com.yonge.cooleshow.biz.dal.service.ActivityPlanEvaluationService;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -34,6 +34,8 @@ public class ActivityPlanEvaluationServiceImpl extends ServiceImpl<ActivityPlanE
     private ActivityRewardService activityRewardService;
     @Autowired
     private ActivityUserRewardService activityUserRewardService;
+    @Autowired
+    private ActivityPlanRewardService activityPlanRewardService;
 
     @Override
     public boolean createOrUpdate(ActivityPlanDto activityPlan) {
@@ -73,14 +75,28 @@ public class ActivityPlanEvaluationServiceImpl extends ServiceImpl<ActivityPlanE
         //关闭未付款订单
         closeActivity(activityId);
 
-        //活动发奖
+        //活动需要放的
         List<ActivityUserReward> activityUserRewardList = baseMapper.getUserReward(activityId);
-        activityUserRewardService.saveBatch(activityUserRewardList);
 
-        //调用奖品发奖逻辑
-        for (ActivityUserReward reward : activityUserRewardList) {
-            //传入用户id和活动id
-            activityRewardService.sendReward(reward.getUserId(),reward.getActivityId());
+        Set<Long> userIds = activityUserRewardList.stream().map(ActivityUserReward::getUserId).collect(Collectors.toSet());
+
+        for (Long userId : userIds) {
+            //给用户发放奖品 传入用户id和活动id
+            List<Long> successRewardIds = activityRewardService.sendReward(userId, activityId);
+
+            activityUserRewardList.stream().filter(o -> o.getUserId().equals(userId)).forEach(o -> {
+                for (Long successRewardId : successRewardIds) {
+                    if(o.getRewardId().equals(successRewardId)){
+                        o.setGrantFlag(1);
+                        return;
+                    }
+                }
+                o.setGrantFlag(0);
+            });
         }
+        activityUserRewardService.saveBatch(activityUserRewardList);
+
+        //发完奖后将库存归还
+        activityPlanRewardService.recoveryReward(activityId);
     }
 }

+ 16 - 9
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ActivityPlanRewardServiceImpl.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.dao.ActivityRewardChangeStockDao;
 import com.yonge.cooleshow.biz.dal.dto.ActivityPlanRewardDto;
@@ -45,14 +46,6 @@ public class ActivityPlanRewardServiceImpl extends ServiceImpl<ActivityPlanRewar
     @Resource
     private ActivityRewardChangeStockDao changeStockDao;
 
-    //奖品发放
-    public static final Map<RewardTypeEnum, Consumer<Long>> rewardGrant = new HashMap<>();
-
-    @PostConstruct
-    private void init() {
-
-    }
-
     @Override
     public ActivityPlanRewardVo detail(Long id) {
         return baseMapper.detail(id);
@@ -140,6 +133,17 @@ public class ActivityPlanRewardServiceImpl extends ServiceImpl<ActivityPlanRewar
     }
 
     @Override
+    public Boolean recoveryReward(Long activityId) {
+        List<ActivityPlanReward> list = list(Wrappers.<ActivityPlanReward>lambdaQuery()
+                .eq(ActivityPlanReward::getActivityId, activityId)
+                .gt(ActivityPlanReward::getRewardNum, 0));
+        for (ActivityPlanReward activityPlanReward : list) {
+            recoveryReward(activityPlanReward);
+        }
+        return true;
+    }
+
+    @Override
     public Boolean recoveryReward(ActivityPlanReward reward) {
         DistributedLock.of(redissonClient)
                 .runIfLockToFunction(CacheNameEnum.LOCK_ACTIVITY_REWARD_STOCK.getRedisKey(reward.getId())
@@ -162,6 +166,9 @@ public class ActivityPlanRewardServiceImpl extends ServiceImpl<ActivityPlanRewar
 
                                                     detail.setStock(detail.getStock() + old.getRewardNum());
                                                     activityRewardService.updateById(detail);
+
+                                                    old.setRewardNum(0);
+                                                    updateById(old);
                                                 }
                                                 return true;
                                             }, out, 10l);
@@ -172,7 +179,7 @@ public class ActivityPlanRewardServiceImpl extends ServiceImpl<ActivityPlanRewar
 
     @Override
     public int reduceStock(Long activityId, Long rewardId) {
-        return baseMapper.reduceStock(activityId,rewardId);
+        return baseMapper.reduceStock(activityId, rewardId);
     }
 
 }