Переглянути джерело

Merge branch 'dev' into 'mp-server-test'

免费抽奖开奖调整

See merge request quanshu/mp-server!631
jiang hao 2 роки тому
батько
коміт
6831deeb51

+ 34 - 7
mp-service/src/main/java/com/qs/mp/admin/service/impl/MarketingServiceImpl.java

@@ -62,6 +62,10 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
     // 普通奖池
     public static final String MARKETING_LOTTERY_ORDINARY_POOL = "MARKETING_LOTTERY_ORDINARY_POOL:%s";
 
+    // 普通用户低阶奖池
+    public static final String MARKETING_LOW_LOTTERY_ORDINARY_POOL = "MARKETING_LOW_LOTTERY_ORDINARY_POOL:%s";
+
+
     protected final Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName());
 
     @Autowired
@@ -171,6 +175,8 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
 
         // 用户抽奖池
         String userLotteryPool = String.format(MARKETING_LOTTERY_ORDINARY_POOL, marketing.getId());
+        // 用户低阶奖池
+        String userLowLotteryPool = String.format(MARKETING_LOW_LOTTERY_ORDINARY_POOL, marketing.getId());
         // 内部抽奖池
         String insideLotteryPool = String.format(MARKETING_LOTTERY_INSIDE_POOL, marketing.getId());
 
@@ -201,7 +207,6 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
         List<SysUser> insideUserList = sysUserService.selectUserListByRand(UserTypeEnum.INSIDE.getValue(), insideNum);
 
         Set<String> insideCodes = new HashSet<>();
-        Set<String> userCodes = new HashSet<>();
         for (SysUser sysUser : insideUserList) {
             // 生成抽奖码
             String code = MarketingUtils.generatePrizeCode();
@@ -231,15 +236,32 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
         redisCache.setCacheSet(insideLotteryPool, insideCodes);
 
 
-        // 获取普通用户所有的抽奖码
+        // 获取普通用户拉新所获得的所有的抽奖码
         List<MarketingUserCode> userCodeList = marketingUserCodeService.list(new LambdaQueryWrapper<MarketingUserCode>()
                 .eq(MarketingUserCode::getMarketingId, marketing.getId())
                 .eq(MarketingUserCode::getUserType, UserTypeEnum.ORDINARY.getValue()));
         if (CollectionUtils.isNotEmpty(userCodeList)) {
-            userCodes = userCodeList.stream().map(MarketingUserCode::getCode).collect(Collectors.toSet());
+            // 用户普通抽奖码
+            Set<String> userCodes = new HashSet<>();
+            // 用户低阶抽奖码
+            Set<String> userLowCodes = new HashSet<>();
+            for (MarketingUserCode marketingUserCode : userCodeList) {
+                if (Objects.isNull(marketingUserCode.getHelpUserId())) {
+                    userLowCodes.add(marketingUserCode.getCode());
+                } else {
+                    userCodes.add(marketingUserCode.getCode());
+                }
+            }
+            if (CollectionUtils.isNotEmpty(userCodes)) {
+                // 将抽奖码放入普通抽奖池
+                redisCache.setCacheSet(userLotteryPool, userCodes);
+            }
+            if (CollectionUtils.isNotEmpty(userLowCodes)) {
+                // 将抽奖码放入低阶抽奖池
+                redisCache.setCacheSet(userLowLotteryPool, userLowCodes);
+            }
         }
-        // 将抽奖码放入普通抽奖池
-        redisCache.setCacheSet(userLotteryPool, userCodes);
+
 
         // 所有中奖名单
         List<MarketingHitPrize> allHitPrizeList = new ArrayList<>();
@@ -281,10 +303,13 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
             if (userNum > 0) {
                 // 设置普通用户抽奖信息
                 for (int i = 0; i < userNum; i++) {
-                    List<String> insideCodeList = redisCache.popCacheSet(userLotteryPool, 1);
+                    List<String> hitCodeList = redisCache.popCacheSet(userLotteryPool, 1);
+                    if (CollectionUtils.isEmpty(hitCodeList)) {
+                        hitCodeList = redisCache.popCacheSet(userLowLotteryPool, 1);
+                    }
                     MarketingUserCode marketingUserCode = marketingUserCodeService.getOne(new LambdaQueryWrapper<MarketingUserCode>()
                             .eq(MarketingUserCode::getMarketingId, marketing.getId())
-                            .eq(MarketingUserCode::getCode, insideCodeList.get(0)));
+                            .eq(MarketingUserCode::getCode, hitCodeList.get(0)));
 
                     // 删除redis中该用户所有的抽奖码
                     List<MarketingUserCode> list = marketingUserCodeService.list(new LambdaQueryWrapper<MarketingUserCode>()
@@ -292,6 +317,7 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
                             .eq(MarketingUserCode::getUserId, marketingUserCode.getUserId()));
                     List<Object> delUserCodeList = list.stream().map(MarketingUserCode::getCode).collect(Collectors.toList());
                     redisCache.removeSetValueByKey(userLotteryPool, delUserCodeList);
+                    redisCache.removeSetValueByKey(userLowLotteryPool, delUserCodeList);
                     MarketingHitPrize marketingHitPrize = exchangeMarketingHitPrize(marketing, allHitPrizeList, marketingAwards, marketingAwardsPrizeList, marketingUserCode);
 
                     userHitPrizeList.add(marketingHitPrize);
@@ -338,6 +364,7 @@ public class MarketingServiceImpl extends ServiceImpl<MarketingMapper, Marketing
 
         // 删除抽奖池
         redisCache.deleteObject(userLotteryPool);
+        redisCache.deleteObject(userLowLotteryPool);
         redisCache.deleteObject(insideLotteryPool);
 
     }