|
@@ -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);
|
|
|
|
|
|
}
|